Hi,
We are currently making use of version rel-05_03_00_09. I am getting Rate-Control error as indicated by 0x2020c000. The same configuration worked for previous version of H264 Encoder that we used. Please let me know why this would happen. We are using low-delay configuration, i.e., IPP GOP.
Current H264 Encoder Version: 01.00.04
RC related parameters settings are mentioned below
/* select the rate control algorithm */ pEncStaticParams->rateControlParams.rcAlgo = IH264_RATECONTROL_DEFAULT; /* Qp Settings for I */ pEncStaticParams->rateControlParams.qpI = OMX_VIDENC_DEFAULT_QP_IFRAME; // 24 pEncStaticParams->rateControlParams.qpMaxI = OMX_VIDENC_DEFAULT_QPMAX_IFRAME; // 44 pEncStaticParams->rateControlParams.qpMinI = OMX_VIDENC_DEFAULT_QPMIN_IFRAME; // 8 /* Qp Settings for P */ pEncStaticParams->rateControlParams.qpP = OMX_VIDENC_DEFAULT_QP_PFRAME; // 24 pEncStaticParams->rateControlParams.qpMaxP = OMX_VIDENC_DEFAULT_QPMAX_PFRAME; // 44 pEncStaticParams->rateControlParams.qpMinP = OMX_VIDENC_DEFAULT_QPMIN_PFRAME; // 8 /* Qp Settings for B */ pEncStaticParams->rateControlParams.qpOffsetB = OMX_VIDENC_DEFAULT_QPOFFSET_BFRAME; // 4 pEncStaticParams->rateControlParams.qpMaxB = OMX_VIDENC_DEFAULT_QPMAX_BFRAME; // 44
pEncStaticParams->rateControlParams.qpMinB = OMX_VIDENC_DEFAULT_QPMIN_BFRAME; //8 /* Frame Skip */ pEncStaticParams->rateControlParams.allowFrameSkip = OMX_TRUE; /* Settings to remove the High Freq Coefficients */ pEncStaticParams->rateControlParams.removeExpensiveCoeff = OMX_FALSE; /* Chroma Qp Settings */ pEncStaticParams->rateControlParams.chromaQPIndexOffset = OMX_VIDENC_DEFAULT_QPOFFSET_CHROMA; /* Settings for the Quality Bias factor between I & P */ pEncStaticParams->rateControlParams.IPQualityFactor = IH264_QUALITY_FACTOR_DEFAULT; /* Set the Initial HRD Buffer Level; Set as suggested in Codec sample application */ pEncStaticParams->rateControlParams.initialBufferLevel = 2000000; /* Settings for Initial HRD Buffer Size */ pEncStaticParams->rateControlParams.HRDBufferSize = pEncStaticParams->rateControlParams.initialBufferLevel;
/* Reserved Parameters */ pEncStaticParams->rateControlParams.reservedRC[0] = 0; pEncStaticParams->rateControlParams.reservedRC[1] = 0; pEncStaticParams->rateControlParams.reservedRC[2] = 0;
According to SPRABA9, for VTC this should be set to false pEncStaticParams->rateControlParams.enablePRC = OMX_FALSE; //TRUE;
Appreciate your quick help on this.
Regards,
Nitish
Parameters are looking absolutely fine. Since you are using all the default settings , can you try setting rateControlParamPreset as default.
It should work in either way.
Regards
Deepak Poddar
Hi Deepak,
We are getting this strange problem again and again, we have tried many combinations.
We have disabled RateControl all together, but still we are getting 0x2000c000 error. The configurations both static and dynamic parameters used are listed below.
IH264ENC_Params->videnc2Params /////Videnc2Parameters pEncStaticParams->videnc2Params.size = 276 (sizeof IH264ENC_Params) pEncStaticParams->videnc2Params.encodingPreset = XDM_USER_DEFINED (3) pEncStaticParams->videnc2Params.rateControlPreset = IVIDEO_NONE (4} pEncStaticParams->videnc2Params.maxHeight = OMX_VIDENC_DEFAULT_FRAME_HEIGHT [1920] pEncStaticParams->videnc2Params.maxWidth = 1080 pEncStaticParams->videnc2Params.dataEndianness = XDM_BYTE [1] pEncStaticParams->videnc2Params.maxInterFrameInterval = [1] pEncStaticParams->videnc2Params.inputChromaFormat = XDM_YUV_420SP [9] pEncStaticParams->videnc2Params.inputContentType = IVIDEO_PROGRESSIVE; pEncStaticParams->videnc2Params.operatingMode = IVIDEO_ENCODE_ONLY; pEncStaticParams->videnc2Params.profile = IH264_HIGH_PROFILE ; pEncStaticParams->videnc2Params.level = OMX_H264VE_DEFAULT_LEVEL; pEncStaticParams->videnc2Params.inputDataMode = IVIDEO_ENTIREFRAME; pEncStaticParams->videnc2Params.outputDataMode = IVIDEO_ENTIREFRAME; pEncStaticParams->videnc2Params.numInputDataUnits = 1; pEncStaticParams->videnc2Params.numOutputDataUnits = 1; pEncStaticParams->maxIntraFrameInterval = 0x7fff; pEncStaticParams->videnc2Params.metadataType[0] = IVIDEO_METADATAPLANE_NONE; pEncStaticParams->videnc2Params.metadataType[1] = IVIDEO_METADATAPLANE_NONE; pEncStaticParams->videnc2Params.metadataType[2] = IVIDEO_METADATAPLANE_NONE; pEncStaticParams->videnc2Params.maxBitRate = -1; pEncStaticParams->videnc2Params.minBitRate = 0; ///////// Rate control parameters pEncStaticParams->rateControlParams.rateControlParamsPreset = IH264_RATECONTROLPARAMS_DEFAULT; pEncStaticParams->rateControlParams.scalingMatrixPreset = IH264_SCALINGMATRIX_DEFAULT; pEncStaticParams->rateControlParams.rcAlgo = IH264_RATECONTROL_DEFAULT; pEncStaticParams->rateControlParams.qpI = OMX_VIDENC_DEFAULT_QP_IFRAME; [25 ] pEncStaticParams->rateControlParams.qpMaxI = OMX_VIDENC_DEFAULT_QPMAX_IFRAME; [51] pEncStaticParams->rateControlParams.qpMinI = OMX_VIDENC_DEFAULT_QPMIN_IFRAME; [0 ] pEncStaticParams->rateControlParams.qpP = OMX_VIDENC_DEFAULT_QP_PFRAME; [25 ] pEncStaticParams->rateControlParams.qpMaxP = OMX_VIDENC_DEFAULT_QPMAX_PFRAME; [51] pEncStaticParams->rateControlParams.qpMinP = OMX_VIDENC_DEFAULT_QPMIN_PFRAME; [0 ] pEncStaticParams->rateControlParams.qpOffsetB = OMX_VIDENC_DEFAULT_QPOFFSET_BFRAME; [ 4] pEncStaticParams->rateControlParams.qpMaxB = OMX_VIDENC_DEFAULT_QPMAX_BFRAME; [51 ] pEncStaticParams->rateControlParams.qpMinB = OMX_VIDENC_DEFAULT_QPMIN_BFRAME; [0 ] pEncStaticParams->rateControlParams.allowFrameSkip = OMX_FALSE; pEncStaticParams->rateControlParams.removeExpensiveCoeff = OMX_FALSE; pEncStaticParams->rateControlParams.chromaQPIndexOffset = OMX_VIDENC_DEFAULT_QPOFFSET_CHROMA; [0] pEncStaticParams->rateControlParams.IPQualityFactor = IH264_QUALITY_FACTOR_DEFAULT; pEncStaticParams->rateControlParams.initialBufferLevel = 1250000 ;//12000000; pEncStaticParams->rateControlParams.HRDBufferSize = pEncStaticParams->rateControlParams.initialBufferLevel * 2; pEncStaticParams->rateControlParams.reservedRC[0] = 0; pEncStaticParams->rateControlParams.reservedRC[1] = 0; pEncStaticParams->rateControlParams.reservedRC[2] = 0; ///// Inter coding parameters pEncStaticParams->interCodingParams.interCodingPreset = IH264_INTERCODING_USERDEFINED ;// IH264_INTERCODING_DEFAULT; pEncStaticParams->interCodingParams.searchRangeHorP = 144; //OMX_VIDENC_DEFAULT_HORSEARCH_PFRAME; pEncStaticParams->interCodingParams.searchRangeVerP = 32; //OMX_VIDENC_DEFAULT_VERSEARCH_PFRAME; pEncStaticParams->interCodingParams.searchRangeHorB = 144 ;//OMX_VIDENC_DEFAULT_HORSEARCH_BFRAME; pEncStaticParams->interCodingParams.searchRangeVerB = 16;//OMX_VIDENC_DEFAULT_VERSEARCH_BFRAME; pEncStaticParams->interCodingParams.interCodingBias = IH264_BIASFACTOR_DEFAULT; pEncStaticParams->interCodingParams.skipMVCodingBias = IH264_BIASFACTOR_DEFAULT; pEncStaticParams->interCodingParams.minBlockSizeP = IH264_BLOCKSIZE_8x8;// IH264_BLOCKSIZE_DEFAULT; pEncStaticParams->interCodingParams.minBlockSizeB = IH264_BLOCKSIZE_8x8;// IH264_BLOCKSIZE_DEFAULT; /////// Intra coding parameters pEncStaticParams->intraCodingParams.intraCodingPreset = IH264_INTRACODING_USERDEFINED; // IH264_INTRACODING_DEFAULT; pEncStaticParams->intraCodingParams.lumaIntra4x4Enable = 0; pEncStaticParams->intraCodingParams.lumaIntra8x8Enable = 0x0FF; pEncStaticParams->intraCodingParams.lumaIntra16x16Enable = 0xF; pEncStaticParams->intraCodingParams.chromaIntra8x8Enable = 0xF; pEncStaticParams->intraCodingParams.chromaComponentEnable = IH264_CHROMA_COMPONENT_DEFAULT; pEncStaticParams->intraCodingParams.intraRefreshMethod = IH264_INTRAREFRESH_DEFAULT; pEncStaticParams->intraCodingParams.intraRefreshRate = 0; pEncStaticParams->intraCodingParams.constrainedIntraPredEnable = 0; ////// Nal unit control parameters pEncStaticParams->nalUnitControlParams.naluControlPreset = IH264_NALU_CONTROL_DEFAULT; pEncStaticParams->nalUnitControlParams.naluPresentMaskStartOfSequence = 0x01A0; pEncStaticParams->nalUnitControlParams.naluPresentMaskIDRPicture = 0x01A0; pEncStaticParams->nalUnitControlParams.naluPresentMaskIntraPicture = 0x0002; pEncStaticParams->nalUnitControlParams.naluPresentMaskNonIntraPicture = 0x0002; pEncStaticParams->nalUnitControlParams.naluPresentMaskEndOfSequence = 0x0; //// Slice coding parameters pEncStaticParams->sliceCodingParams.sliceCodingPreset = IH264_SLICECODING_USERDEFINED; //IH264_SLICECODING_DEFAULT; pEncStaticParams->sliceCodingParams.sliceMode = IH264_SLICEMODE_MBUNIT;//IH264_SLICEMODE_DEFAULT; pEncStaticParams->sliceCodingParams.sliceUnitSize = (8162/3); //IH264_SLICEMODE_DEFAULT; pEncStaticParams->sliceCodingParams.sliceStartOffset[0] = 0; pEncStaticParams->sliceCodingParams.sliceStartOffset[1] = 0; pEncStaticParams->sliceCodingParams.sliceStartOffset[2] = 0; pEncStaticParams->sliceCodingParams.streamFormat = IH264_STREAM_FORMAT_DEFAULT; ///// Loop filter parameters pEncStaticParams->loopFilterParams.loopfilterPreset = IH264_LOOPFILTER_DEFAULT; pEncStaticParams->loopFilterParams.loopfilterDisableIDC = IH264_DISABLE_FILTER_DEFAULT; pEncStaticParams->loopFilterParams.filterOffsetA = 0; pEncStaticParams->loopFilterParams.filterOffsetB = 0; ///// vUI Coding parameters pEncStaticParams->vuiCodingParams.vuiCodingPreset = IH264_VUICODING_DEFAULT; pEncStaticParams->vuiCodingParams.aspectRatioInfoPresentFlag = 0; pEncStaticParams->vuiCodingParams.aspectRatioIdc = 0; pEncStaticParams->vuiCodingParams.videoSignalTypePresentFlag = 0; pEncStaticParams->vuiCodingParams.videoFormat = IH264ENC_VIDEOFORMAT_NTSC; pEncStaticParams->vuiCodingParams.videoFullRangeFlag = 0; pEncStaticParams->vuiCodingParams.timingInfoPresentFlag = 0; //////////// Stereo Info parameters pEncStaticParams->stereoInfoParams.stereoInfoPreset = IH264_STEREOINFO_DISABLE; pEncStaticParams->stereoInfoParams.topFieldIsLeftViewFlag = 0; pEncStaticParams->stereoInfoParams.viewSelfContainedFlag = 0; /// FramePAcking SEI parameters pEncStaticParams->framePackingSEIParams.framePackingPreset = 0; ////// FMO coding parameters pEncStaticParams->fmoCodingParams.fmoCodingPreset = IH264_FMOCODING_DEFAULT; pEncStaticParams->fmoCodingParams.numSliceGroups = 1; pEncStaticParams->fmoCodingParams.sliceGroupMapType = IH264_SLICE_GRP_MAP_DEFAULT; pEncStaticParams->fmoCodingParams.sliceGroupChangeDirectionFlag = IH264ENC_SLICEGROUP_CHANGE_DIRECTION_DEFAULT; pEncStaticParams->fmoCodingParams.sliceGroupChangeRate = 0; pEncStaticParams->fmoCodingParams.sliceGroupChangeCycle = 0; pEncStaticParams->fmoCodingParams.sliceGroupParams[0] = 0;
pEncStaticParams->debugTraceLevel = 0; pEncStaticParams->pConstantMemory = NULL; pEncStaticParams->gopStructure = IH264ENC_GOPSTRUCTURE_UNIFORM ;// IH264ENC_GOPSTRUCTURE_NONUNIFORM; pEncStaticParams->entropyCodingMode = IH264_ENTROPYCODING_CABAC; pEncStaticParams->transformBlockSize = IH264_TRANSFORM_8x8; pEncStaticParams->log2MaxFNumMinus4 = 12; pEncStaticParams->picOrderCountType = IH264_POC_TYPE_0; pEncStaticParams->IDRFrameInterval = 0; pEncStaticParams->lastNFramesToLog = 0; pEncStaticParams->enableAnalyticinfo = 0 ; pEncStaticParams->enableGMVSei = 0 ; pEncStaticParams->constraintSetFlags = 0; pEncStaticParams->enableRCDO = 0; pEncStaticParams->enableLongTermRefFrame = 0 ; pEncStaticParams->reservedParams[0] = 0; pEncStaticParams->reservedParams[1] = 0; pEncStaticParams->reservedParams[2] = 0; //////////////////////////////////// Dynamic parameters////////////////////// /* Size */ pEncDynParams->videnc2DynamicParams.size = sizeof(IH264ENC_DynamicParams); pEncDynParams->videnc2DynamicParams.inputHeight = 1080; pEncDynParams->videnc2DynamicParams.inputWidth = 1920; pEncDynParams->videnc2DynamicParams.refFrameRate = 30000 ;// OMX_VIDENC_DEFAULT_FRAME_RATE; pEncDynParams->videnc2DynamicParams.targetFrameRate = 30000 ;//OMX_VIDENC_DEFAULT_FRAME_RATE; pEncDynParams->videnc2DynamicParams.targetBitRate = 2000000; pEncDynParams->videnc2DynamicParams.intraFrameInterval = 90; pEncDynParams->videnc2DynamicParams.generateHeader = XDM_ENCODE_AU [ 0 ]; pEncDynParams->videnc2DynamicParams.captureWidth = 1920; pEncDynParams->videnc2DynamicParams.forceFrame = IVIDEO_NA_FRAME; [ -1 ] pEncDynParams->videnc2DynamicParams.interFrameInterval = OMX_VIDENC_DEFAULT_INTERFRAME_INTERVAL; [ 1 ] pEncDynParams->videnc2DynamicParams.mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL; [2 ] pEncDynParams->videnc2DynamicParams.sampleAspectRatioHeight = OMX_VIDENC_DEFAULT_ASPECT_RATIO_HEIGHT; [1 ] pEncDynParams->videnc2DynamicParams.sampleAspectRatioWidth = OMX_VIDENC_DEFAULT_ASPECT_RATIO_WIDTH; [1 ] pEncDynParams->videnc2DynamicParams.ignoreOutbufSizeFlag = XDAS_TRUE; //XDAS_FALSE; pEncDynParams->videnc2DynamicParams.putDataFxn = NULL; pEncDynParams)->videnc2DynamicParams.putDataHandle = 0; pEncDynParams)->videnc2DynamicParams.getDataFxn = NULL; pEncDynParams)->videnc2DynamicParams.getDataHandle = 0; pEncDynParams)->rateControlParams.initialBufferLevel = 1250000; pEncDynParams)->rateControlParams.HRDBufferSize = 2500000; pEncDynParams)->rateControlParams.rateControlParamsPreset = IH264_RATECONTROLPARAMS_DEFAULT; [ 0] pEncDynParams)->rateControlParams.qpI = OMX_VIDENC_DEFAULT_QP_IFRAME; [25] pEncDynParams)->rateControlParams.qpMaxI = OMX_VIDENC_DEFAULT_QPMAX_IFRAME; [51] pEncDynParams)->rateControlParams.qpMinI = OMX_VIDENC_DEFAULT_QPMIN_IFRAME; [0] pEncDynParams)->rateControlParams.qpP = OMX_VIDENC_DEFAULT_QP_PFRAME; [25] pEncDynParams)->rateControlParams.qpMaxP = OMX_VIDENC_DEFAULT_QPMAX_PFRAME; [51 ] pEncDynParams)->rateControlParams.qpMinP = OMX_VIDENC_DEFAULT_QPMIN_PFRAME; [0 ] pEncDynParams)->rateControlParams.qpOffsetB = OMX_VIDENC_DEFAULT_QPOFFSET_BFRAME; [4 ] pEncDynParams)->rateControlParams.qpMaxB = OMX_VIDENC_DEFAULT_QPMAX_BFRAME; [51 ] pEncDynParams)->rateControlParams.qpMinB = OMX_VIDENC_DEFAULT_QPMIN_BFRAME; [ 0] pEncDynParams)->rateControlParams.allowFrameSkip = OMX_FALSE; pEncDynParams)->rateControlParams.removeExpensiveCoeff = OMX_FALSE; pEncDynParams)->rateControlParams.HRDBufferSize = 2500000; pEncDynParams)->rateControlParams.reservedRC[0] = 0; pEncDynParams)->rateControlParams.reservedRC[1] = 0; pEncDynParams)->rateControlParams.reservedRC[2] = 0; pEncDynParams)->interCodingParams.interCodingPreset = 1 ; pEncDynParams)->interCodingParams.searchRangeHorP = 144; pEncDynParams)->interCodingParams.searchRangeVerP = 32; pEncDynParams)->interCodingParams.searchRangeHorB = 144; pEncDynParams)->interCodingParams.searchRangeVerB = 16; pEncDynParams)->interCodingParams.interCodingBias = IH264_BIASFACTOR_DEFAULT; pEncDynParams)->interCodingParams.skipMVCodingBias = IH264_BIASFACTOR_DEFAULT; pEncDynParams)->interCodingParams.minBlockSizeP = 1; pEncDynParams)->interCodingParams.minBlockSizeB = 1; pEncDynParams)->sliceCodingParams.sliceCodingPreset = 1; pEncDynParams)->sliceCodingParams.sliceMode = 1; pEncDynParams)->sliceCodingParams.sliceUnitSize = 2720; pEncDynParams)->sliceCodingParams.sliceStartOffset[0] = 0; pEncDynParams)->sliceCodingParams.sliceStartOffset[1] = 0; pEncDynParams)->sliceCodingParams.sliceStartOffset[2] = 0; /* Set the XDAS_Int32 sliceGroupChangeCycle */ pEncDynParams)->sliceGroupChangeCycle = 0; pEncDynParams)->searchCenter.x = 0; pEncDynParams)->searchCenter.y = 0; pEncDynParams)->reservedDynParams[0] = 0; pEncDynParams)->reservedDynParams[1] = 0; pEncDynParams)->reservedDynParams[2] = 0; pEncDynParams)->reservedDynParams[3] = 0;
Do you see any issue with this?
Thanks,Nitish
As you are saying that you are using the version 01.00.04.00,
then you need to set following parameters also, but I am not seeing in your log
XDAS_Int8 numTemporalLayer ;
XDAS_Int8 referencePicMarking ;