Hi, everyone:
I am using dvrrdk 3.0 to encode video of 720P, and I get H264 video stream from ipcBitsOutRTOSLink, but mostly IDR NALU's size is biger than 64K Byte, I want to know is there has some parameters of enclink control the H264 nalu size? the EncLink_ChSliceCodingParams can be use for control H264 nalu size or not?
H264 enclink use IVIDEO_H264BP,when I set EncLink_ChCreateParams and EncLink_ChSliceCodingParams as follow:
encPrm.chCreateParams[i].format = chainsCfg->chCfg[i].encFormat;
encPrm.chCreateParams[i].profile = IVIDEO_H264BP;//chainsCfg->chCfg[i].encProfile;
encPrm.chCreateParams[i].dataLayout = IVIDEO_FIELD_SEPARATED;
encPrm.chCreateParams[i].fieldMergeEncodeEnable = FALSE;
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->chCfg[i].intraFrameInterval;
encPrm.chCreateParams[i].defaultDynamicParams.inputFrameRate = chainsCfg->chCfg[i].inFrameRate;
encPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate = chainsCfg->chCfg[i].encFrameRate;
encPrm.chCreateParams[i].defaultDynamicParams.targetBitRate = chainsCfg->chCfg[i].bitRate;
encPrm.chCreateParams[i].defaultDynamicParams.mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
encPrm.chCreateParams[i].defaultDynamicParams.rcAlg = chainsCfg->chCfg[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;
EncLink_ChDynamicParams *dynamicParams = &encPrm.chCreateParams[i].defaultDynamicParams;
dynamicParams->intraCodingParams.intraCodingPreset = IH264_INTRACODING_USERDEFINED;
dynamicParams->intraCodingParams.intraRefreshMethod = IH264_INTRAREFRESH_GDR;
dynamicParams->intraCodingParams.intraRefreshRate = chainsCfg->chCfg[i].inFrameRate;
EncLink_ChSliceCodingParams *sliceCodingParams = &dynamicParams->sliceCodingParams;
sliceCodingParams->sliceCodingPreset = IH264_SLICECODING_USERDEFINED;//IH264_SLICECODING_DEFAULT;//
sliceCodingParams->streamFormat = IH264_BYTE_STREAM;
sliceCodingParams->sliceMode = IH264_SLICEMODE_BYTES;
sliceCodingParams->sliceUnitSize = 1024;
execute code will occurs error like this:
[m3video] 51084: ENCODE: Creating CH0 of 1280 x 720, pitch = (16384, 32768) [PROGRESSIVE] [TILED ], bitrate = 1000 Kbps ...
[m3video] ENCLINK_H264:HEAPID:0 USED:11912
[m3video] ENCLINK_H264:HEAPID:3 USED:65536
[m3video] 51087: ENCODE: Creating CH1 of 1280 x 720, pitch = (16384, 32768) [PROGRESSIVE] [TILED ], bitrate = 1000 Kbps ...
[m3video] 51089:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_h264.c:[234]::INTERNAL ERROR:-1
[m3video] ALGCONTROL FAILED:CMD:1
[m3video] ERROR: XDM_UNSUPPORTEDPARAM = 14,
[m3video] ERROR: XDM_FATALERROR = 15
[m3video] ERROR: IH264ENC_UNSUPPORTED_SLICECODINGPARAMS = 25,
[m3video]
[m3video] 51089:ERR::linkID:10000021::channelID:1::errorCode:-5::FileName:links_m3video/iva_enc/encLink_h264.c::linuNum:1338::errorCondition:(algStatus == XDM_EOK)
[m3video] 51091: Assertion @ Line: 861 in links_m3video/iva_enc/encLink_common.c: retVal == ENC_LINK_S_SUCCESS : failed !!!
anyone knows why, and give me some advices, thanks a lot.