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.

Problem with capturing from tvp5147m1(rdk3.5)

Other Parts Discussed in Thread: TVP5147M1, TVP5147, TVP5158

Hello, Dear Experts!

I have Mistral DM8148-EVM and rdk 3.5 and I try to capture video from tvp5147m1 from composite "in".
I created chain as:

  captureId -> Nsf -> DEI -> ipcFramesOutVpss -> ipcFramesInHost
 
I define callback function in "ipcFramesInHostPrm" in which I write yuv frame to file.

Because of evm-bord haven't tvp5158 I use own settings for tvp5147m1! I set up tvp5147 as

10-bit 4:2:2 (pixel x 2 rate) with embedded syncs (ITU-R BT.656)

My code is:


........

    CaptureLink_CreateParams        capturePrm;


    IpcFramesOutLinkRTOS_CreateParams ipcFramesOutVpssPrm;

    IpcFramesInLinkHLOS_CreateParams ipcFramesInHostPrm;

    NsfLink_CreateParams        nsfPrm;
    DeiLink_CreateParams        deiPrm;

    CaptureLink_VipInstParams *pCaptureInstPrm;
    CaptureLink_OutParams     *pCaptureOutPrm;

    UInt32 i;

    VCAP_DEVICE_CREATE_PARAM_S vidDecVideoModeArgs[1/*NUM_CAPTURE_DEVICES*/];




    gVcapModuleContext.captureId = SYSTEM_LINK_ID_CAPTURE;
    gVcapModuleContext.nullSrcId = SYSTEM_VPSS_LINK_ID_NULL_SRC_0;
    gVcapModuleContext.nsfId[0] = SYSTEM_LINK_ID_NSF_0;
    gVcapModuleContext.deiId[0] = SYSTEM_LINK_ID_DEI_HQ_0;
    gVcapModuleContext.ipcFramesOutVpssId[0] = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_OUT_0;
    gVcapModuleContext.ipcFramesInHostId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_0;



    MULTICH_INIT_STRUCT(CaptureLink_CreateParams, capturePrm);
    MULTICH_INIT_STRUCT(NsfLink_CreateParams, nsfPrm);
    MULTICH_INIT_STRUCT(DeiLink_CreateParams, deiPrm);
    MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams, ipcFramesOutVpssPrm);
    MULTICH_INIT_STRUCT(IpcFramesInLinkHLOS_CreateParams,  ipcFramesInHostPrm);


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


    /*capturePrm*/

    capturePrm.numVipInst               = 1;
    capturePrm.outQueParams[0].nextLink = gVcapModuleContext.nsfId[0];
    capturePrm.tilerEnable              = FALSE;
    capturePrm.enableSdCrop             = FALSE;
    capturePrm.fakeHdMode               = TRUE;
    capturePrm.isPalMode                = FALSE;
    capturePrm.maxBlindAreasPerCh       = 4;

    pCaptureInstPrm                     = &capturePrm.vipInst[0];
    pCaptureInstPrm->vipInstId          = SYSTEM_CAPTURE_INST_VIP1_PORTA; //VIN1[A]
    pCaptureInstPrm->inDataFormat       = SYSTEM_DF_YUV422P;
    pCaptureInstPrm->standard           = SYSTEM_STD_D1;//SYSTEM_STD_1080P_60;
    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;



    Vcap_configVideoDecoder(vidDecVideoModeArgs, NUM_CAPTURE_DEVICES);



    nsfPrm.bypassNsf                 = FALSE;
    nsfPrm.tilerEnable               = FALSE;
    nsfPrm.inQueParams.prevLinkId    = gVcapModuleContext.captureId;
    nsfPrm.inQueParams.prevLinkQueId = 0;
    nsfPrm.numOutQue                 = 1;
    nsfPrm.outQueParams[0].nextLink  = gVcapModuleContext.deiId[0];


    /*dei param*/
    deiPrm.setVipScYuv422Format        = FALSE;
    deiPrm.inputDeiFrameRate           = 30;
    deiPrm.outputDeiFrameRate          = 30;
    deiPrm.enableDeiForceBypass        = TRUE;
    deiPrm.enableOut[DEI_LINK_OUT_QUE_DEI_SC] = TRUE;
    deiPrm.tilerEnable[DEI_LINK_OUT_QUE_DEI_SC] = FALSE;
    deiPrm.generateBlankOut[DEI_LINK_OUT_QUE_DEI_SC] = FALSE; //dropped



    int chId;
    for(chId=0; chId< 1; chId++)
    {

         //VIP Scalar ratio is 1:1
            deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][chId].scaleMode = DEI_SCALE_MODE_RATIO;
            deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][chId].ratio.widthRatio.numerator    = 1;
            deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][chId].ratio.widthRatio.denominator  = 1;
            deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][chId].ratio.heightRatio.numerator   = 1;
            deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][chId].ratio.heightRatio.denominator = 1;

    }
    deiPrm.inputFrameRate[DEI_LINK_OUT_QUE_DEI_SC]   = 30;
    deiPrm.outputFrameRate[DEI_LINK_OUT_QUE_DEI_SC]  = 30;
    deiPrm.numBufsPerCh[DEI_LINK_OUT_QUE_DEI_SC]     = 10;
    deiPrm.inQueParams.prevLinkId    = gVcapModuleContext.nsfId[0];
    deiPrm.inQueParams.prevLinkQueId = 0;
    deiPrm.outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink = gVcapModuleContext.ipcFramesOutVpssId[0];

    //frame out vpass 2
    ipcFramesOutVpssPrm.baseCreateParams.noNotifyMode = FALSE;
    ipcFramesOutVpssPrm.baseCreateParams.notifyNextLink = TRUE;
    ipcFramesOutVpssPrm.baseCreateParams.notifyPrevLink = TRUE;
    ipcFramesOutVpssPrm.baseCreateParams.notifyProcessLink = FALSE;
    ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.deiId[0];
    ipcFramesOutVpssPrm.baseCreateParams.inQueParams.prevLinkQueId = DEI_LINK_OUT_QUE_DEI_SC;
    ipcFramesOutVpssPrm.baseCreateParams.outQueParams[0].nextLink = gVcapModuleContext.ipcFramesInHostId;
    ipcFramesOutVpssPrm.baseCreateParams.numOutQue = 1;

    //frame in A8
    ipcFramesInHostPrm.baseCreateParams.noNotifyMode = FALSE;
    ipcFramesInHostPrm.baseCreateParams.notifyNextLink = TRUE;
    ipcFramesInHostPrm.baseCreateParams.notifyPrevLink = TRUE;
    ipcFramesInHostPrm.baseCreateParams.inQueParams.prevLinkId = gVcapModuleContext.ipcFramesOutVpssId[0];
    ipcFramesInHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
    ipcFramesInHostPrm.baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;
    ipcFramesInHostPrm.baseCreateParams.numOutQue   = 1;
    ipcFramesInHostPrm.cbCtx = gVcapModuleContext.callbackArg;
    ipcFramesInHostPrm.cbFxn = gVcapModuleContext.callbackFxn.newDataAvailableCb; //yuv_cb;


    //CREATE
    System_linkCreate(gVcapModuleContext.captureId, &capturePrm, sizeof(capturePrm));
    System_linkCreate(gVcapModuleContext.nsfId[0], &nsfPrm, sizeof(nsfPrm));
    System_linkCreate(gVcapModuleContext.deiId[0], &deiPrm, sizeof(deiPrm));
    System_linkCreate(gVcapModuleContext.ipcFramesOutVpssId[0], &ipcFramesOutVpssPrm, sizeof(ipcFramesOutVpssPrm));
    System_linkCreate(gVcapModuleContext.ipcFramesInHostId, &ipcFramesInHostPrm, sizeof(ipcFramesInHostPrm));


    Vcap_start();


...........


My output is :

...........


 [m3vpss ]  125267: CAPTURE: Create in progress !!!
 [m3vpss ]  125305: CAPTURE: VIP1 PortA capture mode is [16-bit, Non-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:45619200
 [m3vpss ]  125575: CAPTURE: Create Done !!!
 [m3vpss ]  125575: NSF: Create in progress !!!
 [m3vpss ] NSF::HEAPID:0        USED:128
 [m3vpss ] NSF::HEAPID:1        USED:4928
 [m3vpss ] NSF::HEAPID:4        USED:18800640
 [m3vpss ]  125698: NSF: Create Done !!!
 [m3vpss ]  125699: DEI    : Create in progress !!!
 [m3vpss ]  125861: DEI     : Loading Down-scaling Co-effs
 [m3vpss ]  125861: DEI     : Co-effs Loading ... DONE !!!

 [host] IpcFramesInLink_tskMain:Entered
 [host]  676: IPC_FRAMES_IN   : Create in progress !!!

 [host]  676: SYSTEM: Opening ListMP [VPSS-M3_IPC_OUT_19] ...
 679: SYSTEM: Opening ListMP [VPSS-M3_IPC_IN_19] ...

 [host]  683: IPC_FRAMES_IN   : Create Done !!!

 [host] Device_tvp5147OutputEnable ! [m3vpss ] DEI:HEAPID:0     USED:64
 [m3vpss ] DEI:HEAPID:1 USED:4048
 [m3vpss ] DEI:HEAPID:4 USED:24883200
 [m3vpss ]  125862: DEI    : Create Done !!!
 [m3vpss ]  125863: IPC_FRAMES_OUT   : Create in progress !!!
 [m3vpss ]  125865: IPC_FRAMES_OUT   : Create Done !!!
 [m3vpss ]  125875: CAPTURE: Start in progress !!!
 [m3vpss ]  125875: CAPTURE: Start Done !!!
 [m3vpss ]  125975: CAPTURE: Enabled Time Stamping !!!

............


But I get wrong frame from analog camera!

Thank you!

  • The capture should be configured for 8bit embedded synch not 16 bit.Log shows capture is configured for 16 bit embedded synch.

    There is a problem with board layout on expansion IO daughter card. Check if the same issue is applicable in your case

    RE: DM816x data handling data from VIP1 to VPSS

    Also there is a bug fix in captureLink_drv.c to set correct width when using D1

    @@ -469,9 +469,9 @@ Int32 CaptureLink_drvCreateInst(CaptureLink_Obj * pObj, UInt16 instId)
             case FVID2_STD_D1:

                 if(pObj->createArgs.enableSdCrop)
    -                pInst->maxWidth = 352;
    +                pInst->maxWidth = 704;
                 else
    -                pInst->maxWidth = 360;
    +                pInst->maxWidth = 720;

                 if(pObj->isPalMode)