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!
