Other Parts Discussed in Thread: TVP5158
Dear All:
I'm now using 8168 to capture PAL and encode them into 264 format file. The software I'm using is RDK 3.0.
The chain is like this:
capture -> ipcout_vpss -> ipcin_video -> encode ....
I set the input video format to be VSYS_STD_576I, and the setting of the above links is like this:
capturePrm.tilerEnable = FALSE;
capturePrm.numBufsPerCh = 16;
capturePrm.numExtraBufs = 0;
capturePrm.maxBlindAreasPerCh = 0;
capturePrm.isPalMode = TRUE;
capturePrm.enableSdCrop = FALSE;
capturePrm.doCropInCapture = FALSE;
for(i=0; i<capturePrm.numVipInst; i++)
{
vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA + 2*i;
pCaptureInstPrm = &capturePrm.vipInst[i];
pCaptureInstPrm->vipInstId = vipInstId%SYSTEM_CAPTURE_INST_MAX;
pCaptureInstPrm->videoDecoderId = SYSTEM_DEVICE_VID_DEC_SII9233A_DRV + 1;
pCaptureInstPrm->inDataFormat = SYSTEM_DF_YUV422P;
pCaptureInstPrm->standard = chainsCfg->displayRes[i];
pCaptureInstPrm->numOutput = 1;
pCaptureInstPrm->numChPerOutput = 1;
pCaptureInstPrm->frameCaptureMode = FALSE; //o
pCaptureInstPrm->fieldsMerged = FALSE; //o
pCaptureOutPrm = &pCaptureInstPrm->outParams[0];
pCaptureOutPrm->dataFormat = SYSTEM_DF_YUV420SP_UV; //o
pCaptureOutPrm->scEnable = FALSE;
pCaptureOutPrm->scOutWidth = gChains_ctrl.channelConf[i].width;
pCaptureOutPrm->scOutHeight = gChains_ctrl.channelConf[i].height;
pCaptureOutPrm->outQueId = 0;
}
capturePrm.outQueParams[0].nextLink = ipcOutVpssId;
capturePrm.outQueParams[1].nextLink = ipcOutVpssId;
System_linkCreate(captureId, &capturePrm, sizeof(capturePrm));
for (i=0; i<gChains_ctrl.channelNum; i++) {
chainsCfg->displayRes[i] = capturePrm.vipInst[i].standard;
Vsys_getResSize(chainsCfg->displayRes[i], &chainsCfg->channelConf[i].width, &chainsCfg->channelConf[i].height);
Vsys_getResRate(chainsCfg->displayRes[i], &chainsCfg->channelConf[i].frameRate);
}
ipcOutVpssPrm.inQueParams.prevLinkId = captureId;
ipcOutVpssPrm.inQueParams.prevLinkQueId = 0;
ipcOutVpssPrm.numOutQue = 1;
ipcOutVpssPrm.numChPerOutQue[0] = 1;
ipcOutVpssPrm.outQueParams[0].nextLink = ipcInVideoId;
ipcOutVpssPrm.notifyNextLink = TRUE;
ipcOutVpssPrm.notifyPrevLink = FALSE;
ipcOutVpssPrm.noNotifyMode = FALSE;
ipcOutVpssPrm.numChPerOutQue[0] = 0;
ipcOutVpssPrm.equallyDivideChAcrossOutQues = FALSE;
ipcInVideoPrm.inQueParams.prevLinkId = ipcOutVpssId;
ipcInVideoPrm.inQueParams.prevLinkQueId = 0;
ipcInVideoPrm.numOutQue = 1;
ipcInVideoPrm.numChPerOutQue[0] = 2;
ipcInVideoPrm.outQueParams[0].nextLink = encId;
ipcInVideoPrm.notifyNextLink = TRUE;
ipcInVideoPrm.notifyPrevLink = FALSE;
ipcInVideoPrm.noNotifyMode = FALSE;
ipcInVideoPrm.numChPerOutQue[0] = 0;
ipcInVideoPrm.equallyDivideChAcrossOutQues = FALSE;
gChains_ctrl.channelNum = 2;
for (i=0; i<gChains_ctrl.channelNum; i++)
{
encPrm.chCreateParams[i].format = chainsCfg->channelConf[i].encFormat;
encPrm.chCreateParams[i].profile = chainsCfg->channelConf[i].encProfile;
encPrm.chCreateParams[i].dataLayout = IVIDEO_FIELD_SEPARATED; //o
encPrm.chCreateParams[i].fieldMergeEncodeEnable = TRUE;
encPrm.chCreateParams[i].enableAnalyticinfo = FALSE;
encPrm.chCreateParams[i].enableWaterMarking = FALSE;
encPrm.chCreateParams[i].encodingPreset = XDM_USER_DEFINED;
encPrm.chCreateParams[i].rateControlPreset = IVIDEO_USER_DEFINED;
encPrm.chCreateParams[i].enableHighSpeed = FALSE;
encPrm.chCreateParams[i].defaultDynamicParams.interFrameInterval = 1;
encPrm.chCreateParams[i].defaultDynamicParams.intraFrameInterval = chainsCfg->channelConf[i].intraFrameInterval;
encPrm.chCreateParams[i].defaultDynamicParams.inputFrameRate = chainsCfg->channelConf[i].frameRate;
encPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate = chainsCfg->channelConf[i].encFrameRate;
encPrm.chCreateParams[i].defaultDynamicParams.targetBitRate = 4000000;
encPrm.chCreateParams[i].defaultDynamicParams.mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
encPrm.chCreateParams[i].defaultDynamicParams.rcAlg = chainsCfg->channelConf[i].rateCtrl;
encPrm.chCreateParams[i].defaultDynamicParams.qpMin = 0;
encPrm.chCreateParams[i].defaultDynamicParams.qpMax = 51;
encPrm.chCreateParams[i].defaultDynamicParams.qpInit = -1;
encPrm.chCreateParams[i].defaultDynamicParams.vbrDuration = 8;
encPrm.chCreateParams[i].defaultDynamicParams.vbrSensitivity = 0;
}
encPrm.inQueParams.prevLinkId = ipcInVideoId;
encPrm.inQueParams.prevLinkQueId= 0;
encPrm.outQueParams.nextLink = ipcBitsOutVideoId;
encPrm.numBufPerCh[0] = 0;
When I run the program, it outputs the following error:
207:!!!SLAVE CORE [VIDEO-M3] DOWN!!!
SystemLink_copySlaveCoreExceptionContext:146
mmap of [0xbe9c0000:36864]
mmap virt addresss:0x40069000
munmap of [0x40069000:36864]
SystemLink_copySlaveCoreExceptionContext:153
[m3video] 16920: ENCODE: Creating CH0 of 360 x 576, pitch = (384, 384) [INTERLACED ] [NON-TILED ], bitrate = 4000 Kbps ...
[m3vpss ] -----------_create before isUsed
[m3video] size=236,inputHeight=576,inputWidth=360,refFrameRate=25000,targetFrameRate=25000, targetBitRate=4000000, intraFrameInterval=25, interFrameInterval=1
[m3video] size=236,inputHeight=576,inputWidth=360,refFrameRate=25000,targetFrameRate=25000, targetBitRate=4000000, intraFrameInterval=25, interFrameInterval=1
[m3video] size=236,inputHeight=576,inputWidth=360,refFrameRate=25000,targetFrameRate=25000, targetBitRate=4000000, intraFrameInterval=25, interFrameInterval=1
[m3video] 16931:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_h264.c:[247]::INTERNAL ERROR:-1
[m3video] ALGCONTROL FAILED:CMD:1
[m3video] ERROR: XDM_UNSUPPORTEDPARAM = 14,
[m3video] ERROR: XDM_FATALERROR = 15
[m3video] ERROR: IH264ENC_UNSUPPORTED_VIDENC2DYNAMICPARAMS = 30,
[m3vpss ] -----------_create find 100
[m3video]
[m3video] 16932:ERR::linkID:10000021::channelID:0::errorCode:-5::FileName:links_m3video/iva_enc/encLink_h264.c::linuNum:1336::errorCondition:(algStatus == XDM_EOK)
[m3video] ENCLINK_H264:HEAPID:0 USED:1896
[m3video] 16932: Assertion @ Line: 864 in links_m3video/iva_enc/encLink_common.c: retVal == ENC_LINK_S_SUCCESS : failed !!!
It seems that the encoder can't accept the parameter. So I think there is some mistake in the links' setting. Could you give me some hints?
Thanks!