Quantcast
Channel: Processors
Viewing all articles
Browse latest Browse all 124457

Forum Post: RE: DVR RDK4.0 Interlaced encoding fieldPicture = 1 decoder report error

$
0
0

Hi Badri,

Thanks for the answer. But mid Aug is too late.

I want to display interlaced 60 fields on the dispaly. Do you have any suggestion for me?

 

Please see my source code below:

{

 

IpcFramesOutLinkHLOS_CreateParams ipcFramesOutHostPrm;

IpcFramesInLinkRTOS_CreateParams ipcFramesInVideoPrm;

 

EncLink_CreateParams encPrm;

 

IpcBitsOutLinkRTOS_CreateParams ipcBitsOutVideoPrm;

IpcBitsInLinkHLOS_CreateParams ipcBitsInHostPrm;

 

    IpcBitsOutLinkHLOS_CreateParams   ipcBitsOutHostPrm;

    IpcBitsInLinkRTOS_CreateParams    ipcBitsInVideoPrm;

    DecLink_CreateParams        decPrm;

    IpcLink_CreateParams        ipcOutVideoPrm;

    IpcLink_CreateParams        ipcInVpssPrm;

    static SwMsLink_CreateParams       swMsPrm[VDIS_DEV_MAX];

    DisplayLink_CreateParams    displayPrm[VDIS_DEV_MAX];

    UInt32 enableGrpx;

    Bool tilerEnable;

 

                Int i, j;

 

                UInt32 ipcFramesInVideoId, ipcFramesOutHostId;

                UInt32 ipcBitsOutVideoId, ipcBitsInHostId;

               

                Int32 FrameWidth, FrameHeight, FrameRate;

 

                Venc_get_resolution(&FrameWidth,&FrameHeight,&FrameRate);

                if( (FrameWidth > 1920) || (FrameHeight > 1080) || (0 == FrameWidth) || (0 == FrameHeight) )

                {

                    OSA_printf("ERROR: initVIDFrameBufs: invalid width/height: %d %d\n",FrameWidth,FrameHeight);

                                return;

                }

 

MULTICH_INIT_STRUCT(IpcFramesOutLinkHLOS_CreateParams,ipcFramesOutHostPrm);

MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams,ipcFramesInVideoPrm);

 

MULTICH_INIT_STRUCT(EncLink_CreateParams, encPrm);

 

MULTICH_INIT_STRUCT(IpcBitsOutLinkRTOS_CreateParams,ipcBitsOutVideoPrm);

MULTICH_INIT_STRUCT(IpcBitsInLinkHLOS_CreateParams,ipcBitsInHostPrm);

 

    MULTICH_INIT_STRUCT(IpcLink_CreateParams,ipcInVpssPrm);

    MULTICH_INIT_STRUCT(IpcLink_CreateParams,ipcOutVideoPrm);

    MULTICH_INIT_STRUCT(IpcBitsOutLinkHLOS_CreateParams,ipcBitsOutHostPrm);

    MULTICH_INIT_STRUCT(IpcBitsInLinkRTOS_CreateParams,ipcBitsInVideoPrm);

    MULTICH_INIT_STRUCT(DecLink_CreateParams, decPrm);

    for (i = 0; i < VDIS_DEV_MAX;i++)

    {

        MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm[i]);

        MULTICH_INIT_STRUCT(SwMsLink_CreateParams ,swMsPrm[i]);

    }

 

ipcFramesOutHostId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0;

ipcFramesInVideoId = SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_IN_0;

 

ipcBitsOutVideoId = SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0;

ipcBitsInHostId = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;

 

    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

    );

 

gVencModuleContext.encId            = SYSTEM_LINK_ID_VENC_0;

gVencModuleContext.ipcBitsInHLOSId   = SYSTEM_HOST_LINK_ID_IPC_BITS_IN_0;

gVencModuleContext.ipcBitsOutRTOSId = SYSTEM_VIDEO_LINK_ID_IPC_BITS_OUT_0;

gVencModuleContext.ipcM3OutId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0;

gVencModuleContext.ipcM3InId = SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_IN_0;

 

#if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)

    enableGrpx   = FALSE;

#else

    enableGrpx   = TRUE;

#endif

 

    tilerEnable  = FALSE;

 

    if (tilerEnable == FALSE)

    {

        /* Disable tiler allocator for this usecase

         * for that tiler memory can be reused for

         * non-tiled allocation

         */

        SystemTiler_disableAllocator();

    }

 

 

/**

* IPC Frames OUT (A8)

* */

ipcFramesOutHostPrm.baseCreateParams.outQueParams[0].nextLink = ipcFramesInVideoId;

ipcFramesOutHostPrm.baseCreateParams.notifyNextLink = TRUE;

ipcFramesOutHostPrm.baseCreateParams.notifyPrevLink = TRUE;

ipcFramesOutHostPrm.baseCreateParams.noNotifyMode = FALSE;

ipcFramesOutHostPrm.baseCreateParams.numOutQue = 1;

ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkId = SYSTEM_LINK_ID_INVALID;

ipcFramesOutHostPrm.inQueInfo.numCh = gVencModuleContext.vencConfig.numPrimaryChn;

 

 

for (i=0; i<gVencModuleContext.vencConfig.numPrimaryChn; i++)

{

ipcFramesOutHostPrm.inQueInfo.chInfo[i].width = FrameWidth; //CH_WIDTH;

#ifdef INTERLACED_ENCODING

ipcFramesOutHostPrm.inQueInfo.chInfo[i].height = FrameHeight/2;

#else

ipcFramesOutHostPrm.inQueInfo.chInfo[i].height = FrameHeight;

#endif

ipcFramesOutHostPrm.inQueInfo.chInfo[i].bufType = 0; // NOT USED

ipcFramesOutHostPrm.inQueInfo.chInfo[i].codingformat = 0; // NOT USED

ipcFramesOutHostPrm.inQueInfo.chInfo[i].dataFormat = SYSTEM_DF_YUV420SP_UV; //0x07; //FVID2_DF_YUV420SP_UV

#ifdef INTERLACED_ENCODING

ipcFramesOutHostPrm.inQueInfo.chInfo[i].scanFormat = SYSTEM_SF_INTERLACED;

#else

ipcFramesOutHostPrm.inQueInfo.chInfo[i].scanFormat = SYSTEM_SF_PROGRESSIVE; //progressive

#endif

ipcFramesOutHostPrm.inQueInfo.chInfo[i].memType = 0; // zzs change from 1 to NON_TILED MEM

ipcFramesOutHostPrm.inQueInfo.chInfo[i].startX = 0; // NOT USED

ipcFramesOutHostPrm.inQueInfo.chInfo[i].startY = 0; // NOT USED

ipcFramesOutHostPrm.inQueInfo.chInfo[i].pitch[0] = FrameWidth;//16384; //CH_WIDTH;

ipcFramesOutHostPrm.inQueInfo.chInfo[i].pitch[1] = FrameWidth;//32768; //CH_WIDTH;

ipcFramesOutHostPrm.inQueInfo.chInfo[i].pitch[2] = 0; // NOT USED

}

 

/**

* IPC Frames OUT (A8) to IPC Frames IN (Video)

* */

ipcFramesInVideoPrm.baseCreateParams.noNotifyMode = FALSE;

ipcFramesInVideoPrm.baseCreateParams.notifyNextLink = TRUE;

ipcFramesInVideoPrm.baseCreateParams.notifyPrevLink = TRUE;

ipcFramesInVideoPrm.baseCreateParams.inQueParams.prevLinkId = ipcFramesOutHostId;

ipcFramesInVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;

ipcFramesInVideoPrm.baseCreateParams.outQueParams[0].nextLink = gVencModuleContext.encId;

 

/**

* IPC Frames IN (Video) to Encoder

* */

{

        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_BUF_PER_CH;

        encPrm.numBufPerCh[1] = NUM_BUF_PER_CH;

 

                                pLinkDynPrm = NULL;

        /* Primary Stream Params - 1080p */

        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;

#ifdef INTERLACED_ENCODING

                                                pLinkChPrm->fieldMergeEncodeEnable  = FALSE; //zzs change from FALSE for interlaced encoding test;

#else                                    

            pLinkChPrm->fieldMergeEncodeEnable  = FALSE;

#endif

            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;

 

                                                printf("GVenc i %d inputFrameRate: %d\n",i, pLinkDynPrm->targetBitRate);

        }

#if 1

                                printf("GVenc numSecondaryChn: %d\n", gVencModuleContext.vencConfig.numSecondaryChn);

        /* 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;

                                                printf("GVencsec i %d,j %d inputFrameRate: %d\n",i,j, pLinkDynPrm->targetBitRate);

        }

 

                                printf("GVenc left: %d\n", gVencModuleContext.vencConfig.numPrimaryChn + gVencModuleContext.vencConfig.numSecondaryChn);

        /* 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;

        }

#endif

                               

 

encPrm.inQueParams.prevLinkId = ipcFramesInVideoId;

encPrm.inQueParams.prevLinkQueId= 0;

encPrm.outQueParams.nextLink = ipcBitsOutVideoId;

 

OSA_printf("encPrm: %d %d %d %d %d %d %d %d %d %d\n",

                                pLinkDynPrm->intraFrameInterval,

                                pLinkDynPrm->targetBitRate,

                                pLinkDynPrm->mvAccuracy,

                                pLinkDynPrm->inputFrameRate,

                                pLinkDynPrm->rcAlg,

                                pLinkDynPrm->qpMin,

                                pLinkDynPrm->qpMax,

                                pLinkDynPrm->qpInit,

                                pLinkDynPrm->vbrDuration,

                                pLinkDynPrm->vbrSensitivity);

}

 

 

/**

* Encoder to ipcBitsOutVideo

**/

ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkId = gVencModuleContext.encId;

ipcBitsOutVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;

ipcBitsOutVideoPrm.baseCreateParams.numOutQue = 1;

ipcBitsOutVideoPrm.baseCreateParams.noNotifyMode = TRUE;

ipcBitsOutVideoPrm.baseCreateParams.notifyPrevLink = TRUE;

ipcBitsOutVideoPrm.baseCreateParams.notifyNextLink = FALSE;

ipcBitsOutVideoPrm.baseCreateParams.outQueParams[0].nextLink = ipcBitsInHostId;

/**

* ipcBitsOutVideo to

**/

{

VENC_CALLBACK_S *callback;

Ptr cbCtx;                           

ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkId = ipcBitsOutVideoId;

ipcBitsInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;

ipcBitsInHostPrm.baseCreateParams.notifyNextLink = FALSE;

ipcBitsInHostPrm.baseCreateParams.notifyPrevLink = FALSE;

ipcBitsInHostPrm.baseCreateParams.noNotifyMode = TRUE;

//ipcBitsInHostPrm.baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;

Venc_getCallbackInfo(&callback, &cbCtx);

               

ipcBitsInHostPrm.cbFxn = callback->newDataAvailableCb;

ipcBitsInHostPrm.cbCtx = cbCtx;

}

 

System_linkCreate(ipcFramesOutHostId,&ipcFramesOutHostPrm,sizeof(ipcFramesOutHostPrm));

System_linkCreate(ipcFramesInVideoId,&ipcFramesInVideoPrm,sizeof(ipcFramesInVideoPrm));

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

sleep(2);

System_linkCreate(ipcBitsOutVideoId, &ipcBitsOutVideoPrm, sizeof(ipcBitsOutVideoPrm));

System_linkCreate(ipcBitsInHostId, &ipcBitsInHostPrm, sizeof(ipcBitsInHostPrm));

 

 

 

 

 

 

 

 

 

    gVdecModuleContext.ipcBitsOutHLOSId = SYSTEM_HOST_LINK_ID_IPC_BITS_OUT_0;

    gVdecModuleContext.ipcBitsInRTOSId  = SYSTEM_VIDEO_LINK_ID_IPC_BITS_IN_0;

    gVdecModuleContext.decId            = SYSTEM_LINK_ID_VDEC_0;

 

    gMultiCh_VdecVdisObj.ipcOutVideoId  = SYSTEM_VIDEO_LINK_ID_IPC_OUT_M3_0;

    gMultiCh_VdecVdisObj.ipcInVpssId    = SYSTEM_VPSS_LINK_ID_IPC_IN_M3_0;

 

                gVdisModuleContext.swMsId[0]        = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;

    gVdisModuleContext.displayId[0]     = SYSTEM_LINK_ID_DISPLAY_0; // ON AND OFF CHIP HDMI

 

 

    ipcBitsOutHostPrm.baseCreateParams.outQueParams[0].nextLink= gVdecModuleContext.ipcBitsInRTOSId;

    ipcBitsOutHostPrm.baseCreateParams.notifyNextLink       = FALSE;

    ipcBitsOutHostPrm.baseCreateParams.notifyPrevLink       = FALSE;

    ipcBitsOutHostPrm.baseCreateParams.noNotifyMode         = TRUE;

    ipcBitsOutHostPrm.baseCreateParams.numOutQue            = 1;

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

 

    for (i=0; i<ipcBitsOutHostPrm.inQueInfo.numCh; i++)

    {

        ipcBitsOutHostPrm.inQueInfo.chInfo[i].width =

            gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoWidth;

 

        ipcBitsOutHostPrm.inQueInfo.chInfo[i].height =

            gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoHeight;

 

#ifdef INTERLACED_ENCODING

        ipcBitsOutHostPrm.inQueInfo.chInfo[i].scanFormat =

            SYSTEM_SF_INTERLACED;

#else

        ipcBitsOutHostPrm.inQueInfo.chInfo[i].scanFormat =

            SYSTEM_SF_PROGRESSIVE;

#endif                  

 

        ipcBitsOutHostPrm.inQueInfo.chInfo[i].bufType        = 0; // NOT USED

        ipcBitsOutHostPrm.inQueInfo.chInfo[i].codingformat   = 0; // NOT USED

        ipcBitsOutHostPrm.inQueInfo.chInfo[i].dataFormat     = 0; // NOT USED

        ipcBitsOutHostPrm.inQueInfo.chInfo[i].memType        = 0; // NOT USED

        ipcBitsOutHostPrm.inQueInfo.chInfo[i].startX         = 0; // NOT USED

        ipcBitsOutHostPrm.inQueInfo.chInfo[i].startY         = 0; // NOT USED

        ipcBitsOutHostPrm.inQueInfo.chInfo[i].pitch[0]       = 0; // NOT USED

        ipcBitsOutHostPrm.inQueInfo.chInfo[i].pitch[1]       = 0; // NOT USED

        ipcBitsOutHostPrm.inQueInfo.chInfo[i].pitch[2]       = 0; // NOT USED

 

        ipcBitsOutHostPrm.maxQueueDepth[i] = MAX_BUFFERING_QUEUE_LEN_PER_CH;

        ipcBitsOutHostPrm.chMaxReqBufSize[i] =

                (ipcBitsOutHostPrm.inQueInfo.chInfo[i].width * ipcBitsOutHostPrm.inQueInfo.chInfo[i].height);

        ipcBitsOutHostPrm.totalBitStreamBufferSize [i] =

                (ipcBitsOutHostPrm.chMaxReqBufSize[i] * BIT_BUF_LENGTH_LIMIT_FACTOR_HD);

 

    }

 

    ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkId    = gVdecModuleContext.ipcBitsOutHLOSId;

    ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;

    ipcBitsInVideoPrm.baseCreateParams.outQueParams[0].nextLink  = gVdecModuleContext.decId;

    ipcBitsInVideoPrm.baseCreateParams.noNotifyMode              = TRUE;

    ipcBitsInVideoPrm.baseCreateParams.notifyNextLink            = TRUE;

    ipcBitsInVideoPrm.baseCreateParams.notifyPrevLink            = FALSE;

    ipcBitsInVideoPrm.baseCreateParams.numOutQue                 = 1;

 

    for (i=0; i<ipcBitsOutHostPrm.inQueInfo.numCh; i++)

    {

        if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_H264)

            decPrm.chCreateParams[i].format                 = IVIDEO_H264HP;

        else if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_MPEG4)

            decPrm.chCreateParams[i].format                 = IVIDEO_MPEG4ASP;

        else if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_MJPEG)

            decPrm.chCreateParams[i].format                 = IVIDEO_MJPEG;

 

        decPrm.chCreateParams[i].numBufPerCh

                         = gVdecModuleContext.vdecConfig.decChannelParams[i].numBufPerCh;

        decPrm.chCreateParams[i].profile                = IH264VDEC_PROFILE_ANY;

        decPrm.chCreateParams[i].displayDelay

                         = gVdecModuleContext.vdecConfig.decChannelParams[i].displayDelay;

        decPrm.chCreateParams[i].dpbBufSizeInFrames = IH264VDEC_DPB_NUMFRAMES_AUTO;

        if (gVdecModuleContext.vdecConfig.decChannelParams[i].fieldPicture)

        {

            OSA_printf("MULTICH_VDEC_VDIS:INFO ChId[%d] configured for field picture\n",i);

            decPrm.chCreateParams[i].processCallLevel   = VDEC_FIELDLEVELPROCESSCALL;

        }

        else

        {

            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;

        if (FALSE == tilerEnable)

        {

                decPrm.chCreateParams[i].tilerEnable = FALSE;

        }

        else

        {

                decPrm.chCreateParams[i].tilerEnable = gVdecModuleContext.vdecConfig.decChannelParams[i].tilerEnable;

        }

    }

 

    decPrm.inQueParams.prevLinkId       = gVdecModuleContext.ipcBitsInRTOSId;

    decPrm.inQueParams.prevLinkQueId    = 0;

    decPrm.outQueParams.nextLink        = gMultiCh_VdecVdisObj.ipcOutVideoId;

 

    ipcOutVideoPrm.inQueParams.prevLinkId    = gVdecModuleContext.decId;

    ipcOutVideoPrm.inQueParams.prevLinkQueId = 0;

    ipcOutVideoPrm.outQueParams[0].nextLink     = gMultiCh_VdecVdisObj.ipcInVpssId;

    ipcOutVideoPrm.notifyNextLink            = TRUE;

    ipcOutVideoPrm.notifyPrevLink            = TRUE;

    ipcOutVideoPrm.numOutQue                 = 1;

 

    ipcInVpssPrm.inQueParams.prevLinkId    = gMultiCh_VdecVdisObj.ipcOutVideoId;

    ipcInVpssPrm.inQueParams.prevLinkQueId = 0;

    ipcInVpssPrm.notifyNextLink            = TRUE;

    ipcInVpssPrm.notifyPrevLink            = TRUE;

    ipcInVpssPrm.numOutQue                 = 1;

 

 

    ipcInVpssPrm.outQueParams[0].nextLink   = gVdisModuleContext.swMsId[0];

 

 

    swMsPrm[0].numSwMsInst = 1;

    swMsPrm[0].swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_DEIHQ_SC_NO_DEI;

 

    swMsPrm[0].swMsInstStartWin[0]  = 0;

    swMsPrm[0].swMsInstStartWin[1]  = 10;

 

    swMsPrm[1].numSwMsInst = 1;

    swMsPrm[1].swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_DEI_SC_NO_DEI;

 

    swMsPrm[1].swMsInstStartWin[0]  = 0;

    swMsPrm[1].swMsInstStartWin[1]  = 10;

 

    swMsPrm[0].enableProcessTieWithDisplay = TRUE;

    swMsPrm[1].enableProcessTieWithDisplay = FALSE;

 

    /* We do not require dual output, this free up SC3 scalar */

    swMsPrm[0].includeVipScInDrvPath = FALSE;

    swMsPrm[1].includeVipScInDrvPath = FALSE;

 

 

    for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++)

    {

#ifdef OUTPUT_HDMI

        VDIS_DEV vdDevId = VDIS_DEV_HDMI;

#else

        VDIS_DEV vdDevId = VDIS_DEV_DVO2;        //zzs

#endif

        swMsPrm[i].inQueParams.prevLinkId     = gMultiCh_VdecVdisObj.ipcInVpssId;

        swMsPrm[i].inQueParams.prevLinkQueId  = 0;

        swMsPrm[i].outQueParams.nextLink      = gVdisModuleContext.displayId[i];

        swMsPrm[i].numOutBuf                 = MULTICH_NUM_SWMS_MAX_BUFFERS;

 

        /* Disable inQue drop at SwMs as input may arrive very fast in VDEC->VDIS use case */

        swMsPrm[i].maxInputQueLen             = SYSTEM_SW_MS_INVALID_INPUT_QUE_LEN;

        if (i == 0)

        {

#ifdef OUTPUT_HDMI

            vdDevId = VDIS_DEV_HDMI;

#else

                                                vdDevId = VDIS_DEV_DVO2;      //zzs

#endif

            swMsPrm[i].maxOutRes              = VSYS_STD_1080P_60;

            swMsPrm[i].initOutRes             = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDMI].resolution;

        }

        else if (i == 1)

        {

            vdDevId = VDIS_DEV_SD;

            swMsPrm[i].maxOutRes              = VSYS_STD_PAL;

            swMsPrm[i].outQueParams.nextLink  = SYSTEM_LINK_ID_DISPLAY_2;

            swMsPrm[i].initOutRes             = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;

 

        }

        /* low cost line skip mode of scaling can be used, when tiler is off */

        if(tilerEnable)

            swMsPrm[i].lineSkipMode           = FALSE;

        else

            swMsPrm[i].lineSkipMode           = TRUE;

 

        swMsPrm[i].enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;

 

        MultiCh_swMsGetDefaultLayoutPrm(vdDevId, &swMsPrm[i], FALSE);    /* both from 0-16 chnl */

 

        displayPrm[i].inQueParams[0].prevLinkId    = gVdisModuleContext.swMsId[i];

        displayPrm[i].inQueParams[0].prevLinkQueId = 0;

        displayPrm[i].displayRes                = swMsPrm[i].initOutRes;

        if (i == 1)

#if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)

                        displayPrm[i].displayRes            = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;

#else

                        displayPrm[i].displayRes            = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_DVO2].resolution;

#endif

        mulich_vdec_vdis_set_avsync_prm(&gMultiCh_VdecVdisObj.avsyncCfg[i],i,vdDevId);

    }

 

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

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

    System_linkCreate(gVdecModuleContext.decId, &decPrm, sizeof(decPrm));

 

    System_linkCreate(gMultiCh_VdecVdisObj.ipcOutVideoId, &ipcOutVideoPrm, sizeof(ipcOutVideoPrm));

    System_linkCreate(gMultiCh_VdecVdisObj.ipcInVpssId  , &ipcInVpssPrm, sizeof(ipcInVpssPrm));

 

 

    for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++)

        System_linkCreate(gVdisModuleContext.swMsId[i]  , &swMsPrm[i], sizeof(swMsPrm[i]));

 

    for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++)

        System_linkCreate(gVdisModuleContext.displayId[i], &displayPrm[i], sizeof(displayPrm[i]));

 

 

    MultiCh_memPrintHeapStatus();

    {

#ifdef OUTPUT_HDMI

        MultiCh_setDec2DispMap(VDIS_DEV_HDMI,gVdecModuleContext.vdecConfig.numChn,0,0);

#else

        MultiCh_setDec2DispMap(VDIS_DEV_DVO2,gVdecModuleContext.vdecConfig.numChn,0,0);           //zzs

#endif

        #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)

        MultiCh_setDec2DispMap(VDIS_DEV_SD,gVdecModuleContext.vdecConfig.numChn,0,0);

        #else

        MultiCh_setDec2DispMap(VDIS_DEV_HDCOMP,gVdecModuleContext.vdecConfig.numChn,0,0);

        #endif

   }

 

 

}

 

 

 


Viewing all articles
Browse latest Browse all 124457

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>