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.

dm8168 platform read from file and display

I use dm8168 with dvr_rdk3.0 ,and here is the diagram  I use

file--ipcBitsOutHost--ipcBitsInVideo--dec--ipcOutVideo--ipcInVpss--swMs--Dis

the problem is decode link recv nothing

here is my code to push the video stream to decode link

static Void *Chains_ipcBitsTestFxn(Void * prm )
{
    Chains_IpcBitsCtrl *ipcBitsCtrl = (Chains_IpcBitsCtrl *) prm;
    Chains_IpcBitsCtrlThrObj *thrObj = &ipcBitsCtrl->thrObj;
    Chains_IpcBitsCtrlFileObj *fObj =  &ipcBitsCtrl->fObj;

    Bitstream_BufList emptyBufList;
    Bitstream_BufList fullBufList;
    Bitstream_Buf *pBuf;
    IpcBitsOutLinkHLOS_BitstreamBufReqInfo reqInfo;
    Int i;
    Int status;
    static Int printStats;
    UInt32 bitBufSize,readLen = 16;
    void *videoTmp;
    int fdHndl = openFile("/media/sda1/test.264");
    bitBufSize = CHAINS_IPCBITS_GET_BITBUF_SIZE(CHAINS_IPCBITS_DEFAULT_WIDTH,
                                                CHAINS_IPCBITS_DEFAULT_HEIGHT);

    reqInfo.numBufs = VIDBITSTREAM_MAX_BITSTREAM_BUFS;
    reqInfo.reqType = IPC_BITSOUTHLOS_BITBUFREQTYPE_BUFSIZE;

    for (i = 0; i < VIDBITSTREAM_MAX_BITSTREAM_BUFS; i++)
    {
        reqInfo.u[i].minBufSize = bitBufSize;
    }

    sleep(2);
    while (FALSE == thrObj->exitBitsOutThread)
    {
        OSA_waitMsecs(CHAINS_IPCBITS_SENDFXN_PERIOD_MS);
        emptyBufList.numBufs = 0;
        status = IpcBitsOutLink_getEmptyVideoBitStreamBufs(SYSTEM_HOST_LINK_ID_IPC_BITS_OUT_0,
                                                      &emptyBufList,
                                                      &reqInfo);
        OSA_assert(status == 0);

        videoTmp = readFile(fdHndl,readLen);
        //print the first 16 bytes of videoTmp
        //printMsg((char*)videoTmp,64);

        for (i = 0; i < emptyBufList.numBufs; i++)
        {

            pBuf = emptyBufList.bufs[i];
            OSA_assert(pBuf->bufSize >= bitBufSize );
            pBuf->fillLength = readLen;
            memcpy(pBuf->addr,videoTmp,pBuf->fillLength);
            emptyBufList.bufs[i] = pBuf;
            //printf("(%d) bufSize %d\n",i,pBuf->bufSize);
            //printf("(%d) fillLen %d\n",i,pBuf->fillLength);

        }
        status = IpcBitsOutLink_putFullVideoBitStreamBufs(SYSTEM_HOST_LINK_ID_IPC_BITS_OUT_0,
                                                 &emptyBufList);
        OSA_assert(status == 0);

        if ((printStats % CHAINS_IPCBITS_INFO_PRINT_INTERVAL) == 0)
        {
            OSA_printf("CHAINS_IPCBITS:%s:INFO: periodic print..",__func__);
        }
        printStats++;
    }


    OSA_printf("CHAINS_IPCBITS:%s:Leaving...",__func__);

    return NULL;

}

and below is my link

/*******************************************************************************
 *                                                                             *
 * Copyright (c) 2009 Texas Instruments Incorporated - http://www.ti.com/      *
 *                        ALL RIGHTS RESERVED                                  *
 *                                                                             *
 ******************************************************************************/

#include <demos/link_api_demos/common/chains.h>
#include <mcfw/interfaces/ti_venc.h>
#include <mcfw/interfaces/ti_vdec.h>

static SystemVideo_Ivahd2ChMap_Tbl systemVid_encDecIvaChMapTbl =
{
    .isPopulated = 1,
    .ivaMap[0] =
    {
        .EncNumCh  = 1,
        .EncChList = {0},
        .DecNumCh  = 0,
        .DecChList = {0},
    },
    .ivaMap[1] =
    {
        .EncNumCh  = 0,
        .EncChList = {0},
        .DecNumCh  = 1,
        .DecChList = {0},
    },
    .ivaMap[2] =
    {
        .EncNumCh  = 1,
        .EncChList = {1},
        .DecNumCh  = 1,
        .DecChList = {1},
    },
};



Void Chains_H264DecDis(Chains_Ctrl *chainsCfg)
{
    IpcBitsOutLinkHLOS_CreateParams   ipcBitsOutHostPrm;
    IpcBitsInLinkRTOS_CreateParams    ipcBitsInVideoPrm;
    DecLink_CreateParams              decPrm;
    IpcLink_CreateParams              ipcOutVideoPrm;
    IpcLink_CreateParams              ipcInVpssPrm;
    SwMsLink_CreateParams             swMsPrm;
    DisplayLink_CreateParams          displayPrm;

    UInt32 ipcBitsOutHostId;
    UInt32 ipcBitsInVideoId;
    UInt32 decId;
    UInt32 ipcOutVideoId;
    UInt32 ipcInVpssId;
    UInt32 swMsId;
    UInt32 displayId;

    UInt32 i;
    char   ch;

    static UInt32 CHAINS_IPCBITS_DEFAULT_WIDTH        =           1920;
    static UInt32 CHAINS_IPCBITS_DEFAULT_HEIGHT       =           1080;

    Chains_ipcBitsInit();

    CHAINS_INIT_STRUCT(IpcBitsOutLinkHLOS_CreateParams,ipcBitsOutHostPrm);
    CHAINS_INIT_STRUCT(IpcBitsInLinkRTOS_CreateParams,ipcBitsInVideoPrm);
    CHAINS_INIT_STRUCT(DecLink_CreateParams, decPrm);
    CHAINS_INIT_STRUCT(IpcLink_CreateParams,ipcOutVideoPrm);
    CHAINS_INIT_STRUCT(IpcLink_CreateParams,ipcInVpssPrm);
    CHAINS_INIT_STRUCT(SwMsLink_CreateParams, swMsPrm);
    CHAINS_INIT_STRUCT(DisplayLink_CreateParams,displayPrm);

    ipcBitsOutHostId    = SYSTEM_HOST_LINK_ID_IPC_BITS_OUT_0;
    ipcBitsInVideoId    = SYSTEM_VIDEO_LINK_ID_IPC_BITS_IN_0;
    decId               = SYSTEM_LINK_ID_VDEC_0;
    ipcOutVideoId       = SYSTEM_VIDEO_LINK_ID_IPC_OUT_M3_0;
    ipcInVpssId         = SYSTEM_VPSS_LINK_ID_IPC_IN_M3_0;
    swMsId              = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
    displayId           = SYSTEM_LINK_ID_DISPLAY_1;

    System_linkControl(
        SYSTEM_LINK_ID_M3VIDEO,
        SYSTEM_COMMON_CMD_SET_CH2IVAHD_MAP_TBL,
        &systemVid_encDecIvaChMapTbl,
        sizeof(SystemVideo_Ivahd2ChMap_Tbl),
        TRUE
    );

    Chains_displayCtrlInit(chainsCfg->displayRes);

    System_LinkQueInfo queInfo;
    queInfo.numCh   = 1;
    for(i = 0;i < 1; i++)
    {
        queInfo.chInfo[i].bufType           = SYSTEM_BUF_TYPE_VIDBITSTREAM;
        queInfo.chInfo[i].codingformat      = IVIDEO_H264HP;
        queInfo.chInfo[i].height            = CHAINS_IPCBITS_DEFAULT_HEIGHT;
        queInfo.chInfo[i].width             = CHAINS_IPCBITS_DEFAULT_WIDTH;
        queInfo.chInfo[i].memType           = SYSTEM_MT_TILEDMEM;
        queInfo.chInfo[i].dataFormat        = SYSTEM_DF_YUV420P;//SYSTEM_DF_YUV420SP_UV;
        queInfo.chInfo[i].scanFormat        = SYSTEM_SF_PROGRESSIVE;
    }


    ipcBitsOutHostPrm.baseCreateParams.numOutQue                    = 1;
//    ipcBitsOutHostPrm.baseCreateParams.numChPerOutQue[0]            = 1;
    ipcBitsOutHostPrm.baseCreateParams.outQueParams[0].nextLink     = ipcBitsInVideoId;
//    ipcBitsOutHostPrm.bufPoolPerCh                                  = FALSE;
//    ipcBitsOutHostPrm.numBufPerCh[0]                                = 0;

//    ipcBitsOutHostPrm.baseCreateParams.notifyNextLink               = FALSE;
//    ipcBitsOutHostPrm.baseCreateParams.notifyPrevLink              = FALSE;
//    ipcBitsOutHostPrm.baseCreateParams.noNotifyMode                = TRUE;
    Chains_ipcBitsInitCreateParams_BitsOutHLOS(&ipcBitsOutHostPrm,
                                               &queInfo);



    ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkId       = ipcBitsOutHostId;
    ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkQueId    = 0;
    ipcBitsInVideoPrm.baseCreateParams.numOutQue                    = 1;
//    ipcBitsInVideoPrm.baseCreateParams.numChPerOutQue[0]            = 1;
    ipcBitsInVideoPrm.baseCreateParams.outQueParams[0].nextLink     = decId;

//    ipcBitsInVideoPrm.baseCreateParams.notifyNextLink              = FALSE;
//    ipcBitsInVideoPrm.baseCreateParams.notifyPrevLink              = TRUE;
//    ipcBitsInVideoPrm.baseCreateParams.noNotifyMode                = TRUE;
    Chains_ipcBitsInitCreateParams_BitsInRTOS(&ipcBitsInVideoPrm,
                                              FALSE);

    for (i=0; i<4; i++) {
        decPrm.chCreateParams[i].format                               = IVIDEO_H264HP;
        decPrm.chCreateParams[i].profile                              = IH264VDEC_PROFILE_ANY;//IH264_HIGH_PROFILE;//
        decPrm.chCreateParams[i].targetMaxWidth                       = CHAINS_IPCBITS_DEFAULT_WIDTH;
        decPrm.chCreateParams[i].targetMaxHeight                      = CHAINS_IPCBITS_DEFAULT_HEIGHT;
        decPrm.chCreateParams[i].fieldMergeDecodeEnable               = FALSE;
        //decPrm.chCreateParams[i].algCreateStatus                      = DEC_LINK_ALG_CREATE_STATUS_CREATE;
        decPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate = 25;
        decPrm.chCreateParams[i].defaultDynamicParams.targetBitRate   = 4000 * 1000;
        decPrm.chCreateParams[i].numBufPerCh                          = 6;
    }
    decPrm.inQueParams.prevLinkId    = ipcBitsInVideoId;
    decPrm.inQueParams.prevLinkQueId = 0;
    decPrm.outQueParams.nextLink     = ipcOutVideoId;
    decPrm.tilerEnable               = TRUE;


    ipcOutVideoPrm.inQueParams.prevLinkId    = decId;
    ipcOutVideoPrm.inQueParams.prevLinkQueId = 0;
    ipcOutVideoPrm.numOutQue                 = 1;
    ipcOutVideoPrm.outQueParams[0].nextLink  = ipcInVpssId;
    ipcOutVideoPrm.notifyNextLink            = TRUE;
    ipcOutVideoPrm.notifyPrevLink            = FALSE;
    ipcOutVideoPrm.noNotifyMode              = FALSE;

    ipcInVpssPrm.inQueParams.prevLinkId    = ipcOutVideoId;
    ipcInVpssPrm.inQueParams.prevLinkQueId = 0;
    ipcInVpssPrm.numOutQue                 = 1;
    ipcInVpssPrm.outQueParams[0].nextLink  = swMsId;
    ipcInVpssPrm.notifyNextLink            = TRUE;
    ipcInVpssPrm.notifyPrevLink            = FALSE;
    ipcInVpssPrm.noNotifyMode              = FALSE;


    swMsPrm.numSwMsInst               = 1;
    swMsPrm.swMsInstId[0]             = SYSTEM_SW_MS_SC_INST_SC5;
    swMsPrm.inQueParams.prevLinkId    = ipcInVpssId;
    swMsPrm.inQueParams.prevLinkQueId = 0;
    swMsPrm.outQueParams.nextLink     = displayId;
    swMsPrm.lineSkipMode              = FALSE;
    swMsPrm.enableLayoutGridDraw      = FALSE;
    swMsPrm.layoutPrm.outputFPS       = chainsCfg->channelConf[0].frameRate;
    swMsPrm.maxInputQueLen            = SYSTEM_SW_MS_DEFAULT_INPUT_QUE_LEN;
    swMsPrm.maxOutRes                 = chainsCfg->displayRes[0];
    swMsPrm.numOutBuf                 = 0;
    Chains_swMsSetLayoutParams(0, &swMsPrm);

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

//    swMsPrm.numSwMsInst               = 1;
//    swMsPrm.swMsInstId[0]             = SYSTEM_SW_MS_SC_INST_SC5;
//    swMsPrm.inQueParams.prevLinkId    = ipcInVpssId;
//    swMsPrm.inQueParams.prevLinkQueId = 0;
//    swMsPrm.outQueParams.nextLink     = displayId;
//    swMsPrm.lineSkipMode              = FALSE;
//    swMsPrm.enableLayoutGridDraw      = FALSE;
//    swMsPrm.layoutPrm.outputFPS       = chainsCfg->channelConf[0].frameRate;
//    swMsPrm.maxInputQueLen            = SYSTEM_SW_MS_DEFAULT_INPUT_QUE_LEN;
//    swMsPrm.maxOutRes                 = chainsCfg->displayRes[0];
//    swMsPrm.numOutBuf                 = 0;
//
//    Chains_swMsGenerateLayoutParams(0, 2, &swMsPrm);
//
//    displayPrm.inQueParams[0].prevLinkId    = swMsId;
//    displayPrm.inQueParams[0].prevLinkQueId = 0;
//    displayPrm.displayRes                   = chainsCfg->displayRes[0];

    System_linkCreate(ipcBitsOutHostId,&ipcBitsOutHostPrm,sizeof(ipcBitsOutHostPrm));
    System_linkCreate(ipcBitsInVideoId,&ipcBitsInVideoPrm,sizeof(ipcBitsInVideoPrm));
    System_linkCreate(decId, &decPrm, sizeof(decPrm));
    System_linkCreate(ipcOutVideoId, &ipcOutVideoPrm, sizeof(ipcOutVideoPrm));
    System_linkCreate(ipcInVpssId  , &ipcInVpssPrm  , sizeof(ipcInVpssPrm)  );
    System_linkCreate(swMsId, &swMsPrm, sizeof(swMsPrm));
    System_linkCreate(displayId, &displayPrm, sizeof(displayPrm));

    Chains_memPrintHeapStatus();

    {
        System_linkStart(displayId);
        System_linkStart(swMsId);
        System_linkStart(decId);
        //System_linkStart(ipcBitsInVideoId);
        //System_linkStart(ipcBitsOutHostId);

        while(1)
        {
            ch = Chains_menuRunTime();

            if(ch=='0')
                break;
            if(ch=='i')
                System_linkControl(decId, DEC_LINK_CMD_PRINT_IVAHD_STATISTICS, NULL, 0, TRUE);
            if(ch=='d')
                System_linkControl(decId, DEC_LINK_CMD_PRINT_STATISTICS, NULL, 0, TRUE);
            if(ch=='D')
                System_linkControl(decId, DEC_LINK_CMD_PRINT_BUFFER_STATISTICS, NULL, 0, TRUE);
            if(ch=='b')
                System_linkControl(ipcBitsOutHostId, IPCBITSOUT_LINK_CMD_PRINT_BUFFER_STATISTICS, NULL, 0, TRUE);
        }

        Chains_ipcBitsStop();
        System_linkStop(ipcBitsOutHostId);
        System_linkStop(ipcBitsInVideoId);
        System_linkStop(decId);
        System_linkStop(swMsId);
        System_linkStop(displayId);
    }

    System_linkDelete(ipcBitsOutHostId);
    System_linkDelete(ipcBitsInVideoId);
    System_linkDelete(decId);
    System_linkDelete(ipcOutVideoId);
    System_linkDelete(ipcInVpssId);
    System_linkDelete(swMsId);
    System_linkDelete(displayId);

    Chains_displayCtrlDeInit();
    Chains_ipcBitsExit();
}