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.

noise filter link create error with DVRRDK3.5 on dm8168

Hi all,

The attachment is my usecase.

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

/* This usecase assumes that all 3 outputs - D1 <h.264> + CIF <h.264> + D1 <MJPEG> are enabled */
/*------------------------------ D1 <h.264> + CIF <h.264> + D1 <MJPEG> -------------------------------------




                  Capture (YUV422I) 4CH D1 60fps
                              |
                              |
                              |
                              |
                              DEI
                              |+------------------------------------------------------------------------
                              |                                            |                           |
                       (DEI-SC YUV422I)                              (VIP-SC YUV420 )            (VIP-SC1 YUV420 )
                              D1                                        D1 |                        CIF|
                              |                                            |                           |
                              |                                            |                           |
                              +                                            |                           |
                              |                                            |                           |
                              |                                            |                           |
                              |                                            |                           |
                              |                                            |                           |
                              |                                            |                           |
                              +                                            |                           |
                            NSF                                            |                           |
                           (YUV420)                                        |                           |
                              +                                            |                           |
                              |                                            |          |-----------------
                              +-----+-----------------------------         |          |
                                                                 |         |          |
                                                     <D1-MJPEG> 2|         |0         | 1
                                                                 |         |<D1-H.264>| <CIF-H.264>
                                                                 |         |          |
                                                                 |         |          |
                                                           ---------------------------------
                                                                  D1_CIF_MERGE_LINK_IDX
                                                           ---------------------------------
                                                                           |
                                                                           |
                                                                           |
                                                                    FRAMESOUT(VPSS)---------------<<<processLink>>>----FramesInDSP--------ALG_LINK <OSD, SCD Algs>
                                                                           |
                                                                           |
                                                                           |
                                                                           |
                                                                      IPCM3OUT(VPSS)------IPCM3IN(VID)----ENC-----IPCBITS_RTOSOUT(VID)-----IPCBITS_HLOSIN(HOST)-----FILEOUT
                                                                                                                                                                 |
                                                                                                                                                                 |
                                                                                                                                                                 |
                                                                                                                                                                 |
                                                                                       SYSTEM_LINK_ID_NULL_0 +-+-------+IPCBITS_RTOSIN(VID)-----------IPCBITS_HLOSOUT(HOST)


*/


#include "mcfw/src_linux/mcfw_api/usecases/multich_common.h"
#include "mcfw/src_linux/mcfw_api/usecases/multich_ipcbits.h"

// Keeping TILER disabled for 4D1 usecase
#define TILER_ENABLE    FALSE



/* =============================================================================
 * Use case code
 * =============================================================================
 */
static SystemVideo_Ivahd2ChMap_Tbl systemVid_encDecIvaChMapTbl =
{
    .isPopulated = 1,
    .ivaMap[0] =
    {
        .EncNumCh  = 16,
        .EncChList = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 , 14, 15},
        .DecNumCh  = 16,
        .DecChList = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 , 14, 15},
    },

};

// #define     ADD_NSF_AFTER_CAPTURE

#define     NUM_MERGE_LINK                          2
#define     D1_CIF_MERGE_LINK_IDX                  0
#define     LIVE_DECODE_MERGE_LINK_IDX             1

#define     NUM_DUP_LINK                            2
#define     D1_DUP_LINK_IDX                         0
#define     LIVE_DECODE_DUP_LINK_IDX                1

#if(defined(TI_814X_BUILD) || defined(DDR_MEM_256M))
#define     NUM_CAPTURE_BUFFERS          8
#define     NUM_NSF_BUFFERS              4
#define     NUM_ENCODE_D1_BUFFERS       4
#define     NUM_ENCODE_CIF_BUFFERS       4
#define     NUM_DECODE_BUFFERS           4
#define     NUM_IPC_OUT_BUFFERS          4
#define     NUM_SWMS_MAX_BUFFERS         8
#else
#define     NUM_CAPTURE_BUFFERS          8
#define     NUM_NSF_BUFFERS              6
#define     NUM_ENCODE_D1_BUFFERS       6
#define     NUM_ENCODE_CIF_BUFFERS       6
#define     NUM_DECODE_BUFFERS           6
#define     NUM_IPC_OUT_BUFFERS          6
#define     NUM_SWMS_MAX_BUFFERS         8
#endif

#define     NUM_CAPTURE_DEVICES          1

/* This usecase assumes CIF <secondary out>, MJPEG are enabled */
Void MultiCh_createProgressive4D1VcapVencVdecVdis()
{
    CaptureLink_CreateParams    capturePrm;
    NsfLink_CreateParams        nsfPrm;
    DeiLink_CreateParams        deiPrm;
    MergeLink_CreateParams      mergePrm[NUM_MERGE_LINK];
    //DupLink_CreateParams        dupPrm[NUM_DUP_LINK];
    //static SwMsLink_CreateParams       swMsPrm[VDIS_DEV_MAX];
    //DisplayLink_CreateParams    displayPrm[VDIS_DEV_MAX];
    IpcLink_CreateParams        ipcOutVpssPrm;
    //IpcLink_CreateParams        ipcInVpssPrm;
    //IpcLink_CreateParams        ipcOutVideoPrm;
    IpcLink_CreateParams        ipcInVideoPrm;
    EncLink_CreateParams        encPrm;
    //DecLink_CreateParams        decPrm;
    IpcBitsOutLinkHLOS_CreateParams   ipcBitsOutHostPrm;
    IpcBitsOutLinkRTOS_CreateParams   ipcBitsOutVideoPrm;
    IpcBitsInLinkHLOS_CreateParams    ipcBitsInHostPrm[2];

    IpcBitsInLinkRTOS_CreateParams    ipcBitsInVideoPrm;
    CaptureLink_VipInstParams         *pCaptureInstPrm;
    CaptureLink_OutParams             *pCaptureOutPrm;
    IpcFramesInLinkRTOS_CreateParams  ipcFramesInDspPrm;
    IpcFramesOutLinkRTOS_CreateParams ipcFramesOutVpssPrm;
    AlgLink_CreateParams              dspAlgPrm;

    System_LinkInfo                   bitsProducerLinkInfo;
    UInt32 mergeId[NUM_MERGE_LINK];
    UInt32 dupId[NUM_DUP_LINK];
    UInt32 ipcOutVpssId, ipcInVpssId;
    UInt32 ipcOutVideoId, ipcInVideoId;

    IpcBitsOutLinkRTOS_CreateParams   ipcBitsOutDspPrm;

    VCAP_DEVICE_CREATE_PARAM_S        vidDecVideoModeArgs[NUM_CAPTURE_DEVICES];

    UInt32 vipInstId;
    UInt32 i, j;
    Bool   enableAlgLink;
    Bool   enableScd     = gVsysModuleContext.vsysConfig.enableScd;
    Bool   enableOsd     = gVsysModuleContext.vsysConfig.enableOsd;

 #ifdef     ADD_NSF_AFTER_CAPTURE
    NsfLink_CreateParams        nsfPrm2;
#endif

    enableScd = FALSE;//TRUE;

    enableAlgLink = FALSE;
    if(enableOsd||enableScd)
        enableAlgLink = TRUE;

    MULTICH_INIT_STRUCT(IpcLink_CreateParams,ipcOutVpssPrm);
    //MULTICH_INIT_STRUCT(IpcLink_CreateParams,ipcInVpssPrm);
    //MULTICH_INIT_STRUCT(IpcLink_CreateParams,ipcOutVideoPrm);
    MULTICH_INIT_STRUCT(IpcLink_CreateParams,ipcInVideoPrm);
    MULTICH_INIT_STRUCT(IpcBitsOutLinkHLOS_CreateParams,ipcBitsOutHostPrm);
    MULTICH_INIT_STRUCT(IpcBitsOutLinkRTOS_CreateParams,ipcBitsOutVideoPrm);
    MULTICH_INIT_STRUCT(IpcBitsOutLinkRTOS_CreateParams,ipcBitsOutDspPrm);

    MULTICH_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams,ipcBitsInHostPrm[0]);
    MULTICH_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams,ipcBitsInHostPrm[1]);
    MULTICH_INIT_STRUCT(IpcBitsInLinkRTOS_CreateParams,ipcBitsInVideoPrm);
    //MULTICH_INIT_STRUCT(DecLink_CreateParams, decPrm);
    MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcFramesInDspPrm);
    MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams,ipcFramesOutVpssPrm);
    MULTICH_INIT_STRUCT(EncLink_CreateParams, encPrm);
    MULTICH_INIT_STRUCT(AlgLink_CreateParams, dspAlgPrm);
    for (i = 0; i < VDIS_DEV_MAX;i++)
    {
        //MULTICH_INIT_STRUCT(DisplayLink_CreateParams, displayPrm[i]);
        //MULTICH_INIT_STRUCT(SwMsLink_CreateParams ,swMsPrm[i]);
    }

    MULTICH_INIT_STRUCT(NsfLink_CreateParams, nsfPrm);
    MULTICH_INIT_STRUCT(DeiLink_CreateParams, deiPrm);

    printf("\n********* Entered usecase 4CH <816x> Enc/Dec OSD %s SCD %s \n\n",
            enableOsd == TRUE ? "Enabled" : "Disabled",
            enableScd == TRUE ? "Enabled" : "Disabled"
            );

    MultiCh_detectBoard();



    System_linkControl(
        SYSTEM_LINK_ID_M3VPSS,
        SYSTEM_M3VPSS_CMD_RESET_VIDEO_DEVICES,
        NULL,
        0,
        TRUE
        );



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




    vipInstId = 2;//0;

    gVcapModuleContext.captureId    = SYSTEM_LINK_ID_CAPTURE;

    if(enableAlgLink)
    {
        gVcapModuleContext.dspAlgId[0] = SYSTEM_LINK_ID_VIDEO_ALG_0  ;
    }



    gVcapModuleContext.nsfId[0]     = SYSTEM_LINK_ID_NSF_0;
#ifdef     ADD_NSF_AFTER_CAPTURE
    gVcapModuleContext.nsfId[1]     =SYSTEM_LINK_ID_NSF_1;
#endif
    gVcapModuleContext.deiId[0]     = SYSTEM_LINK_ID_DEI_0;
    gVencModuleContext.encId        = SYSTEM_LINK_ID_VENC_0;
    //gVdecModuleContext.decId        = SYSTEM_LINK_ID_VDEC_0;

    gVdisModuleContext.swMsId[0]      = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
    gVdisModuleContext.swMsId[1]      = SYSTEM_LINK_ID_SW_MS_MULTI_INST_1;

    //swMsPrm[0].numSwMsInst = 1;
    //swMsPrm[1].numSwMsInst = 1;

    /* use AUX scaler (SC2), since SC1 is used for DEI */
    //swMsPrm[0].swMsInstId[0] = SYSTEM_SW_MS_SC_INST_DEI_SC_NO_DEI;
   // swMsPrm[1].swMsInstId[0] = SYSTEM_SW_MS_SC_INST_SC5;

    gVdisModuleContext.displayId[0] = SYSTEM_LINK_ID_DISPLAY_0; /* ON AND OFF CHIP HDMI */
    gVdisModuleContext.displayId[1] = SYSTEM_LINK_ID_DISPLAY_2; /* SDTV */

    //mergeId[LIVE_DECODE_MERGE_LINK_IDX]     = SYSTEM_VPSS_LINK_ID_MERGE_0;
    mergeId[D1_CIF_MERGE_LINK_IDX]          = SYSTEM_VPSS_LINK_ID_MERGE_1;

    dupId[D1_DUP_LINK_IDX]              = SYSTEM_VPSS_LINK_ID_DUP_0;
    dupId[LIVE_DECODE_DUP_LINK_IDX]     = SYSTEM_VPSS_LINK_ID_DUP_1;

    ipcOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0;
    ipcInVideoId = SYSTEM_VIDEO_LINK_ID_IPC_IN_M3_0;
    ipcOutVideoId= SYSTEM_VIDEO_LINK_ID_IPC_OUT_M3_0;
    ipcInVpssId  = SYSTEM_VPSS_LINK_ID_IPC_IN_M3_0;

    gVencModuleContext.ipcBitsOutRTOSId  = SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0;
    gVencModuleContext.ipcBitsInHLOSId   = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;
    gVdecModuleContext.ipcBitsOutHLOSId  = SYSTEM_HOST_LINK_ID_IPC_BITS_OUT_0;
    gVdecModuleContext.ipcBitsInRTOSId  = SYSTEM_VIDEO_LINK_ID_IPC_BITS_IN_0;



    CaptureLink_CreateParams_Init(&capturePrm);
#ifdef     ADD_NSF_AFTER_CAPTURE
    capturePrm.outQueParams[0].nextLink   = gVcapModuleContext.nsfId[1];
#else
    capturePrm.outQueParams[0].nextLink   = gVcapModuleContext.deiId[0];
#endif
    capturePrm.numVipInst                 = 1;
    capturePrm.tilerEnable                = FALSE;
    capturePrm.numBufsPerCh               = NUM_CAPTURE_BUFFERS;
    capturePrm.maxBlindAreasPerCh         = 4;

    pCaptureInstPrm                     = &capturePrm.vipInst[0];
    pCaptureInstPrm->vipInstId          = (SYSTEM_CAPTURE_INST_VIP0_PORTA+
                                          vipInstId)%SYSTEM_CAPTURE_INST_MAX;
    pCaptureInstPrm->videoDecoderId     = SYSTEM_DEVICE_VID_DEC_TVP5158_DRV;
    pCaptureInstPrm->inDataFormat       = SYSTEM_DF_YUV422P;
    pCaptureInstPrm->standard           = SYSTEM_STD_MUX_4CH_D1;
    pCaptureInstPrm->numOutput          = 1;

    pCaptureOutPrm                      = &pCaptureInstPrm->outParams[0];
    pCaptureOutPrm->dataFormat          = SYSTEM_DF_YUV422I_YUYV;
    pCaptureOutPrm->scEnable            = FALSE;
    pCaptureOutPrm->scOutWidth          = 0;
    pCaptureOutPrm->scOutHeight         = 0;
    pCaptureOutPrm->outQueId            = 0;

    for(i = 0; i < NUM_CAPTURE_DEVICES; i++)
    {
        vidDecVideoModeArgs[i].vipInstId        = SYSTEM_CAPTURE_INST_VIP0_PORTA+i;
        vidDecVideoModeArgs[i].deviceId         = DEVICE_VID_DEC_TVP5158_DRV;
        vidDecVideoModeArgs[i].numChInDevice    = 4;

        vidDecVideoModeArgs[i].modeParams.videoIfMode        = DEVICE_CAPT_VIDEO_IF_MODE_8BIT;
        vidDecVideoModeArgs[i].modeParams.videoDataFormat    = SYSTEM_DF_YUV422P;
        vidDecVideoModeArgs[i].modeParams.standard           = SYSTEM_STD_MUX_4CH_D1;
        vidDecVideoModeArgs[i].modeParams.videoCaptureMode   =
                    DEVICE_CAPT_VIDEO_CAPTURE_MODE_MULTI_CH_PIXEL_MUX_EMBEDDED_SYNC;
        vidDecVideoModeArgs[i].modeParams.videoSystem        =
                                      DEVICE_VIDEO_DECODER_VIDEO_SYSTEM_AUTO_DETECT;
        vidDecVideoModeArgs[i].modeParams.videoCropEnable    = FALSE;
        vidDecVideoModeArgs[i].modeParams.videoAutoDetectTimeout = -1;
    }

    Vcap_configVideoDecoder(vidDecVideoModeArgs, NUM_CAPTURE_DEVICES);


#ifdef     ADD_NSF_AFTER_CAPTURE
    nsfPrm2.bypassNsf                          = TRUE;
    nsfPrm2.tilerEnable                          = FALSE;
    nsfPrm2.inQueParams.prevLinkId          = gVcapModuleContext.captureId;
    nsfPrm2.inQueParams.prevLinkQueId     = 0;
    nsfPrm2.numOutQue                        = 1;
    nsfPrm2.outQueParams[0].nextLink      = gVcapModuleContext.deiId[0];
    nsfPrm2.numBufsPerCh                     = NUM_NSF_BUFFERS;
    nsfPrm2.inputFrameRate                    = 30;
    nsfPrm2.outputFrameRate                  = 30;

    deiPrm.inQueParams.prevLinkId = gVcapModuleContext.nsfId[1];
#else
    deiPrm.inQueParams.prevLinkId = gVcapModuleContext.captureId;
#endif
    deiPrm.inQueParams.prevLinkQueId  = 0;

    /* Set Output Scaling at DEI based on ratio */
    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].scaleMode = DEI_SCALE_MODE_RATIO;
    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.widthRatio.numerator = 1;
    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.widthRatio.denominator = 1;
    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.heightRatio.numerator = 1;
    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].ratio.heightRatio.denominator = 1;
    for (i=1; i < DEI_LINK_MAX_CH; i++)
        deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][i] = deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0];

    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].scaleMode = DEI_SCALE_MODE_RATIO;
    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.heightRatio.numerator = 1;
    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.heightRatio.denominator = 1;
    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.widthRatio.numerator = 1;
    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.widthRatio.denominator = 1;
    for (i=1; i < DEI_LINK_MAX_CH; i++)
        deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][i] = deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0];

    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT][0].scaleMode = DEI_SCALE_MODE_RATIO;
    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT][0].ratio.heightRatio.numerator = 1;
    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT][0].ratio.heightRatio.denominator = 2;
    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT][0].ratio.widthRatio.numerator = 1;
    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT][0].ratio.widthRatio.denominator = 2;
    for (i=1; i < DEI_LINK_MAX_CH; i++)
        deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT][i] = deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT][0];

    deiPrm.enableOut[DEI_LINK_OUT_QUE_DEI_SC]                        = TRUE;
    deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC]                        = TRUE;
    deiPrm.enableOut[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT]          = TRUE;

    deiPrm.outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink                   = gVcapModuleContext.nsfId[0];//dupId[D1_DUP_LINK_IDX];
    deiPrm.outQueParams[DEI_LINK_OUT_QUE_VIP_SC].nextLink                   = mergeId[D1_CIF_MERGE_LINK_IDX];
    deiPrm.outQueParams[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT].nextLink     = mergeId[D1_CIF_MERGE_LINK_IDX];

    deiPrm.tilerEnable[DEI_LINK_OUT_QUE_VIP_SC]          = TILER_ENABLE;
    deiPrm.comprEnable                                   = FALSE;
    deiPrm.setVipScYuv422Format                          = FALSE;
#if 0
    dupPrm[D1_DUP_LINK_IDX].inQueParams.prevLinkId         = gVcapModuleContext.deiId[0];
    dupPrm[D1_DUP_LINK_IDX].inQueParams.prevLinkQueId      = DEI_LINK_OUT_QUE_DEI_SC;
    dupPrm[D1_DUP_LINK_IDX].numOutQue                      = 2;
    dupPrm[D1_DUP_LINK_IDX].outQueParams[0].nextLink       = mergeId[LIVE_DECODE_MERGE_LINK_IDX];
    dupPrm[D1_DUP_LINK_IDX].outQueParams[1].nextLink       = gVcapModuleContext.nsfId[0];
    dupPrm[D1_DUP_LINK_IDX].notifyNextLink                 = TRUE;
#endif
    nsfPrm.bypassNsf                        = TRUE;
    nsfPrm.tilerEnable                      = TILER_ENABLE;
	nsfPrm.inputFrameRate = 30;
	nsfPrm.outputFrameRate = 30;
    nsfPrm.inQueParams.prevLinkId           = gVcapModuleContext.deiId[0];//dupId[D1_DUP_LINK_IDX];
    nsfPrm.inQueParams.prevLinkQueId        = 1;
    nsfPrm.numOutQue                        = 1;
    nsfPrm.outQueParams[0].nextLink         = mergeId[D1_CIF_MERGE_LINK_IDX];
    nsfPrm.numBufsPerCh                     = NUM_NSF_BUFFERS;
    nsfPrm.inputFrameRate = 30;
    nsfPrm.outputFrameRate = 1;

    /* Merge Q0 - D1 <from VIP-SC>, Q1 - CIF <from VIP-SC_SECONDARY>, Q2 -D1 for MJPEG <from DEI-SC>  */
    mergePrm[D1_CIF_MERGE_LINK_IDX].inQueParams[0].prevLinkId       = gVcapModuleContext.deiId[0];
    mergePrm[D1_CIF_MERGE_LINK_IDX].inQueParams[0].prevLinkQueId    = DEI_LINK_OUT_QUE_VIP_SC;
    mergePrm[D1_CIF_MERGE_LINK_IDX].inQueParams[1].prevLinkId       = gVcapModuleContext.deiId[0];
    mergePrm[D1_CIF_MERGE_LINK_IDX].inQueParams[1].prevLinkQueId    = DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT;
    mergePrm[D1_CIF_MERGE_LINK_IDX].inQueParams[2].prevLinkId       = gVcapModuleContext.nsfId[0];
    mergePrm[D1_CIF_MERGE_LINK_IDX].inQueParams[2].prevLinkQueId    = 0;

    mergePrm[D1_CIF_MERGE_LINK_IDX].notifyNextLink                  = TRUE;
    mergePrm[D1_CIF_MERGE_LINK_IDX].numInQue = 3;

    ipcOutVpssPrm.inQueParams.prevLinkQueId    = 0;
    mergePrm[D1_CIF_MERGE_LINK_IDX].outQueParams.nextLink  = ipcOutVpssId;
    ipcOutVpssPrm.inQueParams.prevLinkId                   = mergeId[D1_CIF_MERGE_LINK_IDX];

    ipcOutVpssPrm.numOutQue = 1;
    ipcOutVpssPrm.outQueParams[0].nextLink     = ipcInVideoId;
    ipcOutVpssPrm.notifyNextLink               = TRUE;
    ipcOutVpssPrm.notifyPrevLink               = TRUE;
    ipcOutVpssPrm.noNotifyMode                 = FALSE;

    ipcInVideoPrm.inQueParams.prevLinkId       = ipcOutVpssId;
    ipcInVideoPrm.inQueParams.prevLinkQueId    = 0;
    ipcInVideoPrm.numOutQue                    = 1;
    if (enableAlgLink)
    {
		ipcInVideoPrm.outQueParams[0].nextLink     = gVcapModuleContext.dspAlgId[0];

		dspAlgPrm.inQueParams.prevLinkId           = ipcInVideoId;
		dspAlgPrm.inQueParams.prevLinkQueId        = 0;
		dspAlgPrm.outQueParams[ALG_LINK_FRAMES_OUT_QUE].nextLink = gVencModuleContext.encId;
    }
	else {
		ipcInVideoPrm.outQueParams[0].nextLink     = gVencModuleContext.encId;
	}
    ipcInVideoPrm.notifyNextLink               = TRUE;
    ipcInVideoPrm.notifyPrevLink               = TRUE;
    ipcInVideoPrm.noNotifyMode                 = FALSE;


    {
        EncLink_ChCreateParams *pLinkChPrm;
        EncLink_ChDynamicParams *pLinkDynPrm;
        VENC_CHN_DYNAMIC_PARAM_S *pDynPrm;
        VENC_CHN_PARAMS_S *pChPrm;

        EncLink_CreateParams_Init(&encPrm);

        encPrm.numBufPerCh[0] = NUM_ENCODE_D1_BUFFERS;
        encPrm.numBufPerCh[1] = NUM_ENCODE_CIF_BUFFERS;

        /* Primary Stream Params - D1 */
        for (i=0; i<gVencModuleContext.vencConfig.numPrimaryChn; i++)
        {
            pLinkChPrm  = &encPrm.chCreateParams[i];
            pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;

            pChPrm      = &gVencModuleContext.vencConfig.encChannelParams[i];
            pDynPrm     = &pChPrm->dynamicParam;

            pLinkChPrm->format                  = IVIDEO_H264HP;
            pLinkChPrm->profile                 = gVencModuleContext.vencConfig.h264Profile[i];
            pLinkChPrm->dataLayout              = IVIDEO_FIELD_SEPARATED;
            pLinkChPrm->fieldMergeEncodeEnable  = FALSE;
            pLinkChPrm->enableAnalyticinfo      = pChPrm->enableAnalyticinfo;
            pLinkChPrm->enableWaterMarking      = pChPrm->enableWaterMarking;
            pLinkChPrm->maxBitRate              = pChPrm->maxBitRate;
            pLinkChPrm->encodingPreset          = pChPrm->encodingPreset;
            pLinkChPrm->rateControlPreset       = pChPrm->rcType;
            pLinkChPrm->enableSVCExtensionFlag  = pChPrm->enableSVCExtensionFlag;
            pLinkChPrm->numTemporalLayer        = pChPrm->numTemporalLayer;

            pLinkDynPrm->intraFrameInterval     = pDynPrm->intraFrameInterval;
            pLinkDynPrm->targetBitRate          = pDynPrm->targetBitRate;
            pLinkDynPrm->interFrameInterval     = 1;
            pLinkDynPrm->mvAccuracy             = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
            pLinkDynPrm->inputFrameRate         = pDynPrm->inputFrameRate;
            pLinkDynPrm->rcAlg                  = pDynPrm->rcAlg;
            pLinkDynPrm->qpMin                  = pDynPrm->qpMin;
            pLinkDynPrm->qpMax                  = pDynPrm->qpMax;
            pLinkDynPrm->qpInit                 = pDynPrm->qpInit;
            pLinkDynPrm->vbrDuration            = pDynPrm->vbrDuration;
            pLinkDynPrm->vbrSensitivity         = pDynPrm->vbrSensitivity;
        }
        /* Secondary Out <CIF> Params */
        for (i=gVencModuleContext.vencConfig.numPrimaryChn, j=VENC_PRIMARY_CHANNELS;
              i<(gVencModuleContext.vencConfig.numPrimaryChn
                       + gVencModuleContext.vencConfig.numSecondaryChn);
                i++, j++)
        {
            pLinkChPrm  = &encPrm.chCreateParams[i];
            pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;

            pChPrm      = &gVencModuleContext.vencConfig.encChannelParams[j];
            pDynPrm     = &pChPrm->dynamicParam;

            pLinkChPrm->format                  = IVIDEO_H264HP;
            pLinkChPrm->profile                 = gVencModuleContext.vencConfig.h264Profile[i];
            pLinkChPrm->dataLayout              = IVIDEO_FIELD_SEPARATED;
            pLinkChPrm->fieldMergeEncodeEnable  = FALSE;
            pLinkChPrm->enableAnalyticinfo      = pChPrm->enableAnalyticinfo;
            pLinkChPrm->enableWaterMarking      = pChPrm->enableWaterMarking;
            pLinkChPrm->maxBitRate              = pChPrm->maxBitRate;
            pLinkChPrm->encodingPreset          = pChPrm->encodingPreset;
            pLinkChPrm->rateControlPreset       = pChPrm->rcType;
            pLinkChPrm->enableSVCExtensionFlag  = pChPrm->enableSVCExtensionFlag;
            pLinkChPrm->numTemporalLayer        = pChPrm->numTemporalLayer;

            pLinkDynPrm->intraFrameInterval     = pDynPrm->intraFrameInterval;
            pLinkDynPrm->targetBitRate          = pDynPrm->targetBitRate;
            pLinkDynPrm->interFrameInterval     = 1;
            pLinkDynPrm->mvAccuracy             = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
            pLinkDynPrm->inputFrameRate         = pDynPrm->inputFrameRate;
            pLinkDynPrm->qpMin                  = pDynPrm->qpMin;
            pLinkDynPrm->qpMax                  = pDynPrm->qpMax;
            pLinkDynPrm->qpInit                 = pDynPrm->qpInit;
            pLinkDynPrm->vbrDuration            = pDynPrm->vbrDuration;
            pLinkDynPrm->vbrSensitivity         = pDynPrm->vbrSensitivity;
        }

        /* MJPEG  Params */
        for (i=gVencModuleContext.vencConfig.numPrimaryChn + gVencModuleContext.vencConfig.numSecondaryChn;
                  i<(VENC_CHN_MAX); i++)
        {
             pLinkChPrm  = &encPrm.chCreateParams[i];
             pLinkDynPrm = &pLinkChPrm->defaultDynamicParams;

             pChPrm      = &gVencModuleContext.vencConfig.encChannelParams[i];
             pDynPrm     = &pChPrm->dynamicParam;

             pLinkChPrm->format                 = IVIDEO_MJPEG;
             pLinkChPrm->profile                = 0;
             pLinkChPrm->dataLayout             = IVIDEO_FIELD_SEPARATED;
             pLinkChPrm->fieldMergeEncodeEnable = FALSE;
             pLinkChPrm->enableAnalyticinfo     = 0;
             pLinkChPrm->enableWaterMarking     = 0;
             pLinkChPrm->maxBitRate             = 0;
             pLinkChPrm->encodingPreset         = 0;
             pLinkChPrm->rateControlPreset      = 0;
             pLinkChPrm->enableSVCExtensionFlag = 0;
             pLinkChPrm->numTemporalLayer       = 0;

             pLinkDynPrm->intraFrameInterval    = 0;
             pLinkDynPrm->targetBitRate         = 100*1000;
             pLinkDynPrm->interFrameInterval    = 0;
             pLinkDynPrm->mvAccuracy            = 0;
             pLinkDynPrm->inputFrameRate        = pDynPrm->inputFrameRate;
             pLinkDynPrm->qpMin                 = 0;
             pLinkDynPrm->qpMax                 = 0;
             pLinkDynPrm->qpInit                = -1;
             pLinkDynPrm->vbrDuration           = 0;
             pLinkDynPrm->vbrSensitivity        = 0;
        }

	    if (enableAlgLink)
	    {
			encPrm.inQueParams.prevLinkId    = gVcapModuleContext.dspAlgId[0];
			encPrm.inQueParams.prevLinkQueId = ALG_LINK_FRAMES_OUT_QUE;
	    }
		else {
			encPrm.inQueParams.prevLinkId    = ipcInVideoId;
			encPrm.inQueParams.prevLinkQueId = 0;
		}
        encPrm.outQueParams.nextLink     = gVencModuleContext.ipcBitsOutRTOSId;
    }

    ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkId = gVencModuleContext.encId;
    ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
    ipcBitsOutVideoPrm.baseCreateParams.numOutQue                 = 1;
    ipcBitsOutVideoPrm.baseCreateParams.outQueParams[0].nextLink = gVencModuleContext.ipcBitsInHLOSId;
    MultiCh_ipcBitsInitCreateParams_BitsOutRTOS(&ipcBitsOutVideoPrm,
                                               TRUE);

    ipcBitsInHostPrm[0].baseCreateParams.inQueParams.prevLinkId = gVencModuleContext.ipcBitsOutRTOSId;
    ipcBitsInHostPrm[0].baseCreateParams.inQueParams.prevLinkQueId = 0;
    MultiCh_ipcBitsInitCreateParams_BitsInHLOS(&ipcBitsInHostPrm[0]);


    dspAlgPrm.enableOSDAlg = enableOsd;

    if(enableOsd)
    {
        int chId;

        for(chId = 0; chId < ALG_LINK_OSD_MAX_CH; chId++)
        {
            AlgLink_OsdChWinParams * chWinPrm = &dspAlgPrm.osdChCreateParams[chId].chDefaultParams;

            /* set osd window max width and height */
            dspAlgPrm.osdChCreateParams[chId].maxWidth  = EXAMPLE_OSD_WIN_MAX_WIDTH;
            dspAlgPrm.osdChCreateParams[chId].maxHeight = EXAMPLE_OSD_WIN_MAX_HEIGHT;

            chWinPrm->chId = chId;
            chWinPrm->numWindows = 0;
        }
    }

    dspAlgPrm.enableSCDAlg              = enableScd;
    dspAlgPrm.outQueParams[ALG_LINK_SCD_OUT_QUE].nextLink     = SYSTEM_LINK_ID_INVALID;

    if (enableScd)
    {
        UInt32 i, startChId;

        AlgLink_ScdCreateParams *pScdCreatePrm;
        AlgLink_ScdChParams *pScdChPrm;

        pScdCreatePrm = &dspAlgPrm.scdCreateParams;

        pScdCreatePrm->maxWidth               = 352;
        pScdCreatePrm->maxHeight              = 288;
        pScdCreatePrm->maxStride              = 352;
        pScdCreatePrm->numValidChForSCD       = 4;
        pScdCreatePrm->numSecs2WaitB4Init     = 3;
        pScdCreatePrm->numSecs2WaitB4FrmAlert = 1;
        pScdCreatePrm->inputFrameRate         = 30;
        pScdCreatePrm->outputFrameRate        = 5;
        pScdCreatePrm->numSecs2WaitAfterFrmAlert = 1;

        pScdCreatePrm->enableTamperNotify = FALSE;

        /* enable SCD only for CIF CHs */
        startChId = 4;
        for(i=0; i<pScdCreatePrm->numValidChForSCD; i++)
        {
            pScdChPrm = &pScdCreatePrm->chDefaultParams[i];

            pScdChPrm->chId = startChId;
            pScdChPrm->mode                = ALG_LINK_SCD_DETECTMODE_MONITOR_FULL_FRAME;
            pScdChPrm->frmIgnoreLightsON   = FALSE;
            pScdChPrm->frmIgnoreLightsOFF  = FALSE;
            pScdChPrm->frmSensitivity      = ALG_LINK_SCD_SENSITIVITY_VERYHIGH;
            pScdChPrm->frmEdgeThreshold    = 0;
            pScdChPrm->blkNumBlksInFrame   = 0;

            startChId++;
        }
    }


#ifndef SYSTEM_USE_VIDEO_DECODER
    capturePrm.isPalMode = Vcap_isPalMode();
#endif
    System_linkCreate (gVcapModuleContext.captureId, &capturePrm, sizeof(capturePrm));

#ifdef     ADD_NSF_AFTER_CAPTURE
    System_linkCreate(gVcapModuleContext.nsfId[1], &nsfPrm2, sizeof(nsfPrm2));
#endif
    System_linkCreate(gVcapModuleContext.deiId[0], &deiPrm, sizeof(deiPrm));

    //System_linkCreate(dupId[D1_DUP_LINK_IDX], &dupPrm[D1_DUP_LINK_IDX], sizeof(dupPrm[D1_DUP_LINK_IDX]));
    System_linkCreate(gVcapModuleContext.nsfId[0] , &nsfPrm, sizeof(nsfPrm));
    System_linkCreate(mergeId[D1_CIF_MERGE_LINK_IDX], &mergePrm[D1_CIF_MERGE_LINK_IDX], sizeof(mergePrm[D1_CIF_MERGE_LINK_IDX]));

    System_linkCreate(ipcOutVpssId , &ipcOutVpssPrm , sizeof(ipcOutVpssPrm) );
    System_linkCreate(ipcInVideoId , &ipcInVideoPrm , sizeof(ipcInVideoPrm) );

    if(enableAlgLink)
    {
        /* only create OSD alg */
        System_linkCreate(gVcapModuleContext.dspAlgId[0] , &dspAlgPrm, sizeof(dspAlgPrm));
    }

    System_linkCreate(gVencModuleContext.encId, &encPrm, sizeof(encPrm));

    System_linkCreate(gVencModuleContext.ipcBitsOutRTOSId, &ipcBitsOutVideoPrm, sizeof(ipcBitsOutVideoPrm));
    System_linkCreate(gVencModuleContext.ipcBitsInHLOSId, &ipcBitsInHostPrm[0], sizeof(ipcBitsInHostPrm[0]));

    System_linkGetInfo(gVencModuleContext.ipcBitsInHLOSId,&bitsProducerLinkInfo);
    OSA_assert(bitsProducerLinkInfo.numQue == 1);
	
    ipcBitsOutHostPrm.baseCreateParams.outQueParams[0].nextLink = gVdecModuleContext.ipcBitsInRTOSId;

    printf ("\n\n========bitsProducerLinkInfo============\n");
    printf ("numQ %d, numCh %d\n",
                    bitsProducerLinkInfo.numQue,
                    bitsProducerLinkInfo.queInfo[0].numCh);
    {
        int i;
        for (i=0; i<bitsProducerLinkInfo.queInfo[0].numCh; i++)
        {
            printf ("Ch [%d] Width %d, Height %d\n",
                i,
                bitsProducerLinkInfo.queInfo[0].chInfo[i].width,
                bitsProducerLinkInfo.queInfo[0].chInfo[i].height
                );
        }
    }
    printf ("\n====================\n\n");

    if (bitsProducerLinkInfo.queInfo[0].numCh > gVencModuleContext.vencConfig.numPrimaryChn)
        bitsProducerLinkInfo.queInfo[0].numCh = gVencModuleContext.vencConfig.numPrimaryChn;

    printf ("Reducing bitsProducerLinkInfo.numCh to %d\n", bitsProducerLinkInfo.queInfo[0].numCh);

    MultiCh_ipcBitsInitCreateParams_BitsOutHLOS(&ipcBitsOutHostPrm,
                                               &bitsProducerLinkInfo.queInfo[0]);
    ipcBitsOutHostPrm.numBufPerCh[0]  = NUM_IPC_OUT_BUFFERS;
    if(gVdecModuleContext.vdecConfig.forceUseDecChannelParams)
    {
        /* use channel info provided by user instead of from encoder */
        UInt32 chId;
        System_LinkChInfo *pChInfo;

        ipcBitsOutHostPrm.inQueInfo.numCh = gVdecModuleContext.vdecConfig.numChn;

        for(chId=0; chId<ipcBitsOutHostPrm.inQueInfo.numCh; chId++)
        {
            pChInfo = &ipcBitsOutHostPrm.inQueInfo.chInfo[chId];

            /* Not Used - Start */
            pChInfo->bufType        = 0;
            pChInfo->codingformat   = 0;
            pChInfo->dataFormat     = 0;
            pChInfo->memType        = 0;
            pChInfo->startX         = 0;
            pChInfo->startY         = 0;
            pChInfo->pitch[0]       = 0;
            pChInfo->pitch[1]       = 0;
            pChInfo->pitch[2]       = 0;
            /* Not Used - End */

            pChInfo->width          = gVdecModuleContext.vdecConfig.decChannelParams[chId].maxVideoWidth;
            pChInfo->height         = gVdecModuleContext.vdecConfig.decChannelParams[chId].maxVideoHeight;
            pChInfo->scanFormat     = SYSTEM_SF_PROGRESSIVE;
        }
    }
    ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkId       = gVdecModuleContext.ipcBitsOutHLOSId;
    ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkQueId    = 0;
    ipcBitsInVideoPrm.baseCreateParams.numOutQue                    = 0;//1;
    ipcBitsInVideoPrm.baseCreateParams.outQueParams[0].nextLink     = SYSTEM_LINK_ID_NULL_0;//ipcOutVideoId;//gVdecModuleContext.decId;
    MultiCh_ipcBitsInitCreateParams_BitsInRTOS(&ipcBitsInVideoPrm, TRUE);

#if 0
    for (i=0; i<gVdecModuleContext.vdecConfig.numChn; i++) {
        decPrm.chCreateParams[i].format                 = IVIDEO_H264HP;
        decPrm.chCreateParams[i].profile                = IH264VDEC_PROFILE_ANY;
        decPrm.chCreateParams[i].processCallLevel       = VDEC_FRAMELEVELPROCESSCALL;
        decPrm.chCreateParams[i].targetMaxWidth         = ipcBitsOutHostPrm.inQueInfo.chInfo[i].width;
        decPrm.chCreateParams[i].targetMaxHeight        = ipcBitsOutHostPrm.inQueInfo.chInfo[i].height;
        decPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate = gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.frameRate;
        decPrm.chCreateParams[i].defaultDynamicParams.targetBitRate   = gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.targetBitRate;
        /* Max ref frames is only 2 as this is closed loop decoder */
        decPrm.chCreateParams[i].dpbBufSizeInFrames                   = 2;
        decPrm.chCreateParams[i].numBufPerCh = NUM_DECODE_BUFFERS;
        decPrm.chCreateParams[i].tilerEnable = TILER_ENABLE;
    }
    decPrm.inQueParams.prevLinkId    = gVdecModuleContext.ipcBitsInRTOSId;
    decPrm.inQueParams.prevLinkQueId = 0;
    decPrm.outQueParams.nextLink  = ipcOutVideoId;
#endif

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

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

    mergePrm[LIVE_DECODE_MERGE_LINK_IDX].numInQue                     = 2;
    mergePrm[LIVE_DECODE_MERGE_LINK_IDX].inQueParams[0].prevLinkId    = dupId[D1_DUP_LINK_IDX];
    mergePrm[LIVE_DECODE_MERGE_LINK_IDX].inQueParams[0].prevLinkQueId = 0;
    mergePrm[LIVE_DECODE_MERGE_LINK_IDX].inQueParams[1].prevLinkId    = ipcInVpssId;
    mergePrm[LIVE_DECODE_MERGE_LINK_IDX].inQueParams[1].prevLinkQueId = 0;
    mergePrm[LIVE_DECODE_MERGE_LINK_IDX].outQueParams.nextLink        = SYSTEM_LINK_ID_NULL_0;//dupId[LIVE_DECODE_DUP_LINK_IDX];
    mergePrm[LIVE_DECODE_MERGE_LINK_IDX].notifyNextLink               = FALSE;//TRUE;
#endif
#if 0
    dupPrm[LIVE_DECODE_DUP_LINK_IDX].inQueParams.prevLinkId         = mergeId[LIVE_DECODE_MERGE_LINK_IDX];
    dupPrm[LIVE_DECODE_DUP_LINK_IDX].inQueParams.prevLinkQueId      = 0;
    dupPrm[LIVE_DECODE_DUP_LINK_IDX].numOutQue                      = 2;
    dupPrm[LIVE_DECODE_DUP_LINK_IDX].outQueParams[0].nextLink       = gVdisModuleContext.swMsId[0];
    dupPrm[LIVE_DECODE_DUP_LINK_IDX].outQueParams[1].nextLink       = gVdisModuleContext.swMsId[1];
    dupPrm[LIVE_DECODE_DUP_LINK_IDX].notifyNextLink                 = TRUE;
#endif
#if 0
    for(i=0; i<2; i++)
    {
        swMsPrm[i].inQueParams.prevLinkId    = dupId[LIVE_DECODE_DUP_LINK_IDX];
        swMsPrm[i].inQueParams.prevLinkQueId = i;
        swMsPrm[i].outQueParams.nextLink     = gVdisModuleContext.displayId[i];
        swMsPrm[i].maxInputQueLen            = 4; // KC: changed to 4 to make the display smooth
        swMsPrm[i].maxOutRes                 = VSYS_STD_1080P_60;
        swMsPrm[i].initOutRes                = gVdisModuleContext.vdisConfig.deviceParams[i].resolution;
        swMsPrm[i].numOutBuf                 = 8;
        if (i == 1)
		{
            swMsPrm[i].maxOutRes  = VSYS_STD_PAL;
            swMsPrm[i].initOutRes = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;
		}


#ifdef  SYSTEM_USE_TILER
        swMsPrm[i].lineSkipMode = FALSE; // Double pitch not possible in tiler mode; so Line skip not possible
#else
        swMsPrm[i].lineSkipMode = TRUE; // Set to TRUE for Enable low cost scaling
#endif
        swMsPrm[i].enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;

        MultiCh_swMsGetDefaultLayoutPrm(VDIS_DEV_HDMI, &swMsPrm[0], TRUE);
        MultiCh_swMsGetDefaultLayoutPrm(VDIS_DEV_SD, &swMsPrm[1], TRUE);

        displayPrm[i].inQueParams[0].prevLinkId    = gVdisModuleContext.swMsId[i];
        displayPrm[i].inQueParams[0].prevLinkQueId = 0;
        displayPrm[i].displayRes                = swMsPrm[i].initOutRes;
        if (i == 1)
        {
            displayPrm[i].displayRes            = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;
            displayPrm[i].forceFieldSeparatedInputMode = TRUE;
        }
    }
#endif
    System_linkCreate(gVdecModuleContext.ipcBitsOutHLOSId,&ipcBitsOutHostPrm,sizeof(ipcBitsOutHostPrm));
    System_linkCreate(gVdecModuleContext.ipcBitsInRTOSId,&ipcBitsInVideoPrm,sizeof(ipcBitsInVideoPrm));
    //System_linkCreate(gVdecModuleContext.decId, &decPrm, sizeof(decPrm));

    //System_linkCreate(ipcOutVideoId, &ipcOutVideoPrm, sizeof(ipcOutVideoPrm));
    //System_linkCreate(ipcInVpssId  , &ipcInVpssPrm  , sizeof(ipcInVpssPrm)  );
    //System_linkCreate(mergeId[LIVE_DECODE_MERGE_LINK_IDX], &mergePrm[LIVE_DECODE_MERGE_LINK_IDX], sizeof(mergePrm[LIVE_DECODE_MERGE_LINK_IDX]));
    //System_linkCreate(dupId[LIVE_DECODE_DUP_LINK_IDX], &dupPrm[LIVE_DECODE_DUP_LINK_IDX], sizeof(dupPrm[LIVE_DECODE_DUP_LINK_IDX]));

    //for(i=0; i<2; i++)
        //System_linkCreate(gVdisModuleContext.swMsId[i]  , &swMsPrm[i], sizeof(swMsPrm[i]));

    //for(i=0; i<2; i++)  /* Both tied VENCs HDMI and DVO2 are handled by single link instance */
        //System_linkCreate(gVdisModuleContext.displayId[i], &displayPrm[i], sizeof(displayPrm[i]));

#if 0
    {
        MergeLink_InLinkChInfo inChInfo;

        MergeLink_InLinkChInfo_Init(&inChInfo);
        inChInfo.inLinkID = ipcInVpssId;
        System_linkControl(mergeId[LIVE_DECODE_MERGE_LINK_IDX],
                           MERGE_LINK_CMD_GET_INPUT_LINK_CHINFO,
                           &inChInfo,
                           sizeof(inChInfo),
                           TRUE);
        OSA_assert(inChInfo.numCh == gVdecModuleContext.vdecConfig.numChn);
        MultiCh_setDec2DispMap(VDIS_DEV_HDMI,gVdecModuleContext.vdecConfig.numChn,0,inChInfo.startChNum);
        MultiCh_setDec2DispMap(VDIS_DEV_SD,gVdecModuleContext.vdecConfig.numChn,0,inChInfo.startChNum);
   }
#endif
}

Void MultiCh_deleteProgressive4D1VcapVencVdecVdis()
{
    UInt32 i;
    Bool enableAlgLink = gVsysModuleContext.vsysConfig.enableOsd;

    UInt32 mergeId[NUM_MERGE_LINK];
    UInt32 dupId[NUM_DUP_LINK];
    UInt32 ipcOutVpssId, ipcInVpssId;
    UInt32 ipcOutVideoId, ipcInVideoId;

    mergeId[LIVE_DECODE_MERGE_LINK_IDX]     = SYSTEM_VPSS_LINK_ID_MERGE_0;
    mergeId[D1_CIF_MERGE_LINK_IDX]          = SYSTEM_VPSS_LINK_ID_MERGE_1;

    dupId[D1_DUP_LINK_IDX]              = SYSTEM_VPSS_LINK_ID_DUP_0;
    dupId[LIVE_DECODE_DUP_LINK_IDX]     = SYSTEM_VPSS_LINK_ID_DUP_1;

    ipcOutVpssId = SYSTEM_VPSS_LINK_ID_IPC_OUT_M3_0;
    ipcInVideoId = SYSTEM_VIDEO_LINK_ID_IPC_IN_M3_0;
    ipcOutVideoId= SYSTEM_VIDEO_LINK_ID_IPC_OUT_M3_0;
    ipcInVpssId  = SYSTEM_VPSS_LINK_ID_IPC_IN_M3_0;

    gVdecModuleContext.ipcBitsOutHLOSId = SYSTEM_HOST_LINK_ID_IPC_BITS_OUT_0;
    gVdecModuleContext.ipcBitsInRTOSId = SYSTEM_VIDEO_LINK_ID_IPC_BITS_IN_0;

    System_linkDelete(gVcapModuleContext.captureId);
#ifdef     ADD_NSF_AFTER_CAPTURE
    System_linkDelete(gVcapModuleContext.nsfId[1]);
#endif
    System_linkDelete(gVcapModuleContext.deiId[0]);
    System_linkDelete(gVcapModuleContext.nsfId[0]);

    System_linkDelete(ipcOutVpssId );
    System_linkDelete(ipcInVideoId );

    if(enableAlgLink)
    {
        System_linkDelete(gVcapModuleContext.dspAlgId[0]);
    }

    System_linkDelete(gVencModuleContext.encId);
    System_linkDelete(gVencModuleContext.ipcBitsOutRTOSId);
    System_linkDelete(gVencModuleContext.ipcBitsInHLOSId);
    System_linkDelete(gVdecModuleContext.ipcBitsOutHLOSId);
    System_linkDelete(gVdecModuleContext.ipcBitsInRTOSId);
    //System_linkDelete(gVdecModuleContext.decId);

    System_linkDelete(ipcOutVideoId);
    System_linkDelete(ipcInVpssId  );

    for(i=0; i<2; i++)
        System_linkDelete(gVdisModuleContext.swMsId[i] );

    for(i=0; i<2; i++)
        System_linkDelete(gVdisModuleContext.displayId[i]);

    for(i=0; i<NUM_DUP_LINK; i++)
        System_linkDelete(dupId[i]);

    for(i=0; i<NUM_MERGE_LINK; i++)
    {
        if (mergeId[i] != SYSTEM_LINK_ID_INVALID )
           System_linkDelete(mergeId[i]);
    }

    /* Print the HWI, SWI and all tasks load */
    /* Reset the accumulated timer ticks */
    MultiCh_prfLoadCalcEnable(FALSE, TRUE, FALSE);

}




I got this assert error:

 Assertion @ Line: 222 in links_m3vpss/nsf/nsfLink_drv.c: pObj->fvidHandleNsf != NULL : failed !!!

Is there something wrong with my usecase?

Jack

  •     nsfPrm.inQueParams.prevLinkQueId        = 1;

    this should be

        nsfPrm.inQueParams.prevLinkQueId        = DEI_LINK_OUT_QUE_DEI_SC;

     

  • Thank Badri!

    I change that, The error is gone. But the code doesn't seen running right.

    I got a warning "[host] IPC_BITSINLINK:!WARNING!.Commands not being processed by link.TimeSinceLastAlloc:208,TimeSinceLastFree:10724"

    and this is my "i: Print detailed system information"

     Enter Choice: i
     
     DEMO:  0: Detected video at CH [0,0] (720x240@59Hz, 1)!!!
     DEMO:  1: No video detected at CH [0,1] !!!
     DEMO:  2: No video detected at CH [0,2] !!!
     DEMO:  3: No video detected at CH [0,3] !!!
     
     [m3vpss ]  
     [m3vpss ]  *** Capture Driver Advanced Statistics *** 
     [m3vpss ]  
     [m3vpss ]  *** [NSF0] NSF Statistics *** 
     [m3vpss ]  
     [m3vpss ]  Elasped Time           : 563 secs
     [m3vpss ]  Total Fields Processed : 4483 
     [m3vpss ]  Total Fields FPS       : 582 FPS
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  CH  | In Recv In Reject In Process Out User Out Out      
     [m3vpss ]  Num | FPS     FPS       FPS        FPS Skip FPS Skip FPS 
     [m3vpss ]  ------------------------------------------------
     [m3vpss ]    0 |      59        57          1   1       57        0
     [m3vpss ]    1 |      59        57          1   1       57        0
     [m3vpss ]    2 |      59        57          1   1       57        0
     [m3vpss ]    3 |      59        57          1   1       57        0
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  VIP Parser Reset Count : 0
     [m3vpss ]  
     [m3vpss ]      |   Total    Even     Odd  Total  Even   Odd  Min /  Max  Min /  Max Dropped Fid Repeat Frame Error Y/C
     [m3vpss ]  CH  |  Fields  Fields  Fields    FPS   FPS   FPS       Width      Height  Fields      Count (Desc Error Y/C)
     [m3vpss ]  ------------------------------------------------------------------------------------------------------------
     [m3vpss ]  200 |   33673   16837   16836     59    29    29  720 /  720  243 /  288       1          1 0/0 (0/0)
     [m3vpss ]  201 |   33599   16800   16799     59    29    29  720 /  720  243 /  244       1          1 0/0 (0/0)
     [m3vpss ]  202 |   33599   16800   16799     59    29    29  720 /  720  243 /  244       1          1 0/0 (0/0)
     [m3vpss ]  203 |   33599   16800   16799     59    29    29  720 /  720  243 /  244       1          1 0/0 (0/0)
     [m3vpss ]  
     [m3vpss ]  VIP Capture Port 2 | DescMissMatch1 = 0, DescMissMatch2 = 0 , DescMissMatch3 = 0 
     [m3vpss ]  
     [m3vpss ]  *** Capture List Manager Advanced Statistics *** 
     [m3vpss ]  
     [m3vpss ]  List Post Count        : 70355 
     [m3vpss ]  List Stall Count       : 0 
     [m3vpss ]  List Post Time (ms)    : Max = 0, Min = 0, Avg = 0, Total = 0 
     [m3vpss ]  INTC Timeout Count     : (0, 0) (Min timeout value = 973, 987) 
     [m3vpss ]  Descriptor miss found count : 0 
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  VIP and VPDMA registers, 
     [m3vpss ]  VIP0 : FIQ_STATUS  : 0x4810551c = 0x00000000
     [m3vpss ]  VIP1 : FIQ_STATUS  : 0x48105a1c = 0x00000000
     [m3vpss ]  VPDMA: LIST_BUSY   : 0x4810d00c = 0x00020000
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  664756: CAPTURE: Fields = 134463 (fps = 238, CPU Load = 0)
     [m3vpss ]  664756: CAPTURE: Num Resets = 0 (Avg 0 ms per reset)
     [m3vpss ]  664756: SYSTEM  : FREE SPACE : System Heap      = 67840 B, Mbx = 10239 msgs) 
     [m3vpss ]  664756: SYSTEM  : FREE SPACE : SR0 Heap         = 9367296 B (8 MB) 
     [m3vpss ]  664756: SYSTEM  : FREE SPACE : Frame Buffer     = 160726912 B (153 MB) 
     [m3vpss ]  664756: SYSTEM  : FREE SPACE : Bitstream Buffer = 194290048 B (185 MB) 
     [m3vpss ]  664756: SYSTEM  : FREE SPACE : Tiler 8-bit      = 134217728 B (128 MB)  - TILER ON 
     [m3vpss ]  664756: SYSTEM  : FREE SPACE : Tiler 16-bit     = 134217728 B (128 MB)  - TILER ON 
     [m3vpss ]  
     [m3vpss ]  *** [DEI2    ] DEI Statistics *** 
     [m3vpss ]  
     [m3vpss ]  Elasped Time           : 565 secs
     [m3vpss ]  Total Fields Processed : 134939 
     [m3vpss ]  Total Fields FPS       : 799 FPS
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  CH  | In Recv In Reject In Process Out[0] Out[1] Out[2] Out[3] Out[4] Skip Out[0] Skip Out[1] Skip Out[2] Skip Out[3] Skip Out[4] User Out[0] User Out[1] User Out[2] User Out[3] User Out[4] Latency   
     [m3vpss ]  Num | FPS     FPS       FPS        FPS    FPS    FPS    FPS    FPS       FPS         FPS         FPS         FPS         FPS       Skip FPS    Skip FPS    Skip FPS    Skip FPS    Skip FPS   Min / Max 
     [m3vpss ]  -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     [m3vpss ]    0 |      59         0         59     59     29     29      0      0           0           0           0           0           0           0           0           0           0           0  10 /  30
     [m3vpss ]    1 |      59         0         59     59     29     29      0      0           0           0           0           0           0           0           0           0           0           0  12 /  30
     [m3vpss ]    2 |      59         0         59     59     29     29      0      0           0           0           0           0           0           0           0           0           0           0  12 /  30
     [m3vpss ]    3 |      59         0         59     59     29     29      0      0           0           0           0           0           0           0           0           0           0           0  12 /  30
     [m3vpss ]  
     [m3video] 	670757: HDVICP-ID:0
     [m3video] All percentage figures are based off totalElapsedTime
     [m3video] 		 totalAcquire2wait :3 %
     [m3video] 		 totalWait2Isr :35 %
     [m3video] 		 totalIsr2Done :0 %
     [m3video] 		 totalWait2Done :35 %
     [m3video] 		 totalDone2Release :0 %
     [m3video] 		 totalAcquire2Release :39 %
     [m3video] 		 totalAcq2acqDelay :60 %
     [m3video] 		 totalElapsedTime in msec :     179
     [m3video] 		 numAccessCnt:      64
     [m3video] 		IVA-FPS :       0
     [m3video] 		Average time spent per frame in microsec:     978
     [m3video] 	670758: HDVICP-ID:1
     [m3video] All percentage figures are based off totalElapsedTime
     [m3video] 		 totalAcquire2wait :0 %
     [m3video] 		 totalWait2Isr :0 %
     [m3video] 		 totalIsr2Done :0 %
     [m3video] 		 totalWait2Done :0 %
     [m3video] 		 totalDone2Release :0 %
     [m3video] 		 totalAcquire2Release :0 %
     [m3video] 		 totalAcq2acqDelay :0 %
     [m3video] 		 totalElapsedTime in msec :       0
     [m3video] 		 numAccessCnt:       0
     [m3video] 		IVA-FPS :       0
     [m3video] 		Average time spent per frame in microsec:       0
     [m3video] 	670758: HDVICP-ID:2
     [m3video] All percentage figures are based off totalElapsedTime
     [m3video] 		 totalAcquire2wait :0 %
     [m3video] 		 totalWait2Isr :0 %
     [m3video] 		 totalIsr2Done :0 %
     [m3video] 		 totalWait2Done :0 %
     [m3video] 		 totalDone2Release :0 %
     [m3video] 		 totalAcquire2Release :0 %
     [m3video] 		 totalAcq2acqDelay :0 %
     [m3video] 		 totalElapsedTime in msec :       0
     [m3video] 		 numAccessCnt:       0
     [m3video] 		IVA-FPS :       0
     [m3video] 		Average time spent per frame in microsec:       0
     [m3video]  
     [m3video]  *** ENCODE Statistics *** 
     [m3video]  
     [m3video]  Elasped Time           : 566 secs
     [m3video]  
     [m3video]  
     [m3video]  CH  | In Recv In Skip In User  Out Latency  
     [m3video]  Num | FPS     FPS     Skip FPS FPS Min / Max
     [m3video]  --------------------------------------------
     [m3video]    0 |      29      29        0   0 255 /   0
     [m3video]    1 |      29      29        0   0 255 /   0
     [m3video]    2 |      29      29        0   0 255 /   0
     [m3video]    3 |      29      29        0   0 255 /   0
     [m3video]    4 |      29      29        0   0 255 /   0
     [m3video]    5 |      29      29        0   0 255 /   0
     [m3video]    6 |      29      29        0   0 255 /   0
     [m3video]    7 |      29      29        0   0 255 /   0
     [m3video]    8 |       1       1        0   0 255 /   0
     [m3video]    9 |       1       1        0   0 255 /   0
     [m3video]   10 |       1       1        0   0 255 /   0
     [m3video]   11 |       1       1        0   0 255 /   0
     [m3video]  
     [m3video] Multi Channel Encode Average Submit Batch Size 
     [m3video] Max Submit Batch Size : 24
     [m3video] IVAHD_0 Average Batch Size : 0
     [m3video] IVAHD_0 Max achieved Batch Size : 0
     [m3video] IVAHD_1 Average Batch Size : 0
     [m3video] IVAHD_1 Max achieved Batch Size : 0
     [m3video] IVAHD_2 Average Batch Size : 0
     [m3video] IVAHD_2 Max achieved Batch Size : 0
     [m3video]  
     [m3video] Multi Channel Encode Batch break Stats 
     [m3video] Total Number of Batches created: 0 
     [m3video] All numbers are based off total number of Batches created
     [m3video] 	 Batch breaks due to batch sizeexceeding limit: 0 %
     [m3video] 	 Batch breaks due to ReqObj Que being empty: 0 %
     [m3video] 	 Batch breaks due to changed resolution class: 0 %
     [m3video] 	 Batch breaks due to interlace and progressivecontent mix: 0 %
     [m3video] 	 Batch breaks due to channel repeat: 0 %
     [m3video] 	 Batch breaks due to different codec: 0 %
     [m3video] Total Number of Batches created: 0 
     [m3video] All numbers are based off total number of Batches created
     [m3video] 	 Batch breaks due to batch sizeexceeding limit: 0 %
     [m3video] 	 Batch breaks due to ReqObj Que being empty: 0 %
     [m3video] 	 Batch breaks due to changed resolution class: 0 %
     [m3video] 	 Batch breaks due to interlace and progressivecontent mix: 0 %
     [m3video] 	 Batch breaks due to channel repeat: 0 %
     [m3video] 	 Batch breaks due to different codec: 0 %
     [m3video] Total Number of Batches created: 0 
     [m3video] All numbers are based off total number of Batches created
     [m3video] 	 Batch breaks due to batch sizeexceeding limit: 0 %
     [m3video] 	 Batch breaks due to ReqObj Que being empty: 0 %
     [m3video] 	 Batch breaks due to changed resolution class: 0 %
     [m3video] 	 Batch breaks due to interlace and progressivecontent mix: 0 %
     [m3video] 	 Batch breaks due to channel repeat: 0 %
     [m3video] 	 Batch breaks due to different codec: 0 %
     [m3vpss ]  
     [m3vpss ]  672763: LOAD: CPU: 8.0% HWI: 1.3%, SWI:0.8% 
     [m3vpss ]  
     [m3vpss ]  672763: LOAD: TSK: IPC_OUT_M30         : 0.9% 
     [m3vpss ]  672763: LOAD: TSK: CAPTURE             : 0.4% 
     [m3vpss ]  672763: LOAD: TSK: NSF0                : 0.3% 
     [m3vpss ]  672763: LOAD: TSK: DEI2                : 2.5% 
     [m3vpss ]  672764: LOAD: TSK: MERGE1              : 0.2% 
     [m3vpss ]  672764: LOAD: TSK: MISC                : 1.6% 
     [m3vpss ]  
     [m3video]  
     [m3video]  673264: LOAD: CPU: 3.1% HWI: 0.5%, SWI:0.6% 
     [m3video]  
     [m3video]  673264: LOAD: TSK: IPC_IN_M30          : 0.4% 
     [m3video]  673264: LOAD: TSK: IPC_BITS_IN0        : 0.1% 
     [m3video]  673265: LOAD: TSK: IPC_BITS_OUT0       : 0.1% 
     [m3video]  673265: LOAD: TSK: ENC0                : 1.0% 
     [m3video]  673265: LOAD: TSK: MISC                : 0.4% 
     [m3video]  
     [c6xdsp ]  
     [c6xdsp ]  671141: LOAD: CPU: 0.1% HWI: 0.0%, SWI:0.0% 
     [c6xdsp ]  
     [c6xdsp ]  671141: LOAD: TSK: MISC                : 0.1% 
     [c6xdsp ]  
     
     DEMO: Received event VSYS_EVENT_VIDEO_DETECT [0x0000]
     
     DEMO:  0: Detected video at CH [0,0] (720x240@59Hz, 1)!!!
     DEMO:  1: No video detected at CH [0,1] !!!
     DEMO:  2: No video detected at CH [0,2] !!!
     DEMO:  3: No video detected at CH [0,3] !!!
     
    

  • Did you get any assert msg when creating the usecase.If you are not sure pls share the full log starting from application beginning. Looks like application is not freeing buffers received from ipcBitsIn. In your usecase I see you have

    System_linkCreate(gVdecModuleContext.ipcBitsOutHLOSId,&ipcBitsOutHostPrm,sizeof(ipcBitsOutHostPrm));
        System_linkCreate(gVdecModuleContext.ipcBitsInRTOSId,&ipcBitsInVideoPrm,sizeof(ipcBitsInVideoPrm)); 

    Delete those two lines. Also check your application on how it is freeing buffers received from Venc_getBitstreamBuffer API

  • I delete those two lines and my app use Venc_releaseBitstreamBuffer in VcapVencVdecVdis_ipcBitsProcessFullBufs to free buffers.

    That is origin code in rdk. I also add some printf in it like this:

    static Void *VcapVencVdecVdis_ipcBitsRecvFxn(Void * prm)
    {
    VcapVencVdecVdis_IpcBitsCtrl *ipcBitsCtrl = (VcapVencVdecVdis_IpcBitsCtrl *) prm;
    VcapVencVdecVdis_IpcBitsCtrlThrObj *thrObj = &ipcBitsCtrl->thrObj;
    VcapVencVdecVdis_IpcBitsCtrlFileObj *fObj = &ipcBitsCtrl->fObj;
    UInt32 printStatsInterval = OSA_getCurTimeInMsec();
    UInt32 elaspedTime;

    printf("---------- %s ---------- 11 thrObj->exitBitsInThread %d\n", __func__, thrObj->exitBitsInThread);

    while (FALSE == thrObj->exitBitsInThread)
    {
    printf("---------- %s ---------- 111\n", __func__);
    OSA_semWait(&thrObj->bitsInNotifySem,OSA_TIMEOUT_FOREVER);
    printf("---------- %s ---------- 222\n", __func__);
    VcapVencVdecVdis_ipcBitsProcessFullBufs(thrObj,
    fObj,
    ipcBitsCtrl->decInfo);
    printf("---------- %s ---------- 333\n", __func__);
    elaspedTime = OSA_getCurTimeInMsec() - printStatsInterval;

    if (elaspedTime >= 10000)
    {
    #if 1
    printf("---------- %s ---------- 444\n", __func__);
    VcapVencVdecVdis_printAvgStatistics(elaspedTime, TRUE);
    printf("---------- %s ---------- 555\n", __func__);
    #endif

    printStatsInterval = OSA_getCurTimeInMsec();
    }

    printf("---------- %s ----------\n", __func__);
    }
    return NULL;
    }

    and

    Void VcapVencVdecVdis_ipcBitsInCbFxn (Ptr cbCtx)
    {
    VcapVencVdecVdis_IpcBitsCtrl *app_ipcBitsCtrl;
    static Int printInterval;
    OSA_printf("111 ------------ %s\n", __func__);
    OSA_assert(cbCtx = &gVcapVencVdecVdis_ipcBitsCtrl);
    app_ipcBitsCtrl = cbCtx;
    OSA_printf("222 ------------ %s\n", __func__);
    OSA_semSignal(&app_ipcBitsCtrl->thrObj.bitsInNotifySem);
    OSA_printf("333 ------------ %s\n", __func__);
    #ifdef IPC_BITS_DEBUG
    if ((printInterval % MCFW_IPCBITS_INFO_PRINT_INTERVAL) == 0)
    {
    OSA_printf("MCFW_IPCBITS: Callback function:%s",__func__);
    }
    #endif
    printInterval++;

    }

    It looks like the func VcapVencVdecVdis_ipcBitsInCbFxn is not work right, am I correct ? I don't know why.

    The full log:

    root@ENCODER_03500005:/opt/dvr_rdk/ti816x# ./run.sh 
    
     =========
     Main Menu
     =========
    
     1: VCAP + VENC + VDEC + VDIS  - Progressive SD Encode + Decode
     2: VCAP + VENC        + VDIS  - SD Encode ONLY
     3: VCAP + VENC        + VDIS  - HD Encode ONLY
     4:               VDEC + VDIS  - SD/HD Decode ONLY
    
     e: Exit
    
     Enter Choice: 1
    ------------ 1
    ------------- 2
    ------------ 4
    ------------------- 3
    --------------- CHANNEL DETAILS-------------
    Capture Channels => 4
    Enc Channels => Primary 4, Secondary 4
    ---------------- osd 0 scd 0 5
    -------------------------------------------
     0: SYSTEM: System Common Init in progress !!!
     0: SYSTEM: IPC init in progress !!!
     15: SYSTEM: CPU [DSP] syslink proc ID is [0] !!!
     15: SYSTEM: CPU [VIDEO-M3] syslink proc ID is [1] !!!
     15: SYSTEM: CPU [VPSS-M3] syslink proc ID is [2] !!!
     15: SYSTEM: CPU [HOST] syslink proc ID is [3] !!!
     15: SYSTEM: Creating MsgQ Heap [IPC_MSGQ_MSG_HEAP_3] ...
     17: SYSTEM: Creating MsgQ [HOST_MSGQ] ...
     19: SYSTEM: Creating MsgQ [HOST_ACK_MSGQ] ...
     21: SYSTEM: Opening MsgQ [DSP_MSGQ] ...
     21: SYSTEM: Opening MsgQ [VIDEO-M3_MSGQ] ...
     22: SYSTEM: Opening MsgQ [VPSS-M3_MSGQ] ...
     23: SYSTEM: Notify register to [DSP] line 0, event 15 ... 
     24: SYSTEM: Notify register to [VIDEO-M3] line 0, event 15 ... 
     24: SYSTEM: Notify register to [VPSS-M3] line 0, event 15 ... 
     25: SYSTEM: IPC init DONE !!!
     26: SYSTEM: Creating ListMP [HOST_IPC_OUT_24] in region 0 ...
     28: SYSTEM: Creating ListMP [HOST_IPC_IN_24] in region 0 ...
     30: SYSTEM: ListElem Shared Addr = 0x40771d00
     31: SYSTEM: Creating ListMP [HOST_IPC_OUT_25] in region 0 ...
     33: SYSTEM: Creating ListMP [HOST_IPC_IN_25] in region 0 ...
     35: SYSTEM: ListElem Shared Addr = 0x4078f800
     36: SYSTEM: Creating ListMP [HOST_IPC_OUT_19] in region 0 ...
     39: SYSTEM: Creating ListMP [HOST_IPC_IN_19] in region 0 ...
     40: SYSTEM: ListElem Shared Addr = 0x407ad300
     41: SYSTEM: Creating ListMP [HOST_IPC_OUT_20] in region 0 ...
     44: SYSTEM: Creating ListMP [HOST_IPC_IN_20] in region 0 ...
     45: SYSTEM: ListElem Shared Addr = 0x407d0b80
     46: SYSTEM: Creating ListMP [HOST_IPC_OUT_21] in region 0 ...
     49: SYSTEM: Creating ListMP [HOST_IPC_IN_21] in region 0 ...
     50: SYSTEM: ListElem Shared Addr = 0x407f4400
     67: SYSTEM: System Common Init Done !!!
     
     Enable file write (YES - y / NO - n) : y
     
     File write ENABLED !!!
     
    
    
     [host] 111 ------------ VcapVencVdecVdis_ipcBitsInit
     
     Enter file write path : /etc/shm
     
     Selected file write path [/etc/shm] 
     
    
    
     [host] Partition Free Size for Path[/etc/shm/VBITS_HDR_0.bin] = [0xE49F9900]
    
     [host] Max File size per channel:0x3927E64-------------- hh 111
    
    
     [host] MCFW_IPCBITS:VcapVencVdecVdis_ipcBitsSendFxn:Entered...-------------- hh 222
    ---------- VcapVencVdecVdis_ipcBitsRecvFxn ---------- 11 thrObj->exitBitsInThread 0
    ---------- VcapVencVdecVdis_ipcBitsRecvFxn ---------- 111
     [FBDEV] 
     [FBDEV] FB: Starting !!!
     [FBDEV] FB: Opened device [/dev/fb0] (fd=213) !!!
     [FBDEV] 
     [FBDEV] Fix Screen Info
     [FBDEV] ---------------
     [FBDEV] Line Length - 2560
     [FBDEV] Physical Address = 8cc00000
     [FBDEV] Buffer Length = 8294400
     [FBDEV] 
     [FBDEV] 
     [FBDEV] Var Screen Info
     [FBDEV] ---------------
     [FBDEV] Xres - 1280
     [FBDEV] Yres - 720
     [FBDEV] Xres Virtual - 1280
     [FBDEV] Yres Virtual - 720
     [FBDEV] Bits Per Pixel - 16
     [FBDEV] Pixel Clk - 6734
     [FBDEV] Rotation - 0
     [FBDEV] 
     [FBDEV] 
     [FBDEV] Reg Params Info
     [FBDEV] ---------------
     [FBDEV] region 0, postion 0 x 0, prioirty 1
     [FBDEV] first 1, last 1
     [FBDEV] sc en 0, sten en 0
     [FBDEV] tran en 0, type 0, key 0
     [FBDEV] blend 0, alpha 0
     [FBDEV] bb en 0, alpha 0
     [FBDEV] 
     [FBDEV] 
     [FBDEV] ### BUF SIZE = 1843200 Bytes !!! 
     [FBDEV] 
     [FBDEV] 
     [FBDEV] Fix Screen Info
     [FBDEV] ---------------
     [FBDEV] Line Length - 2560
     [FBDEV] Physical Address = 8cc00000
     [FBDEV] Buffer Length = 8294400
     [FBDEV] 
     [FBDEV] 
     [FBDEV] Var Screen Info
     [FBDEV] ---------------
     [FBDEV] Xres - 1280
     [FBDEV] Yres - 720
     [FBDEV] Xres Virtual - 1280
     [FBDEV] Yres Virtual - 720
     [FBDEV] Bits Per Pixel - 16
     [FBDEV] Pixel Clk - 6734
     [FBDEV] Rotation - 0
     [FBDEV] 
     [FBDEV] 
     [FBDEV] Reg Params Info
     [FBDEV] ---------------
     [FBDEV] region 0, postion 0 x 0, prioirty 1
     [FBDEV] first 1, last 1
     [FBDEV] sc en 0, sten en 0
     [FBDEV] tran en 0, type 0, key 0
     [FBDEV] blend 0, alpha 0
     [FBDEV] bb en 0, alpha 0
     [FBDEV] 
     [FBDEV] 
     [FBDEV] ### BUF SIZE = 1843200 Bytes !!! 
     [FBDEV] 
     [FBDEV] grpx_fb_draw ... 
     [FBDEV] grpx_fb_draw ... Done !!! 
     [FBDEV] FB: Start DONE !!!
     [FBDEV] 
    
    ********* Entered usecase 4CH <816x> Enc/Dec OSD Disabled SCD Disabled 
    
     4516: MCFW  : CPU Revision [ES2.0] !!! 
     4516: MCFW  : Detected [(null)] Board !!! 
     4516: MCFW  : Base Board Revision [DVR] !!! 
     4516: MCFW  : Daughter Card Revision [DVR] !!! 
     VCAP: DEVICE-0 (0x58): Chip ID 0x5158, Rev 0x0002, Firmware 0x0000 !!!
     VCAP: DEVICE-0 (0x58): Detected video (720x240@59Hz, 1) !!!
     TVP5158: 0x58: Downloading patch ... 
     TVP5158: 0x58: Downloading patch ... DONE !!!
     TVP5158: 0x58: 5158:0002:0302
     [m3vpss ]  2348315: CAPTURE: Create in progress !!!
     [m3vpss ]  2348345: CAPTURE: VIP1 PortA capture mode is [ 8-bit, Pixel-mux Embedded Sync] !!! 
     [m3vpss ]  UTILS: DMA: Allocated CH (TCC) = 58 (58)
     [m3vpss ]  UTILS: DMA: 0 of 4: Allocated PaRAM = 58 (0x49004740)
     [m3vpss ]  UTILS: DMA: 1 of 4: Allocated PaRAM = 64 (0x49004800)
     [m3vpss ]  UTILS: DMA: 2 of 4: Allocated PaRAM = 65 (0x49004820)
     [m3vpss ]  UTILS: DMA: 3 of 4: Allocated PaRAM = 66 (0x49004840)
     [m3vpss ] CAPTURE::HEAPID:0	USED:328
     [m3vpss ] CAPTURE::HEAPID:4	USED:17713152
     [m3vpss ]  2348408: CAPTURE: Create Done !!!
     [m3vpss ]  2348408: DEI    : Create in progress !!!
     [m3vpss ]  2348600: DEI     : Loading Up-scaling Co-effs
     [m3vpss ]  2348601: DEI     : Co-effs Loading ... DONE !!!
     [m3vpss ] DEI:HEAPID:0	USED:64
     [m3vpss ] DEI:HEAPID:1	USED:9984
     [m3vpss ] DEI:HEAPID:4	USED:41395200
     [m3vpss ]  2348601: DEI    : Create Done !!!
     [m3vpss ]  2348601: NSF: Create in progress !!!
     [m3vpss ] ------------ 0 5
     [m3video]  2348661: IPC_IN_M3   : Create in progress !!!
     [m3video]  2348661: SYSTEM: Opening ListMP [VPSS-M3_IPC_OUT_0] ...
     [m3video]  2348661: SYSTEM: Opening ListMP [VPSS-M3_IPC_IN_0] ...
     [m3vpss ] NSF::HEAPID:0	USED:128
     [m3video]  2348663: IPC_IN_M3   : Create Done !!!
     [m3vpss ] NSF::HEAPID:1	USED:9152
     [m3video]  2348663: ENCODE: Create in progress ... !!!
     [m3vpss ] NSF::HEAPID:4	USED:12165120
     [m3video] --------- EncLink_codecCreate 12
     [m3vpss ]  2348658: NSF: Create Done !!!
     [m3video] ENCLINK:INFO: !!!Number of output buffers for ch[8] set to [1]
     [m3vpss ]  2348659: MERGE   : Create Done !!!
     [m3vpss ]  2348660: IPC_OUT_M3   : Create in progress !!!
     [m3vpss ]  2348661: IPC_OUT_M3   : Create Done !!!
     [m3video]  2348701: ENCODE: Creating CH0 of 704 x 480, pitch = (704, 704) [PROGRESSIVE] [NON-TILED  ], bitrate = 2000 Kbps ... 
     [m3video] ---------  enclink_codec_set_ch_alg_default_dynamic_params chId 0 9
     [m3video] ENCLINK_H264:HEAPID:0	USED:13888
     [m3video] ENCLINK_H264:HEAPID:3	USED:2244608
     [m3video]  2348713: ENCODE: Creating CH1 of 704 x 480, pitch = (704, 704) [PROGRESSIVE] [NON-TILED  ], bitrate = 2000 Kbps ... 
     [m3video] ---------  enclink_codec_set_ch_alg_default_dynamic_params chId 1 9
     [m3video] ENCLINK_H264:HEAPID:0	USED:11912
     [m3video] ENCLINK_H264:HEAPID:3	USED:1511424
     [m3video]  2348721: ENCODE: Creating CH2 of 704 x 480, pitch = (704, 704) [PROGRESSIVE] [NON-TILED  ], bitrate = 2000 Kbps ... 
     [m3video] ---------  enclink_codec_set_ch_alg_default_dynamic_params chId 2 9
    
    
     [host] IpcBitsInLink_tskMain:Entered
    
     [host]  8715: IPC_BITS_IN   : Create in progress !!!
    
    
     [host]  8715: IPC_BITS_IN   : ListMPOpen start !!!
    
    
     [host]  8715: SYSTEM: Opening ListMP [VIDEO-M3_IPC_OUT_24] ...
     8716: SYSTEM: Opening ListMP [VIDEO-M3_IPC_IN_24] ...
    
    
     [host]  8718: IPC_BITS_IN   : ListMPOpen done !!!
    
    
     [host]  8719: IPC_BITS_IN   : System_linkGetInfo done !!!
    
    
     [host]  8719: IPC_BITS_IN   : Create Done !!!
    
    
    ========bitsProducerLinkInfo============
    numQ 1, numCh 12
    Ch [0] Width 704, Height 480
    Ch [1] Width 704, Height 480
    Ch [2] Width 704, Height 480
    Ch [3] Width 704, Height 480
    Ch [4] Width 352, Height 240
    Ch [5] Width 352, Height 240
    Ch [6] Width 352, Height 240
    Ch [7] Width 352, Height 240
    Ch [8] Width 704, Height 480
    Ch [9] Width 704, Height 480
    Ch [10] Width 704, Height 480
    Ch [11] Width 704, Height 480
    
    ====================
    
    Reducing bitsProducerLinkInfo.numCh to 4
     [m3vpss ]  2348767: CAPTURE: Start in progress !!!
     [m3video] ENCLINK_H264:HEAPID:0	USED:11912
     [m3vpss ]  2348767: CAPTURE: Start Done !!!
     [m3video] ENCLINK_H264:HEAPID:3	USED:1511424
     [m3video]  2348729: ENCODE: Creating CH3 of 704 x 480, pitch = (704, 704) [PROGRESSIVE] [NON-TILED  ], bitrate = 2000 Kbps ... 
     [m3video] ---------  enclink_codec_set_ch_alg_default_dynamic_params chId 3 9
     [m3video] ENCLINK_H264:HEAPID:0	USED:11912
     [m3video] ENCLINK_H264:HEAPID:3	USED:1511424
     [m3video]  2348737: ENCODE: Creating CH4 of 352 x 240, pitch = (352, 352) [PROGRESSIVE] [NON-TILED  ], bitrate = 500 Kbps ... 
     [m3video] ---------  enclink_codec_set_ch_alg_default_dynamic_params chId 4 9
     [m3video] ENCLINK_H264:HEAPID:0	USED:11912
     [m3video] ENCLINK_H264:HEAPID:3	USED:503808
     [m3video]  2348741: ENCODE: Creating CH5 of 352 x 240, pitch = (352, 352) [PROGRESSIVE] [NON-TILED  ], bitrate = 500 Kbps ... 
     [m3video] ---------  enclink_codec_set_ch_alg_default_dynamic_params chId 5 9
     [m3video] ENCLINK_H264:HEAPID:0	USED:11912
     [m3video] ENCLINK_H264:HEAPID:3	USED:503808
     [m3video]  2348744: ENCODE: Creating CH6 of 352 x 240, pitch = (352, 352) [PROGRESSIVE] [NON-TILED  ], bitrate = 500 Kbps ... 
     [m3video] ---------  enclink_codec_set_ch_alg_default_dynamic_params chId 6 9
     [m3video] ENCLINK_H264:HEAPID:0	USED:11912
     [m3video] ENCLINK_H264:HEAPID:3	USED:503808
     [m3video]  2348748: ENCODE: Creating CH7 of 352 x 240, pitch = (352, 352) [PROGRESSIVE] [NON-TILED  ], bitrate = 500 Kbps ... 
     [m3video] ---------  enclink_codec_set_ch_alg_default_dynamic_params chId 7 9
     [m3video] ENCLINK_H264:HEAPID:0	USED:11912
     [m3vpss ]  2348867: CAPTURE: Enabled Time Stamping !!!
     [m3video] ENCLINK_H264:HEAPID:3	USED:503808
     [m3video]  2348751: ENCODE: Creating CH8 of 704 x 480, pitch = (704, 704) [PROGRESSIVE] [NON-TILED  ], bitrate = 100 Kbps ... 
     [m3video] ---------  enclink_codec_set_ch_alg_default_dynamic_params chId 8 24
     [m3video] ENCLINK_JPEG:HEAPID:0	USED:2064
     [m3video]  2348752: ENCODE: Creating CH9 of 704 x 480, pitch = (704, 704) [PROGRESSIVE] [NON-TILED  ], bitrate = 100 Kbps ... 
     [m3video] ---------  enclink_codec_set_ch_alg_default_dynamic_params chId 9 24
     [m3video] ENCLINK_JPEG:HEAPID:0	USED:2064
     [m3video]  2348753: ENCODE: Creating CH10 of 704 x 480, pitch = (704, 704) [PROGRESSIVE] [NON-TILED  ], bitrate = 100 Kbps ... 
     [m3video] ---------  enclink_codec_set_ch_alg_default_dynamic_params chId 10 24
     
     DEMO: Received event VSYS_EVENT_VIDEO_DETECT [0x0000]
     [m3video] ENCLINK_JPEG:HEAPID:0	USED:2064
     [m3video]  2348753: ENCODE: Creating CH11 of 704 x 480, pitch = (704, 704) [PROGRESSIVE] [NON-TILED  ], bitrate = 100 Kbps ... 
     [m3video] ---------  enclink_codec_set_ch_alg_default_dynamic_params chId 11 24
     
     DEMO:  0: Detected video at CH [0,0] (720x240@59Hz, 1)!!!
     DEMO:  1: No video detected at CH [0,1] !!!
     DEMO:  2: No video detected at CH [0,2] !!!
     DEMO:  3: No video detected at CH [0,3] !!!
     
    
     =============
     Run-Time Menu
     =============
    
     1: Capture Settings
     2: Encode  Settings
     3: Decode  Settings
     4: Display Settings
     5: Audio Capture <TVP5158> & Encode <AAC-LC, G711> demo
     6: Change Playback Channel <valid only if capture/playback is active>
     7: Audio encode demo <File In/Out>
     8: Audio decode demo <File In/Out>
    
     i: Print detailed system information
     s: Core Status: Active/In-active
     f: Switch IVA Channel Map
    
     e: Stop Demo
    
     Enter Choice: 
    
     [host] 111 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 222 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 333 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    ---------- VcapVencVdecVdis_ipcBitsRecvFxn ---------- 222
     [m3video] ENCLINK_JPEG:HEAPID:0	USED:2064
     [m3video]  2348754: ENCODE: All CH Create ... DONE !!!
    
    
     [host] 111 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 222 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 333 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
     [m3video] ENCLINK:HEAPID:0	USED:105648
     [m3video] ENCLINK:HEAPID:2	USED:7568896
     [m3video] ENCLINK:HEAPID:3	USED:8794112
     [m3video]  2348756: ENCODE: Create ... DONE !!!
     [m3video]  2348756: IPC_BITS_OUT   : Create in progress !!!
    
    
     [host] 111 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 222 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 333 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 111 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 222 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 333 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
     [m3video]  2348758: IPC_BITS_OUT   : Create Done !!!
    
    
     [host] 111 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 222 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 333 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 111 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 222 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 333 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 111 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 222 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 333 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 111 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 222 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 333 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 111 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 222 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 333 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 111 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 222 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 333 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 111 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 222 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 333 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 111 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 222 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 333 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 111 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 222 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
    
     [host] 333 ------------ VcapVencVdecVdis_ipcBitsInCbFxn
    
     
     DEMO: Received event VSYS_EVENT_VIDEO_DETECT [0x0000]
     
     DEMO:  0: Detected video at CH [0,0] (720x240@59Hz, 1)!!!
     DEMO:  1: No video detected at CH [0,1] !!!
     DEMO:  2: No video detected at CH [0,2] !!!
     DEMO:  3: No video detected at CH [0,3] !!!
     
    
     =============
     Run-Time Menu
     =============
    
     1: Capture Settings
     2: Encode  Settings
     3: Decode  Settings
     4: Display Settings
     5: Audio Capture <TVP5158> & Encode <AAC-LC, G711> demo
     6: Change Playback Channel <valid only if capture/playback is active>
     7: Audio encode demo <File In/Out>
     8: Audio decode demo <File In/Out>
    
     i: Print detailed system information
     s: Core Status: Active/In-active
     f: Switch IVA Channel Map
    
     e: Stop Demo
    
     Enter Choice: 

  • You should not use VcapVencVdecVdis_ipcBitsProcessFullBufs as there is no decoder. If you dont have decoder refer code in file /dvr_rdk/demos/mcfw_api_demos/mcfw_demo/demo_vcap_venc_vdis_bits_wr.c

    Since there is no decoder , VcapVencVdecVdis_ipcBitsProcessFullBufs() is blocked forever waiting for empty buffer from decoder to copy the encoder bitstream

  • I got you! It works now!

    Thanks a lot!