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.

DM365 codec setting issue

Expert 1060 points

Dear experts.

now I'm using DM365 + mt9p031.

I have some probleem to set the codec with 720p / h.264 / VBR.

 

I want to operate usually 2Mb/s and even the image is dynamic or noisy don't want to exceed 10Mb/s.

But if I film some dark place, the bitrate exceed 10 to 40 Mb/s.

so I change the rate control from VBR to CVBR, the symptom is same.

 

I use  following setting codec value.

version - H264ENC.version.02.30.00.06.wizardversion.0.5.3

pObj->dynamicParams_h264.initQ = 28;

pObj->dynamicParams_h264.rcAlgo     = 3;

pObj->dynamicParams.targetBitRate   = 0;
pObj->dynamicParams_h264.maxBitrateCVBR = 10000000;

pObj->dynamicParams_h264.maxHighCmpxIntCVBR = 1;

pObj->dynamicParams_h264.CVBRsensitivity     = 0;

pObj->dynamicParams_h264.CVBRminbitrate     = 0;

and the other setting use default value.

 

please give some advice not to exceed 10Mb bitrate.

 

Best regards.

Jay.

  • Dear Jay,

    Can you please set 

    pObj->dynamicParams.targetBitRate   = 2mbps; with

    pObj->dynamicParams_h264.maxBitrateCVBR = 10000000;


    If targetBitRate is set to 0(zero) RC will not get into effect (rcalgo will be OFF).

  • Dear Prashanth.

     

    You are right. targetBitRate is needed. but it do not operate what I want to do.

    Actually, I just want to set the H264 codec to VBR and not exceed to 10Mbps setting.

     

    For example, Mpeg4 don't need to set targetBitRate. so codec stream is 200kbps to 10Mbps depends on image quality. (if I set max to 10Mbps)

    but h264 need a targetbitRate and the bit rate just fix to targetbitrage. it is not variable.
     
    Could you please tell me how can i achieve the above example with h264. ( the bitrate is varible in the max bitrate )
     
    Best regards.
    Jay.
     
  • Dear Jay,

    Can you please share complete set of parameters which you are using for VBR mode?

  • Dear Prashanth ,


    Please check my codec value.
     
      pObj->params.maxFrameRate          = ALD_VID_ENC_MAX_FRAMERATE;
      pObj->params.maxBitRate            = ALD_VID_ENC_MAX_BITRATE;
      pObj->params.inputChromaFormat     = XDM_YUV_420SP;
      pObj->params.dataEndianness        = XDM_BYTE;
      pObj->params.maxInterFrameInterval = 1;
      pObj->params.inputContentType      = IVIDEO_PROGRESSIVE;
      pObj->params.reconChromaFormat     = XDM_YUV_420SP;
      pObj->params.rateControlPreset				= IVIDEO_USER_DEFINED;
      pObj->params_h264.profileIdc 					= 100;
      pObj->params_h264.levelIdc 					= IH264VENC_LEVEL_41;
      pObj->params_h264.Log2MaxFrameNumMinus4		= 0;
      pObj->params_h264.ConstraintSetFlag			= 0;
      pObj->params_h264.entropyMode 				= 1;
      pObj->params_h264.transform8x8FlagIntraFrame 	= 0;
      pObj->params_h264.transform8x8FlagInterFrame 	= 1;
      pObj->params_h264.enableVUIparams 			= 7;
      pObj->params_h264.meAlgo 						= 0;
      pObj->params_h264.seqScalingFlag 				= 1;
      pObj->params_h264.enableARM926Tcm 			= 0;
      pObj->params_h264.enableDDRbuff 				= 0;
      pObj->params_h264.EnableLongTermFrame			= 0;
      pObj->params_h264.outputDataMode 				= IH264VENC_TI_ENTIREFRAME;
      pObj->params_h264.sliceFormat					= IH264VENC_TI_BYTESTREAM;
      pObj->params.encodingPreset		= XDM_HIGH_SPEED;
      pObj->params_h264.encQuality 	= 3;
      pObj->params_h264.sliceMode = 0;
      pObj->createPrm.mbMvOutEnable		 = 1;
      pObj->createPrm.forceKeyFrame 	 = FALSE;
      
      pObj->dynamicParams.inputHeight         = pObj->createPrm.height;
      pObj->dynamicParams.inputWidth          = pObj->createPrm.width;
      pObj->dynamicParams.generateHeader      = XDM_ENCODE_AU;
      pObj->dynamicParams.captureWidth        = pObj->createPrm.offsetH;
      pObj->dynamicParams.targetFrameRate     = 30;
      pObj->dynamicParams.refFrameRate        = 30;
      pObj->dynamicParams.interFrameInterval  = 0;
      pObj->dynamicParams.mbDataFlag		  = XDAS_FALSE;
      pObj->dynamicParams.intraFrameInterval  				  	= 0;
      pObj->dynamicParams.forceFrame = IVIDEO_NA_FRAME;
    
      pObj->dynamicParams_h264.sliceSize  	= ((pObj->createPrm.height/16)*pObj->createPrm.packetsize)/100;
      pObj->dynamicParams_h264.airRate	  	= 0;
      pObj->dynamicParams_h264.intraFrameQP					  	= pObj->createPrm.qpinit;
      pObj->dynamicParams_h264.interPFrameQP				  	= pObj->createPrm.qpinit;
      pObj->dynamicParams_h264.initQ						  	= pObj->createPrm.qpinit;
      pObj->dynamicParams_h264.rcQMax						  	= 51;
      pObj->dynamicParams_h264.rcQMin						  	= 1;
      pObj->dynamicParams_h264.rcQMaxI						  	= 51;
      pObj->dynamicParams_h264.rcQMinI						  	= 1;       
      pObj->dynamicParams_h264.maxDelay						  	= 2000;
      pObj->dynamicParams_h264.aspectRatioX 				  	= 1;
      pObj->dynamicParams_h264.aspectRatioY 				  	= 1;
      pObj->dynamicParams_h264.lfDisableIdc					  	= 0;  
      pObj->dynamicParams_h264.enableBufSEI					  = 0;
      pObj->dynamicParams_h264.enablePicTimSEI				  = 0;
      pObj->dynamicParams_h264.perceptualRC                   	= 1;
      pObj->dynamicParams_h264.idrFrameInterval               	= pObj->createPrm.keyFrameInterval;
    
      pObj->dynamicParams_h264.mvSADoutFlag 				  	= pObj->createPrm.mbMvOutEnable;
      pObj->dynamicParams_h264.resetHDVICPeveryFrame		  	= pObj->createPrm.resetHDVICP;
      pObj->dynamicParams_h264.enableROI					  	= 1;
      pObj->dynamicParams_h264.metaDataGenerateConsume        	= 0;
      pObj->dynamicParams_h264.maxBitrateCVBR				  	= 0;
      pObj->dynamicParams_h264.interlaceRefMode				  	= 0;
      pObj->dynamicParams_h264.enableGDR						= 0;
      pObj->dynamicParams_h264.GDRduration						= 0;
      pObj->dynamicParams_h264.GDRinterval						= 0;
      pObj->dynamicParams_h264.LongTermRefreshInterval			= 0;
      pObj->dynamicParams_h264.UseLongTermFrame					= 0;
      pObj->dynamicParams_h264.SetLongTermFrame					= 0;
      pObj->dynamicParams_h264.CustomScaleMatrix_Buffer			= NULL;
      pObj->dynamicParams_h264.CVBRsensitivity					= 0;
      pObj->dynamicParams_h264.CVBRminbitrate					= 0;
      pObj->dynamicParams_h264.LBRmaxpicsize					= 0;
      pObj->dynamicParams_h264.LBRminpicsize					= 0;
      pObj->dynamicParams_h264.LBRskipcontrol					= 0x050004;
      pObj->dynamicParams_h264.maxHighCmpxIntCVBR			  	= 0;
      pObj->dynamicParams_h264.disableMVDCostFactor			  	= 0;
      pObj->dynamicParams_h264.putDataGetSpaceFxn			  	= NULL;
      pObj->dynamicParams_h264.dataSyncHandle				  	= NULL;
      pObj->dynamicParams_h264.VUI_Buffer->timingInfoPresentFlag= 1;
      pObj->dynamicParams_h264.VUI_Buffer->timeScale 			= 240*(pObj->createPrm.framerate/1000);
      pObj->dynamicParams_h264.VUI_Buffer->numUnitsInTicks 		= 120;
      pObj->dynamicParams.targetBitRate   = 3000000;
      pObj->dynamicParams_h264.maxBitrateCVBR	= 10000000;
      pObj->dynamicParams_h264.CVBRsensitivity	= 8;
      pObj->dynamicParams_h264.CVBRminbitrate	= 500000;
      pObj->dynamicParams_h264.maxHighCmpxIntCVBR = 1;  
       
      pObj->dynamicParams_h264.rcAlgo     = 1; // VBR 
    
      pObj->createPrm.qpinit = 24; // if targetBitRate set to 0, the maximum bit rate is 20 Mbps.
                                      if targetBitRate set to 3000000, the bit rate fixed to 3Mbps.
      pObj->createPrm.qpinit = 28; // if targetBitRate set to 0, the maximum bit rate is 15 Mbps.
                                      if targetBitRate set to 3000000, the bit rate fixed to 3Mbps.
      pObj->createPrm.qpinit = 30; // don't test
      pObj->createPrm.qpinit = 32; // don't test
      
      pObj->dynamicParams_h264.intraFrameQP					  	= pObj->createPrm.qpinit;
      pObj->dynamicParams_h264.interPFrameQP				  	= pObj->createPrm.qpinit;
      pObj->dynamicParams_h264.initQ						  	= pObj->createPrm.qpinit;
      
      
     
    Best Regards.
    Jay.
  • Hello Jay,

    Issue is not seen at my side. with codec version.02.30.00.06, 720p , VBR.(along with your settings)

    Please set the value of pObj->dynamicParams_h264.LBRmaxpicsize = 15, 20 or 25(any one) and try.

    Is it not possible to use CBR mode instead of VBR?


  •  

    Dear Prashanth.

    Still the streaming bit rate is around 2.8 ~ 3.2Mbps if I set LBRmaxpicsize. because of the targetBitRate.

    Actually it doesn't matter which mode I use.

    I want to achive below conditions with any mode.

    1. If I turn off the AE and AWB and film dark place, the bitrate is 100 kbps

    2. If I turn on the AE and AWB and film dark place, the bitrate is 12~20 Mbps

        In this situation I want limit 10 Mbps.

    3. I want to see the bitrate is swing 100 kbps to 10 Mbps depends on image quality and don't want to use target bit rate. ( it may confuse you because of the my prior post)

        MPEG4 VBR can operate with earlier conditions.

    Is it impossible if I use H264? 

     

    Best Regards.

    Jay.

  • Hi,

    H264 Quality will be bad in scene change video sequence for encQuality=2 and 3 configuration.  Can you try below things;

    1: Try using encQuality = 0 or 1

    and / or

    2: If you know when scene change happens, insert an I frame using force frame 

    and / or

    2: Use CVBR set maxbitrateCVBR to 6-8mbps and try the different values of LBRmaxpicsize parameter.

    Thanks,

    Veeranna