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.

Regarding bitrate control (CBR)

Hi ALL,

we have developed our own DM8168 based Hardware.

and we developed the Encoder application based on "capture_encode" example (EZSDK Version 5.05.02.00).

But the bitrate is not Constant even if we set the birtare preset to "OMX_Video_RC_Low_Delay"

Please suggest us how to achieve strict CBR.

Regards

R.Abdul Rahman

  • Hello,

    Could you post how you set it?

    Have you set   tVidEncBitRate.eControlRate = OMX_Video_ControlRateConstant;?

    Best Regards,

    Margarita

  • Hi Margarita,

    We did the following settings for CBR but none of them working

    Using Static params
        tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.maxBitRate =    maxBitRate;
        tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.minBitRate =    minBitRate;
        tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.rateControlPreset =    IVIDEO_LOW_DELAY;

    Using Dynamic params

        OMX_INIT_PARAM(&tVidEncBitRate);
        tVidEncBitRate.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
        eError = OMX_GetParameter (pHandle, OMX_IndexConfigVideoBitrate,&tVidEncBitRate);
        tVidEncBitRate.eControlRate = OMX_Video_ControlRateConstant;
        tVidEncBitRate.nTargetBitrate = BitRate;
        eError = OMX_SetParameter (pHandle, OMX_IndexParamVideoBitrate,&tVidEncBitRate);

    Regards

    R.Abdul Rahman

  • Hello,

    I will check it. I will let you know.

    Best Regards,

    Margarita

  • Hello,

    Based on H264encoder user guide it seems that the HRDBufferSize should be changed also:

     tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.HRDBufferSize = pAppData->nBitRate * 0.5;

    Refer to page 135:

    HRDBufferSize 2*targetBitRate for VBR Rate Control
                           1⁄2*targetBitRate for CBR RateControl

    Could you try and let me know.

    Could you check also with this software is the bitrate constant :

    http://www.winhoros.de/docs/bitrate-viewer/download.html

    Best Regards,

    Margarita

  • Hi

    Sorry We forgot to tell you,

    we have already tried this

    tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.initialBufferLevel  = ((targetBitrate) / 4);
    tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.HRDBufferSize  = ((targetBitrate) / 2);

    Our target is to achieve 1080i60 video @ 500Kbps is this possible on this Processor and EZSDK?

    Regards

    R.Abdul Rahman.

  • Hello,

    Abdul Rahman Rasool said:
    Our target is to achieve 1080i60 video @ 500Kbps is this possible on this Processor and EZSDK?

    Have you set the encoder component for interlaced mode also?

    Abdul Rahman Rasool said:
    is this possible on this Processor and EZSDK?

    It should be, it is matter of encoder component settings.

    Could you try with the encode demo in EZSDK (it contains encoder component stand alone)?

    I will give a try as well.

    Which revision of the processor you used?

    Best Regards,

    Margarita

  • Hi Margarita,

    I have attached the Encoder settings please check this and let me know,

    we have not set the encoder component for Interlaced mode.

    Proceesor Used :

    TMS320

    DM8168ACYG

    15AH1FW


    Regards

    R.Abdul Rahman

    3582.H264_Settings.c
    
    
    OMX_ERRORTYPE CTI_Apply_h264_params(	OMX_HANDLETYPE 		hEncoder,
    					CTI_VideoConfig		EncoderConfig,
     					CTI_Adv_AVC_Config	AdvEncoderConfig)
    {
    	OMX_ERRORTYPE eError = OMX_ErrorUndefined;
    
    	OMX_VIDEO_PARAM_ENCODER_PRESETTYPE tEncoderPreset;
    
    	int PocType = 0;
    
    
    	OMX_VIDEO_PARAM_STATICPARAMS tStaticParam;
    
    	OMX_INIT_PARAM(&tStaticParam);
    
    	tStaticParam.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    
    	OMX_VIDEO_PARAM_AVCTYPE tAVCParams;
    
    	OMX_INIT_PARAM(&tAVCParams);
    	tAVCParams.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    	eError = OMX_GetParameter(hEncoder, OMX_IndexParamVideoAvc, &tAVCParams);
    
    	if (eError != OMX_ErrorNone)
    	{
    		ERROR("failed to Encoder OMX_SetParameter OMX_IndexParamVideoAvc \n");
    	}
    
    
    	if (AdvEncoderConfig.nBFrameCount < 0)
    		AdvEncoderConfig.nBFrameCount = 0;
    	else if (AdvEncoderConfig.nBFrameCount > 3)
    		AdvEncoderConfig.nBFrameCount = 3;
    
    	switch (AdvEncoderConfig.eAVC_Profile)
    	{
    
    	case CTI_AVCProfile_Main:
    		tAVCParams.eProfile = OMX_VIDEO_AVCProfileMain;
    		CTI_DEBUG_SAY("**** Main Profile Selected *** ID(%d)\n",AdvEncoderConfig.eAVC_ProfileLevel_ID);
    		tAVCParams.bEnableASO = OMX_TRUE;
    		tAVCParams.bEnableRS = OMX_TRUE;
    		tAVCParams.bEnableFMO = OMX_FALSE;
    		tAVCParams.bEnableUEP = OMX_TRUE;
    
    		tAVCParams.bEntropyCodingCABAC = OMX_TRUE;
    
    		if (AdvEncoderConfig.eBFrames == AVC_BFrame_ENABLE)
    			tAVCParams.nBFrames = AdvEncoderConfig.nBFrameCount;
    		else
    			tAVCParams.nBFrames = 0;
    		break;
    
    
    	case CTI_AVCProfile_High:
    		tAVCParams.eProfile = OMX_VIDEO_AVCProfileHigh;
    		CTI_DEBUG_SAY("**** High Profile Selected *** ID(%d)\n",AdvEncoderConfig.eAVC_ProfileLevel_ID);
    		tAVCParams.bEnableASO = OMX_TRUE;
    		tAVCParams.bEnableRS = OMX_TRUE;
    		tAVCParams.bEnableFMO = OMX_FALSE;
    		tAVCParams.bEnableUEP = OMX_TRUE;
    		tAVCParams.nBFrames = AdvEncoderConfig.nBFrameCount;
    
    		tAVCParams.bEntropyCodingCABAC = OMX_TRUE;
    
    		if (AdvEncoderConfig.eBFrames == AVC_BFrame_ENABLE)
    			tAVCParams.nBFrames = AdvEncoderConfig.nBFrameCount;
    		else
    			tAVCParams.nBFrames = 0;
    
    		break;
    
    	case CTI_AVCProfile_Baseline:
    	default:
    		tAVCParams.eProfile = OMX_VIDEO_AVCProfileBaseline;
    		CTI_DEBUG_SAY("**** BaseLine Profile Selected *** ID(%d) \n",AdvEncoderConfig.eAVC_ProfileLevel_ID);
    		tAVCParams.bEnableASO = OMX_FALSE;
    		tAVCParams.bEnableRS = OMX_FALSE;
    		tAVCParams.bEnableFMO = OMX_FALSE;
    		tAVCParams.bEnableUEP = OMX_FALSE;
    		tAVCParams.nBFrames = 0;
    
    		tAVCParams.bEntropyCodingCABAC = OMX_FALSE;
    		break;
    	}
    
    
    	switch(AdvEncoderConfig.eAVC_ProfileLevel_ID)
    	{
    		case CTI_AVCLevel31:	tAVCParams.eLevel = OMX_VIDEO_AVCLevel31;break;
    		case CTI_AVCLevel32:	tAVCParams.eLevel = OMX_VIDEO_AVCLevel32;break;
    		case CTI_AVCLevel4:		tAVCParams.eLevel = OMX_VIDEO_AVCLevel4;break;
    		case CTI_AVCLevel41:	tAVCParams.eLevel = OMX_VIDEO_AVCLevel41;break;
    
    		case CTI_AVCLevel5:		tAVCParams.eLevel = OMX_VIDEO_AVCLevel5;break;
    		case CTI_AVCLevel51:	tAVCParams.eLevel = OMX_VIDEO_AVCLevel51;break;
    
    		case CTI_AVCLevel42:
    		default:				tAVCParams.eLevel = OMX_VIDEO_AVCLevel42;break;
    	}
    
    	tAVCParams.bEntropyCodingCABAC = OMX_FALSE;
    
    	if ((AdvEncoderConfig.eAVC_Profile != CTI_AVCProfile_Baseline) && (AdvEncoderConfig.eEntropy == CTI_ENTROPY_CABAC))
    	{
    			tAVCParams.bEntropyCodingCABAC = OMX_TRUE;
    	}
    
    
    	//tAVCParams.bEntropyCodingCABAC = OMX_FALSE;
    	//CTI_DEBUG_SAY("\ntAVCParams.bEnableASO = %d\n",tAVCParams.bEnableASO);
    
    	//tAVCParams.eLoopFilterMode = OMX_VIDEO_AVCLoopFilterEnable;
    
    	eError = OMX_SetParameter(hEncoder, OMX_IndexParamVideoAvc, &tAVCParams);
    	if (eError != OMX_ErrorNone)
    	{
    		ERROR("failed to Encoder OMX_SetParameter OMX_IndexParamVideoAvc \n");
    	}
    
    	/* Encoder Preset settings */
    	OMX_INIT_PARAM(&tEncoderPreset);
    	tEncoderPreset.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    	eError =	OMX_GetParameter (hEncoder, OMX_TI_IndexParamVideoEncoderPreset,&tEncoderPreset);
    
    	//tEncoderPreset.eEncodingModePreset = OMX_Video_Enc_High_Speed_Med_Quality;
    	tEncoderPreset.eEncodingModePreset = OMX_Video_Enc_High_Speed;//OMX_Video_Enc_High_Quality;//OMX_Video_Enc_Med_Speed_High_Quality;
    
    	tEncoderPreset.eRateControlPreset = OMX_Video_RC_User_Defined;//OMX_Video_RC_Low_Delay;
    
    	eError =	OMX_SetParameter (hEncoder, OMX_TI_IndexParamVideoEncoderPreset,&tEncoderPreset);
    
    
    	//For Tesing
    	//CTI_IL_Client_Apply_Bitrate(hEncoder,EncoderConfig.Bitrate*1000,EncoderConfig.RateCtrl);
    
    
    
    	eError = OMX_GetParameter (hEncoder, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.encodingPreset =	XDM_USER_DEFINED;
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.numTemporalLayer =	IH264_TEMPORAL_LAYERS_1;
    
    
    	if(	(EncoderConfig.VideoInputResolution == VID_RES_S_1080I50) ||
    		(EncoderConfig.VideoInputResolution == VID_RES_S_1080i) ||
    		(EncoderConfig.VideoInputResolution == VID_RES_H_1080I50) ||
    		(EncoderConfig.VideoInputResolution == VID_RES_H_1080i)
    		)
    	{
    		//SetInterlaceEncodingType(hEncoder);
    		//tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.inputContentType =		IVIDEO_INTERLACED;
    		tStaticParam.videoStaticParams.h264EncStaticParams.bottomFieldIntra =	1;
    		tStaticParam.videoStaticParams.h264EncStaticParams.interlaceCodingType =	IH264_INTERLACE_DEFAULT;
    	}
    
    
    	/* for base profile */
    	tStaticParam.videoStaticParams.h264EncStaticParams.transformBlockSize =	IH264_TRANSFORM_DEFAULT;	//IH264_TRANSFORM_4x4;
    
    	if (AdvEncoderConfig.eAVC_Profile == CTI_AVCProfile_Baseline)
    		tStaticParam.videoStaticParams.h264EncStaticParams.entropyCodingMode =	IH264_ENTROPYCODING_CAVLC;
    	else
    	{
    		if(AdvEncoderConfig.eEntropy == CTI_ENTROPY_CAVLC)
    			tStaticParam.videoStaticParams.h264EncStaticParams.entropyCodingMode =	IH264_ENTROPYCODING_CAVLC;
    		else
    			tStaticParam.videoStaticParams.h264EncStaticParams.entropyCodingMode =	IH264_ENTROPYCODING_CABAC;
    	}
    
    	/* for base profile end */
    
    	/* for the mask bits, please refer to codec user guide */
    #if 0
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluControlPreset 	= IH264_NALU_CONTROL_USERDEFINED;
    	tStaticParam.videoStaticParams.h264EncStaticParams.gopStructure								= IH264ENC_GOPSTRUCTURE_NONUNIFORM;//IH264ENC_GOPSTRUCTURE_UNIFORM ;//
    	tStaticParam.videoStaticParams.h264EncStaticParams.transformBlockSize						= IH264_TRANSFORM_ADAPTIVE;
    	tStaticParam.videoStaticParams.h264EncStaticParams.log2MaxFNumMinus4						= 0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.referencePicMarking 						= IH264_SHORT_TERM_PICTURE;
    	tStaticParam.videoStaticParams.h264EncStaticParams.enableLongTermRefFrame 					= 0;
    #endif
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluControlPreset 	= IH264_NALU_CONTROL_USERDEFINED;
    	tStaticParam.videoStaticParams.h264EncStaticParams.gopStructure								= IH264ENC_GOPSTRUCTURE_UNIFORM ;//IH264ENC_GOPSTRUCTURE_NONUNIFORM; ;//
    	tStaticParam.videoStaticParams.h264EncStaticParams.transformBlockSize						= IH264_TRANSFORM_ADAPTIVE;
    	tStaticParam.videoStaticParams.h264EncStaticParams.log2MaxFNumMinus4						= 0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.referencePicMarking 						= IH264_LONG_TERM_PICTURE;//IH264_SHORT_TERM_PICTURE;
    	tStaticParam.videoStaticParams.h264EncStaticParams.enableLongTermRefFrame 					= 1;
    
    
    
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskStartOfSequence 	|= 0x23BE; //|= 0x2380;
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIDRPicture 		|= 0x23BE; //|= 0x2380;
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskNonIntraPicture 	|= 0x23BE; //|= 0x2380;
    	//tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskEndOfSequence |=	0x380;
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskEndOfSequence = 0;
    
    
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.vuiCodingPreset 			= IH264_VUICODING_USERDEFINED;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.aspectRatioInfoPresentFlag 	= 1;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.aspectRatioIdc 				= IH264ENC_ASPECTRATIO_EXTENDED;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.videoSignalTypePresentFlag 	= 1;//0;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.videoFormat 				= IH264ENC_VIDEOFORMAT_NTSC;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.videoFullRangeFlag 			= 1;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.timingInfoPresentFlag 		= 0;//1;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.hrdParamsPresentFlag 		= 1;//0;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.numUnitsInTicks 			= 1000;
    
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.IDRFrameInterval = 1;//I2P;//2;
    
    
    	if(((PocType < 0)) || (PocType > 2)) PocType = 0;
    
    	if (AdvEncoderConfig.eBFrames == AVC_BFrame_ENABLE) PocType = 0;
    
    	//Added as per ES-264 Stream
    	printf("########### Picture Order Count Type is %d ##################\n",PocType);
    	tStaticParam.videoStaticParams.h264EncStaticParams.picOrderCountType = PocType;//IH264_POC_TYPE_2;
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.enableGMVSei 								= 0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.enableWatermark 								= 0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.framePackingSEIParams.framePackingPreset		= 0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.stereoInfoParams.stereoInfoPreset 			= 0;
    
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.rateControlParamsPreset 	= IH264_RATECONTROLPARAMS_USERDEFINED;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.rcAlgo = IVIDEO_USER_DEFINED;//IH264_RATECONTROL_PRC;//IH264_RATECONTROL_PRC_LOW_DELAY;
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.removeExpensiveCoeff       = OMX_TRUE;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.enablePRC                	= OMX_TRUE;
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.enableHRDComplianceMode 	= OMX_TRUE;
    
    	/*******************************************************/
    
    #if 1
    	/* Qp Settings for I */
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpI        =   24;//OMX_VIDENC_DEFAULT_QP_IFRAME;  // 24
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpMaxI  	=   44;//OMX_VIDENC_DEFAULT_QPMAX_IFRAME; // 44
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpMinI   	=   8;//OMX_VIDENC_DEFAULT_QPMIN_IFRAME; // 8
    	/* Qp Settings for P */
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpP        =   24;//OMX_VIDENC_DEFAULT_QP_PFRAME; // 24
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpMaxP 	=   44;//OMX_VIDENC_DEFAULT_QPMAX_PFRAME; // 44
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpMinP 	=   8;//OMX_VIDENC_DEFAULT_QPMIN_PFRAME; // 8
    
    
    	/* Qp Settings for B */
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpOffsetB 	=	4;//OMX_VIDENC_DEFAULT_QPOFFSET_BFRAME; // 4
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpMaxB 	=	44;//OMX_VIDENC_DEFAULT_QPMAX_BFRAME; // 44
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpMinB 	=	8;//OMX_VIDENC_DEFAULT_QPMIN_BFRAME; //8
    
    
    	/* Chroma Qp Settings */
    	//pEncStaticParams->rateControlParams.chromaQPIndexOffset 						=    0;
    	/* Settings for the Quality Bias factor between I & P */
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.chromaQPIndexOffset        = -12;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.IPQualityFactor            = IH264_QUALITY_FACTOR_3;//IH264_QUALITY_FACTOR_2;//IH264_QUALITY_FACTOR_DEFAULT;
    #endif
    
    	/**********************************************************/
    
    
    
    
    	if(EncoderConfig.RateCtrl ==  ControlRate_Constant)
    	{
    		tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.allowFrameSkip            	= OMX_FALSE; //OMX_TRUE;
    		tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.enablePartialFrameSkip  	= OMX_FALSE;//OMX_TRUE;
    	}
    	else if(EncoderConfig.RateCtrl ==  ControlRate_ConstantSkipFrames)
    	{
    		tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.allowFrameSkip            	= OMX_TRUE;
    		tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.enablePartialFrameSkip  	= OMX_TRUE;
    
    	}
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.removeExpensiveCoeff        = OMX_TRUE;
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.initialBufferLevel        = ((EncoderConfig.Bitrate*1000) / 4);//1250000 ;//12000 000;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.HRDBufferSize            = ((EncoderConfig.Bitrate*1000) / 2);//1250000 * 2;
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.skipDistributionWindowLength = 0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.numSkipInDistributionWindow = 0;//4;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.enableHRDComplianceMode = 1;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.VBRDuration = 0;//32;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.VBRsensitivity = 0;
    
    
    
    
    	eError = OMX_SetParameter (hEncoder, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
    
    	//for testing
    	//EncoderConfig.i2p = 500;
    
    	CTI_IL_Client_Apply_I2P(hEncoder, EncoderConfig.i2p); // Apply I2P and Slicing Params
    
    	if((AdvEncoderConfig.eEntropy == CTI_ENTROPY_CAVLC) && (AdvEncoderConfig.nEnableSlicing == 1))
    			CTI_IL_Client_EnableSlicing(hEncoder);
    
    	CTI_IL_Client_Apply_Bitrate(hEncoder,EncoderConfig.Bitrate*1000,EncoderConfig.RateCtrl);
    
    	printf("=========================================== h264 Params Applied ============================================\n");
    
    //	CTI_IL_Client_SetEncPreset(hEncoder, 0);
    
    	return eError;
    
    }
    
    
    
    
    
    OMX_ERRORTYPE CTI_IL_Client_Apply_I2P(OMX_HANDLETYPE pHandle, int i2p)
    {
    	OMX_ERRORTYPE eError = OMX_ErrorUndefined;
    
    	OMX_VIDEO_CONFIG_DYNAMICPARAMS tDynParams;
    
    
    	OMX_INIT_PARAM(&tDynParams);
    	tDynParams.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    	eError =	OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoDynamicParams,&tDynParams);
    
    	/* setting I frame interval */
    	tDynParams.videoDynamicParams.h264EncDynamicParams.videnc2DynamicParams.intraFrameInterval =	i2p;
    
    	eError =	OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoDynamicParams,&tDynParams);
    
    	if (eError != OMX_ErrorNone)
    	{
    		ERROR("failed to Encoder OMX_SetParameter tDynParams \n");
    	}
    
    	return eError;
    }
    
    OMX_ERRORTYPE CTI_IL_Client_EnableSlicing(OMX_HANDLETYPE pHandle)
    {
    	OMX_ERRORTYPE eError = OMX_ErrorUndefined;
    
    	OMX_VIDEO_CONFIG_DYNAMICPARAMS tDynParams;
    
    
    	OMX_INIT_PARAM(&tDynParams);
    	tDynParams.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    	eError =	OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoDynamicParams,&tDynParams);
    
    	tDynParams.videoDynamicParams.h264EncDynamicParams.sliceCodingParams.sliceCodingPreset = IH264_SLICECODING_USERDEFINED;
    	tDynParams.videoDynamicParams.h264EncDynamicParams.sliceCodingParams.sliceMode         = IH264_SLICEMODE_BYTES;
    	tDynParams.videoDynamicParams.h264EncDynamicParams.sliceCodingParams.sliceUnitSize     = 1024;//( 1024 * 4 ); //2048;
    	tDynParams.videoDynamicParams.h264EncDynamicParams.sliceCodingParams.streamFormat      = IH264_BYTE_STREAM;
    
    
    	eError =	OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoDynamicParams,&tDynParams);
    
    	printf("************************** Slicing Enabled **********************\n");
    
    	if (eError != OMX_ErrorNone)
    	{
    		ERROR("failed to Encoder OMX_SetParameter tDynParams \n");
    	}
    
    	return eError;
    
    }
    
    
    OMX_ERRORTYPE CTI_IL_Client_Apply_Bitrate_MinMax(OMX_HANDLETYPE pHandle,
    		OMX_U32 BitRate, CTI_EncBitrateCtrl RateCtrl)
    {
    	OMX_ERRORTYPE eError = OMX_ErrorUndefined;
    
    	XDAS_Int32 maxBitRate = 1024;
    
    	XDAS_Int32 minBitRate = 512;
    
    	OMX_VIDEO_PARAM_STATICPARAMS tStaticParam;
    
    	OMX_INIT_PARAM(&tStaticParam);
    
    	tStaticParam.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    	eError =
    			OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
    
    	if (RateCtrl != ControlRate_Variable)
    	{
    		maxBitRate = BitRate + ((BitRate / 100) * 5);
    		minBitRate = BitRate - ((BitRate / 100) * 10);
    
    		if (minBitRate < 0)
    		{
    			minBitRate = BitRate;
    		}
    	}
    	else
    	{
    		maxBitRate = -1;
    		minBitRate = 0;
    	}
    
    	CTI_DEBUG_SAY(" maxBitRate = %d minBitRate = %d ", maxBitRate, minBitRate);
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.maxBitRate =
    			maxBitRate;
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.minBitRate =
    			minBitRate;
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.rateControlPreset =	IVIDEO_LOW_DELAY;
    
    	eError =
    			OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
    
    	return eError;
    }
    
    
    OMX_ERRORTYPE CTI_IL_Client_Apply_Bitrate(OMX_HANDLETYPE pHandle,
    		OMX_U32 BitRate, CTI_EncBitrateCtrl RateCtrl)
    {
    	OMX_VIDEO_PARAM_BITRATETYPE tVidEncBitRate;
    
    	OMX_ERRORTYPE eError = OMX_ErrorUndefined;
    
    	OMX_VIDEO_CONFIG_DYNAMICPARAMS tDynParams;
    
    	OMX_INIT_PARAM(&tDynParams);
    
    	if (BitRate < 256000)	BitRate = 256000;
    
    
    	CTI_DEBUG_SAY("\n\nApplying Bitrate Range ....");
    	eError = CTI_IL_Client_Apply_Bitrate_MinMax(pHandle, BitRate, RateCtrl);
    
    	if (eError != OMX_ErrorNone)
    	{
    		ERROR("failed to set Encode bitrate \n");
    	}
    	else
    		CTI_DEBUG_SAY("Done\n\n");
    
    	tDynParams.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    	eError = OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoDynamicParams,&tDynParams);
    
    
    		/* For changing bit rate following index can be used */
    	OMX_INIT_PARAM(&tVidEncBitRate);
    
    	tVidEncBitRate.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    	//eError = OMX_GetParameter (pHandle, OMX_IndexParamVideoBitrate,&tVidEncBitRate);
    	eError = OMX_GetParameter (pHandle, OMX_IndexConfigVideoBitrate,&tVidEncBitRate);
    
    	switch (RateCtrl)
    	{
    
    	case ControlRate_Constant:
    		tVidEncBitRate.eControlRate = OMX_Video_ControlRateConstant;
    		//CTI_DEBUG_SAY("@@@@@@@@@@@@@@@@@@@@@@ Constant Bitrate Selected\n");
    		break;
    
    	case ControlRate_ConstantSkipFrames:
    		tVidEncBitRate.eControlRate = OMX_Video_ControlRateConstantSkipFrames;
    		//CTI_DEBUG_SAY("@@@@@@@@@@@@@@@@@ Constant Bitrate with Frame Skip Selected\n");
    		break;
    
    	case ControlRate_Variable:
    	default:
    		tVidEncBitRate.eControlRate = OMX_Video_ControlRateVariable;
    		//CTI_DEBUG_SAY("@@@@@@@@@@@ Variable Bitrate Selected\n");
    		break;
    
    	}
    
    	CTI_DEBUG_SAY("------------- Target bitrate = %d BitrateCtrl = %d -------------------\n",BitRate, RateCtrl);
    
    	tVidEncBitRate.nTargetBitrate = BitRate;
    
    	eError =OMX_SetParameter (pHandle, OMX_IndexParamVideoBitrate,&tVidEncBitRate);
    
    	if (eError != OMX_ErrorNone)	ERROR("failed to set Encode bitrate \n");
    
    	CTI_DEBUG_SAY("\n\nApplying Bitrate Range ....");
    
    	eError = CTI_IL_Client_Apply_Bitrate_MinMax(pHandle, BitRate, RateCtrl);
    
    	if (eError != OMX_ErrorNone)
    	{
    		ERROR("failed to set Encode bitrate \n");
    	}
    	else
    		CTI_DEBUG_SAY("Done\n\n");
    
    
    	return eError;
    }
    
    
    OMX_ERRORTYPE CTI_IL_Client_Apply_Bitrate_MinMax(OMX_HANDLETYPE pHandle,
    		OMX_U32 BitRate, CTI_EncBitrateCtrl RateCtrl)
    {
    	OMX_ERRORTYPE eError = OMX_ErrorUndefined;
    
    	XDAS_Int32 maxBitRate = 1024;
    
    	XDAS_Int32 minBitRate = 512;
    
    	OMX_VIDEO_PARAM_STATICPARAMS tStaticParam;
    
    	OMX_INIT_PARAM(&tStaticParam);
    
    	tStaticParam.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    	eError = OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
    
    	if (RateCtrl != ControlRate_Variable)
    	{
    		maxBitRate = BitRate + ((BitRate / 100) * 5);
    		minBitRate = BitRate - ((BitRate / 100) * 10);
    
    		if (minBitRate < 0)
    		{
    			minBitRate = BitRate;
    		}
    	}
    	else
    	{
    		maxBitRate = -1;
    		minBitRate = 0;
    	}
    
    	CTI_DEBUG_SAY(" maxBitRate = %d minBitRate = %d ", maxBitRate, minBitRate);
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.maxBitRate =	maxBitRate;
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.minBitRate =	minBitRate;
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.rateControlPreset =	IVIDEO_LOW_DELAY;
    
    	eError = OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
    
    	return eError;
    }
    
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    

  • Hello,

    I am looking into this issue now.

    Abdul Rahman Rasool said:
    Our target is to achieve 1080i60 video @ 500Kbps

    You want to archive 1080i60 capture -> deinterlacing or encode in interlace mode?

    I need the TI8168-GP rev X.X you could see it when the board is booting.

    Best Regards,

    Margarita

  • Hi,

    1. I want Capture->deinterlacing mode

    revision : TI8168-GP rev 1.1

    Thanks for your help

    Regards

    R.Abdul Rahman

  • Hello,

    Are you able to capture 1080i with capture_encode demo on this rev?

    Are you observing OMX_ErrorInsufficientResources (0x80001000) error?

    Best Regards,

    Margarita

  • Hi,

    Actually the capture_encode demo is not working in my board, so we modified

    few things in the capture and dei component settings to work with 1080i

    we have attached the settings for your ref

    8562.capture_dei_settings.c
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //	Capture Component Settings
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    OMX_ERRORTYPE CTI_SetCaptureParams(	STREAM_ID ComponentID,
    									OMX_HANDLETYPE hCapture,
    									CTI_Resolution InputResolution,
    									int FrameRate
    									)
    {
    
    	OMX_PARAM_VFCC_HWPORT_PROPERTIES sHwPortParam;
    
    	OMX_PARAM_VFCC_HWPORT_ID sHwPortId;
    
    //	OMX_CONFIG_VFCC_FRAMESKIP_INFO sCapSkipFrames;
    
    	OMX_PARAM_BUFFER_MEMORYTYPE memTypeCfg;
    
    	OMX_PARAM_PORTDEFINITIONTYPE paramPort;
    
    	OMX_ERRORTYPE eError = OMX_ErrorNone;
    
    	int 	InputFPS = 30;
    
    	char ComponentName[16];
    
    	int nWidth = 1280,nHeight = 720;
    
    	if (ComponentID == STREAM_ONE)
    		strcpy(ComponentName, "Pri-Capture");
    	else
    		strcpy(ComponentName, "Sec-Capture");
    
    	Get_Input_Dimention(InputResolution,&nWidth,&nHeight);
    
    	InputFPS = Get_Input_FPS(InputResolution);
    
    	OMX_INIT_PARAM(&paramPort);
    
    	CTI_DEBUG_SAY("Setting up the Capture Parameters ....\r\n");
    
    	/* set input height/width and color format */
    	paramPort.nPortIndex = OMX_VFCC_OUTPUT_PORT_START_INDEX;
    
    	OMX_GetParameter(hCapture, OMX_IndexParamPortDefinition,&paramPort);
    
    	paramPort.nPortIndex = OMX_VFCC_OUTPUT_PORT_START_INDEX;
    	paramPort.format.video.nFrameWidth = nWidth;
    
    	if (IsInterlacedVideoInput(InputResolution))
    		paramPort.format.video.nFrameHeight = nHeight >> 1;
    	else
    		paramPort.format.video.nFrameHeight = nHeight;
    
    	paramPort.format.video.nStride = nWidth;
    
    	paramPort.nBufferCountActual = IL_CLIENT_CAPTURE_OUTPUT_BUFFER_COUNT;
    	paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
    	/* Capture output in 420 format */
    	paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
    
    	if (IsInterlacedVideoInput(InputResolution))
    	{
    
    		if (((InputResolution >= VID_RES_P_D1)&& (InputResolution <= VID_RES_N_QCIF)) ||
    			(InputResolution == VID_RES_S_480I)||
    			(InputResolution == VID_RES_S_576I)
    			)
    		{
    			paramPort.format.video.nStride = nWidth << 2;
    			paramPort.format.video.eColorFormat = OMX_COLOR_FormatYCbYCr;
    		}
    
    		paramPort.nBufferSize = (paramPort.format.video.nStride * nHeight * 3) >> 2;
    	}
    	else
    		paramPort.nBufferSize = (paramPort.format.video.nStride * nHeight * 3) >> 1;
    
    	CTI_DEBUG_SAY("Buffer Size computed for %s InputPort: %d\r\n",ComponentName,paramPort.nBufferSize);
    
    	CTI_DEBUG_SAY("%s: set input port params (width = %d, height = %d)\r\n",ComponentName,nWidth, nHeight);
    
    	OMX_SetParameter(hCapture, OMX_IndexParamPortDefinition,&paramPort);
    
    	/* Setting Memory type at output port to Raw Memory */
    	OMX_INIT_PARAM(&memTypeCfg);
    
    	memTypeCfg.nPortIndex = OMX_VFCC_OUTPUT_PORT_START_INDEX;
    	memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
    	eError = OMX_SetParameter (hCapture, OMX_TI_IndexParamBuffMemType,&memTypeCfg);
    
    	if (eError != OMX_ErrorNone)
    	{
    		CTI_DEBUG_ERROR("Unable to Set memory type for %s output port\n\r\n",ComponentName);
    		return eError;
    	}
    
    #if 0
    	OMX_INIT_PARAM(&sHwPortId);
    	if(ComponentID == STREAM_ONE)
    	{
    		sHwPortId.eHwPortId = OMX_VIDEO_CaptureHWPortVIP1_PORTA;
    		CTI_DEBUG_SAY("111111111111 OMX_VIDEO_CaptureHWPortVIP1_PORTA ------------- Selected for %s 11111111111111\n",ComponentName);
    	}
    	else
    	{
    		CTI_DEBUG_SAY("222222222 OMX_VIDEO_CaptureHWPortVIP2_PORTA ------------- Selected for %s 22222222222222\n",ComponentName);
    		sHwPortId.eHwPortId = OMX_VIDEO_CaptureHWPortVIP2_PORTA;
    	}
    	eError = OMX_SetParameter (hCapture,(OMX_INDEXTYPE) OMX_TI_IndexParamVFCCHwPortID,(OMX_PTR) & sHwPortId);
    #endif
    
    
    	OMX_INIT_PARAM(&sHwPortParam);
    
    	sHwPortParam.eCaptMode = OMX_VIDEO_CaptureModeSC_NON_MUX;
    	sHwPortParam.eInColorFormat = OMX_COLOR_FormatYCbYCr;
    
    	if (((InputResolution >= VID_RES_P_D1) &&
    		(InputResolution <= VID_RES_N_QCIF)) ||
    		(InputResolution == VID_RES_S_480I) ||
    		(InputResolution == VID_RES_S_576I)
    		)
    	{
    		printf("\n\nCAPTURE: SD Interlace Scan Selected\n\n");
    
    		sHwPortParam.eVifMode 	= 	OMX_VIDEO_CaptureVifMode_08BIT;
    		sHwPortParam.eScanType 	=	OMX_VIDEO_CaptureScanTypeProgressive;
    		sHwPortParam.nMaxHeight = 	nHeight / 2; //nHeight/2;
    	}
    	else if ((InputResolution == VID_RES_S_1080i) ||
    			(InputResolution == VID_RES_S_1080I50)	||
    			(InputResolution == VID_RES_H_1080i)	||
    			(InputResolution == VID_RES_H_1080I50)	||
    			(InputResolution == VID_RES_S_1035I))
    	{
    		printf("\n\n%s: HD Interlace Selected\n\n",ComponentName);
    		sHwPortParam.eVifMode = OMX_VIDEO_CaptureVifMode_16BIT;
    		sHwPortParam.eScanType = OMX_VIDEO_CaptureScanTypeProgressive;
    		sHwPortParam.nMaxHeight = nHeight / 2;
    
    	}
    	else
    	{
    		printf("\n\n%s: HD Progressive Scan Selected\n\n",ComponentName);
    
    		sHwPortParam.eVifMode = OMX_VIDEO_CaptureVifMode_16BIT;
    		sHwPortParam.eScanType = OMX_VIDEO_CaptureScanTypeProgressive;
    		sHwPortParam.nMaxHeight = nHeight;
    
    	}
    	sHwPortParam.nMaxWidth = nWidth;
    	sHwPortParam.nMaxChnlsPerHwPort = 1;
    	eError = OMX_SetParameter (hCapture,(OMX_INDEXTYPE)OMX_TI_IndexParamVFCCHwPortProperties,(OMX_PTR) & sHwPortParam);
    
    	OMX_INIT_PARAM(&sHwPortId);
    	if(ComponentID == STREAM_ONE)
    	{
    		sHwPortId.eHwPortId = OMX_VIDEO_CaptureHWPortVIP1_PORTA;
    		CTI_DEBUG_SAY("111111111111 OMX_VIDEO_CaptureHWPortVIP1_PORTA ------------- Selected for %s 11111111111111\n",ComponentName);
    	}
    	else
    	{
    		CTI_DEBUG_SAY("222222222 OMX_VIDEO_CaptureHWPortVIP2_PORTA ------------- Selected for %s 22222222222222\n",ComponentName);
    		sHwPortId.eHwPortId = OMX_VIDEO_CaptureHWPortVIP2_PORTA;
    	}
    	eError = OMX_SetParameter (hCapture,(OMX_INDEXTYPE) OMX_TI_IndexParamVFCCHwPortID,(OMX_PTR) & sHwPortId);
    
    
    	switch(InputFPS)
    	{
    		case 60: 	CTI_Apply_60fps_FrameSkip(hCapture,FrameRate);	break;
    		case 50:
    		case 30:	CTI_Apply_30fps_FrameSkip(hCapture,FrameRate);		break;
    
    		case 25:
    					CTI_Apply_25fps_FrameSkip(hCapture,FrameRate);
    			break;
    	}
    
    	/*
    	//For Test
    	if((InputResolution == VID_RES_S_1080i) || (InputResolution == VID_RES_S_1080I50))
    	{
    		CTI_Apply_60fps_FrameSkip(hCapture,30);
    	}*/
    
    	return eError;
    
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //	DEI Component Settings
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    OMX_ERRORTYPE CTI_SetDEI_Input_Params	( STREAM_ID			ComponentID,
    					OMX_HANDLETYPE			hDEI,
    					CTI_Resolution			InputResolution
    											)
    {
    	OMX_ERRORTYPE eError = OMX_ErrorNone;
    
    	char ComponentName[16];
    
    	OMX_PARAM_BUFFER_MEMORYTYPE 			memTypeCfg;
    	OMX_PARAM_PORTDEFINITIONTYPE 			paramPort;
    	//OMX_PARAM_VFPC_NUMCHANNELPERHANDLE 		sNumChPerHandle;
    	OMX_CONFIG_ALG_ENABLE 					algEnable;
    	OMX_CONFIG_VIDCHANNEL_RESOLUTION 		chResolution;
    
    	OMX_CONFIG_SUBSAMPLING_FACTOR 			sSubSamplinginfo = {NULL};
    
    	int InterlaceInput 	= 0;
    
    	int nWidth = 1280;
    	int nHeight = 720;
    
    	CTI_SetDEI_ComponentName(ComponentID,ComponentName);
    
    	Get_Input_Dimention(InputResolution,&nWidth,&nHeight);
    
    	CTI_DEBUG_SAY("\nApplying Input Port Params of %s Component ...\n", ComponentName);
    
    	if(((InputResolution >= VID_RES_P_D1) &&
    		(InputResolution <= VID_RES_N_QCIF)) ||
    		InputResolution == VID_RES_S_1080i ||
    		InputResolution == VID_RES_S_1080I50 ||
    		InputResolution == VID_RES_H_1080i ||
    		InputResolution == VID_RES_H_1080I50 ||
    		InputResolution == VID_RES_S_1035I ||
    		InputResolution == VID_RES_S_576I ||
    		InputResolution == VID_RES_S_480I)
    	{
    		CTI_DEBUG_SAY("Interlace Input Selected for %s\n",ComponentName);
    		InterlaceInput = 1;
    	}
    	else
    	{
    		InterlaceInput = 0;
    		CTI_DEBUG_SAY("Progressive Input Selected for %s\n",ComponentName);
    	}
    
    	OMX_INIT_PARAM(&sSubSamplinginfo);
    
    	sSubSamplinginfo.nSubSamplingFactor = 1;
    
    	eError = OMX_SetConfig ( hDEI, ( OMX_INDEXTYPE )( OMX_TI_IndexConfigSubSamplingFactor ),&sSubSamplinginfo );
    
    	OMX_INIT_PARAM (&memTypeCfg);
    
    	memTypeCfg.nPortIndex = OMX_VFPC_INPUT_PORT_START_INDEX;
    
    	memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
    
    	eError = OMX_SetParameter ( hDEI,OMX_TI_IndexParamBuffMemType,&memTypeCfg);
    
    	if (eError != OMX_ErrorNone)
    	{
    		CTI_DEBUG_ERROR ("Failed to set memory Type for %s input port\r\n",ComponentName);
    		return eError;
    	}
    
    	/* Setting Memory type at output port to Raw Memory */
    	OMX_INIT_PARAM (&memTypeCfg);
    	memTypeCfg.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX;
    	memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
    	eError = OMX_SetParameter (hDEI, OMX_TI_IndexParamBuffMemType,&memTypeCfg);
    
    	if (eError != OMX_ErrorNone)
    	{
    		CTI_DEBUG_ERROR ("Failed to set memory type for %s output port1\r\n",ComponentName);
    		return eError;
    	}
    
    	OMX_INIT_PARAM (&memTypeCfg);
    	memTypeCfg.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX + 1;
    	memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
    	eError = OMX_SetParameter (hDEI, OMX_TI_IndexParamBuffMemType,&memTypeCfg);
    
    	if (eError != OMX_ErrorNone)
    	{
    		CTI_DEBUG_ERROR("Failed to set memory Type for %s output port2\r\n",ComponentName);
    		return eError;
    	}
    
    	/* set input height/width and color format */
    	OMX_INIT_PARAM (&paramPort);
    	paramPort.nPortIndex = OMX_VFPC_INPUT_PORT_START_INDEX;
    
    	OMX_GetParameter (hDEI, OMX_IndexParamPortDefinition,&paramPort);
    
    	paramPort.nPortIndex = OMX_VFPC_INPUT_PORT_START_INDEX;
    	paramPort.format.video.nFrameWidth = nWidth;
    	paramPort.format.video.nFrameHeight = nHeight;
    	paramPort.format.video.nStride = nWidth;
    
    	paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
    
    	paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
    	paramPort.nBufferSize =	(paramPort.format.video.nStride * (nHeight) * 3) >> 1;
    
    
    	if (InterlaceInput == 1)
    	{
    		if(	((InputResolution >= VID_RES_P_D1) &&(InputResolution <= VID_RES_N_QCIF)) ||
    			(InputResolution == VID_RES_S_480I) ||
    			(InputResolution == VID_RES_S_576I) )
    		{
    			paramPort.format.video.eColorFormat = OMX_COLOR_FormatYCbYCr;
    		}
    		paramPort.format.video.nFrameHeight = nHeight >> 1;
    		paramPort.format.video.nStride = nWidth << 1;
    
    		paramPort.nBufferSize = (paramPort.format.video.nStride * nHeight) >> 1;
    	}
    
    	paramPort.nBufferAlignment = 0;
    	paramPort.bBuffersContiguous = 0;
    	paramPort.nBufferCountActual = IL_CLIENT_DEI_INPUT_BUFFER_COUNT;
    
    	CTI_DEBUG_SAY ("Set %s input port params (width = %u, height = %u)\r\n",ComponentName,nWidth, nHeight);
    
    	OMX_SetParameter (hDEI, OMX_IndexParamPortDefinition,&paramPort);
    
    
    
    	  /* set VFPC input and output resolution information */
    	  CTI_DEBUG_SAY ("Settingup the %s input resolution... ",ComponentName);
    	  OMX_INIT_PARAM (&chResolution);
    	  chResolution.Frm0Width = nWidth;
    	  chResolution.Frm0Height = nHeight;
    	  chResolution.Frm0Pitch = nWidth;
    	  chResolution.Frm1Width = 0;
    	  chResolution.Frm1Height = 0;
    	  chResolution.Frm1Pitch = 0;
    	  chResolution.FrmStartX = 0;
    	  chResolution.FrmStartY = 0;
    	  chResolution.FrmCropWidth = nWidth;
    	  chResolution.FrmCropHeight = nHeight;
    
    	  //5.05 Code change
    	  if (InterlaceInput == 1)
    	  {
    		  chResolution.Frm0Height = nHeight >> 1;
    		  chResolution.FrmCropHeight = nHeight >> 1;
    		  if(((InputResolution >= VID_RES_P_D1) &&  (InputResolution <= VID_RES_N_QCIF)) ||
    			(InputResolution == VID_RES_S_480I) ||
    			(InputResolution == VID_RES_S_576I)	)
    		  {
    			  chResolution.Frm0Pitch = nWidth << 1;
    		  }
    	   }
    	  chResolution.eDir = OMX_DirInput;
    	  chResolution.nChId = 0;
    
    
    	  eError = OMX_SetConfig (hDEI,(OMX_INDEXTYPE) OMX_TI_IndexConfigVidChResolution,&chResolution);
    	  if (eError != OMX_ErrorNone)
    	  {
    	    CTI_DEBUG_ERROR ("FAILED\r\n");
    	    return eError;
    	  }
    
    	  CTI_DEBUG_SAY("Done\r\n");
    
    	/* disable algo bypass mode */
    	OMX_INIT_PARAM (&algEnable);
    	algEnable.nPortIndex = 0;
    	algEnable.nChId = 0;
    
    	if(InterlaceInput == 0)
    	{
    	  CTI_DEBUG_SAY ("PRI DEI Disabling ALG Mode ...");
    	  algEnable.bAlgBypass = 1;
    	}
    	else
    	{
    		CTI_DEBUG_SAY ("PRI DEI Enabling ALG Mode ...");
    		algEnable.bAlgBypass = 1;
    		//algEnable.bAlgBypass = 0;
    
    		if(((InputResolution >= VID_RES_P_D1) && (InputResolution <= VID_RES_N_QCIF)) ||
    			(InputResolution == VID_RES_S_480I) ||
    			(InputResolution == VID_RES_S_576I))
    		{
    		  algEnable.bAlgBypass = 0;
    		  printf(" PRI DEI: De-Interlacer Enabled\n ");
    		}
    	}
    
    	eError = OMX_SetConfig (hDEI,(OMX_INDEXTYPE) OMX_TI_IndexConfigAlgEnable,&algEnable);
    	if (eError != OMX_ErrorNone)
    	{
    		CTI_DEBUG_ERROR ("FAILED\r\n");
    		return eError;
    	}
    
    	CTI_DEBUG_SAY("Done\r\n");
    
    	CTI_DEBUG_SAY("%s Input Port Params Configured successfuly...\n", ComponentName);
    
    	return eError;
    
    }
    
    OMX_ERRORTYPE CTI_SetDEI_Output_Params	( STREAM_ID	ComponentID,
    					OMX_HANDLETYPE			hDEI,
    					CTI_Resolution			OutputResolution
    											)
    {
    
    	OMX_ERRORTYPE eError = OMX_ErrorNone;
    
    	char ComponentName[16];
    
    //	OMX_PARAM_BUFFER_MEMORYTYPE 			memTypeCfg;
    	OMX_PARAM_PORTDEFINITIONTYPE 			paramPort;
    //	OMX_PARAM_VFPC_NUMCHANNELPERHANDLE 		sNumChPerHandle;
    //	OMX_CONFIG_ALG_ENABLE 					algEnable;
    	OMX_CONFIG_VIDCHANNEL_RESOLUTION 		chResolution;
    
    //	OMX_CONFIG_SUBSAMPLING_FACTOR 			sSubSamplinginfo = {NULL};
    
    	//int InterlaceInput 	= 0;
    
    	int nWidth = 1280;
    	int nHeight = 720;
    
    	CTI_SetDEI_ComponentName(ComponentID,ComponentName);
    
    	Get_Output_Dimention(OutputResolution,&nWidth,&nHeight);
    
    	CTI_DEBUG_SAY("\nApplying Output Port Params of %s Component ...\n", ComponentName);
    
    
    	/* set output height/width and color format */
    	OMX_INIT_PARAM (&paramPort);
    	paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX;
    	OMX_GetParameter (hDEI, OMX_IndexParamPortDefinition,&paramPort);
    
    	paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX;
    	paramPort.format.video.nFrameWidth = nWidth;
    	paramPort.format.video.nFrameHeight = nHeight;
    	paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
    	paramPort.nBufferAlignment = 0;
    	paramPort.nBufferCountActual = IL_CLIENT_DEI_OUTPUT_BUFFER_COUNT;
    
    	paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
    	paramPort.format.video.nStride = nWidth;
    	paramPort.nBufferSize = (paramPort.format.video.nStride * nHeight * 3) / 2;
    
    
    	CTI_DEBUG_SAY ("%s Set output port1 params (width = %d, height = %d)\r\n",ComponentName, nWidth,nHeight);
    	OMX_SetParameter (hDEI, OMX_IndexParamPortDefinition,&paramPort);
    
    
        OMX_INIT_PARAM (&paramPort);
        paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX + 1;
        OMX_GetParameter (hDEI, OMX_IndexParamPortDefinition,&paramPort);
    
        paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX + 1;
        paramPort.format.video.nFrameWidth = nWidth;
        paramPort.format.video.nFrameHeight = nHeight;
        paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
        paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
        paramPort.nBufferAlignment = 0;
        paramPort.nBufferCountActual = IL_CLIENT_ENC_INPUT_BUFFER_COUNT;
        paramPort.format.video.nStride = nWidth;
    
        /* This port is connected to encoder and provides 420 o/p */
        //paramPort.nBufferSize = (paramPort.format.video.nStride * paramPort.format.video.nFrameHeight * 3) >> 1;
        paramPort.nBufferSize = (nWidth * nHeight * 3) / 2;
    
    
        CTI_DEBUG_SAY ("Set %s output port2 params (width = %d, height = %d)\r\n", ComponentName,nWidth,nHeight);
        OMX_SetParameter (hDEI, OMX_IndexParamPortDefinition,&paramPort);
    
    
        CTI_DEBUG_SAY ("%s Set output resolution... ",ComponentName);
        OMX_INIT_PARAM (&chResolution);
        /* first output to Secondary DEI */
        chResolution.Frm0Width = nWidth;
        chResolution.Frm0Height = nHeight;
        chResolution.Frm0Pitch = nWidth;
    
        /* second output to encode */
        chResolution.Frm1Width = nWidth;
        chResolution.Frm1Height = nHeight;
        chResolution.Frm1Pitch = nWidth;
        chResolution.FrmStartX = 0;
        chResolution.FrmStartY = 0;
        chResolution.FrmCropWidth = 0;
        chResolution.FrmCropHeight = 0;
        chResolution.eDir = OMX_DirOutput;
        chResolution.nChId = 0;
    
        eError = OMX_SetConfig (hDEI,(OMX_INDEXTYPE) OMX_TI_IndexConfigVidChResolution,&chResolution);
        if (eError != OMX_ErrorNone)
        {
          CTI_DEBUG_ERROR ("FAILED\r\n");
          return eError;
        }
        CTI_DEBUG_SAY ("Done\r\n");
    
        return eError;
    
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
    

    Regards

    R.Abdul Rahman

  • Hello,

    Regarding the 1080i capture on DM8168 GP rev 1.1:

    For 1080i we are using 422 format, and pitch would be 2 x width. On GP rev 1.1 DM8168, this pitch is not supported for >1920, so that is why is not working. GP rev 2.1 supports this.

    Regarding constant bitrate setting:

    I will set the use case as soon as possible.Please try this settings and let me know:

    tVidEncBitRate.eControlRate = OMX_Video_ControlRateConstant;

     tEncoderPreset.eRateControlPreset =  OMX_Video_RC_Low_Delay;

    tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.rateControlParamsPreset = IH264_RATECONTROLPARAMS_USERDEFINED;

    tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.encodingPreset = XDM_USER_DEFINED;

      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.HRDBufferSize = pAppData->nBitRate * 0.5;
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.initialBufferLevel = pAppData->nBitRate * 0.5;

    Compare these setting with you settings and give a try.
    Let me know.

    Best Regards,

    Margarita

  • Hi

    We have tested the Encoder with your recommended settings but encoder output bitrate is not constant,

    we have set the Encoder bitrate to 500K but it is going upto 2500K based on the Image complexity.

    my current settings is given below. please help us to resolve this issue.

    OMX_ERRORTYPE CTI_Apply_h264_params_TI(    OMX_HANDLETYPE         hEncoder,
                                            CTI_VideoConfig        EncoderConfig,
                                             CTI_Adv_AVC_Config    AdvEncoderConfig)
    {


        //////////////////////////////////////////////////////////////////////////////////////////////////

        OMX_VIDEO_PARAM_BITRATETYPE tVidEncBitRate;

        OMX_VIDEO_PARAM_ENCODER_PRESETTYPE tEncoderPreset;

        OMX_ERRORTYPE eError = OMX_ErrorUndefined;

        OMX_VIDEO_CONFIG_DYNAMICPARAMS tDynParams;

        OMX_VIDEO_PARAM_STATICPARAMS tStaticParam;

        OMX_INIT_PARAM(&tStaticParam);

        tStaticParam.nPortIndex = OMX_VIDENC_OUTPUT_PORT;


        OMX_INIT_PARAM(&tDynParams);

        tDynParams.nPortIndex = OMX_VIDENC_OUTPUT_PORT;

        eError =    OMX_GetParameter (hEncoder, OMX_TI_IndexParamVideoDynamicParams,&tDynParams);


            /* For changing bit rate following index can be used */
        OMX_INIT_PARAM(&tVidEncBitRate);

        tVidEncBitRate.nPortIndex = OMX_VIDENC_OUTPUT_PORT;

        eError = OMX_GetParameter (hEncoder, OMX_IndexConfigVideoBitrate,&tVidEncBitRate);

        tVidEncBitRate.eControlRate = OMX_Video_ControlRateConstant;

        tVidEncBitRate.nTargetBitrate = (EncoderConfig.Bitrate*1000);

        eError =    OMX_SetParameter (hEncoder, OMX_IndexParamVideoBitrate,&tVidEncBitRate);



        /* Encoder Preset settings */
        OMX_INIT_PARAM(&tEncoderPreset);
        tEncoderPreset.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
        eError =    OMX_GetParameter (hEncoder, OMX_TI_IndexParamVideoEncoderPreset,&tEncoderPreset);

        tEncoderPreset.eEncodingModePreset = OMX_Video_Enc_High_Speed_Med_Quality;
        tEncoderPreset.eRateControlPreset = OMX_Video_RC_Low_Delay;
        eError =    OMX_SetParameter (hEncoder, OMX_TI_IndexParamVideoEncoderPreset,&tEncoderPreset);


        eError = OMX_GetParameter (hEncoder, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
        tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.encodingPreset =    XDM_USER_DEFINED;

        tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.HRDBufferSize = (EncoderConfig.Bitrate*1000) * 0.5;

        tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.initialBufferLevel = (EncoderConfig.Bitrate*1000) * 0.5;

        return eError;

        //////////////////////////////////////////////////////////////////////////////////////////////////////


    }

    Regards

    R.Abdul Rahman

  • Hi,

    Any update on the Encoder component setting for CBR ?

    Please help us to resolve this issue.

    Thanks

    Regards

    R.Abdul Rahman.

  • Hello,

    I am working on this.


    Could you check the encoder file with Bitrate Viewer please.

    You could find a link in this e2e forum thread.

    Post me what it shows.

    Best Regards,

    Margarita

  • Hello,

    We have analyzed the encoder o/p, using the recommended software "Bitrate Viewer" and Elecard

    stream analyser. The Screen shot and the sample h264 file is attached for your ref. 7416.sample_1080_500Kb_ES.h264.zip

    Regards

    R.Abdul Rahman.

  • Hi Margarita,

    Any updates on CBR Issue, we are waiting for the response.

    Please help us to resolve this issue.

    Thanks

    Regards

    R.Abdul Rahman.

  • Hello,

    Could you set tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluControlPreset

    to  IH264_NALU_CONTROL_USERDEFINED and set all nalUnitControlParams.

    Set the FILLER(bit 12): This bit informs encoder to insert filler data. It is encoder’s decision to put
    filler data or not based upon the constant bit rate need

    Do not set it for naluPresentMaskEndOfSequence.

    Check the h264enc user guide page 174 for the  Control masks and the table on 175 for the bit allocation:




    Let me know the result.

    Best Regards,

    Margarita

  • Hi Margarita,

    We have enabled the Filler info in "nalUnitControlParams".

    still it behaves the same. we have attached the sample h264 file , screen shots of "elecard stream analyzer" output and "bitrate viewer" output for your ref. and the encoder static param settings

    2768.Enc_static_param_settings.c
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluControlPreset 	= IH264_NALU_CONTROL_USERDEFINED;
    tStaticParam.videoStaticParams.h264EncStaticParams.gopStructure					= IH264ENC_GOPSTRUCTURE_UNIFORM ;//IH264ENC_GOPSTRUCTURE_NONUNIFORM; ;//
    tStaticParam.videoStaticParams.h264EncStaticParams.transformBlockSize				= IH264_TRANSFORM_ADAPTIVE;
    tStaticParam.videoStaticParams.h264EncStaticParams.log2MaxFNumMinus4				= 0;
    tStaticParam.videoStaticParams.h264EncStaticParams.referencePicMarking 				= IH264_LONG_TERM_PICTURE;//IH264_SHORT_TERM_PICTURE;
    tStaticParam.videoStaticParams.h264EncStaticParams.enableLongTermRefFrame 			= 1;
    
    
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskStartOfSequence 	|= 0x33BE; //|= 0x23BE;
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIDRPicture 	|= 0x33BE; //|= 0x23BE;
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskNonIntraPicture 	|= 0x33BE; //|= 0x23BE;
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskEndOfSequence = 0;
    
    
    tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.vuiCodingPreset 		= IH264_VUICODING_USERDEFINED;
    tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.aspectRatioInfoPresentFlag 	= 1;
    tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.aspectRatioIdc 		= IH264ENC_ASPECTRATIO_EXTENDED;
    tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.videoSignalTypePresentFlag 	= 1;//0;
    tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.videoFormat 			= IH264ENC_VIDEOFORMAT_NTSC;
    tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.videoFullRangeFlag 		= 1;
    tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.timingInfoPresentFlag	= 0;//1;
    tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.hrdParamsPresentFlag 	= 1;//0;
    tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.numUnitsInTicks 		= 1000;
    tStaticParam.videoStaticParams.h264EncStaticParams.IDRFrameInterval = 1;
    
    
    

    8206.sample_1080_500kb_with_filler.264.zip

    Regards

    R.Abdul Rahman.

  • Hello,

    500kbps for encoding 1080p is too less.

    Best Regards,

    Margarita

  • Hello Margarita,

    Yes we know that, but my customer requirement is 500kbps, we will talk to them regarding this.

    But we need a solution to fix the CBR.

    Please give us the Encoder component settings as soon as possible.

    Thanks for your help.

    Regards

    R.Abdul Rahman.

  • Hello,

    Please check this thread it may helps with some suggestions:

    http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/716/t/318755.aspx

    Best Regards,

    Margarita

  • Hello Abdul Rahman Rasool,

    Could you try with this setting and let me know what you are observing:

      tVidEncBitRate.eControlRate = OMX_Video_ControlRateConstant;

    ....

    tEncoderPreset.eEncodingModePreset = OMX_Video_Enc_Med_Speed_High_Quality;

    ....

    tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.profile = IH264_HIGH_PROFILE;
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.level   = IH264_LEVEL_42;
     
     

      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.encodingPreset =  XDM_HIGH_SPEED_MED_QUALITY;


    //If ratecontrolpreset is set as user defined then the rcAlgo should be set. In case it is set as IVIDEO_LOW_DELAY the rcAlgo could be not set
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.rateControlPreset = IVIDEO_LOW_DELAY;

      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.HRDBufferSize = pAppData->nBitRate * 0.5;
     
     
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.initialBufferLevel = pAppData->nBitRate * 0.5;
     
     
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.rateControlParamsPreset = IH264_RATECONTROLPARAMS_USERDEFINED;
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.rcAlgo = IH264_RATECONTROL_PRC_LOW_DELAY;
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.allowFrameSkip = OMX_FALSE;
     
     
      
     
    //    tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.maxBitRate = pAppData->nBitRate;
               
    //    tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.minBitRate = pAppData->nBitRate;
               



    tStaticParam.videoStaticParams.h264EncStaticParams.numTemporalLayer = IH264_TEMPORAL_LAYERS_1;


    /* for base profile */
    //tStaticParam.videoStaticParams.h264EncStaticParams.transformBlockSize = IH264_TRANSFORM_ADAPTIVE;
    //tStaticParam.videoStaticParams.h264EncStaticParams.entropyCodingMode = IH264_ENTROPYCODING_CAVLC;


    // for the mask bits, please refer to codec user guide
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluControlPreset = IH264_NALU_CONTROL_USERDEFINED;
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskStartOfSequence |=  0x11A0; //0x01A0;
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIDRPicture |=  0x11A0; //0x01A0;
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIntraPicture |= 0x11A0; //0x01A0;
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskNonIntraPicture |= 0x0002; //0x0002;
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskEndOfSequence |= 0x0C00;

    Could you try with bitrate at least 8000 kbps.

    Could you share yours last setting of the encoder component as well?

    Best Regards,

    Margarita

  • Hello Margarita,


    We have applied your recamondded settings. The elecard stream analyser shows "bitrate type: VBR".
    We have attached the screenshot and the sample file with this mail.

    We have attached the last encoder settings which you have asked.

    0257.H264_Settings_TI_Recomended.c
    OMX_ERRORTYPE CTI_Apply_h264_params_TI(	OMX_HANDLETYPE 		hEncoder,
    										CTI_VideoConfig		EncoderConfig,
     										CTI_Adv_AVC_Config	AdvEncoderConfig)
    {
    
    
    	//////////////////////////////////////////////////////////////////////////////////////////////////
    
    	OMX_VIDEO_PARAM_BITRATETYPE tVidEncBitRate;
    
    	OMX_VIDEO_PARAM_ENCODER_PRESETTYPE tEncoderPreset;
    
    	OMX_ERRORTYPE eError = OMX_ErrorUndefined;
    
    	OMX_VIDEO_CONFIG_DYNAMICPARAMS tDynParams;
    
    	OMX_VIDEO_PARAM_STATICPARAMS tStaticParam;
    
    	OMX_INIT_PARAM(&tStaticParam);
    
    	tStaticParam.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    
    	OMX_INIT_PARAM(&tDynParams);
    
    	tDynParams.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    
    	eError = OMX_GetParameter (hEncoder, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
    
    	tVidEncBitRate.eControlRate = OMX_Video_ControlRateConstant;
    	tEncoderPreset.eEncodingModePreset = OMX_Video_Enc_Med_Speed_High_Quality;
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.profile = IH264_HIGH_PROFILE;
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.level   = IH264_LEVEL_42;
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.encodingPreset =  XDM_HIGH_SPEED_MED_QUALITY;
    	//If ratecontrolpreset is set as user defined then the rcAlgo should be set. In case it is set as IVIDEO_LOW_DELAY the rcAlgo could be not set
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.rateControlPreset = IVIDEO_LOW_DELAY;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.HRDBufferSize = (EncoderConfig.Bitrate*1000) * 0.5;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.initialBufferLevel = (EncoderConfig.Bitrate*1000) * 0.5;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.rateControlParamsPreset = IH264_RATECONTROLPARAMS_USERDEFINED;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.rcAlgo = IH264_RATECONTROL_PRC_LOW_DELAY;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.allowFrameSkip = OMX_FALSE;
    	//    tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.maxBitRate = pAppData->nBitRate;
    	//    tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.minBitRate = pAppData->nBitRate;
    	tStaticParam.videoStaticParams.h264EncStaticParams.numTemporalLayer = IH264_TEMPORAL_LAYERS_1;
    
    
    	/* for base profile */
    	//tStaticParam.videoStaticParams.h264EncStaticParams.transformBlockSize = IH264_TRANSFORM_ADAPTIVE;
    	//tStaticParam.videoStaticParams.h264EncStaticParams.entropyCodingMode = IH264_ENTROPYCODING_CAVLC;
    
    
    	// for the mask bits, please refer to codec user guide
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluControlPreset = IH264_NALU_CONTROL_USERDEFINED;
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskStartOfSequence |=  0x11A0; //0x01A0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIDRPicture |=  0x11A0; //0x01A0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIntraPicture |= 0x11A0; //0x01A0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskNonIntraPicture |= 0x0002; //0x0002;
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskEndOfSequence |= 0x0C00;
    
    	eError = OMX_SetParameter (hEncoder, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
    
    	printf("\n\n\n========================================== TI Settings Applied ===============================================\n\n\n");
    
    
    	return eError;
    
    	//////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
    }
    
    

    6116.H264_Settings.c
    
    
    OMX_ERRORTYPE CTI_Apply_h264_params(	OMX_HANDLETYPE 		hEncoder,
    					CTI_VideoConfig		EncoderConfig,
     					CTI_Adv_AVC_Config	AdvEncoderConfig)
    {
    	OMX_ERRORTYPE eError = OMX_ErrorUndefined;
    
    	OMX_VIDEO_PARAM_ENCODER_PRESETTYPE tEncoderPreset;
    
    	int PocType = 0;
    
    
    	OMX_VIDEO_PARAM_STATICPARAMS tStaticParam;
    
    	OMX_INIT_PARAM(&tStaticParam);
    
    	tStaticParam.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    
    	OMX_VIDEO_PARAM_AVCTYPE tAVCParams;
    
    	OMX_INIT_PARAM(&tAVCParams);
    	tAVCParams.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    	eError = OMX_GetParameter(hEncoder, OMX_IndexParamVideoAvc, &tAVCParams);
    
    	if (eError != OMX_ErrorNone)
    	{
    		ERROR("failed to Encoder OMX_SetParameter OMX_IndexParamVideoAvc \n");
    	}
    
    
    	if (AdvEncoderConfig.nBFrameCount < 0)
    		AdvEncoderConfig.nBFrameCount = 0;
    	else if (AdvEncoderConfig.nBFrameCount > 3)
    		AdvEncoderConfig.nBFrameCount = 3;
    
    	switch (AdvEncoderConfig.eAVC_Profile)
    	{
    
    	case CTI_AVCProfile_Main:
    		tAVCParams.eProfile = OMX_VIDEO_AVCProfileMain;
    		CTI_DEBUG_SAY("**** Main Profile Selected *** ID(%d)\n",AdvEncoderConfig.eAVC_ProfileLevel_ID);
    		tAVCParams.bEnableASO = OMX_TRUE;
    		tAVCParams.bEnableRS = OMX_TRUE;
    		tAVCParams.bEnableFMO = OMX_FALSE;
    		tAVCParams.bEnableUEP = OMX_TRUE;
    
    		tAVCParams.bEntropyCodingCABAC = OMX_TRUE;
    
    		if (AdvEncoderConfig.eBFrames == AVC_BFrame_ENABLE)
    			tAVCParams.nBFrames = AdvEncoderConfig.nBFrameCount;
    		else
    			tAVCParams.nBFrames = 0;
    		break;
    
    
    	case CTI_AVCProfile_High:
    		tAVCParams.eProfile = OMX_VIDEO_AVCProfileHigh;
    		CTI_DEBUG_SAY("**** High Profile Selected *** ID(%d)\n",AdvEncoderConfig.eAVC_ProfileLevel_ID);
    		tAVCParams.bEnableASO = OMX_TRUE;
    		tAVCParams.bEnableRS = OMX_TRUE;
    		tAVCParams.bEnableFMO = OMX_FALSE;
    		tAVCParams.bEnableUEP = OMX_TRUE;
    		tAVCParams.nBFrames = AdvEncoderConfig.nBFrameCount;
    
    		tAVCParams.bEntropyCodingCABAC = OMX_TRUE;
    
    		if (AdvEncoderConfig.eBFrames == AVC_BFrame_ENABLE)
    			tAVCParams.nBFrames = AdvEncoderConfig.nBFrameCount;
    		else
    			tAVCParams.nBFrames = 0;
    
    		break;
    
    	case CTI_AVCProfile_Baseline:
    	default:
    		tAVCParams.eProfile = OMX_VIDEO_AVCProfileBaseline;
    		CTI_DEBUG_SAY("**** BaseLine Profile Selected *** ID(%d) \n",AdvEncoderConfig.eAVC_ProfileLevel_ID);
    		tAVCParams.bEnableASO = OMX_FALSE;
    		tAVCParams.bEnableRS = OMX_FALSE;
    		tAVCParams.bEnableFMO = OMX_FALSE;
    		tAVCParams.bEnableUEP = OMX_FALSE;
    		tAVCParams.nBFrames = 0;
    
    		tAVCParams.bEntropyCodingCABAC = OMX_FALSE;
    		break;
    	}
    
    
    	switch(AdvEncoderConfig.eAVC_ProfileLevel_ID)
    	{
    		case CTI_AVCLevel31:	tAVCParams.eLevel = OMX_VIDEO_AVCLevel31;break;
    		case CTI_AVCLevel32:	tAVCParams.eLevel = OMX_VIDEO_AVCLevel32;break;
    		case CTI_AVCLevel4:		tAVCParams.eLevel = OMX_VIDEO_AVCLevel4;break;
    		case CTI_AVCLevel41:	tAVCParams.eLevel = OMX_VIDEO_AVCLevel41;break;
    
    		case CTI_AVCLevel5:		tAVCParams.eLevel = OMX_VIDEO_AVCLevel5;break;
    		case CTI_AVCLevel51:	tAVCParams.eLevel = OMX_VIDEO_AVCLevel51;break;
    
    		case CTI_AVCLevel42:
    		default:				tAVCParams.eLevel = OMX_VIDEO_AVCLevel42;break;
    	}
    
    	tAVCParams.bEntropyCodingCABAC = OMX_FALSE;
    
    	if ((AdvEncoderConfig.eAVC_Profile != CTI_AVCProfile_Baseline) && (AdvEncoderConfig.eEntropy == CTI_ENTROPY_CABAC))
    	{
    			tAVCParams.bEntropyCodingCABAC = OMX_TRUE;
    	}
    
    
    	//tAVCParams.bEntropyCodingCABAC = OMX_FALSE;
    	//CTI_DEBUG_SAY("\ntAVCParams.bEnableASO = %d\n",tAVCParams.bEnableASO);
    
    	//tAVCParams.eLoopFilterMode = OMX_VIDEO_AVCLoopFilterEnable;
    
    	eError = OMX_SetParameter(hEncoder, OMX_IndexParamVideoAvc, &tAVCParams);
    	if (eError != OMX_ErrorNone)
    	{
    		ERROR("failed to Encoder OMX_SetParameter OMX_IndexParamVideoAvc \n");
    	}
    
    	/* Encoder Preset settings */
    	OMX_INIT_PARAM(&tEncoderPreset);
    	tEncoderPreset.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    	eError =	OMX_GetParameter (hEncoder, OMX_TI_IndexParamVideoEncoderPreset,&tEncoderPreset);
    
    	//tEncoderPreset.eEncodingModePreset = OMX_Video_Enc_High_Speed_Med_Quality;
    	tEncoderPreset.eEncodingModePreset = OMX_Video_Enc_High_Speed;//OMX_Video_Enc_High_Quality;//OMX_Video_Enc_Med_Speed_High_Quality;
    
    	tEncoderPreset.eRateControlPreset = OMX_Video_RC_User_Defined;//OMX_Video_RC_Low_Delay;
    
    	eError =	OMX_SetParameter (hEncoder, OMX_TI_IndexParamVideoEncoderPreset,&tEncoderPreset);
    
    
    	//For Tesing
    	//CTI_IL_Client_Apply_Bitrate(hEncoder,EncoderConfig.Bitrate*1000,EncoderConfig.RateCtrl);
    
    
    
    	eError = OMX_GetParameter (hEncoder, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.encodingPreset =	XDM_USER_DEFINED;
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.numTemporalLayer =	IH264_TEMPORAL_LAYERS_1;
    
    
    	if(	(EncoderConfig.VideoInputResolution == VID_RES_S_1080I50) ||
    		(EncoderConfig.VideoInputResolution == VID_RES_S_1080i) ||
    		(EncoderConfig.VideoInputResolution == VID_RES_H_1080I50) ||
    		(EncoderConfig.VideoInputResolution == VID_RES_H_1080i)
    		)
    	{
    		//SetInterlaceEncodingType(hEncoder);
    		//tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.inputContentType =		IVIDEO_INTERLACED;
    		tStaticParam.videoStaticParams.h264EncStaticParams.bottomFieldIntra =	1;
    		tStaticParam.videoStaticParams.h264EncStaticParams.interlaceCodingType =	IH264_INTERLACE_DEFAULT;
    	}
    
    
    	/* for base profile */
    	tStaticParam.videoStaticParams.h264EncStaticParams.transformBlockSize =	IH264_TRANSFORM_DEFAULT;	//IH264_TRANSFORM_4x4;
    
    	if (AdvEncoderConfig.eAVC_Profile == CTI_AVCProfile_Baseline)
    		tStaticParam.videoStaticParams.h264EncStaticParams.entropyCodingMode =	IH264_ENTROPYCODING_CAVLC;
    	else
    	{
    		if(AdvEncoderConfig.eEntropy == CTI_ENTROPY_CAVLC)
    			tStaticParam.videoStaticParams.h264EncStaticParams.entropyCodingMode =	IH264_ENTROPYCODING_CAVLC;
    		else
    			tStaticParam.videoStaticParams.h264EncStaticParams.entropyCodingMode =	IH264_ENTROPYCODING_CABAC;
    	}
    
    	/* for base profile end */
    
    	/* for the mask bits, please refer to codec user guide */
    #if 0
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluControlPreset 	= IH264_NALU_CONTROL_USERDEFINED;
    	tStaticParam.videoStaticParams.h264EncStaticParams.gopStructure								= IH264ENC_GOPSTRUCTURE_NONUNIFORM;//IH264ENC_GOPSTRUCTURE_UNIFORM ;//
    	tStaticParam.videoStaticParams.h264EncStaticParams.transformBlockSize						= IH264_TRANSFORM_ADAPTIVE;
    	tStaticParam.videoStaticParams.h264EncStaticParams.log2MaxFNumMinus4						= 0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.referencePicMarking 						= IH264_SHORT_TERM_PICTURE;
    	tStaticParam.videoStaticParams.h264EncStaticParams.enableLongTermRefFrame 					= 0;
    #endif
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluControlPreset 	= IH264_NALU_CONTROL_USERDEFINED;
    	tStaticParam.videoStaticParams.h264EncStaticParams.gopStructure								= IH264ENC_GOPSTRUCTURE_UNIFORM ;//IH264ENC_GOPSTRUCTURE_NONUNIFORM; ;//
    	tStaticParam.videoStaticParams.h264EncStaticParams.transformBlockSize						= IH264_TRANSFORM_ADAPTIVE;
    	tStaticParam.videoStaticParams.h264EncStaticParams.log2MaxFNumMinus4						= 0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.referencePicMarking 						= IH264_LONG_TERM_PICTURE;//IH264_SHORT_TERM_PICTURE;
    	tStaticParam.videoStaticParams.h264EncStaticParams.enableLongTermRefFrame 					= 1;
    
    
    
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskStartOfSequence 	|= 0x33BE; //|= 0x2380;
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIDRPicture 	|= 0x33BE; //|= 0x2380;
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskNonIntraPicture 	|= 0x33BE; //|= 0x2380;
    	//tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskEndOfSequence |=	0x380;
    	tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskEndOfSequence = 0;
    
    
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.vuiCodingPreset 			= IH264_VUICODING_USERDEFINED;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.aspectRatioInfoPresentFlag 	= 1;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.aspectRatioIdc 				= IH264ENC_ASPECTRATIO_EXTENDED;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.videoSignalTypePresentFlag 	= 1;//0;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.videoFormat 				= IH264ENC_VIDEOFORMAT_NTSC;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.videoFullRangeFlag 			= 1;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.timingInfoPresentFlag 		= 0;//1;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.hrdParamsPresentFlag 		= 1;//0;
    	 tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.numUnitsInTicks 			= 1000;
    
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.IDRFrameInterval = 1;//I2P;//2;
    
    
    	if(((PocType < 0)) || (PocType > 2)) PocType = 0;
    
    	if (AdvEncoderConfig.eBFrames == AVC_BFrame_ENABLE) PocType = 0;
    
    	//Added as per ES-264 Stream
    	printf("########### Picture Order Count Type is %d ##################\n",PocType);
    	tStaticParam.videoStaticParams.h264EncStaticParams.picOrderCountType = PocType;//IH264_POC_TYPE_2;
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.enableGMVSei 								= 0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.enableWatermark 								= 0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.framePackingSEIParams.framePackingPreset		= 0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.stereoInfoParams.stereoInfoPreset 			= 0;
    
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.rateControlParamsPreset 	= IH264_RATECONTROLPARAMS_USERDEFINED;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.rcAlgo = IVIDEO_USER_DEFINED;//IH264_RATECONTROL_PRC;//IH264_RATECONTROL_PRC_LOW_DELAY;
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.removeExpensiveCoeff       = OMX_TRUE;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.enablePRC                	= OMX_TRUE;
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.enableHRDComplianceMode 	= OMX_TRUE;
    
    	/*******************************************************/
    
    #if 1
    	/* Qp Settings for I */
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpI        =   24;//OMX_VIDENC_DEFAULT_QP_IFRAME;  // 24
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpMaxI  	=   44;//OMX_VIDENC_DEFAULT_QPMAX_IFRAME; // 44
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpMinI   	=   8;//OMX_VIDENC_DEFAULT_QPMIN_IFRAME; // 8
    	/* Qp Settings for P */
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpP        =   24;//OMX_VIDENC_DEFAULT_QP_PFRAME; // 24
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpMaxP 	=   44;//OMX_VIDENC_DEFAULT_QPMAX_PFRAME; // 44
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpMinP 	=   8;//OMX_VIDENC_DEFAULT_QPMIN_PFRAME; // 8
    
    
    	/* Qp Settings for B */
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpOffsetB 	=	4;//OMX_VIDENC_DEFAULT_QPOFFSET_BFRAME; // 4
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpMaxB 	=	44;//OMX_VIDENC_DEFAULT_QPMAX_BFRAME; // 44
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.qpMinB 	=	8;//OMX_VIDENC_DEFAULT_QPMIN_BFRAME; //8
    
    
    	/* Chroma Qp Settings */
    	//pEncStaticParams->rateControlParams.chromaQPIndexOffset 						=    0;
    	/* Settings for the Quality Bias factor between I & P */
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.chromaQPIndexOffset        = -12;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.IPQualityFactor            = IH264_QUALITY_FACTOR_3;//IH264_QUALITY_FACTOR_2;//IH264_QUALITY_FACTOR_DEFAULT;
    #endif
    
    	/**********************************************************/
    
    
    
    
    	if(EncoderConfig.RateCtrl ==  ControlRate_Constant)
    	{
    		tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.allowFrameSkip            	= OMX_FALSE; //OMX_TRUE;
    		tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.enablePartialFrameSkip  	= OMX_FALSE;//OMX_TRUE;
    	}
    	else if(EncoderConfig.RateCtrl ==  ControlRate_ConstantSkipFrames)
    	{
    		tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.allowFrameSkip            	= OMX_TRUE;
    		tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.enablePartialFrameSkip  	= OMX_TRUE;
    
    	}
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.removeExpensiveCoeff        = OMX_TRUE;
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.initialBufferLevel        = ((EncoderConfig.Bitrate*1000) / 4);//1250000 ;//12000 000;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.HRDBufferSize            = ((EncoderConfig.Bitrate*1000) / 2);//1250000 * 2;
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.skipDistributionWindowLength = 0;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.numSkipInDistributionWindow = 0;//4;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.enableHRDComplianceMode = 1;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.VBRDuration = 0;//32;
    	tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.VBRsensitivity = 0;
    
    
    
    
    	eError = OMX_SetParameter (hEncoder, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
    
    	//for testing
    	//EncoderConfig.i2p = 500;
    
    	CTI_IL_Client_Apply_I2P(hEncoder, EncoderConfig.i2p); // Apply I2P and Slicing Params
    
    	if((AdvEncoderConfig.eEntropy == CTI_ENTROPY_CAVLC) && (AdvEncoderConfig.nEnableSlicing == 1))
    			CTI_IL_Client_EnableSlicing(hEncoder);
    
    	CTI_IL_Client_Apply_Bitrate(hEncoder,EncoderConfig.Bitrate*1000,EncoderConfig.RateCtrl);
    
    	printf("=========================================== h264 Params Applied ============================================\n");
    
    //	CTI_IL_Client_SetEncPreset(hEncoder, 0);
    
    	return eError;
    
    }
    
    
    
    
    
    OMX_ERRORTYPE CTI_IL_Client_Apply_I2P(OMX_HANDLETYPE pHandle, int i2p)
    {
    	OMX_ERRORTYPE eError = OMX_ErrorUndefined;
    
    	OMX_VIDEO_CONFIG_DYNAMICPARAMS tDynParams;
    
    
    	OMX_INIT_PARAM(&tDynParams);
    	tDynParams.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    	eError =	OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoDynamicParams,&tDynParams);
    
    	/* setting I frame interval */
    	tDynParams.videoDynamicParams.h264EncDynamicParams.videnc2DynamicParams.intraFrameInterval =	i2p;
    
    	eError =	OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoDynamicParams,&tDynParams);
    
    	if (eError != OMX_ErrorNone)
    	{
    		ERROR("failed to Encoder OMX_SetParameter tDynParams \n");
    	}
    
    	return eError;
    }
    
    OMX_ERRORTYPE CTI_IL_Client_EnableSlicing(OMX_HANDLETYPE pHandle)
    {
    	OMX_ERRORTYPE eError = OMX_ErrorUndefined;
    
    	OMX_VIDEO_CONFIG_DYNAMICPARAMS tDynParams;
    
    
    	OMX_INIT_PARAM(&tDynParams);
    	tDynParams.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    	eError =	OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoDynamicParams,&tDynParams);
    
    	tDynParams.videoDynamicParams.h264EncDynamicParams.sliceCodingParams.sliceCodingPreset = IH264_SLICECODING_USERDEFINED;
    	tDynParams.videoDynamicParams.h264EncDynamicParams.sliceCodingParams.sliceMode         = IH264_SLICEMODE_BYTES;
    	tDynParams.videoDynamicParams.h264EncDynamicParams.sliceCodingParams.sliceUnitSize     = 1024;//( 1024 * 4 ); //2048;
    	tDynParams.videoDynamicParams.h264EncDynamicParams.sliceCodingParams.streamFormat      = IH264_BYTE_STREAM;
    
    
    	eError =	OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoDynamicParams,&tDynParams);
    
    	printf("************************** Slicing Enabled **********************\n");
    
    	if (eError != OMX_ErrorNone)
    	{
    		ERROR("failed to Encoder OMX_SetParameter tDynParams \n");
    	}
    
    	return eError;
    
    }
    
    
    OMX_ERRORTYPE CTI_IL_Client_Apply_Bitrate_MinMax(OMX_HANDLETYPE pHandle,
    		OMX_U32 BitRate, CTI_EncBitrateCtrl RateCtrl)
    {
    	OMX_ERRORTYPE eError = OMX_ErrorUndefined;
    
    	XDAS_Int32 maxBitRate = 1024;
    
    	XDAS_Int32 minBitRate = 512;
    
    	OMX_VIDEO_PARAM_STATICPARAMS tStaticParam;
    
    	OMX_INIT_PARAM(&tStaticParam);
    
    	tStaticParam.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    	eError =
    			OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
    
    	if (RateCtrl != ControlRate_Variable)
    	{
    		maxBitRate = BitRate + ((BitRate / 100) * 5);
    		minBitRate = BitRate - ((BitRate / 100) * 10);
    
    		if (minBitRate < 0)
    		{
    			minBitRate = BitRate;
    		}
    	}
    	else
    	{
    		maxBitRate = -1;
    		minBitRate = 0;
    	}
    
    	CTI_DEBUG_SAY(" maxBitRate = %d minBitRate = %d ", maxBitRate, minBitRate);
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.maxBitRate =
    			maxBitRate;
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.minBitRate =
    			minBitRate;
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.rateControlPreset =	IVIDEO_LOW_DELAY;
    
    	eError =
    			OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
    
    	return eError;
    }
    
    
    OMX_ERRORTYPE CTI_IL_Client_Apply_Bitrate(OMX_HANDLETYPE pHandle,
    		OMX_U32 BitRate, CTI_EncBitrateCtrl RateCtrl)
    {
    	OMX_VIDEO_PARAM_BITRATETYPE tVidEncBitRate;
    
    	OMX_ERRORTYPE eError = OMX_ErrorUndefined;
    
    	OMX_VIDEO_CONFIG_DYNAMICPARAMS tDynParams;
    
    	OMX_INIT_PARAM(&tDynParams);
    
    	if (BitRate < 256000)	BitRate = 256000;
    
    
    	CTI_DEBUG_SAY("\n\nApplying Bitrate Range ....");
    	eError = CTI_IL_Client_Apply_Bitrate_MinMax(pHandle, BitRate, RateCtrl);
    
    	if (eError != OMX_ErrorNone)
    	{
    		ERROR("failed to set Encode bitrate \n");
    	}
    	else
    		CTI_DEBUG_SAY("Done\n\n");
    
    	tDynParams.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    	eError = OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoDynamicParams,&tDynParams);
    
    
    		/* For changing bit rate following index can be used */
    	OMX_INIT_PARAM(&tVidEncBitRate);
    
    	tVidEncBitRate.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    	//eError = OMX_GetParameter (pHandle, OMX_IndexParamVideoBitrate,&tVidEncBitRate);
    	eError = OMX_GetParameter (pHandle, OMX_IndexConfigVideoBitrate,&tVidEncBitRate);
    
    	switch (RateCtrl)
    	{
    
    	case ControlRate_Constant:
    		tVidEncBitRate.eControlRate = OMX_Video_ControlRateConstant;
    		//CTI_DEBUG_SAY("@@@@@@@@@@@@@@@@@@@@@@ Constant Bitrate Selected\n");
    		break;
    
    	case ControlRate_ConstantSkipFrames:
    		tVidEncBitRate.eControlRate = OMX_Video_ControlRateConstantSkipFrames;
    		//CTI_DEBUG_SAY("@@@@@@@@@@@@@@@@@ Constant Bitrate with Frame Skip Selected\n");
    		break;
    
    	case ControlRate_Variable:
    	default:
    		tVidEncBitRate.eControlRate = OMX_Video_ControlRateVariable;
    		//CTI_DEBUG_SAY("@@@@@@@@@@@ Variable Bitrate Selected\n");
    		break;
    
    	}
    
    	CTI_DEBUG_SAY("------------- Target bitrate = %d BitrateCtrl = %d -------------------\n",BitRate, RateCtrl);
    
    	tVidEncBitRate.nTargetBitrate = BitRate;
    
    	eError =OMX_SetParameter (pHandle, OMX_IndexParamVideoBitrate,&tVidEncBitRate);
    
    	if (eError != OMX_ErrorNone)	ERROR("failed to set Encode bitrate \n");
    
    	CTI_DEBUG_SAY("\n\nApplying Bitrate Range ....");
    
    	eError = CTI_IL_Client_Apply_Bitrate_MinMax(pHandle, BitRate, RateCtrl);
    
    	if (eError != OMX_ErrorNone)
    	{
    		ERROR("failed to set Encode bitrate \n");
    	}
    	else
    		CTI_DEBUG_SAY("Done\n\n");
    
    
    	return eError;
    }
    
    
    OMX_ERRORTYPE CTI_IL_Client_Apply_Bitrate_MinMax(OMX_HANDLETYPE pHandle,
    		OMX_U32 BitRate, CTI_EncBitrateCtrl RateCtrl)
    {
    	OMX_ERRORTYPE eError = OMX_ErrorUndefined;
    
    	XDAS_Int32 maxBitRate = 1024;
    
    	XDAS_Int32 minBitRate = 512;
    
    	OMX_VIDEO_PARAM_STATICPARAMS tStaticParam;
    
    	OMX_INIT_PARAM(&tStaticParam);
    
    	tStaticParam.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
    	eError = OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
    
    	if (RateCtrl != ControlRate_Variable)
    	{
    		maxBitRate = BitRate + ((BitRate / 100) * 5);
    		minBitRate = BitRate - ((BitRate / 100) * 10);
    
    		if (minBitRate < 0)
    		{
    			minBitRate = BitRate;
    		}
    	}
    	else
    	{
    		maxBitRate = -1;
    		minBitRate = 0;
    	}
    
    	CTI_DEBUG_SAY(" maxBitRate = %d minBitRate = %d ", maxBitRate, minBitRate);
    
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.maxBitRate =	maxBitRate;
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.minBitRate =	minBitRate;
    	tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.rateControlPreset =	IVIDEO_LOW_DELAY;
    
    	eError = OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,&tStaticParam);
    
    	return eError;
    }
    
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    

    0435.1080_ES_8M.zip

    Thanks,
    Abdul Rahman.

  • Hello,

    You could post your query in our multimedia forum:

    http://e2e.ti.com/support/embedded/multimedia_software_codecs/default.aspx

    Best Regards,

    Margarita

  • Hi Margarita,

    We have posed the Query to "multimedia_software_codec" forum (as per your suggestion).

    but unfortunately we didn't get  reply.

    So can you please tell us, Is it possible to Fix the CBR issue in the current SDK ?

    in the previous post you said that, you are going to give the encoder settings for CBR

    so can you PLEASE send us the settings.

    Note: we are not concern about the Video Quality, but we are very much concern about the bitrate.

    Please help us.

    Regards,

    R.Abdul Rahman

  • Hi Margarita,

    Any Updates ?

    or Can you please send you encoder component settings for CBR ?

    we are waiting for your response.

    Please help us to resolve this issue.

    Thank you.

    Regards,

    R.Abdul Rahman

  • Hello,

    My encoder's setting are shared in my previous post.

    Could you share with me .yuv file that you are using to give a try on my side?

    Please notice that the encoder configuration setting may also depend upon the factors like resolution, complexity of the video, etc.

    Could  you provide me information about what is the h264 encoder version that you are using here?
    Best Regards,
    Margarita
  • Hi Margarita,

    Thanks for the Response.

    we tried your settings from your previous post earlier, but that is also not working. (we have already sent the h264 files and the elecard stream eye results in the previous posts )

    that's why we are asking for any updates on the encoder settings for CBR

    we are using the Sony SDI Camera as the Source and we are running the capture and encoder application.

    so we dont have the .yuv file.

    My SDK and Enocder version details as follows

    1. EzSDK version 5.05.02.00

    2. Encoder version 02_00_02_02.

    we have a doubt can you please clarify,

    if we set the encoder to CBR mode encoder should maintain the output bitrate as constant. irrespective of the complexity and resolution right ? ( video Quality degradation and frame skip is acceptable )

    Regards

    R.Abdul Rahman.

  • Hello,

    Could you grab the yuv before the encoder component, save in file and share it with me.

    Best Regards,

    Margarita

  • Hi Margarita,

    we have captured the file but unable to upload the file due to file size.

    is there any FTP server or some other way to share this file to TI forum.

    1. if we set the encoder bitrate 512 with this video sequence then encoder o/p bit-rate goes upto 2000

    2. If we set the same video with 1080 then the o/p bit-rate goes upto 3500

    Note: we are not much concern about the output video quality. but the o/p video bitrate must be contant.

    Please help us to resolve this.

    Regards

    R.Abdul Rahman.

  • Hello,

    Please contact with me: mgashova@ti.com

    Best Regards,

    Margarita

  • Hello,

    Test stream : Sample_yuv.yuv

    Resolution: 1280x720

    Here is results on my side:

    On the first Bitrate View is the encoded video with 5000kb/s.

    On the second one is with 500kb/s.

    Best Regards,

    Margarita

  • Hello Margarita,


    Can you PLEASE share your Encoder component settings (full settings, if possible please give us the sample source application).

    it will be help full for us to debug my encoder settings.

    Thank you very much.

    Regards

    R.Abdul Rahman.

  • Hello,

    2476.ilclient_utils.c.txt
    /*
     *  Copyright (c) 2010-2011, Texas Instruments Incorporated
     *
     *  Redistribution and use in source and binary forms, with or without
     *  modification, are permitted provided that the following conditions
     *  are met:
     *
     *  *  Redistributions of source code must retain the above copyright
     *     notice, this list of conditions and the following disclaimer.
     *
     *  *  Redistributions in binary form must reproduce the above copyright
     *     notice, this list of conditions and the following disclaimer in the
     *     documentation and/or other materials provided with the distribution.
     *
     *  *  Neither the name of Texas Instruments Incorporated nor the names of
     *     its contributors may be used to endorse or promote products derived
     *     from this software without specific prior written permission.
     *
     *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     *  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     *  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     *  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     *  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     *
     *  Contact information for paper mail:
     *  Texas Instruments
     *  Post Office Box 655303
     *  Dallas, Texas 75265
     *  Contact information:
     *  http://www-k.ext.ti.com/sc/technical-support/product-information-centers.htm?
     *  DCMP=TIHomeTracking&HQS=Other+OT+home_d_contact
     *  ============================================================================
     *
     */
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <pthread.h>
    #include <unistd.h>
    #include <xdc/std.h>
    #include <memory.h>
    #include <getopt.h>
    
    /*-------------------------program files -------------------------------------*/
    #include "ti/omx/interfaces/openMaxv11/OMX_Core.h"
    #include "ti/omx/interfaces/openMaxv11/OMX_Component.h"
    #include "OMX_TI_Common.h"
    #include "OMX_Video.h"
    #include "OMX_TI_Video.h"
    #include "ilclient.h"
    #include "ilclient_utils.h"
    #include <omx_venc.h>
    #include <omx_vfpc.h>
    #include <omx_vfdc.h>
    #include <omx_ctrl.h>
    #include <omx_vfcc.h>
    #include <OMX_TI_Index.h>
    /*---------------------- function prototypes ---------------------------------*/
    /* None */
    
    void usage (IL_ARGS *argsp)
    {
      printf
        ("encode_a8host_debug.xv5T \n"
         "-o | --output          output filename \n"
         "-i | --input           input filename \n"
         "-f | --framerate       encode frame rate \n"
         "-b | --bitrate         encode bit rate \n"
         "-w | --width           encode width \n"
         "-h | --height          encode height \n"
         "-c | --codec           h264, mpeg4, h263 \n"
       );                      
      printf(" example -    ./encode_a8host_debug.xv5T -o sample.h264 -i sample.yuv -f 60 -b 1000000 -w 1920 -h 1080 -c h264\n");
      
      exit (1);
    }
    
    /* ========================================================================== */
    /**
    * parse_args() : This function parses the input arguments provided to app.
    *
    * @param argc             : number of args 
    * @param argv             : args passed by app
    * @param argsp            : parsed data pointer
    *
    *  @return      
    *
    *
    */
    /* ========================================================================== */
    
    void parse_args (int argc, char *argv[], IL_ARGS *argsp)
    {
      const char shortOptions[] = "o:i:w:h:f:b:c:";
      const struct option longOptions[] =
      {
        {"output", required_argument, NULL, ArgID_OUTPUT_FILE},
        {"input", required_argument, NULL, ArgID_INPUT_FILE},
        {"width", required_argument, NULL, ArgID_WIDTH},
        {"height", required_argument, NULL, ArgID_HEIGHT},
        {"framerate", required_argument, NULL, ArgID_FRAMERATE},
        {"bitrate", required_argument, NULL, ArgID_BITRATE},
        {"codec", required_argument, NULL, ArgID_CODEC},
        {0, 0, 0, 0}
      };
    
      int index, outfile = 0, infile = 0, codec = 0, width = 0, height =0;
      int argID;
    
      for (;;)
      {
        argID = getopt_long (argc, argv, shortOptions, longOptions, &index);
    
        if (argID == -1)
        {
          break;
        }
    
        switch (argID)
        {
          case ArgID_OUTPUT_FILE:
          case 'o':
            strncpy (argsp->output_file, optarg, MAX_FILE_NAME_SIZE);
            outfile = 1;
            break;
          case 'i':
            strncpy (argsp->input_file, optarg, MAX_FILE_NAME_SIZE);
            infile = 1;
            break;
          case ArgID_FRAMERATE:
          case 'f':
            argsp->frame_rate = atoi (optarg);
            break;
          case ArgID_WIDTH:
          case 'w':
            argsp->width = atoi (optarg);
            width = 1;
            break;
          case ArgID_HEIGHT:
          case 'h':
            argsp->height = atoi (optarg);
            height = 1;
            break;
          case ArgID_BITRATE:
          case 'b':
            argsp->bit_rate = atoi (optarg);
            break;
          case ArgID_CODEC:
          case 'c':
            strncpy (argsp->codec, optarg, MAX_CODEC_NAME_SIZE);
            codec = 1;
            break;
          default:
            usage (argsp);
            exit (1);
        }
      }
    
      if (optind < argc)
      {
        usage (argsp);
        exit (EXIT_FAILURE);
      }
    
      if (argsp->bit_rate == 0 || !outfile || !infile || argsp->frame_rate == 0  || !width || !height || !codec)
      {
        usage (argsp);
        exit (1);
      }
    
      printf ("output file: %s\n", argsp->output_file);
      printf ("input file: %s\n", argsp->input_file);
      printf ("bit_rate: %d\n", argsp->bit_rate);
      printf ("frame_rate: %d\n", argsp->frame_rate);
      printf ("codec: %s\n", argsp->codec);
      printf ("width: %d\n", argsp->width);
      printf ("height: %d\n", argsp->height);
    }
    
    /* ========================================================================== */
    /**
    * IL_ClientInit() : This function is to allocate and initialize the application
    *                   data structure. It is just to maintain application control.
    *
    * @param pAppData          : appliaction / client data Handle 
    * @param width             : stream width
    * @param height            : stream height
    * @param frameRate         : encode frame rate
    * @param bitrate           : encoder bit rate
    * @param numFrames         : encoded number of frames
    * @param displayId         : display instance id
    *
    *  @return      
    *
    *
    */
    /* ========================================================================== */
    
    void IL_ClientInit (IL_Client **pAppData, int width, int height, int frameRate,
                        int bitRate, char *codec)
    {
      int i;
      IL_Client *pAppDataPtr;
      IL_CLIENT_INPORT_PARAMS *inPortParamsPtr;
      IL_CLIENT_OUTPORT_PARAMS *outPortParamsPtr;
    
      /* Allocating data structure for IL client structure / buffer management */
    
      pAppDataPtr = (IL_Client *) malloc (sizeof (IL_Client));
      memset (pAppDataPtr, 0x0, sizeof (IL_Client));
    
      /* update the user provided parameters */
      pAppDataPtr->nFrameRate   = frameRate;
      pAppDataPtr->nBitRate     = bitRate;
      /* pAppDataPtr->nEncodedFrms = numFrames; */
      
      pAppDataPtr->nHeight      = height;
      pAppDataPtr->nWidth       =  width; 
    
      if (strcmp (codec, "h264") == 0)
      {
        pAppDataPtr->eCompressionFormat = OMX_VIDEO_CodingAVC;
      }
      else if (strcmp (codec, "mpeg4") == 0)
      {
        pAppDataPtr->eCompressionFormat = OMX_VIDEO_CodingMPEG4;
      }
      else if (strcmp (codec, "h263") == 0)
      {
        pAppDataPtr->eCompressionFormat = OMX_VIDEO_CodingH263;
      }
      
      /* alloacte data structure for each component used in this IL Client */
      pAppDataPtr->encILComp =
        (IL_CLIENT_COMP_PRIVATE *) malloc (sizeof (IL_CLIENT_COMP_PRIVATE));
      memset (pAppDataPtr->encILComp, 0x0, sizeof (IL_CLIENT_COMP_PRIVATE));
    
      /* these semaphores are used for tracking the callbacks received from
         component */
      pAppDataPtr->encILComp->eos = malloc (sizeof (semp_t));
      semp_init (pAppDataPtr->encILComp->eos, 0);
    
      pAppDataPtr->encILComp->done_sem = malloc (sizeof (semp_t));
      semp_init (pAppDataPtr->encILComp->done_sem, 0);
    
      pAppDataPtr->encILComp->port_sem = malloc (sizeof (semp_t));
      semp_init (pAppDataPtr->encILComp->port_sem, 0);
    
      pAppDataPtr->encILComp->numInport = 1;
      pAppDataPtr->encILComp->numOutport = 1;
      pAppDataPtr->encILComp->startOutportIndex = 1;
    
      pAppDataPtr->encILComp->inPortParams =
        malloc (sizeof (IL_CLIENT_INPORT_PARAMS) *
                pAppDataPtr->encILComp->numInport);
      memset (pAppDataPtr->encILComp->inPortParams, 0x0,
              sizeof (IL_CLIENT_INPORT_PARAMS));
    
      pAppDataPtr->encILComp->outPortParams =
        malloc (sizeof (IL_CLIENT_INPORT_PARAMS) *
                pAppDataPtr->encILComp->numOutport);
      memset (pAppDataPtr->encILComp->outPortParams, 0x0,
              sizeof (IL_CLIENT_OUTPORT_PARAMS));
    
      for (i = 0; i < pAppDataPtr->encILComp->numInport; i++)
      {
        inPortParamsPtr = pAppDataPtr->encILComp->inPortParams + i;
        inPortParamsPtr->nBufferCountActual = IL_CLIENT_ENC_INPUT_BUFFER_COUNT;
        /* input buffers size for yuv buffers, format is YUV420 hence 3/2 */
        inPortParamsPtr->nBufferSize =
          (pAppDataPtr->nHeight * pAppDataPtr->nWidth * 3) >> 1;
        /* this pipe is used for taking buffers from file read thread; in this
           example, file read is not used */
        pipe ((int *) inPortParamsPtr->ipBufPipe);
      }
      for (i = 0; i < pAppDataPtr->encILComp->numOutport; i++)
      {
        outPortParamsPtr = pAppDataPtr->encILComp->outPortParams + i;
        outPortParamsPtr->nBufferCountActual = IL_CLIENT_ENC_OUTPUT_BUFFER_COUNT;
        /* this size could be smaller than this value */
        outPortParamsPtr->nBufferSize =
          (pAppDataPtr->nHeight * pAppDataPtr->nWidth * 3) >> 1;
    
        /* This pipe is used if output is directed to file write thread, */
        pipe ((int *) outPortParamsPtr->opBufPipe);
      }
      /* each componet will have local pipe to take bufffers from other component
         or its own consumed buffer, so that it can be passed to other connected
         components */
      pipe ((int *) pAppDataPtr->encILComp->localPipe);
    
      /* populate the pointer for allocated data structure */
      *pAppData = pAppDataPtr;
    }
    
    /* ========================================================================== */
    /**
    * IL_ClientInit() : This function is to deinitialize the application
    *                   data structure.
    *
    * @param pAppData          : appliaction / client data Handle 
    *  @return      
    *
    *
    */
    /* ========================================================================== */
    
    void IL_ClientDeInit (IL_Client * pAppData)
    {
      int i;
      IL_CLIENT_INPORT_PARAMS *inPortParamsPtr;
      IL_CLIENT_OUTPORT_PARAMS *outPortParamsPtr;
    
    
      close ((int) pAppData->encILComp->localPipe);
    
      for (i = 0; i < pAppData->encILComp->numInport; i++)
      {
        inPortParamsPtr = pAppData->encILComp->inPortParams + i;
        /* This pipe is used if output is directed to file write thread, in this
           example, file read is not used */
        close ((int) inPortParamsPtr->ipBufPipe);
      }
      for (i = 0; i < pAppData->encILComp->numOutport; i++)
      {
        outPortParamsPtr = pAppData->encILComp->outPortParams + i;
        close ((int) outPortParamsPtr->opBufPipe);
      }
    
      free (pAppData->encILComp->inPortParams);
    
      free (pAppData->encILComp->outPortParams);
    
      /* these semaphores are used for tracking the callbacks received from
         component */
      semp_deinit (pAppData->encILComp->eos);
      free(pAppData->encILComp->eos);
    
      semp_deinit (pAppData->encILComp->done_sem);
      free(pAppData->encILComp->done_sem);
    
      semp_deinit (pAppData->encILComp->port_sem);
    
      free(pAppData->encILComp->port_sem);
    
      free (pAppData->encILComp);
    
      free (pAppData);
    
    }
    
    /* ========================================================================== */
    /**
    * IL_ClientErrorToStr() : Function to map the OMX error enum to string
    *
    * @param error   : OMX Error type
    *
    *  @return      
    *  String conversion of the OMX_ERRORTYPE
    *
    */
    /* ========================================================================== */
    
    OMX_STRING IL_ClientErrorToStr (OMX_ERRORTYPE error)
    {
      OMX_STRING errorString;
    
      /* used for printing purpose */
      switch (error)
      {
        case OMX_ErrorNone:
          errorString = "OMX_ErrorNone";
          break;
        case OMX_ErrorInsufficientResources:
          errorString = "OMX_ErrorInsufficientResources";
          break;
        case OMX_ErrorUndefined:
          errorString = "OMX_ErrorUndefined";
          break;
        case OMX_ErrorInvalidComponentName:
          errorString = "OMX_ErrorInvalidComponentName";
          break;
        case OMX_ErrorComponentNotFound:
          errorString = "OMX_ErrorComponentNotFound";
          break;
        case OMX_ErrorInvalidComponent:
          errorString = "OMX_ErrorInvalidComponent";
          break;
        case OMX_ErrorBadParameter:
          errorString = "OMX_ErrorBadParameter";
          break;
        case OMX_ErrorNotImplemented:
          errorString = "OMX_ErrorNotImplemented";
          break;
        case OMX_ErrorUnderflow:
          errorString = "OMX_ErrorUnderflow";
          break;
        case OMX_ErrorOverflow:
          errorString = "OMX_ErrorOverflow";
          break;
        case OMX_ErrorHardware:
          errorString = "OMX_ErrorHardware";
          break;
        case OMX_ErrorInvalidState:
          errorString = "OMX_ErrorInvalidState";
          break;
        case OMX_ErrorStreamCorrupt:
          errorString = "OMX_ErrorStreamCorrupt";
          break;
        case OMX_ErrorPortsNotCompatible:
          errorString = "OMX_ErrorPortsNotCompatible";
          break;
        case OMX_ErrorResourcesLost:
          errorString = "OMX_ErrorResourcesLost";
          break;
        case OMX_ErrorNoMore:
          errorString = "OMX_ErrorNoMore";
          break;
        case OMX_ErrorVersionMismatch:
          errorString = "OMX_ErrorVersionMismatch";
          break;
        case OMX_ErrorNotReady:
          errorString = "OMX_ErrorNotReady";
          break;
        case OMX_ErrorTimeout:
          errorString = "OMX_ErrorTimeout";
          break;
        default:
          errorString = "<unknown>";
      }
    
      return errorString;
    }
    
    /* ========================================================================== */
    /**
    * IL_ClientEncUseInitialOutputResources() :  This function gives initially all
    *                                         output buffers to a component.
    *                                         after consuming component would keep
    *                                         in local pipe for connect thread use. 
    *
    * @param pAppdata   : application data structure
    *
    *  @return      
    *  String conversion of the OMX_ERRORTYPE
    *
    */
    /* ========================================================================== */
    
    OMX_ERRORTYPE IL_ClientEncUseInitialOutputResources (IL_CLIENT_COMP_PRIVATE 
                                                           *thisComp)
    {
      OMX_ERRORTYPE err = OMX_ErrorNone;
      unsigned int i = 0;
    
      for (i = 0; i < thisComp->outPortParams->nBufferCountActual; i++)
      {
        /* Pass the output buffer to the component */
        err = OMX_FillThisBuffer (thisComp->handle,
                                  thisComp->outPortParams->pOutBuff[i]);
      }
    
      return err;
    }
    
    /* ========================================================================== */
    /**
    * IL_ClientDecUseInitialInputResources() : This function gives initially all
    *                                          input buffers to decoder component.
    *                                          after consuming decoder would keep
    *                                          in ipbufpipe for file read thread. 
    *
    * @param pAppdata   : application data structure
    *
    *  @return      
    *  String conversion of the OMX_ERRORTYPE
    *
    */
    /* ========================================================================== */
    
    OMX_ERRORTYPE IL_ClientEncUseInitialInputResources (IL_Client *pAppdata)
    {
    
      OMX_ERRORTYPE err = OMX_ErrorNone;
      unsigned int i = 0;
      int frameSize = 0;
      IL_CLIENT_COMP_PRIVATE *encILComp = NULL;
      encILComp = ((IL_Client *) pAppdata)->encILComp;
    
      /* Give input buffers to component which is limited by no of input buffers
         available. Rest of the data will be read on the callback from input data
         read thread */
      for (i = 0; i < encILComp->inPortParams->nBufferCountActual; i++)
      {
        frameSize = (pAppdata->nHeight * pAppdata->nWidth * 3) >> 1;
        /* Get the size of one frame at a time */
        frameSize = fread (encILComp->inPortParams->pInBuff[i]->pBuffer, 1, frameSize, pAppdata->fIn);
    
        /* Exit the loop if no data available */
        if (!frameSize)
        {
          break;
        }
    
        encILComp->inPortParams->pInBuff[i]->nFilledLen = frameSize;
        encILComp->inPortParams->pInBuff[i]->nOffset = 0;
        encILComp->inPortParams->pInBuff[i]->nAllocLen = frameSize;
        encILComp->inPortParams->pInBuff[i]->nInputPortIndex = 0;
    
        /* Pass the input buffer to the component */
    
        err = OMX_EmptyThisBuffer (encILComp->handle,
                                   encILComp->inPortParams->pInBuff[i]);
    
      }
      return err;
    }
    
    /* ========================================================================== */
    /**
    * IL_ClientSetEncodeParams() : Function to fill the port definition 
    * structures and call the Set_Parameter function on to the Encode
    * Component
    *
    * @param pAppData   : Pointer to the application data
    *
    *  @return      
    *  OMX_ErrorNone = Successful 
    *
    *  Other_value = Failed (Error code is returned)
    *
    */
    /* ========================================================================== */
    
    OMX_ERRORTYPE IL_ClientSetEncodeParams (IL_Client *pAppData)
    {
      OMX_ERRORTYPE eError = OMX_ErrorUndefined;
      OMX_HANDLETYPE pHandle = NULL;
      OMX_VIDEO_PARAM_PROFILELEVELTYPE tProfileLevel;
      OMX_VIDEO_PARAM_ENCODER_PRESETTYPE tEncoderPreset;
      OMX_VIDEO_PARAM_BITRATETYPE tVidEncBitRate;
      //OMX_VIDEO_PARAM_PORTFORMATTYPE tVideoParams;
      OMX_PARAM_PORTDEFINITIONTYPE tPortDef;
      OMX_VIDEO_CONFIG_DYNAMICPARAMS tDynParams;
      OMX_VIDEO_PARAM_STATICPARAMS   tStaticParam;
      //OMX_VIDEO_PARAM_FRAMEDATACONTENTTYPE  tFrameType;
      
      pHandle = pAppData->pEncHandle;
    
      /* Number of frames to be encoded, not used by defaualt */
      pAppData->encILComp->numFrames = pAppData->nEncodedFrms;
    
    
      OMX_INIT_PARAM (&tPortDef);
      /* Get the Number of Ports */
    
      tPortDef.nPortIndex = OMX_VIDENC_INPUT_PORT;
      eError = OMX_GetParameter (pHandle, OMX_IndexParamPortDefinition, &tPortDef);
      /* set the actual number of buffers required */
      tPortDef.nBufferCountActual = IL_CLIENT_ENC_INPUT_BUFFER_COUNT;
      /* set the video format settings */
      tPortDef.format.video.nFrameWidth = pAppData->nWidth;
      tPortDef.format.video.nStride = pAppData->nWidth;
      tPortDef.format.video.nFrameHeight = pAppData->nHeight;
      tPortDef.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
      /* settings for OMX_IndexParamVideoPortFormat */
      tPortDef.nBufferSize = (pAppData->nWidth * pAppData->nHeight * 3) >> 1;
      eError = OMX_SetParameter (pHandle, OMX_IndexParamPortDefinition, &tPortDef);
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to set Encode OMX_IndexParamPortDefinition for input \n");
      }
    
      OMX_INIT_PARAM (&tPortDef);
    
      tPortDef.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
      eError = OMX_GetParameter (pHandle, OMX_IndexParamPortDefinition, &tPortDef);
      /* settings for OMX_IndexParamPortDefinition */
      /* set the actual number of buffers required */
      tPortDef.nBufferCountActual = IL_CLIENT_ENC_OUTPUT_BUFFER_COUNT;
      tPortDef.format.video.nFrameWidth = pAppData->nWidth;
      tPortDef.format.video.nFrameHeight = pAppData->nHeight;
      tPortDef.format.video.eCompressionFormat = pAppData->eCompressionFormat;
      tPortDef.format.video.xFramerate = (pAppData->nFrameRate << 16);
      tPortDef.format.video.nBitrate = pAppData->nBitRate;
      /* settings for OMX_IndexParamVideoPortFormat */
    
      eError = OMX_SetParameter (pHandle, OMX_IndexParamPortDefinition, &tPortDef);
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to set Encode OMX_IndexParamPortDefinition for output \n");
      }
    
      /* For changing bit rate following index can be used */
      OMX_INIT_PARAM (&tVidEncBitRate);
    
      tVidEncBitRate.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
      eError = OMX_GetParameter (pHandle, OMX_IndexParamVideoBitrate,
                                 &tVidEncBitRate);
    
      tVidEncBitRate.eControlRate = OMX_Video_ControlRateConstant;  
    
      tVidEncBitRate.nTargetBitrate = pAppData->nBitRate;
      eError = OMX_SetParameter (pHandle, OMX_IndexParamVideoBitrate,
                                 &tVidEncBitRate);
    
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to set Encode bitrate \n");
      }
      /* Set the profile and level for H264 */
      OMX_INIT_PARAM (&tProfileLevel);
      tProfileLevel.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
      eError = OMX_GetParameter (pHandle, OMX_IndexParamVideoProfileLevelCurrent,
                                 &tProfileLevel);
    
      /* set as profile / level */
      if(pAppData->eCompressionFormat == OMX_VIDEO_CodingAVC) { 
      tProfileLevel.eProfile = OMX_VIDEO_AVCProfileHigh;
      tProfileLevel.eLevel = OMX_VIDEO_AVCLevel42;
      }
      else if (pAppData->eCompressionFormat == OMX_VIDEO_CodingMPEG4) {
      tProfileLevel.eProfile = OMX_VIDEO_MPEG4ProfileSimple;
      tProfileLevel.eLevel = OMX_VIDEO_MPEG4Level5;
       }
      else if (pAppData->eCompressionFormat == OMX_VIDEO_CodingH263) {
      tProfileLevel.eProfile = OMX_VIDEO_H263ProfileBaseline;
      tProfileLevel.eLevel = OMX_VIDEO_H263Level40;
       }
      
    
      eError = OMX_SetParameter (pHandle, OMX_IndexParamVideoProfileLevelCurrent,
                                 &tProfileLevel);
      if (eError != OMX_ErrorNone)
        ERROR ("failed to set encoder pfofile \n");
      /* before creating use set_parameters, for run-time change use set_config
         all codec supported parameters can be set using this index       */
      
      /* example for h264 parameters settings */
         
      if(pAppData->eCompressionFormat == OMX_VIDEO_CodingAVC) {   
      
      /* Encoder Preset settings */
      OMX_INIT_PARAM (&tEncoderPreset);
      tEncoderPreset.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
      eError = OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoEncoderPreset,
                                 &tEncoderPreset);
    
    #if ENABLE_GDR 							 
      tEncoderPreset.eEncodingModePreset = OMX_Video_Enc_User_Defined;    
    #else
       
      tEncoderPreset.eEncodingModePreset = OMX_Video_Enc_Med_Speed_High_Quality;
      
    #endif
    
    
      tEncoderPreset.eRateControlPreset = OMX_Video_RC_Low_Delay;
      eError = OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoEncoderPreset,
                                 &tEncoderPreset);
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to Encoder Preset \n");
      }
      
      OMX_INIT_PARAM (&tDynParams);
    
      tDynParams.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
      
      eError = OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoDynamicParams,
                                 &tDynParams);
      
      /* setting I frame interval */
     tDynParams.videoDynamicParams.h264EncDynamicParams.videnc2DynamicParams.targetFrameRate = pAppData->nFrameRate * 1000;
     tDynParams.videoDynamicParams.h264EncDynamicParams.videnc2DynamicParams.targetBitRate = pAppData->nBitRate;
    
      
    #if ENABLE_GDR  
      /*Parameter setting for GDR*/
      
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.rateControlParamsPreset = IH264_RATECONTROLPARAMS_USERDEFINED;  
      tDynParams.videoDynamicParams.h264EncDynamicParams.intraCodingParams.intraCodingPreset = IH264_INTRACODING_USERDEFINED;
      tDynParams.videoDynamicParams.h264EncDynamicParams.intraCodingParams.intraRefreshMethod = IH264_INTRAREFRESH_GDR;
      tDynParams.videoDynamicParams.h264EncDynamicParams.intraCodingParams.intraRefreshRate = 4;
      tDynParams.videoDynamicParams.h264EncDynamicParams.intraCodingParams.gdrOverlapRowsBtwFrames = 0;
      /* updating rows to be intra refresh */
      tDynParams.videoDynamicParams.h264EncDynamicParams.intraRefreshRateGDRDynamic = 4;
      /* updating overlap rows */
     tDynParams.videoDynamicParams.h264EncDynamicParams.gdrOverlapRowsBtwFramesDynamic = 0;
    #else
    
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.rateControlParamsPreset = IH264_RATECONTROLPARAMS_USERDEFINED;
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.rcAlgo = IH264_RATECONTROL_PRC_LOW_DELAY; 
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.allowFrameSkip = 1;
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.enablePartialFrameSkip  = 1;
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.HRDBufferSize = pAppData->nBitRate * 0.5;
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.initialBufferLevel = pAppData->nBitRate * 0.5;
    
    #endif
      
      tDynParams.videoDynamicParams.h264EncDynamicParams.videnc2DynamicParams.intraFrameInterval = 90;      
                             
      eError = OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoDynamicParams,
                                 &tDynParams);
    
      OMX_INIT_PARAM (&tStaticParam);
    
      tStaticParam.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
      
      eError = OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,
                                 &tStaticParam);
     
    
     
    #if ENABLE_GDR    
      /*Parameter setting for GDR*/
     
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.encodingPreset = XDM_USER_DEFINED;    
      tStaticParam.videoStaticParams.h264EncStaticParams.intraCodingParams.intraCodingPreset = IH264_INTRACODING_USERDEFINED;
      tStaticParam.videoStaticParams.h264EncStaticParams.intraCodingParams.intraRefreshMethod = IH264_INTRAREFRESH_GDR;
      tStaticParam.videoStaticParams.h264EncStaticParams.intraCodingParams.intraRefreshRate = 4;
      tStaticParam.videoStaticParams.h264EncStaticParams.intraCodingParams.gdrOverlapRowsBtwFrames = 0;
    #else 
     
      
    
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.encodingPreset =  XDM_USER_DEFINED;
    
    //If ratecontrolpreset is set as user defined then the rcAlgo should be set. In case is set as IVIDEO_LOW_DELAY the rcAlgo should be not set
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.rateControlPreset = IVIDEO_LOW_DELAY; 
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.rateControlParamsPreset = IH264_RATECONTROLPARAMS_USERDEFINED; 
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.rcAlgo = IH264_RATECONTROL_PRC_LOW_DELAY; 
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.maxBitRate = pAppData->nBitRate; 
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.enablePartialFrameSkip  = 1;
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.allowFrameSkip = 1;
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.HRDBufferSize = pAppData->nBitRate * 0.5;
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.initialBufferLevel = pAppData->nBitRate * 0.5;
      
    
    		
    
    
    
    tStaticParam.videoStaticParams.h264EncStaticParams.numTemporalLayer = IH264_TEMPORAL_LAYERS_1;
    
    
    /* for base profile */
    tStaticParam.videoStaticParams.h264EncStaticParams.transformBlockSize = IH264_TRANSFORM_ADAPTIVE;
    tStaticParam.videoStaticParams.h264EncStaticParams.entropyCodingMode = IH264_ENTROPYCODING_CAVLC;
    
    
    
    
     
    // for the mask bits, please refer to codec user guide
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluControlPreset = IH264_NALU_CONTROL_USERDEFINED;
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskStartOfSequence |=  0x11A0; 
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIDRPicture |=  0x11A0; 
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIntraPicture |= 0x11A0; 
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskNonIntraPicture |= 0x0002; 
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskEndOfSequence |= 0x0C00; 
      
    #endif /* ENABLE_GDR */ 
      
      
                              
      eError = OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,
                                 &tStaticParam);
      }
      if((pAppData->eCompressionFormat == OMX_VIDEO_CodingMPEG4) || 
         (pAppData->eCompressionFormat == OMX_VIDEO_CodingH263))
      {
        OMX_INIT_PARAM(&tStaticParam);
        tStaticParam.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
        eError =
            OMX_GetParameter(pHandle, OMX_TI_IndexParamVideoStaticParams,
                             &tStaticParam);
        if (eError != OMX_ErrorNone)
        {
          ERROR ("failed to Encoder OMX_GetParameter StaticParams \n");
        }
    
        tStaticParam.videoStaticParams.mpeg4EncStaticParams.videnc2Params.encodingPreset
                                                         = XDM_USER_DEFINED;
        tStaticParam.videoStaticParams.mpeg4EncStaticParams.vopTimeIncrementResolution
                                                         = pAppData->nFrameRate;
    
        eError =
            OMX_SetParameter(pHandle, OMX_TI_IndexParamVideoStaticParams,
                             &tStaticParam);
        if (eError != OMX_ErrorNone)
        {
          ERROR ("failed to Encoder OMX_SetParameter StaticParams \n");
        }
      }
    
      return eError;
    }
    
    /* Nothing beyond this point */
    
    

    I attached you the ilclient_utils.c file of the encoder demo. You could find this demo in /ti-ezsdk_dm816x-evm_5_05_02_00/component-sources/omx_05_02_00_48/examples/ti/omx/demos/encode/src.

    Notice that these settings are set as follow:

      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.maxBitRate = pAppData->nBitRate;
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.enablePartialFrameSkip  = 1;
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.allowFrameSkip = 1;
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.HRDBufferSize = pAppData->nBitRate * 0.5;
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.initialBufferLevel = pAppData->nBitRate * 0.5;

    This is the command line :

    ./encode_a8host_debug.xv5T -w 1280 -h 720 -f 30 -b 500000 -c h264 -i Sample_yuv.yuv -o 720p500bps.264

    Let me know the result.

    Best Regards,

    Margarita

  • Hello Margarita,

    I have modified my Encoder component settings based on your code.

    Now it seems working fine. we will do more test and let you know.

    THANK YOU VERY MUCH for you help.


    Regards

    R.Abdul Rahman.

  • Hello,

    Please let me know if you need further details, questions, etc.

    Best Regards,

    Margarita

  • Hello Margarita,

    Sure. Thanks a lot for your help.

    Regards

    R.Abdul Rahman

  • Hi all,

    I have the same problem to get a constant bitrate in DM8168 board. I used the same encoder settings recommended by Margarita but I couldn't get a constant bitrate. In fact, I used the same ilclient_utils.c file of the encoder demo uploaded by Margarita with the correct encoder settings. This is my result:


    I am wondering if I am missing some settings.

    Any help with this would be much appreciated!!

    Regards,

    - Eugenia

  • Hello Eugenia,
    Have you enable partial frame skip (enablePartialFrameSkip) as well?

    Best Regards,
    Margarita
  • Hi Margarita,

    Yes, I enabled the partial frame skip. I attached you the ilclient_utils.c file that I am using for the encoder demo.

    Thanks,

    Eugenia

    /cfs-file/__key/communityserver-discussions-components-files/791/6648.ilclient_5F00_utils.c.txt

  • Slighty off topic but I am running on dm8169 Z3 RPS-20130705. Where can "h264enc user guide page 174 for the  Control masks" be downloaded from? I am unable to find this User guide with Google.

    I am seeing different settings for I frame and B frame such as

    IH264_NALU_CONTROL_USERDEFINED;
     tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskStartOfSequence |= 0x2180;

    How are these values calculated?

    Thanks

    Rick

  • Hello Rick,

    For the new issues/questions, please open a new topic with information about software release that you are using, issues/questions etc.

    Best Regards,
    Margarita

  • Hi Margarita,

          An what about the question from Eugenia?

    -David

  • Hello David,

    Could you share with me the yuv file which you are encoding, please.
    I need also information about bitrate and resolution.
    What is the encoder version which you are using is it the default one in EZSDK 5.05.02?

    Best Regards,
    Margarita
  • Hi Margarita,

    Sure. Info sent by email.

    Thanks,
    -David