I want to use OSA_DMA to copy YUV data to memory, but OSA_dmaInit() failed!
please refer to my code below:
VIDFrame_BufList bufList;
IpcFramesInLink_getFullVideoFrames(SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_0, &bufList);
VIDFrame_Buf* buf = NULL;
unsigned char* src = NULL;
unsigned char* dst = NULL;
unsigned offset = 0;
int i = 0;
for (i = 0; i < bufList.numFrames; i++)
{
buf = &bufList.frames[i];
if (0 == buf->channelNum)
{
OSA_DmaChHndl g_dmaHndl;
Vsys_AllocBufInfo g_frameBufInfo;
Vsys_allocBuf(SHARED_REGION_ID, 720 *480 * 2, 16, &g_frameBufInfo);
g_dma_status = OSA_dmaInit();
if (g_dma_status = OSA_EFAIL)
{
printf("dma init failed!\n");
}
g_dma_status = OSA_dmaOpen(&g_dmaHndl, OSA_DMA_MODE_NORMAL, 1);
if (g_dma_status = OSA_EFAIL)
{
printf("dma open failed!\n");
}
OSA_DmaCopy1D copy1D;
copy1D.srcPhysAddr = (unsigned int)buf->phyAddr[0][0] -offset;
copy1D.dstPhysAddr = g_frameBufInfo.physAddr;
copy1D.size = 720 * 480 * 2;
OSA_dmaCopy1D(&g_dmaHndl, ©1D, 1);
OSA_dmaClose(&g_dmaHndl);
OSA_dmaExit();
Vsys_freeBuf(SHARED_REGION_ID, g_frameBufInfo.virtAddr, 720 *480 * 2);
}
}
if (bufList.numFrames)
{
IpcFramesInLink_putEmptyVideoFrames(SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_0, &bufList);
}