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.

IPCFramOutHLOS PCIe LINK Start abnormallly

Hi

    I want to capture video from PCIe using DM8168, In software, I adopt IPCFramOutHLOS and IPCFramInRTOS, the chain I constructed is following : IPCFramOutHLOS---->IPCFrameInRTOS--->SwMs--->Display; I know we should using some mechanisms like thread at A8 side to support the system, but now, I'd like to ignore those mechanisms, just discuss Chain itself in order to simplify the question...

    My question is that IPCFramOutHLOS and IPCFramInRTOS in the chain cannot START properly after all LINK been created, but Swms and Display LINK can START normally...

    I will appreciate it for your timely response!

    Resume system running Infomation

================================================================================================================================

 [m3vpss ]  53841: HDMI: Starting HDMI Transmitter ... !!!

 [host]  40380: IPC_FRAMES_OUT   : Create in progress !!!

 [host]  40381: IPC_FRAMES_OUT   : Create Done !!!
 [m3vpss ]  53850: HDMI: HDMI Config ... DONE !!!
 [m3vpss ]  53851: HDMI: Starting HDMI Transmitter ... DONE !!!
 [m3vpss ]  53853: IPC_FRAMES_IN   : Create in progress !!!
 [m3vpss ]  53853: SYSTEM: Opening ListMP [HOST_IPC_OUT_19] ...
 [m3vpss ]  53853: SYSTEM: Opening ListMP [HOST_IPC_IN_19] ...
 [m3vpss ]  53855: SYSTEM: Opening MsgQ [HOST_MSGQ] ...
 [m3vpss ] IPC_FRAMES_IN:HEAPID:0       USED:304
 [m3vpss ]  53857: IPC_FRAMES_IN   : Create Done !!!
 [m3vpss ]  53857: SWMS: Create in progress !!!
 [m3vpss ]  UTILS: DMA: Allocated CH (TCC) = 58 (58)
 [m3vpss ] SWMS: instance 0, sc id 5, start win 0 end win 17
 [m3vpss ]  53940: SWMS0    : Loading Vertical Co-effs (UPSCALE)x ...
 [m3vpss ]  53940: SWMS0    : Loading Horizontal Co-effs (UPSCALE)x ...
 [m3vpss ]  53940: SWMS    : Co-effs Loading ... DONE !!!
 [m3vpss ] AVSYNC:WARNING!! Application wrongly configureddisplayID[-1]. Reseting to correct displayID[0]
 [m3vpss ]  53941: SWMS    : ******* Configuring clock 16 secs...
 [m3vpss ]  53941: SWMS0    : Loading Vertical Co-effs (UPSCALE)x ...
 [m3vpss ]  53941: SWMS0    : Loading Horizontal Co-effs (UPSCALE)x ...
 [m3vpss ]  53941: SWMS    : Co-effs Loading ... DONE !!!
 [m3vpss ] 
 [m3vpss ]  *** [SWMS0] Mosaic Parameters ***
 [m3vpss ] 
 [m3vpss ]  Output FPS: 60
 [m3vpss ] 
 [m3vpss ]  Win | Ch  | Input      | Input          | Input         | Input       | Output     |  Output         | Output        | Output      | Low Cost | SWMS | Data  | Blank |
 [m3vpss ]  Num | Num | Start X, Y | Width x Height | Pitch Y / C   | Memory Type | Start X, Y |  Width x Height | Pitch Y / C   | Memory Type | ON / OFF | Inst | Format| Frame |
 [m3vpss ]  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
 [m3vpss ]    0 |   0 |    0,    0 |  1280 x    360 |  5120 /  5120 | NON-TILED   |  216,    0 |   856 x    480 |  2560 /      0 | NON-TILED   |      ON  |    0 |  422I  |   OFF |
 [m3vpss ]    1 | 255 |    0,    0 |   352 x    264 |   704 /   704 | NON-TILED   |    0,  480 |   424 x    240 |  2560 /      0 | NON-TILED   |      ON  |    0 |  422I  |   OFF |
 [m3vpss ]    2 | 255 |    0,    0 |   352 x    264 |   704 /   704 | NON-TILED   |  424,  480 |   432 x    240 |  2560 /      0 | NON-TILED   |      ON  |    0 |  422I  |   OFF |
 [m3vpss ]    3 | 255 |    0,    0 |   352 x    264 |   704 /   704 | NON-TILED   |  856,  480 |   424 x    240 |  2560 /      0 | NON-TILED   |      ON  |    0 |  422I  |   OFF |
 [m3vpss ] 
 [m3vpss ] SWMS:HEAPID:0        USED:360
 [m3vpss ] SWMS:HEAPID:1        USED:47296
 [m3vpss ] SWMS:HEAPID:4        USED:16588800
 [m3vpss ]  53943: SWMS: Create Done !!!
 [m3vpss ]  53944: DISPLAY: Create in progress !!!
 [m3vpss ]  53945: DISPLAY: Create Done !!!
 [m3vpss ]  53945: DISPLAY: Start in progress !!!
 [m3vpss ]  54007: DISPLAY: Start Done !!!
 [m3vpss ]  54007: DISPLAY: HDDAC(BP0) : 32 fps, Latency (Min / Max) = ( 255 / 0 ), Callback Interval (Min / Max) = ( 255 / 0 ) !!!
 [m3vpss ]  54008: DISPLAY: UNDERFLOW COUNT: HDMI(BP0) 0, HDDAC(BP0) 0, DVO2(BP1) 0, SDDAC(SEC1) 1
 [m3vpss ]  54008: SWMS: Start in Progress !!!
 [m3vpss ]  54008: SWMS: Start Done !!!
 [m3vpss ]  54008: SYSTEM  : FREE SPACE : System Heap      = 6144 B, Mbx = 10239 msgs)
 [m3vpss ]  54008: SYSTEM  : FREE SPACE : SR0 Heap         = 11003648 B (10 MB)
 [m3vpss ]  54008: SYSTEM  : FREE SPACE : Frame Buffer     = 224205696 B (213 MB)
 [m3vpss ]  54008: SYSTEM  : FREE SPACE : Bitstream Buffer = 346554240 B (330 MB)
 [m3vpss ]  54009: SYSTEM  : FREE SPACE : Tiler 8-bit      = 134217728 B (128 MB)  - TILER ON
 [m3vpss ]  54009: SYSTEM  : FREE SPACE : Tiler 16-bit     = 134217728 B (128 MB)  - TILER ON

  • I don't understand what the issue is. What is not working ? Is ipcFramesOutHLOS and ipcFramesInRTOS not starting. Are you using mcfw APIs or link APIs directly ? Have you done System_linkStart for ipcFramesOutHLOS and ipcFramesInRTOS.

  •   Yes,the problem is that the ipcFramesInRTOS and ipcFramesOutHLOS are not start after I use System_linkStart for them, and I use link APIs in my program 

  • Pls share your usecase file where you are connecting the links.Also how do you know the link has not started ? Are you giving frames to ipcFramesOutHLOS and you are getting error return in ipcFramesOut_putFullVideoFrames function

  •   The reason I think the link has not started is that I can't get empty buffer from the ipcFramesOutHLOS link.How can I get empty buffer from ipcFramesOutHLOS successfully.I have use the function IpcFramesOutLink_getEmptyVideoFrames(),but the frame number is 0.

     My link is as follow

    ===============================================================================================================

     

    #include <demos/link_api_demos/common/chains.h>

    Void Test(P_CHANNEL_DISCRIPTOR pChannels)
    {
        UInt8  i = 0;
        Char   ch;

        IpcFramesOutLinkHLOS_CreateParams    ipcFramesOutHostPrm;
        IpcFramesInLinkRTOS_CreateParams     ipcFramesInVpssPrm;
        SwMsLink_CreateParams               swMsPrm;
        DisplayLink_CreateParams             displayPrm;

        UInt32 ipcFramesOutHostId;
        UInt32 ipcFramesInVpssId;
        UInt32 swMsId;
        UInt32 displayId;

        ipcFramesOutHostId  = SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0;
        ipcFramesInVpssId   = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_IN_0;
        swMsId              = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
        displayId           = SYSTEM_LINK_ID_DISPLAY_0;

        Chains_SwMsLayoutInit();
        Chains_ipcFramesInit();
        Chains_displayCtrlInit(chainsCfg->displayRes);   
        CHAINS_INIT_STRUCT(IpcFramesOutLinkHLOS_CreateParams,ipcFramesOutHostPrm);
        CHAINS_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcFramesInVpssPrm);
        CHAINS_INIT_STRUCT(SwMsLink_CreateParams,swMsPrm);
        CHAINS_INIT_STRUCT(DisplayLink_CreateParams,displayPrm);

        ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkQueId      = 0;
        ipcFramesOutHostPrm.baseCreateParams.numOutQue                      = 1;
        ipcFramesOutHostPrm.baseCreateParams.numChPerOutQue[0]              = 1;
        ipcFramesOutHostPrm.baseCreateParams.outQueParams[0].nextLink       = ipcFramesInVpssId;
        ipcFramesOutHostPrm.baseCreateParams.inputFrameRate                 = 60;
        ipcFramesOutHostPrm.baseCreateParams.outputFrameRate                = 60;
        ipcFramesOutHostPrm.baseCreateParams.notifyNextLink                 = TRUE;
        ipcFramesOutHostPrm.baseCreateParams.notifyPrevLink                 = FALSE;
        ipcFramesOutHostPrm.baseCreateParams.notifyProcessLink              = FALSE;
        ipcFramesOutHostPrm.baseCreateParams.noNotifyMode                   = FALSE;

        ipcFramesOutHostPrm.inQueInfo.numCh                                 = 1;
        ipcFramesOutHostPrm.inQueInfo.chInfo[0].startX                      = 0;
        ipcFramesOutHostPrm.inQueInfo.chInfo[0].startY                      = 0;
        ipcFramesOutHostPrm.inQueInfo.chInfo[0].height                      = 720;
        ipcFramesOutHostPrm.inQueInfo.chInfo[0].width                       = 1280;
        ipcFramesOutHostPrm.inQueInfo.chInfo[0].pitch[0]                    = 2560;
        ipcFramesOutHostPrm.inQueInfo.chInfo[0].pitch[1]                    = 2560;
        ipcFramesOutHostPrm.inQueInfo.chInfo[0].pitch[2]                    = 2560;
        ipcFramesOutHostPrm.inQueInfo.chInfo[0].bufType                     = SYSTEM_BUF_TYPE_VIDFRAME;
        ipcFramesOutHostPrm.inQueInfo.chInfo[0].bufferFmt                   = 0;
        ipcFramesOutHostPrm.inQueInfo.chInfo[0].codingformat                = 0;
        ipcFramesOutHostPrm.inQueInfo.chInfo[0].memType                     = SYSTEM_MT_NONTILEDMEM;
        ipcFramesOutHostPrm.inQueInfo.chInfo[0].dataFormat                  = SYSTEM_DF_YUV422I_YUYV;
        ipcFramesOutHostPrm.inQueInfo.chInfo[0].scanFormat                  = SYSTEM_SF_PROGRESSIVE;//SYSTEM_SF_INTERLACED;//
        System_linkCreate(ipcFramesOutHostId,&ipcFramesOutHostPrm,sizeof(ipcFramesOutHostPrm));

        ipcFramesInVpssPrm.baseCreateParams.inQueParams.prevLinkId      = ipcFramesOutHostId;
        ipcFramesInVpssPrm.baseCreateParams.inQueParams.prevLinkQueId   = 0;
        ipcFramesInVpssPrm.baseCreateParams.inputFrameRate              = 60;
        ipcFramesInVpssPrm.baseCreateParams.noNotifyMode                = FALSE;
        ipcFramesInVpssPrm.baseCreateParams.notifyNextLink              = TRUE;
        ipcFramesInVpssPrm.baseCreateParams.notifyPrevLink              = FALSE;
        ipcFramesInVpssPrm.baseCreateParams.numOutQue                   = 1;
        ipcFramesInVpssPrm.baseCreateParams.numChPerOutQue[0]           = 1;
        ipcFramesInVpssPrm.baseCreateParams.outQueParams[0].nextLink    = swMsId;
        ipcFramesInVpssPrm.baseCreateParams.outputFrameRate             = 60;

        swMsPrm.numSwMsInst                      = 1;
        swMsPrm.swMsInstId[0]                    = SYSTEM_SW_MS_SC_INST_SC5;
        swMsPrm.swMsInstStartWin[0]              = 0;
        swMsPrm.inQueParams.prevLinkId           = ipcFramesInVpssId;
        swMsPrm.inQueParams.prevLinkQueId        = 0;
        swMsPrm.outQueParams.nextLink            = displayId;
        swMsPrm.lineSkipMode                     = FALSE;
        swMsPrm.enableLayoutGridDraw             = FALSE;
        swMsPrm.layoutPrm.outputFPS              = chainsCfg->channelConf[0].frameRate;
        swMsPrm.maxInputQueLen                   = 64;
        swMsPrm.maxOutRes                        = chainsCfg->displayRes[0];
        swMsPrm.numOutBuf                        = 256;

        Chains_SwMsSetLayoutParams(swMsId, SWMS_LAYOUT_PATTERN_1PLUS3, &swMsPrm);//*/

        displayPrm.inQueParams[0].prevLinkId    = ipcFramesOutVpssId;
        displayPrm.inQueParams[0].prevLinkQueId = 0;
        displayPrm.displayRes                   = chainsCfg->displayRes[0];
        displayPrm.numInputQueues               = 1;
        displayPrm.activeQueue                  = 0;
        displayPrm.forceFieldSeparatedInputMode = FALSE;

        Chains_displayCtrlInit(chainsCfg->displayRes);

        System_linkCreate(ipcFramesInVpssId,&ipcFramesInVpssPrm,sizeof(ipcFramesInVpssPrm));
        System_linkCreate(swMsId,&swMsPrm,sizeof(swMsPrm));
        System_linkCreate(displayId,&displayPrm,sizeof(displayPrm));

        Chains_memPrintHeapStatus();

        System_linkStart(displayId);
        System_linkStart(swMsId);
        System_linkStart(ipcFramesInVpssId);
        System_linkStart(ipcFramesOutHostId);
        while(1)
        {
            ch = Chains_menuRunTime();
            if(ch=='0')
                break;
        }

        System_linkStop(ipcFramesOutHostId);
        System_linkStop(ipcFramesInVpssId);
        System_linkStop(swMsId);
        System_linkStop(displayId);

        System_linkDelete(ipcFramesOutHostId);
        System_linkDelete(ipcFramesInVpssId);
        System_linkDelete(swMsId);
        System_linkDelete(displayId);
    }

     =================================================================

  • Which RDK version you are using? Chains demos (link_api_demos) are no more supported and those apis may not be working.

    Please refer dvr_rdk\demos\mcfw_api_demos\mcfw_demo and usecase files under dvr_rdk\mcfw\src_linux\mcfw_api\usecases to create you own usecase. If you wish to use link_api directly you can refer interfaces mentioned here dvr_rdk\mcfw\interfaces\link_api.

  •   We are using RDK03.00.00 now.All of our routines are running on link_api_demos,and I refer to /dvr_rdk/demos/link_api_demos/common/chains_ipcFrames.c to get buffer,this file use the function IpcFramesOutLink_getEmptyVideoFrames() to get empty buffer successfully.Why I can't?

  • I am saying APIs like Chains_displayCtrlInit(), Chains_SwMsLayoutInit(), Chains_ipcFramesInit() are not supported. Point is files under /dvr_rdk/demos/link_api_demos are not updated with respect to dvr_rdk so please do not refer.  IpcFramesOutLink_getEmptyVideoFrames() is a Link API, it is still supported and you can use it. Infact you can look at Vdis_getEmptyVideoFrames()  (MCFW API) to see how it is using it. Similarly, for any other Link API's usage kindly refer implementation of MCFW API and usecase files as I mentioned in my previous post.

  • ipcFramesOutHLOS doesn't allocate any buffers so if you do ipcFramesOut_getEmptyFrames you will not get any frames.

    The application should pass a physically contiguous buffer to ipcFramesOut_putFullFrames. After the processing of the frame is completed it will get back the frame by invoking the ipcFramesOut_getEmptyFrames.

     

    Pls refer /dvr_rdk/demos/mcfw_api_demos/mcfw_demo/demo_vcap_venc_vdis_ipc_frames_exch.c for code on which parameters in the frame info structure should be populated before invoking ipcFramesOut_putFullFrames

  •   Thank for your reply,Now,I invoke Vsys_allocBuf() to allot shard region,and pass it to  ipcFramesOut_putFullFrames,but I still can't get empty buffer by invoking ipcFramesOut_getEmptyFrames(),Is my method wrong?

  • Pls share the following:

     1. Application code which is doing  ipcFramesOut_putFullFrames & .ipcFramesOut_getEmptyFrames

     2. Usecase file if there are any modifications to usecase (if it is same as what you have above then no need to share)

     3. Logs of Vsys_printDtailedStatistics and  Vsys_printBufferStatistics.If you are using chains these APIS cant be used.Refer the implementation of the APIs and implement the same in your application and share the logs.

  • The usecase is the same as above,I will share the Application code about  ipcFramesOut_putFullFrames and ipcFramesOut_getEmptyFrames as below:

    Appreciate your guidance

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    static Void *Chains_ipcFramesGetEmptyBufFromOutHOSTLINK(Void * prm)
    {
        Chains_IpcFramesCtrlThrObj *thrObj = (Chains_IpcFramesCtrlThrObj *) prm;
        VIDFrame_BufList   bufList;
        VIDFrame_Buf      *pEmptyBuf;
        VIDFrame_Buf      *pFrame;
        Int32              status;
        Int32              i = 0;
        Int32              frameSize;
        Vsys_AllocBufInfo  bufInfo;

        Int32   numFrames = 5;
        bufList.numFrames = 0;

        frameSize = 352*288*5;
        for (i = 0; i < 1;i++)
        {
            status = Vsys_allocBuf(0,frameSize,128,&bufInfo);
            if (ERROR_NONE == status)
            {
             bufList.numFrames++;
             pFrame                 = &bufList.frames[i];
             pFrame->channelNum     = 0;
             pFrame->fid            = 0;
             pFrame->frameHeight    = 352;
             pFrame->frameWidth     = 288;
             pFrame->phyAddr[0][0]  = bufInfo.physAddr;
             pFrame->addr[0][0]     = bufInfo.virtAddr;
             pFrame->phyAddr[0][1]  = bufInfo.physAddr + pFrame->frameHeight * pFrame->frameWidth;
             pFrame->addr[0][1]     = bufInfo.virtAddr + pFrame->frameHeight * pFrame->frameWidth;
             pFrame->phyAddr[0][2]  = bufInfo.physAddr + pFrame->frameHeight * pFrame->frameWidth*2;
             pFrame->addr[0][2]     = bufInfo.virtAddr + pFrame->frameHeight * pFrame->frameWidth*2;
             printf("\n++++++++++++++++++++[%d]+++++++++++++++\n",bufList.numFrames);
             Chains_ipcFramesPrintFrameInfo(&bufList.frames[i]);
            }
        }
        status = IpcFramesOutLink_putFullVideoFrames(SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0,&bufList);
        OSA_assert(0 == status);
        while (FALSE == thrObj->exitGetEmptybufThread)
        {
         bufList.numFrames = 0;
         status = IpcFramesOutLink_getEmptyVideoFrames(SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0,&bufList);
            OSA_assert(0 == status);
            for(i = 0;i < bufList.numFrames;i++)
            {
                pEmptyBuf = &bufList.frames[i];
                status = OSA_quePut(&thrObj->bufQFreeBufs,(Int32)(pEmptyBuf),OSA_TIMEOUT_FOREVER);
                OSA_assert(0 == status);
            }
            OSA_waitMsecs(8);
        }
        return NULL;
    }

  • The erro information is  as follow(The bold part is the infomation about bufList.frames[0]):

     [m3vpss ]  43789: HDMI: Starting HDMI Transmitter ... !!!
     [m3vpss ]  43798: HDMI: HDMI Config ... DONE !!!
     [host]  30636: IPC_FRAMES_OUT   : Create in progress !!!
     [host]  30637: IPC_FRAMES_OUT   : Create Done !!!

     [host] CHAINS_IPCFRAMES:VIDFRAME_INFO:chNum:0  fid:0   frameWidth:288  frameHeight:352 timeStamp:0     virtAddr[0][0]:0x2b47f900       phyAddr[0]

    [0]:0xbf581900

    30639:!!!SLAVE CORE [VPSS-M3] DOWN!!!
    SystemLink_copySlaveCoreExceptionContext:146
    mmap of [0xbe9e0000:36864]
    mmap virt addresss:0x2ab36000
    munmap of [0x2ab36000:36864]
    SystemLink_copySlaveCoreExceptionContext:153
     [m3vpss ]  43799: HDMI: Starting HDMI Transmitter ... DONE !!!
     [m3vpss ]  43801: Assertion @ Line: 107 in links_common/ipcFramesIn/ipcFramesInLink_tsk.c: pObj->prd.clkHandle != NULL : failed !!!

  •  ipcFramesInVpssPrm.baseCreateParams.notifyPrevLink              = FALSE;

    THis should be

        ipcFramesInVpssPrm.baseCreateParams.notifyPrevLink              = TRUE;

    Also all the fields of the frame structure _must_ be populated.

     

             bufList.numFrames++;
             pFrame                 = &bufList.frames[i];
             pFrame->channelNum     = 0;
             pFrame->fid            = 0;
             pFrame->frameHeight    = 352;
             pFrame->frameWidth     = 288;
             pFrame->phyAddr[0][0]  = bufInfo.physAddr;
             pFrame->addr[0][0]     = bufInfo.virtAddr;
             pFrame->phyAddr[0][1]  = bufInfo.physAddr + pFrame->frameHeight * pFrame->frameWidth;
             pFrame->addr[0][1]     = bufInfo.virtAddr + pFrame->frameHeight * pFrame->frameWidth;
             pFrame->phyAddr[0][2]  = bufInfo.physAddr + pFrame->frameHeight * pFrame->frameWidth*2;
             pFrame->addr[0][2]     = bufInfo.virtAddr + pFrame->frameHeight * pFrame->frameWidth*2;
             printf("\n++++++++++++++++++++[%d]+++++++++++++++\n",bufList.numFrames);
             Chains_ipcFramesPrintFrameInfo(&bufList.frames[i]);   

    The following are not initialized:

    UInt32 framePitch[VIDFRAME_MAX_PLANES];

    UInt32 startX;
        /**< Frame startX*/
        UInt32 startY;
        /**< Frame startY*/

     

    Also your data format is  SYSTEM_DF_YUV422I_YUYV & progressive.So you should not populate  

            pFrame->phyAddr[0][1]  = bufInfo.physAddr + pFrame->frameHeight * pFrame->frameWidth;
             pFrame->addr[0][1]     = bufInfo.virtAddr + pFrame->frameHeight * pFrame->frameWidth;
             pFrame->phyAddr[0][2]  = bufInfo.physAddr + pFrame->frameHeight * pFrame->frameWidth*2;
             pFrame->addr[0][2]     = bufInfo.virtAddr + pFrame->frameHeight * pFrame->frameWidth*2; 

    They should be NULL

     

  •   I have modified my code according to your Suggestions,But now I can't put bufferList to IpcFramesOutLink_putFullVideoFrames,

        when the program is running to

    status = IpcFramesOutLink_putFullVideoFrames(SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0,&bufList);
     OSA_assert(0 == status);

    It will exit.

     ASSERT (ipcFramesOutLink_tsk.c|IpcFramesOutLink_processFrameBufs|379)

     

  • Pls share your application code doing ipcFrames exchange after latest fixes. There is some serious issue with the code which is putting frames without getting them back from ipcFramesOut. Are you getting the assert in the very first call to ipcPutFullFrames or do you get the assert after some calls ? Also I hope you are not modifying linkPrivate field in the VIDFrameBuf structure

  • I can get empty buffer from ipcFramesOutHost ,but I find that the frames[i].addr[0][0] piont to null.

  • Pls use the phyAddr.The member addr[] is the virtual address and is not populated in ipcFramesOutLink .Application can use the phyAddr and mmap the buffers if it wants to access the buffer via CPU. Video frame buffers are generally accessed only by DMA and CPU would not require to access the buffers.