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.

[DM8168] Rate-Control Parameter Error

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   ;

    please use default of encodingPreset, and with GET_STATUS XDM control call, get the value of create & dynamic structure and use that as base structure and then modify whatever you want to change on top of that. please also see the error bit toget idea which portion of structure has wrong settings.
    if problem doesnt get solved then share the memory dump of create & dynamic structure.
    Regards
    Deepak Poddar