This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

OSA_dmaInit() failed with DVR RDK

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, &copy1D, 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);
    }