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.

Does the Caplink conflict with the dei link?

Other Parts Discussed in Thread: TVP7002

Hi all

 

 Create error:

 

8: SYSTEM: System Common Init Done !!!
72: MCFW : CPU Revision [ES2.0] !!!
[m3vpss ] 114259: CAPTURE: Create in progress !!!
[m3vpss ] 114289: CAPTURE: VIP0 PortA capture mode is [16-bit, Non-mux Embedded Sync] !!!
[m3vpss ] Vps_captAllocPath passed
[m3vpss ] Vps_captCreateChObj passed
[m3vpss ] Vps_captCreateVip passed
[m3vpss ] Vps_captCreateQueues passed
[m3vpss ] Vps_captSubFrameInitArgs passed
[m3vpss ] Vps_captInitTimeStamp passed
[m3vpss ] 114605: CAPTURE: VIP1 PortA capture mode is [16-bit, Non-mux Embedded Sync] !!!
[m3vpss ] Vps_captAllocPath passed
[m3vpss ] Vps_captCreateChObj passed
[m3vpss ] Vps_captCreateVip passed
[m3vpss ] Vps_captCreateQueues passed
[m3vpss ] Vps_captSubFrameInitArgs passed
[m3vpss ] Vps_captInitTimeStamp passed
[m3vpss ] Vps_tvp7002Lock
[m3vpss ] Vps_tvp7002Unlock
[m3vpss ] Vps_tvp7002AllocObj
[m3vpss ] Vps_tvp7002LockObj
[m3vpss ] Vps_tvp7002Control,cmd = IOCTL_VPS_VIDEO_DECODER_GET_CHIP_ID
[m3vpss ] Vps_tvp7002UnlockObj
[m3vpss ] Vps_tvp7002LockObj
[m3vpss ] Vps_tvp7002Control,cmd = IOCTL_VPS_VIDEO_DECODER_GET_VIDEO_STATUS
[m3vpss ] Vps_tvp7002UnlockObj
[m3vpss ] 114812: CAPTURE: VIP 2: VID DEC 1025 (0x5c): 7002:0002:0000
[m3vpss ] 114812:CAPTURE: VIP-2:VID DEC 1025 (0x5c): Detected video (192x1125@125Hz, 1) !!!
[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:680
[m3vpss ] CAPTURE::HEAPID:4 USED:95385600
[m3vpss ] 114813: CAPTURE: Create Done !!!
[m3vpss ] Vps_tvp7002LockObj
[m3vpss ] Vps_tvp7002Control,cmd = IOCTL_VPS_VIDEO_DECODER_SET_VIDEO_MODE
[m3vpss ] Vps_tvp7002UnlockObj
[m3vpss ] 114817: DEI : Create in progress !!!
[m3vpss ] DeiLink_drvCreateOutObj,pObj->inQueInfo.numCh = 1
[m3vpss ] DEI: Ch 0, Outformat is PROGRESSIVE
[m3vpss ] 114837: DEI: OUT1: 0: Format: PROGRESSIVE, 0xb3f13c80, 704 x 576, 7 frames
[m3vpss ] 114838: DEI : Loading Down-scaling Co-effs
[m3vpss ] 114838: DEI : Co-effs Loading ... DONE !!!
[m3vpss ] DEI:HEAPID:0 USED:64
[m3vpss ] DEI:HEAPID:1 USED:4704
[m3vpss ] DEI:HEAPID:4 USED:4257792
[m3vpss ] 114839: DEI : Create Done !!!
[m3vpss ] 114839: IPC_FRAMES_OUT : Create in progress !!!
[m3vpss ] ---EricDebug:memleak-----IpcFramesOutLink_create---------------
[m3vpss ] 114841: IPC_FRAMES_OUT : Create Done !!!
[m3vpss ] 114918: DEI : Create in progress !!!
[m3vpss ] DeiLink_drvCreateOutObj,pObj->inQueInfo.numCh = 1
[m3vpss ] DEI: Ch 0, Outformat is PROGRESSIVE


837:!!!SLAVE CORE [VPSS-M3] DOWN!!!
SystemLink_copySlaveCoreExceptionContext:120
SystemLink_copySlaveCoreExceptionContext:127
SystemLink_handleSlaveCoreException:149
DEMO: VSYS_EVENT_SLAVE_CORE_EXCEPTION !!!


843:!!!SLAVE CORE DOWN!!!.EXCEPTION INFO DUMP

!!HW EXCEPTION ACTIVE (0/1): [0]

!!EXCEPTION CORE NAME : [VPSS-M3]

!!EXCEPTION TASK NAME : [DEI1 ]

!!EXCEPTION LOCATION : [links_m3vpss/dei/deiLink_drv.c:943]

!!EXCEPTION INFO : [pObj->fvidHandle != NULL]
[m3vpss ] 115019: DEI: OUT2: 0: Format: PROGRESSIVE, 0xb4323480, 1920 x 1080, 7 frames
[m3vpss ] 115020: Assertion @ Line: 943 in links_m3vpss/dei/deiLink_drv.c: pObj->fvidHandle != NULL : failed !!!

!!EXCEPTION CCS CRASH DUMP FORMAT FILE STORED @ ./CCS_CRASH_DUMP_VPSS-M3.txt
SystemLink_handleSlaveCoreException:154

  Link configure code:

gVcapModuleContext.captureId = SYSTEM_LINK_ID_CAPTURE;
gVcapModuleContext.deiId[1] = SYSTEM_LINK_ID_DEI_HQ_1;
gVcapModuleContext.deiId[0] = SYSTEM_LINK_ID_DEI_0;
capturePrm.numVipInst = 2;
capturePrm.outQueParams[0].nextLink = gVcapModuleContext.deiId[0];
capturePrm.outQueParams[1].nextLink = mergeId0;
capturePrm.outQueParams[2].nextLink = gVcapModuleContext.deiId[1];
capturePrm.tilerEnable = FALSE;
capturePrm.enableSdCrop = FALSE;
pCaptureInstPrm = &capturePrm.vipInst[0];
pCaptureInstPrm->vipInstId = (SYSTEM_CAPTURE_INST_VIP0_PORTA);
pCaptureInstPrm->videoDecoderId = 0;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_YUV422P;
pCaptureInstPrm->standard = SYSTEM_STD_1080P_30;
pCaptureInstPrm->videoIfMode = SYSTEM_CAPT_VIDEO_IF_MODE_16BIT;
pCaptureInstPrm->inScanFormat = SYSTEM_SF_PROGRESSIVE;
pCaptureInstPrm->videoCaptureMode = DEVICE_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_EMBEDDED_SYNC;
pCaptureInstPrm->numOutput = 2;

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

pCaptureOutPrm = &pCaptureInstPrm->outParams[1];
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV420SP_UV;//SYSTEM_DF_YUV422I_YUYV;
pCaptureOutPrm->scEnable = FALSE;
pCaptureOutPrm->outQueId = 1;


pCaptureInstPrm = &capturePrm.vipInst[1];
pCaptureInstPrm->vipInstId = SYSTEM_CAPTURE_INST_VIP1_PORTA;
pCaptureInstPrm->videoDecoderId = SYSTEM_DEVICE_VID_DEC_TVP7002_DRV;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_YUV422P;
pCaptureInstPrm->standard = SYSTEM_STD_1080I_60;
pCaptureInstPrm->videoIfMode = SYSTEM_CAPT_VIDEO_IF_MODE_16BIT;
pCaptureInstPrm->inScanFormat = SYSTEM_SF_INTERLACED;
pCaptureInstPrm->videoCaptureMode = DEVICE_CAPT_VIDEO_CAPTURE_MODE_SINGLE_CH_NON_MUX_EMBEDDED_SYNC;
pCaptureInstPrm->numOutput = 1;
pCaptureOutPrm = &pCaptureInstPrm->outParams[0];
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV422I_YUYV;
pCaptureOutPrm->scEnable = FALSE;
pCaptureOutPrm->scOutWidth = 1920;
pCaptureOutPrm->scOutHeight = 1080;
pCaptureOutPrm->outQueId = 2;

deiPrm0.inQueParams.prevLinkId = gVcapModuleContext.captureId;
deiPrm0.inQueParams.prevLinkQueId = 0;
deiPrm0.enableDeiForceBypass = TRUE;
deiPrm0.outQueParams[DEI_LINK_OUT_QUE_VIP_SC].nextLink = gVcapModuleContext.ipcFramesOutVpssId[1];//nullId;
deiPrm0.enableOut[DEI_LINK_OUT_QUE_VIP_SC] = TRUE;
deiPrm0.tilerEnable[DEI_LINK_OUT_QUE_VIP_SC] = FALSE;
deiPrm0.inputFrameRate[DEI_LINK_OUT_QUE_VIP_SC] = 30;
deiPrm0.outputFrameRate[DEI_LINK_OUT_QUE_VIP_SC] = 25;
deiPrm0.setVipScYuv422Format = FALSE;
deiPrm0.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].scaleMode = DEI_SCALE_MODE_ABSOLUTE;
deiPrm0.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].absoluteResolution.outWidth = 720;
deiPrm0.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].absoluteResolution.outHeight = 576;
for (chId=1; chId < DEI_LINK_MAX_CH; chId++)
deiPrm0.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][chId] = deiPrm0.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0];


deiPrm1.inQueParams.prevLinkId = gVcapModuleContext.captureId;
deiPrm1.inQueParams.prevLinkQueId = 2;
deiPrm1.outQueParams[DEI_LINK_OUT_QUE_VIP_SC].nextLink = mergeId0;
deiPrm1.enableOut[DEI_LINK_OUT_QUE_VIP_SC] = TRUE;
deiPrm1.tilerEnable[DEI_LINK_OUT_QUE_VIP_SC] = FALSE;
deiPrm1.comprEnable = FALSE;
deiPrm1.interlacedBypassMode = FALSE;
deiPrm1.setVipScYuv422Format = FALSE;
deiPrm1.inputDeiFrameRate = 60;
deiPrm1.outputDeiFrameRate = 60;
deiPrm1.inputFrameRate[DEI_LINK_OUT_QUE_VIP_SC] = 60;
deiPrm1.outputFrameRate[DEI_LINK_OUT_QUE_VIP_SC] = 30;
deiPrm1.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].scaleMode = DEI_SCALE_MODE_RATIO;
deiPrm1.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.widthRatio.numerator = 1;
deiPrm1.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.widthRatio.denominator = 1;
deiPrm1.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.heightRatio.numerator = 1;
deiPrm1.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0].ratio.heightRatio.denominator = 1;
for (chId=1; chId < DEI_LINK_MAX_CH; chId++)
deiPrm1.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][chId] = deiPrm1.outScaleFactor[DEI_LINK_OUT_QUE_VIP_SC][0];

     

  • You are using Dual Output in VIP0 capture. When Capture is doing dual output, VIP-Based M2M Operations cannot be used since all ports are occupied. Configure the VIP for single ch YUV422I output and Dup the output if required .

  • In my chain can't use duplink. the D1 picture from outQueId0 and 1080P picture from outQueId1 are processed asynchronous by different link. 

    I've used duplink before.  Sometimes the 1080P picutre was processed early, then the input of dei0 link isn't the orginal picture from capturelink.

      

  • Your configuration doesn't indicate you have D1 on capture OutQueId0 and 1080P on outQueId1. You are simply setting numOutputs to 2 and you have disabled VIP scaling for both outqueues. Whatever issue you faced must be some other issue. It is not due to dupLink. If there is delay in freeing frames to dupLink it will result in capture frame drop .

  • the capturelink doesn't do scale.   the size of the picture got from the capturelink outque are 1080P and 1080I. As the chain show in the fist post show.  the dei_0 link is used to downscale picture size to D1, dei_1 link is used to deinterlace.  

      the picture output from dei_0 will transmit to dsp alg0. alg0 need D1 size as input.   the picture output from merge link will transmit to dsp alg1,  alg1 need 1080P size as input.   the alg0 and alg1 need original picture output from VIP. 

     

  • If your alg1 cant process frames in realtime then you should set correct inputFrameRate:outFrameRate ratio so that alg receives only the fps that it can process. Additionally alg1 should DMA the input buffer and free the buffer immediately and do process in another low priority thread if you want to operate in non real time mode. Refer SCD implementation.

    Another option is to use SWMS link in 1x1 layout. SWMS will DMA input to output but this should be avoided because it will waste DDR bandwidth.