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.

IPNC RDK3.5 Bitrate change

Other Parts Discussed in Thread: DM385

In customized DM385 platform..

If I'm using rate control preset value, unable to change the bit rate dynamically..,

I want to change the bit rate from 8Mbps to 2Mbps.., Where it could be setted to 8Mbps

 dynamicParams->rateControlParams.rateControlParamsPreset = 4;
 dynamicParams->rateControlParams.HRDBufferSize = 0;
 dynamicParams->rateControlParams.initialBufferLevel = 0;
 dynamicParams->videnc2DynamicParams.targetBitRate = 0;
 dynamicParams->rateControlParams.rcAlgo = 0;

I enabled the above values for Mjpeg Encoder, I could n't able to change the bit rate !!!

Any one can guide me to solve this issue ???

Regards,

Rajesh Kannan.S

  • Hello,

    Are you trying to set CBR or it is VBR?
    What is the encoder?

    BR
    Margarita
  • Hi

    Thanks for your reply Margarita

    pChPrm->rcType = VENC_RATE_CTRL_VBR

    I'm using VBR

    Regards,

    Rajesh Kannan.S
  • Hi,

    I'm using JPEG Encoder !!!

    Is it related to target bitrate or max bit rate ???

    What is the possibility to achieve minimum bit rate ???

    Regards,

    Rajesh Kannan.S
  • Hi,

    If you want to use VBR, You need to set as below:

    rateControlPreset = IVIDEO_STORAGE      ie., rateControlPreset = 2;

    or     

    rateControlPreset =  IVIDEO_USER_DEFINED;  ie., rateControlPreset = 5;

    rcAlgo = 0;

    maxBitRate >= (1.5 x targetBitRate );

    For more details please refer to section 11.4 in user guide. (11.4 How to change bitrate dynamically). What version of MJPEG Encoder are you using?

  • Hi Prashanth,

    Thanks for your reply..,

    For static & dynamic I'm using the value as 4 below mentioned

    what is the meaning of this value ??

    staticParams->videnc2Params.rateControlPreset = 4;

    dynamicParams->rateControlParams.rateControlParamsPreset = 4;

    Because of this value I could n't able to achieve minimum bit rate ???

    MJPEG :- REL.500.V.MJPEG.E.IVAHD.01.00.11.00 version

    Kindly reply me what are all the changes need to be done to achieve the min bit rate ??

    Thank you very much for your reply...

    Regards,

    Rajesh Kannan.S

    Regards,

    Rajesh Kannan.S

  • Hi Rajesh,

    Rajesh Kannan said:

    what is the meaning of this value ??

    staticParams->videnc2Params.rateControlPreset = 4;

    dynamicParams->rateControlParams.rateControlParamsPreset = 4;

    This means you are setting it to Fixed_Qp. 

    Rajesh Kannan said:
    Because of this value I could n't able to achieve minimum bit rate ???

    Yes, you are right. When you set Fixed_Qp, bitrate will not be set.

    You can set the below values to achieve 2mbps bitrate:

    RateControlPreset = 5                    # 1 => Low Delay, 2 => Storage, 4 => None, 5 => User defined
    targetBitRate = 2000000                # 2MBPS is set
    maxBitRate = 7500000                   # Max bitrate, applicable in case of VBR
    rcAlgo = 0                                          # 0 => VBR, 1 => CBR
    initialBufferLevel = 4000000         # Initial Buffer level for HRD compliance, keep same as HRDBufferSize for best quality
    HRDBufferSize = 4000000            # Hypothetical Reference Decoder Buffer Size in bits - 2*bitrate for VBR, bitrate/2 for CBR

    Rajesh Kannan said:
    MJPEG :- REL.500.V.MJPEG.E.IVAHD.01.00.11.00 version

    You can try REL.500.V.MJPEG.E.IVAHD.01.00.16.00  the latest version, which has few bug fixes over the version you are using.

  • Hi Prashanth

    Ya Thank u very much for your reply

    If I tried with out value 4 I'm getting the below mentioned ERROR !!!

    [m3vpss ] RAJESHKANNAN ::: Setted rcAlgo as (0) = (0)...
    [m3vpss ] FOSSILSHALE DEBUG : EncLinkJPEG_algDynamicParamUpdate width=480 height=848 pitch=848.............
    [m3vpss ] 1871:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_jpeg.c:[89]::INTERNAL ERROR:-1
    [m3vpss ] ALGCONTROL FAILED:CMD:1
    [m3vpss ]
    [m3vpss ] 1872:ERR::linkID:20000049::channelID:0::errorCode:-5::FileName:links_m3video/iva_enc/encLink_jpeg.c::linuNum:687::errorCondition:(algStatus == XDM_EOK)
    [m3vpss ] ENCLINK_JPEG:HEAPID:0 USED:1896
    [m3vpss ] 1873: Assertion @ Line: 928 in links_m3video/iva_enc/encLink_common.c: retVal == ENC_LINK_S_SUCCESS : failed !!!

    Kindly suggest me to solve this issue !!!

    Thank u so much

    Regards,

    Rajesh Kannan.S
  • Hi Rajesh,
    Please share all the parameter settings for which you got this error.
  • Hi Prashanth,

    Thanks for your reply...

    Find the attached file for your reference..

    Regards,

    Rajesh Kannan.S

    encLink_jpeg.c
    /*******************************************************************************
     *                                                                             *
     * Copyright (c) 2009 Texas Instruments Incorporated - http://www.ti.com/      *
     *                        ALL RIGHTS RESERVED                                  *
     *                                                                             *
     ******************************************************************************/
    
    #include <xdc/std.h>
    #include <ti/xdais/xdas.h>
    #include <ti/xdais/ialg.h>
    #include <ti/sdo/fc/utils/api/alg.h>
    #include <ti/sdo/fc/rman/rman.h>
    #include <ti/xdais/dm/ividenc2.h>
    #include <ijpegenc.h>
    #include <jpegenc_ti.h>
    
    #include "encLink_priv.h"
    #include "encLink_jpeg_priv.h"
    
    #include <mcfw/src_bios6/links_m3video/codec_utils/utils_encdec.h>
    #include <mcfw/src_bios6/links_m3video/codec_utils/iresman_hdvicp2_earlyacquire.h>
    
    
    static JPEGVENC_Handle enc_link_jpeg_create(const IJPEGVENC_Fxns * fxns,
                                                const IJPEGVENC_Params * prms);
    static Void enc_link_jpeg_delete(JPEGVENC_Handle handle);
    static Int32 enclink_jpeg_control(JPEGVENC_Handle handle,
                                      IJPEGVENC_Cmd cmd,
                                      IJPEGVENC_DynamicParams * params,
                                      IJPEGVENC_Status * status);
    static Int enclink_jpeg_set_static_params(IJPEGVENC_Params * staticParams,
                                              EncLink_AlgCreateParams *
                                              algCreateParams);
    static Int enclink_jpeg_set_algObject(EncLink_JPEGObj * algObj,
                                          EncLink_AlgCreateParams * algCreateParams,
                                          EncLink_AlgDynamicParams *
                                          algDynamicParams);
    static Int enclink_jpeg_set_dynamic_params(IJPEGVENC_DynamicParams *
                                               dynamicParams,
                                               EncLink_AlgDynamicParams *
                                               algDynamicParams);
    static Void enclink_jpeg_freersrc(EncLink_JPEGObj * hObj, Int rsrcMask);
    
    extern IRES_Fxns JPEGVENC_TI_IRES;
    
    /*
     *  ======== enc_link_jpeg_create ========
     *  Create an JPEGENC instance object (using parameters specified by prms)
     */
    
    static JPEGVENC_Handle enc_link_jpeg_create(const IJPEGVENC_Fxns * fxns,
                                                const IJPEGVENC_Params * prms)
    {
        return ((JPEGVENC_Handle) ALG_create((IALG_Fxns *) fxns,
                                             NULL, (IALG_Params *) prms));
    }
    
    /*
     *  ======== enc_link_jpeg_delete ========
     *  Delete the JPEGENC instance object specified by handle
     */
    
    static Void enc_link_jpeg_delete(JPEGVENC_Handle handle)
    {
        ALG_delete((IALG_Handle) handle);
    }
    
    /*
     *  ======== enc_link_jpeg_control ========
     */
    
    static Int32 enclink_jpeg_control(JPEGVENC_Handle handle,
                                      IJPEGVENC_Cmd cmd,
                                      IJPEGVENC_DynamicParams * params,
                                      IJPEGVENC_Status * status)
    {
        int error = 0;
        IALG_Fxns *fxns = (IALG_Fxns *) handle->fxns;
    
        fxns->algActivate((IALG_Handle) handle);
    
        error = handle->fxns->ividenc.control((IVIDENC2_Handle) handle, cmd,
                                              (IVIDENC2_DynamicParams *) params,
                                              (IVIDENC2_Status *) status);
        fxns->algDeactivate((IALG_Handle) handle);
    
        if (error != XDM_EOK)
        {
            ENCLINK_INTERNAL_ERROR_LOG(error, "ALGCONTROL FAILED:CMD:%d", cmd);
        }
        return error;
    }
    
    /*
     *  ======== Enclink_jpegEncodeFrame ========
     */
    Int32 Enclink_jpegEncodeFrame(EncLink_ChObj * pChObj, EncLink_ReqObj * pReqObj)
    {
        int error;
        Int32 i;
        IJPEGVENC_InArgs *inArgs;
        IJPEGVENC_OutArgs *outArgs;
        IVIDEO2_BufDesc *inputBufDesc;
        XDM2_BufDesc *outputBufDesc;
        JPEGVENC_Handle handle;
        IALG_Fxns *fxns = NULL;
        IVIDEO_ContentType contentType;
        void *allocatedRingBufferAddr;
        UInt32 allocatedRingBufferLength;
        UInt32 frameWidth,frameHeight;
        RingBufferHandle_t ringBufferHnl;
    
        inArgs = &pChObj->algObj.u.jpegAlgIfObj.inArgs;
        outArgs = &pChObj->algObj.u.jpegAlgIfObj.outArgs;
        inputBufDesc = &pChObj->algObj.u.jpegAlgIfObj.inBufs;
        outputBufDesc = &pChObj->algObj.u.jpegAlgIfObj.outBufs;
        handle = pChObj->algObj.u.jpegAlgIfObj.algHandle;
    
        UTILS_assert(handle != NULL);
    
        fxns = (IALG_Fxns *) handle->fxns;
    
        inArgs->videnc2InArgs.inputID =
            (UInt32) pReqObj->InFrameList.frames[0]->addr[0][0];
        for (i = 0; i < inputBufDesc->numPlanes; i++)
        {
            /* Set proper buffer addresses for Frame data */
            /*---------------------------------------------------------------*/
            if (pChObj->algObj.algCreateParams.tilerEnable)
            {
                inputBufDesc->planeDesc[i].buf =
                    (Ptr)
                    Utils_tilerAddr2CpuAddr((UInt32)
                                            (pReqObj->InFrameList.frames[0]->
                                             addr[0][i]));
            }
            else
            {
                inputBufDesc->planeDesc[i].buf =
                    pReqObj->InFrameList.frames[0]->addr[0][i];
            }
        }
    
    	extern BitStreamRingBuffer ringBuffer[UTILS_BITBUF_MAX_ALLOC_POOLS];
    	ringBufferHnl = &ringBuffer[pChObj->allocPoolID];
    
    	 if(ringBufferHnl->wrOfst >= ringBufferHnl->rdOfst) // case1
    	{
    	     allocatedRingBufferAddr = (void *)((UInt32)ringBufferHnl->baseAddr + ringBufferHnl->wrOfst);
    	     allocatedRingBufferLength = ringBufferHnl->totalSize - ringBufferHnl->wrOfst;
    
    		frameWidth = pReqObj->OutBuf->frameWidth;
    		frameHeight = pReqObj->OutBuf->frameHeight;
    	     if(allocatedRingBufferLength <= MIN_TERMINATION_SIZE(frameWidth,frameHeight))
    	     {
    	     		//Vps_printf ("*******early termination********\n");
    			Utils_ringBuffer_updateWrOfst(ringBufferHnl, allocatedRingBufferLength);
    	     		allocatedRingBufferAddr = (void *)((UInt32)ringBufferHnl->baseAddr + ringBufferHnl->wrOfst);
    	     		allocatedRingBufferLength = ringBufferHnl->rdOfst - ringBufferHnl->wrOfst;
    	     }
    	}
    	else // (ringBufferHnl->wrOfst < ringBufferHnl->rdOfst) // case1
    	{
    	     allocatedRingBufferAddr = (void *)((UInt32)ringBufferHnl->baseAddr + ringBufferHnl->wrOfst);
    	     allocatedRingBufferLength = ringBufferHnl->rdOfst - ringBufferHnl->wrOfst;
    	}
        pReqObj->OutBuf->mvDataFilledSize = 0;
        for (i = 0; i < outputBufDesc->numBufs; i++)
        {
            /* Set proper buffer addresses for bitstream data */
          /*---------------------------------------------------------------*/
            outputBufDesc->descs[i].buf = allocatedRingBufferAddr;
            outputBufDesc->descs[i].bufSize.bytes = allocatedRingBufferLength;
        }
    
        fxns->algActivate((IALG_Handle) handle);
        error =
            handle->fxns->ividenc.process((IVIDENC2_Handle) handle,
                                          inputBufDesc, outputBufDesc,
                                          (IVIDENC2_InArgs *) inArgs,
                                          (IVIDENC2_OutArgs *) outArgs);
        fxns->algDeactivate((IALG_Handle) handle);
    
    
       	pReqObj->OutBuf->codingType = pChObj->algObj.u.jpegAlgIfObj.format;
    	pReqObj->OutBuf->addr = allocatedRingBufferAddr;
           pReqObj->OutBuf->fillLength = outArgs->videnc2OutArgs.bytesGenerated;
    	 pReqObj->OutBuf->bufSize =   outArgs->videnc2OutArgs.bytesGenerated;
    	 pReqObj->OutBuf->startOffset = 0;
    	 pReqObj->OutBuf->phyAddr = (UInt32 )pReqObj->OutBuf->addr;
    	 Utils_ringBuffer_updateWrOfst(ringBufferHnl, outArgs->videnc2OutArgs.bytesGenerated);
    	 Utils_ringBuffer_updateEncodedStreamCount(ringBufferHnl, TRUE);
    
        if (pChObj->algObj.u.jpegAlgIfObj.staticParams.videnc2Params.
            inputContentType == IVIDEO_PROGRESSIVE)
        {
            contentType = IVIDEO_PROGRESSIVE;
        }
        else
        {
            contentType =
                Utils_encdecMapFVID2FID2XDMContentType((FVID2_Fid) pReqObj->
                                                       InFrameList.frames[0]->
                                                       fid);
        }
        pReqObj->OutBuf->isKeyFrame =
            Utils_encdecIsGopStart(outArgs->videnc2OutArgs.encodedFrameType,
                                   contentType);
        pReqObj->OutBuf->frameWidth = inputBufDesc->imageRegion.bottomRight.x -
                                      inputBufDesc->imageRegion.topLeft.x;
        pReqObj->OutBuf->frameHeight = inputBufDesc->imageRegion.bottomRight.y -
                                      inputBufDesc->imageRegion.topLeft.y;
    
    
    
        if (error != XDM_EOK)
        {
            ENCLINK_INTERNAL_ERROR_LOG(error, "ALGPROCESS FAILED");
        	Vps_printf ("JPEG Extended error %x \n", outArgs->videnc2OutArgs.extendedError);
        }
    
        return (error);
    }
    
    static Int enclink_jpeg_set_static_params(IJPEGVENC_Params * staticParams,
                                              EncLink_AlgCreateParams *
                                              algCreateParams)
    {
        /* Initialize default values for static params */
        *staticParams = JPEGVENC_TI_PARAMS;
    
        
    
    #ifndef RAJESH
        algCreateParams->maxHeight = 848; 
        algCreateParams->maxWidth = 480 ;
    #endif
    
        staticParams->videnc2Params.maxHeight =
                      VpsUtils_align(algCreateParams->maxHeight, 2);
    
        staticParams->videnc2Params.maxWidth =
                      VpsUtils_align(algCreateParams->maxWidth, 16);
    
        staticParams->videnc2Params.maxInterFrameInterval = NULL;
        staticParams->videnc2Params.inputContentType = IVIDEO_PROGRESSIVE;
    
    
        staticParams->videnc2Params.inputChromaFormat =
            algCreateParams->inputChromaFormat;
    
        staticParams->videnc2Params.profile = algCreateParams->profile;
    
        staticParams->videnc2Params.level = algCreateParams->level;
    
        staticParams->videnc2Params.numInputDataUnits = 1;
        staticParams->videnc2Params.numOutputDataUnits = 1;
    
        staticParams->videnc2Params.rateControlPreset = IVIDEO_USER_DEFINED;
        staticParams->rateControlParams.rateControlParamsPreset = IJPEGVENC_RATECONTROLPARAMS_DEFAULT;
    
    #ifndef RAJESH 
    	/* Disable the Rate Control */
        staticParams->videnc2Params.rateControlPreset = 5; //IVIDEO_USER_DEFINED ; //4; //IJPEGVENC_RATECONTROLPARAMS_DEFAULT; //IVIDEO_USER_DEFINED; //4;
        Vps_printf("RAJESHKANNAN ::: IN ENCODER Changed RATECONTROL PRESET as IJPEGVENC_RATECONTROLPARAMS_DEFAULT\n");
        //staticParams->videnc2Params.rateControlPreset = 3;
        //staticParams->videnc2Params.maxBitRate = 2*1000*1000; //-1;
        staticParams->videnc2Params.maxBitRate >= 1.5 * 2000000 ;//dynamicParams->videnc2DynamicParams.targetBitRate;  //-1;
        staticParams->videnc2Params.minBitRate = 1*1000*1000; //0;
    #endif	
        return 0;
    }
    
    static Int enclink_jpeg_set_algObject(EncLink_JPEGObj * algObj,
                                          EncLink_AlgCreateParams * algCreateParams,
                                          EncLink_AlgDynamicParams *
                                          algDynamicParams)
    {
        IJPEGVENC_InArgs *inArgs;
        IJPEGVENC_OutArgs *outArgs;
        IVIDEO2_BufDesc *inputBufDesc;
        XDM2_BufDesc *outputBufDesc;
        IJPEGVENC_Status *status;
        Int i;
    	
        inArgs = &algObj->inArgs;
        outArgs = &algObj->outArgs;
        inputBufDesc = &algObj->inBufs;
        outputBufDesc = &algObj->outBufs;
        status = &algObj->status;
    
         /*-----------------------------------------------------------------------*/
        /* Initialize the input ID in input arguments to the bufferid of the */
        /* buffer element returned from getfreebuffer() function.  */
         /*-----------------------------------------------------------------------*/
        /* inputID need to update before every encode process call */
        inArgs->videnc2InArgs.inputID = 0;
        inArgs->videnc2InArgs.control = IVIDENC2_CTRL_DEFAULT;
    
        outArgs->videnc2OutArgs.extendedError = 0;
        outArgs->videnc2OutArgs.bytesGenerated = 0;
        outArgs->videnc2OutArgs.encodedFrameType = IVIDEO_I_FRAME;
        outArgs->videnc2OutArgs.inputFrameSkip = 0;
        memset(&outArgs->videnc2OutArgs.freeBufID, 0,
               sizeof(outArgs->videnc2OutArgs.freeBufID));
        outArgs->videnc2OutArgs.reconBufs.planeDesc[0].buf = NULL;
        outArgs->videnc2OutArgs.reconBufs.planeDesc[1].buf = NULL;
        outArgs->videnc2OutArgs.reconBufs.imagePitch[0] = 0;
    
        /*------------------------------------------------------------------------*/
        /* Initialise output discriptors */
        /*------------------------------------------------------------------------*/
        outputBufDesc->numBufs = 0;
        for (i = 0; i < algObj->status.videnc2Status.bufInfo.minNumOutBufs; i++)
        {
    
            outputBufDesc->numBufs++;
            outputBufDesc->descs[i].memType = XDM_MEMTYPE_RAW;
            outputBufDesc->descs[i].bufSize.bytes =
                algObj->status.videnc2Status.bufInfo.minOutBufSize[i].bytes;
    
            if (i == 0)
            {
            /*-------------------------------------------------------------------*/
                /* Set proper buffer addresses for bitstream data */
            /*-------------------------------------------------------------------*/
                outputBufDesc->descs[0].buf = NULL;
            }
            else
            {
                if (status->videnc2Status.bufInfo.minOutBufSize[i].bytes
                    > ANALYTICINFO_OUTPUT_BUFF_SIZE)
                {
                    Vps_printf
                        ("\nMemory could not get allocated for Analytic info buffer\n");
                }
            /*-------------------------------------------------------------------*/
                /* Set proper buffer addresses for MV & SAD data */
            /*-------------------------------------------------------------------*/
                outputBufDesc->descs[i].buf = NULL;
            }
        }
    
        /*------------------------------------------------------------------------*/
        /* Video buffer layout, field interleaved or field separated */
        /* Only IVIDEO_FIELD_INTERLEAVED and IVIDEO_FIELD_SEPARATED are supported
         */
        /*------------------------------------------------------------------------*/
        inputBufDesc->dataLayout = algCreateParams->dataLayout;
    
        /*------------------------------------------------------------------------*/
        /* Flag to indicate field order in interlaced content */
        /* Supported values are */
        /* 0 - Bottom field first */
        /* 1 - Top filed first */
        /* TODO : need to find defalut parameter */
        /*------------------------------------------------------------------------*/
        inputBufDesc->topFieldFirstFlag = 1;
    
        /*------------------------------------------------------------------------*/
        /* Initialize the input buffer properties as required by algorithm */
        /* based on info received by preceding GETBUFINFO call.  */
        /*------------------------------------------------------------------------*/
        inputBufDesc->numPlanes = 2;                           /* status.videnc2Status.bufInfo.minNumInBufs;*/
                                                                
    //    inputBufDesc->numPlanes = status.videnc2Status.bufInfo.minNumInBufs;
        inputBufDesc->numMetaPlanes = 0;
        /*------------------------------------------------------------------------*/
        /* Set entire Image region in the buffer by using config parameters */
        /*------------------------------------------------------------------------*/
        inputBufDesc->imageRegion.topLeft.x = algDynamicParams->startX;
        inputBufDesc->imageRegion.topLeft.y = algDynamicParams->startY;
        inputBufDesc->imageRegion.bottomRight.x = algDynamicParams->startX +
            algObj->dynamicParams.videnc2DynamicParams.inputWidth;
        inputBufDesc->imageRegion.bottomRight.y = algDynamicParams->startY +
            algObj->dynamicParams.videnc2DynamicParams.inputHeight;
    
    
        /*------------------------------------------------------------------------*/
        /* Set proper Image region in the buffer by using config parameters */
        /*------------------------------------------------------------------------*/
        inputBufDesc->activeFrameRegion.topLeft.x = algDynamicParams->startX;
        inputBufDesc->activeFrameRegion.topLeft.y = algDynamicParams->startY;
        inputBufDesc->activeFrameRegion.bottomRight.x = algDynamicParams->startX +
            algObj->dynamicParams.videnc2DynamicParams.inputWidth;
        inputBufDesc->activeFrameRegion.bottomRight.y = algDynamicParams->startY +
            algObj->dynamicParams.videnc2DynamicParams.inputHeight;
        /*------------------------------------------------------------------------*/
        /* Image pitch is capture width */
        /*------------------------------------------------------------------------*/
    
        if (algCreateParams->tilerEnable)
        {
            inputBufDesc->imagePitch[0] = VPSUTILS_TILER_CNT_8BIT_PITCH;
        }
        else
        {
            inputBufDesc->imagePitch[0] =
                algObj->dynamicParams.videnc2DynamicParams.captureWidth;
        }
        if (algCreateParams->tilerEnable)
        {
            inputBufDesc->imagePitch[1] = VPSUTILS_TILER_CNT_16BIT_PITCH;
        }
        else
        {
            inputBufDesc->imagePitch[1] =
                algObj->dynamicParams.videnc2DynamicParams.captureWidth;
        }
        /*------------------------------------------------------------------------*/
        /* Set Content type and chroma format from encoder parameters */
        /*------------------------------------------------------------------------*/
        inputBufDesc->contentType =
            algObj->staticParams.videnc2Params.inputContentType;
        inputBufDesc->chromaFormat =
            algObj->staticParams.videnc2Params.inputChromaFormat;
    
        /*------------------------------------------------------------------------*/
        /* Assign memory pointers adn sizes for the all the input buffers */
        /*------------------------------------------------------------------------*/
        for (i = 0; i < algObj->status.videnc2Status.bufInfo.minNumInBufs; i++)
        {
            inputBufDesc->planeDesc[i].buf = NULL;
            if (algCreateParams->tilerEnable)
            {
                if (i & 0x1)
                {
                    inputBufDesc->planeDesc[i].memType = XDM_MEMTYPE_TILED16;
                }
                else
                {
                    inputBufDesc->planeDesc[i].memType = XDM_MEMTYPE_TILED8;
                }
                inputBufDesc->planeDesc[i].bufSize.tileMem.width =
                    algObj->status.videnc2Status.bufInfo.minInBufSize[i].tileMem.
                    width;
                inputBufDesc->planeDesc[i].bufSize.tileMem.height =
                    algObj->status.videnc2Status.bufInfo.minInBufSize[i].tileMem.
                    height;
            }
            else
            {
                inputBufDesc->planeDesc[i].memType = XDM_MEMTYPE_RAW;
                inputBufDesc->planeDesc[i].bufSize.bytes =
                    algObj->status.videnc2Status.bufInfo.minInBufSize[i].tileMem.
                    width *
                    algObj->status.videnc2Status.bufInfo.minInBufSize[i].tileMem.
                    height;
    
            }
        }
        /*------------------------------------------------------------------------*/
        /* Set second field offset width and height according to input data */
        /* When second field of the input data starts at 0 it represents 2 fields
         */
        /* are seperated and provided at 2 diff process calls (60 process call) */
        /*------------------------------------------------------------------------*/
        if ((inputBufDesc->dataLayout == IVIDEO_FIELD_SEPARATED) &&
            (algCreateParams->singleBuf == FALSE) &&
            (algObj->staticParams.videnc2Params.inputContentType ==
             IVIDEO_INTERLACED))
        {
            inputBufDesc->secondFieldOffsetHeight[0] = 0;
            inputBufDesc->secondFieldOffsetHeight[1] = 0;
            inputBufDesc->secondFieldOffsetHeight[2] = 0;
        }
        else
        {
            inputBufDesc->secondFieldOffsetHeight[0] =
                algObj->dynamicParams.videnc2DynamicParams.inputHeight;
            inputBufDesc->secondFieldOffsetHeight[1] =
                (algObj->dynamicParams.videnc2DynamicParams.inputHeight >> 1);
            inputBufDesc->secondFieldOffsetHeight[2] =
                (algObj->dynamicParams.videnc2DynamicParams.inputHeight >> 1);
        }
        inputBufDesc->secondFieldOffsetWidth[0] = 0;
        inputBufDesc->secondFieldOffsetWidth[1] = 0;
        inputBufDesc->secondFieldOffsetWidth[2] = 0;
    
        /*------------------------------------------------------------------------*/
        /* Set The address of unregistered user data in meta data plane desc */
        /*------------------------------------------------------------------------*/
        inputBufDesc->numMetaPlanes = 0;
    
        return 0;
    }
    
    static Int enclink_jpeg_set_dynamic_params(IJPEGVENC_DynamicParams *
                                               dynamicParams,
                                               EncLink_AlgDynamicParams *
                                               algDynamicParams)
    {
        *dynamicParams = JPEGVENC_TI_DYNAMICPARAMS;
        dynamicParams->videnc2DynamicParams.inputWidth =
            algDynamicParams->inputWidth;
        dynamicParams->videnc2DynamicParams.inputHeight =
            algDynamicParams->inputHeight;
        dynamicParams->videnc2DynamicParams.captureWidth =
            algDynamicParams->inputPitch;
        dynamicParams->videnc2DynamicParams.targetBitRate =
            algDynamicParams->targetBitRate;
        dynamicParams->videnc2DynamicParams.targetFrameRate =
            algDynamicParams->targetFrameRate;
        dynamicParams->videnc2DynamicParams.interFrameInterval =
            algDynamicParams->interFrameInterval;
        dynamicParams->videnc2DynamicParams.intraFrameInterval =
            algDynamicParams->intraFrameInterval;
        dynamicParams->videnc2DynamicParams.mvAccuracy =
            algDynamicParams->mvAccuracy;
        dynamicParams->videnc2DynamicParams.refFrameRate =
            algDynamicParams->refFrameRate;
        dynamicParams->videnc2DynamicParams.ignoreOutbufSizeFlag = XDAS_FALSE;
    
    	dynamicParams->qualityFactor = (algDynamicParams->qpInitI==0)?
    						JPEG_QUALITYFACTOR_DEFAULT:algDynamicParams->qpInitI;
    
    	/* Rate control params */
        dynamicParams->rateControlParams.rateControlParamsPreset
            = IJPEGVENC_RATECONTROLPARAMS_USERDEFINED;
        Vps_printf("RAJESHKANNAN ::: dynamicParams->rateControlParams.rateControlParamsPreset = (%d)...\n", dynamicParams->rateControlParams.rateControlParamsPreset);
        dynamicParams->rateControlParams.qpMinI = algDynamicParams->qpMinI;
        dynamicParams->rateControlParams.qpMaxI = algDynamicParams->qpMaxI;
        dynamicParams->rateControlParams.qpI    = algDynamicParams->qpInitI;
    //    dynamicParams->rateControlParams.rcAlgo = algDynamicParams->rcAlg;
         dynamicParams->rateControlParams.rcAlgo = algDynamicParams->rcAlg;
        Vps_printf("RAJESHKANNAN ::: Checking before condition dynamicParams->rateControlParams.rcAlgo = (%d)....\n", dynamicParams->rateControlParams.rcAlgo);
    
    #ifndef RAJESH 
        /* Disable the Rate Control */    
        dynamicParams->rateControlParams.rateControlParamsPreset = 5; //4; //IJPEGVENC_RATECONTROLPARAMS_DEFAULT; //IVIDEO_USER_DEFINED; //4;
        //dynamicParams->rateControlParams.rateControlParamsPreset = 3;  //RAJESHKANNAN JULY_21
        dynamicParams->rateControlParams.HRDBufferSize = 4000000; //dynamicParams->videnc2DynamicParams.targetBitRate * 2; //10000000; //0;
        dynamicParams->rateControlParams.initialBufferLevel = 4000000; //2 * dynamicParams->videnc2DynamicParams.targetBitRate; //10000000; ////0;
        dynamicParams->videnc2DynamicParams.targetBitRate = 2000000; //2* 1000 * 1000; //0;
        dynamicParams->rateControlParams.rcAlgo = 0;
    Vps_printf("RAJESHKANNAN ::: Setted rcAlgo as (0) = (%d)...\n",dynamicParams->rateControlParams.rcAlgo);
    #else
    
        if(algDynamicParams->rcAlg == IJPEGVENC_RATECONTROL_CBR_LOW_DELAY)
        {
    		dynamicParams->rateControlParams.HRDBufferSize =
            	algDynamicParams->targetBitRate / 2;
        	dynamicParams->rateControlParams.initialBufferLevel =
            	algDynamicParams->targetBitRate / 2;
    	}
    	else {
    			dynamicParams->rateControlParams.HRDBufferSize =
    	        	algDynamicParams->targetBitRate * 2;
    	    	dynamicParams->rateControlParams.initialBufferLevel =
    	        	algDynamicParams->targetBitRate * 2;
    	}
    #endif //RAJESH 
    Vps_printf ("FOSSILSHALE DEBUG : EncLinkJPEG_algDynamicParamUpdate  width=%d  height=%d pitch=%d.............\n", dynamicParams->videnc2DynamicParams.inputWidth,  dynamicParams->videnc2DynamicParams.inputHeight, dynamicParams->videnc2DynamicParams.captureWidth );
        return 0;
    }
    
    #define ENCLINKJPEG_ALGREATE_RSRC_NONE                                       (0)
    #define ENCLINKJPEG_ALGREATE_RSRC_ALGCREATED                           (1 <<  0)
    #define ENCLINKJPEG_ALGREATE_RSRC_IRES_ASSIGNED                        (1 <<  1)
    #define ENCLINKJPEG_ALGREATE_RSRC_ALL (                                        \
                                           ENCLINKJPEG_ALGREATE_RSRC_ALGCREATED |  \
                                           ENCLINKJPEG_ALGREATE_RSRC_IRES_ASSIGNED \
                                          )
    
    static Void enclink_jpeg_freersrc(EncLink_JPEGObj * hObj, Int rsrcMask)
    {
        if (rsrcMask & ENCLINKJPEG_ALGREATE_RSRC_IRES_ASSIGNED)
        {
            IRES_Status iresStatus;
    
            iresStatus =
                RMAN_freeResources((IALG_Handle) hObj->algHandle,
                                   &JPEGVENC_TI_IRES, hObj->scratchID);
            if (iresStatus != IRES_OK)
            {
                ENCLINK_INTERNAL_ERROR_LOG(iresStatus, "RMAN_freeResources");
            }
        }
        if (rsrcMask & ENCLINKJPEG_ALGREATE_RSRC_ALGCREATED)
        {
            enc_link_jpeg_delete(hObj->algHandle);
            hObj->algHandle = NULL;
        }
    }
    
    Int EncLinkJPEG_algCreate(EncLink_JPEGObj * hObj,
                              EncLink_AlgCreateParams * algCreateParams,
                              EncLink_AlgDynamicParams * algDynamicParams,
                              Int linkID, Int channelID, Int scratchGroupID)
    {
        Int retVal = ENC_LINK_S_SUCCESS;
        Int rsrcMask = ENCLINKJPEG_ALGREATE_RSRC_NONE;
        Int algStatus;
    
        UTILS_assert(Utils_encdecIsJPEG(algCreateParams->format) == TRUE);
        hObj->linkID = linkID;
        hObj->channelID = channelID;
        hObj->scratchID = scratchGroupID;
    
        memset(&hObj->inArgs, 0, sizeof(hObj->inArgs));
        memset(&hObj->outArgs, 0, sizeof(hObj->outArgs));
        memset(&hObj->inBufs, 0, sizeof(hObj->inBufs));
        memset(&hObj->outBufs, 0, sizeof(hObj->outBufs));
        memset(&hObj->status, 0, sizeof(hObj->status));
        memset(&hObj->memUsed, 0, sizeof(hObj->memUsed));
    
        hObj->status.videnc2Status.size = sizeof(IJPEGVENC_Status);
        hObj->inArgs.videnc2InArgs.size = sizeof(IJPEGVENC_InArgs);
        hObj->outArgs.videnc2OutArgs.size = sizeof(IJPEGVENC_OutArgs);
        hObj->staticParams.videnc2Params.size = sizeof(IVIDENC2_Params);
        hObj->dynamicParams.videnc2DynamicParams.size =
            sizeof(IVIDENC2_DynamicParams);
    
        enclink_jpeg_set_static_params(&hObj->staticParams, algCreateParams);
        enclink_jpeg_set_dynamic_params(&hObj->dynamicParams, algDynamicParams);
    
        UTILS_MEMLOG_USED_START();
        hObj->algHandle =
            enc_link_jpeg_create((IJPEGVENC_Fxns *) & JPEGVENC_TI_IJPEGVENC,
                                 &hObj->staticParams);
    
    	UTILS_assertError((NULL != hObj->algHandle),
                          retVal, ENC_LINK_E_ALGCREATEFAILED, linkID, channelID);
    
        if (!UTILS_ISERROR(retVal))
        {
            IRES_Status iresStatus;
    
            rsrcMask |= ENCLINKJPEG_ALGREATE_RSRC_ALGCREATED;
            iresStatus = RMAN_assignResources((IALG_Handle) hObj->algHandle,
                                              &JPEGVENC_TI_IRES, scratchGroupID);
            UTILS_assertError((iresStatus == IRES_OK), retVal,
                              ENC_LINK_E_RMANRSRCASSIGNFAILED, linkID, channelID);
        }
        if (!UTILS_ISERROR(retVal))
        {
            Int ivaChID;
    
            rsrcMask |= ENCLINKJPEG_ALGREATE_RSRC_IRES_ASSIGNED;
    
            hObj->status.videnc2Status.data.buf = &(hObj->versionInfo[0]);
            hObj->status.videnc2Status.data.bufSize = sizeof(hObj->versionInfo);
            algStatus = enclink_jpeg_control(hObj->algHandle, XDM_GETVERSION,
                                             &(hObj->dynamicParams),
                                             &(hObj->status));
            if (algStatus == XDM_EOK)
            {
                ENCLINK_VERBOSE_INFO_LOG(hObj->linkID, hObj->channelID,
                                         "JPEGEncCreated:%s", hObj->versionInfo);
    
            }
            ivaChID = Utils_encdecMapLinkChID2IvaChID(linkID, channelID);
            ENCLINK_VERBOSE_INFO_LOG(hObj->linkID, hObj->channelID, "IVAChID:%d",
                                     ivaChID);
            hObj->dynamicParams.videnc2DynamicParams.lateAcquireArg = ivaChID;
            hObj->ivaChID = ivaChID;
            algStatus = enclink_jpeg_control(hObj->algHandle,
                                             XDM_SETLATEACQUIREARG,
                                             &hObj->dynamicParams, &hObj->status);
            if (algStatus == XDM_EOK)
            {
                ENCLINK_VERBOSE_INFO_LOG(hObj->linkID, hObj->channelID,
                                         "LateAcquireArg set:%d", ivaChID);
            }
            Utils_encdecRegisterAlgHandle(ivaChID, hObj->algHandle);
            algStatus = enclink_jpeg_control(hObj->algHandle,
                                             XDM_SETDEFAULT,
                                             &hObj->dynamicParams, &hObj->status);
            UTILS_assertError((algStatus == XDM_EOK), retVal,
                              ENC_LINK_E_ALGSETPARAMSFAILED, linkID, channelID);
        }
        if (!UTILS_ISERROR(retVal))
        {
            algStatus = enclink_jpeg_control(hObj->algHandle,
                                             XDM_SETPARAMS,
                                             &hObj->dynamicParams, &hObj->status);
            UTILS_assertError((algStatus == XDM_EOK), retVal,
                              ENC_LINK_E_ALGSETPARAMSFAILED, linkID, channelID);
        }
    
        if (!UTILS_ISERROR(retVal))
        {
            enclink_jpeg_control(hObj->algHandle,
                                 XDM_GETSTATUS,
                                 &hObj->dynamicParams, &hObj->status);
        }
        if (!UTILS_ISERROR(retVal))
        {
            algStatus =
                enclink_jpeg_control(hObj->algHandle,
                                     XDM_GETBUFINFO,
                                     &hObj->dynamicParams, &hObj->status);
            UTILS_assertError((algStatus == XDM_EOK), retVal,
                              ENC_LINK_E_ALGGETBUFINFOFAILED, linkID, channelID);
        }
        if (UTILS_ISERROR(retVal))
        {
            enclink_jpeg_freersrc(hObj, rsrcMask);
        }
        /* Initialize the Inarg, OutArg, InBuf & OutBuf objects */
        enclink_jpeg_set_algObject(hObj, algCreateParams, algDynamicParams);
    
        UTILS_MEMLOG_USED_END(hObj->memUsed);
        UTILS_MEMLOG_PRINT("ENCLINK_JPEG",
                           hObj->memUsed,
                           (sizeof(hObj->memUsed) / sizeof(hObj->memUsed[0])));
    
        return retVal;
    }
    
    Void EncLinkJPEG_algDelete(EncLink_JPEGObj * hObj)
    {
        UTILS_MEMLOG_FREE_START();
        if (hObj->algHandle)
        {
            enclink_jpeg_freersrc(hObj, ENCLINKJPEG_ALGREATE_RSRC_ALL);
        }
        enc_link_jpeg_delete(hObj->algHandle);
    
        UTILS_MEMLOG_FREE_END(hObj->memUsed, 0 /* dont care */ );
    }
    
    Int32 EncLinkJPEG_algSetConfig(EncLink_algObj * algObj)
    {
        Int32 status = ENC_LINK_S_SUCCESS;
        UInt32 bitMask;
        Bool setConfigFlag = FALSE;
        UInt key;
    
        key = Hwi_disable();
        bitMask = algObj->setConfigBitMask;
    
        /* Set the modified encoder bitRate value */
        if ((bitMask >> ENC_LINK_SETCONFIG_BITMASK_BITRATE) & 0x1)
        {
            algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                rateControlParamsPreset = IJPEGVENC_RATECONTROLPARAMS_USERDEFINED;
    
            algObj->u.jpegAlgIfObj.dynamicParams.videnc2DynamicParams.
                    targetBitRate = algObj->algDynamicParams.targetBitRate;
    
        Vps_printf("RAJESHKANNAN ::: BITRATE1 = (%d)....\n",  algObj->u.jpegAlgIfObj.dynamicParams.videnc2DynamicParams.targetBitRate);
            if (algObj->algDynamicParams.rateControl == IJPEGVENC_RATECONTROL_CBR_LOW_DELAY) {
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    HRDBufferSize = algObj->algDynamicParams.targetBitRate / 2;
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    initialBufferLevel = algObj->algDynamicParams.targetBitRate / 2;
            }
            else
            {
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    HRDBufferSize = algObj->algDynamicParams.targetBitRate * 2;
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    initialBufferLevel = algObj->algDynamicParams.targetBitRate * 2;
            }
    
            Vps_printf("\n JPGLINK: new targetbitrate to set:%d \n",
                    algObj->algDynamicParams.targetBitRate);
    
            algObj->setConfigBitMask &= (ENC_LINK_SETCONFIG_BITMASK_RESET_VALUE ^
                                         (1 <<
                                          ENC_LINK_SETCONFIG_BITMASK_BITRATE));
            setConfigFlag = TRUE;
        }
    
        /* Set the modified encoder Fps value */
        if ((bitMask >>  ENC_LINK_SETCONFIG_BITMASK_FPS) & 0x1)
        {
            algObj->u.jpegAlgIfObj.dynamicParams.videnc2DynamicParams.
                    targetFrameRate = algObj->algDynamicParams.targetFrameRate;
            algObj->u.jpegAlgIfObj.dynamicParams.videnc2DynamicParams.
                    refFrameRate  = algObj->algDynamicParams.targetFrameRate;
            algObj->u.jpegAlgIfObj.dynamicParams.videnc2DynamicParams.
                    targetBitRate = algObj->algDynamicParams.targetBitRate;
    
            Vps_printf("\n JPGLINK: new targetframerate to set:%d for bitrate %d \n",
                    algObj->algDynamicParams.targetFrameRate, algObj->algDynamicParams.targetBitRate);
    
            algObj->setConfigBitMask &= (ENC_LINK_SETCONFIG_BITMASK_RESET_VALUE ^
                                        (1 << ENC_LINK_SETCONFIG_BITMASK_FPS));
            setConfigFlag = TRUE;
        }
    
        /* Set the modified Qualityfactor value for a jpeg Frame */
        if ((bitMask >>  ENC_LINK_SETCONFIG_BITMASK_QPI) & 0x1)
        {
            algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                rateControlParamsPreset = IJPEGVENC_RATECONTROLPARAMS_USERDEFINED;
    
            algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.qpMinI 	= algObj->algDynamicParams.qpMinI;
            algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.qpMaxI 	= algObj->algDynamicParams.qpMaxI;
            algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.qpI 		= algObj->algDynamicParams.qpInitI;
    
            Vps_printf("\n JPGLINK: new QP Param to set:%d %d %d\n",
                    algObj->algDynamicParams.qpMinI, algObj->algDynamicParams.qpMaxI, algObj->algDynamicParams.qpInitI);
    
            algObj->setConfigBitMask &= (ENC_LINK_SETCONFIG_BITMASK_RESET_VALUE ^
                                        (1 << ENC_LINK_SETCONFIG_BITMASK_QPI));
            setConfigFlag = TRUE;
        }
    
        /* Set the modified encoder rateControl value */
        if ((bitMask >> ENC_LINK_SETCONFIG_BITMASK_RCALGO) & 0x1)
        {
            algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                rateControlParamsPreset = IJPEGVENC_RATECONTROLPARAMS_USERDEFINED;
    
            algObj->u.jpegAlgIfObj.dynamicParams.videnc2DynamicParams.
                    targetBitRate = algObj->algDynamicParams.targetBitRate;
    
        Vps_printf("RAJESHKANNAN ::: BITRATE4 = (%d)....\n",         algObj->u.jpegAlgIfObj.dynamicParams.videnc2DynamicParams.targetBitRate);
            /* 0=> VBR, 1=> CBR, 2=> OFF */
    		if (algObj->algDynamicParams.rateControl == ALG_VID_ENC_RATE_CONTROL_VBR)
            {
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.rcAlgo =
                    IJPEGVENC_RATECONTROL_VBR_STORAGE;
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    HRDBufferSize = algObj->algDynamicParams.targetBitRate * 2;
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    initialBufferLevel = algObj->algDynamicParams.targetBitRate * 2;
            }
            else if (algObj->algDynamicParams.rateControl == ALG_VID_ENC_RATE_CONTROL_CBR)
            {
    		  algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.rcAlgo =
    			IJPEGVENC_RATECONTROL_CBR_LOW_DELAY;
              algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    HRDBufferSize = algObj->algDynamicParams.targetBitRate / 2;
              algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    initialBufferLevel = algObj->algDynamicParams.targetBitRate / 2;
            }
            else
            {	/* TURN OFF RC */
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.rcAlgo =
                    IJPEGVENC_RATECONTROL_DISABLE;
    
            	algObj->u.jpegAlgIfObj.dynamicParams.qualityFactor = algObj->algDynamicParams.qpInitI;
    
    			Vps_printf("\n JPGLINK: new qualityFactor Param to set:%d\n",
    					algObj->algDynamicParams.qpInitI);
            }
    
    		Vps_printf("\n JPGLINK: new rate control algorithm  to set:%d for bitrate: %d\n",
    			   algObj->algDynamicParams.rateControl, algObj->algDynamicParams.targetBitRate);
    
            algObj->setConfigBitMask &= (ENC_LINK_SETCONFIG_BITMASK_RESET_VALUE ^
                                         (1 << ENC_LINK_SETCONFIG_BITMASK_RCALGO));
            setConfigFlag = TRUE;
        }
    
        Hwi_restore(key);
    
        if (setConfigFlag)
        {
            status = enclink_jpeg_control(algObj->u.jpegAlgIfObj.algHandle,
                                          XDM_SETPARAMS,
                                          &algObj->u.jpegAlgIfObj.dynamicParams,
                                          &algObj->u.jpegAlgIfObj.status);
            if (UTILS_ISERROR(status))
            {
                UTILS_warn("\n JPGLINK: ERROR in Run time parameters changes,	\
    			Extended Error code:%d \n", algObj->u.jpegAlgIfObj.status.videnc2Status.extendedError);
            }
            else
            {
                Vps_printf("\n JPGLINK: Run time parameters changed %d\n",
                           algObj->u.jpegAlgIfObj.status.videnc2Status.
                           extendedError);
            }
        }
    
        return (status);
    }
    
    Int32 EncLinkJPEG_algGetConfig(EncLink_algObj * algObj)
    {
        Int retVal = ENC_LINK_S_SUCCESS;
        IJPEGVENC_DynamicParams dynamicParams;
        IJPEGVENC_Status status;
    
        if(algObj->getConfigFlag == TRUE)
        {
    
            status.videnc2Status.size = sizeof(IJPEGVENC_Status);
            dynamicParams.videnc2DynamicParams.size = sizeof(IJPEGVENC_DynamicParams);
    
            retVal = enclink_jpeg_control(algObj->u.jpegAlgIfObj.algHandle,
                                          XDM_GETSTATUS, &dynamicParams, &status);
            if (UTILS_ISERROR(retVal))
            {
                UTILS_warn("\n JPGLINK: ERROR in Run time parameters changes,	\
                      Extended Error code:%d \n", status.videnc2Status.extendedError);
            }
    
            algObj->getConfigFlag = FALSE;
    
            algObj->algDynamicParams.inputWidth =
                status.videnc2Status.encDynamicParams.inputWidth;
            algObj->algDynamicParams.inputHeight =
                status.videnc2Status.encDynamicParams.inputHeight;
            algObj->algDynamicParams.targetBitRate =
                status.videnc2Status.encDynamicParams.targetBitRate;
            algObj->algDynamicParams.targetFrameRate =
                status.videnc2Status.encDynamicParams.targetFrameRate;
            algObj->algDynamicParams.intraFrameInterval =
                status.videnc2Status.encDynamicParams.intraFrameInterval;
            algObj->algDynamicParams.forceFrame =
                status.videnc2Status.encDynamicParams.forceFrame;
            algObj->algDynamicParams.refFrameRate =
                status.videnc2Status.encDynamicParams.refFrameRate;
            Vps_printf("RAJESHKANNAN ::: BITRATE5 = (%d)....\n", algObj->algDynamicParams.targetBitRate);
        }
        return (retVal);
    }
    
    Int EncLinkJPEG_algDynamicParamUpdate(EncLink_JPEGObj * hObj,
                                   EncLink_AlgCreateParams * algCreateParams,
                                   EncLink_AlgDynamicParams * algDynamicParams)
    {
        Int retVal = ENC_LINK_S_SUCCESS;
    
    
        enclink_jpeg_set_dynamic_params(&hObj->dynamicParams, algDynamicParams);
        enclink_jpeg_set_algObject(hObj, algCreateParams, algDynamicParams);
    
        return (retVal);
    }
    

  • Hi Rajesh,

    Rajesh Kannan said:
    [m3vpss ] FOSSILSHALE DEBUG : EncLinkJPEG_algDynamicParamUpdate width=480 height=848 pitch=848.............

    Here pitch and height is 848. Pitch should be Capture width. Is your Input Width = 480 and Input Height = 848 (Resolution 480x848)? or Is the resolution interchanged?

  • Hi Prashanth,

    Thanks for your reply..,

    Ya Its interchanged .., Is not a capture width and height

    Regards,

    Rajesh Kannan.S
  • Hi Rajesh,
    Did you mean to say its interchanged? So the height = 480 and width is 848?
  • Hi Prashanth,

    Some more info :-

    This is the Camera prm .. I enabled tiler memory to rotate width and height
    pCameraOutPrm->scOutWidth = 848;
    pCameraOutPrm->scOutHeight = 480;

    In encoding part it should be
    algCreateParams->maxHeight = 848;
    algCreateParams->maxWidth = 480;

    It's working fine .. no issue !!!

    For changing bit rate is a problem !!!

    When it is taking 8Mbps to encode the streams . In stream.c I changed the dynamic value to 2Mbps..
    But still it's reflecting the encoded streams...

    Kindly suggest me !!

    Thanks for your reply..,

    Regards,

    Rajesh Kannan.S
  • Hi Rajesh,

    The params set by you looks fine. 

    Can you check whats is set in MJPEG_RC_MODE in your Rules.make? Try setting it as MJPEG_VBR_MODE.

  • Hi Prashanth,

    Thanks for your reply ..,

    I setted the value MJPEG_VBR_MODE in Rules.make

    It might be a issue ???

    Once I'll test and let you know shortly..,

    Thanks Prashanth

    Regards,

    Rajesh Kannan.S
  • Hi Rajesh,
    Rest everything looks fine. The answer to your other query," I want to change the bit rate from 8Mbps to 2Mbps.., Where it could be setted to 8Mbps" is params.targetBitRate = 8 * 1000 * 1000; in stream.c
  • Hi Prashanth,

    Same issue Prashanth

    controlPreset is 5

    Why I'm asking without applying the rateCtrl params and changing resolutions and all, it is taking effect whatever the values given by me (same mode MJPEG_RC_MODE)

    [m3vpss ] 1863:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_jpeg.c:[89]::INTERNAL ERROR:-1
    [m3vpss ] ALGCONTROL FAILED:CMD:1
    [m3vpss ]
    [m3vpss ] 1864:ERR::linkID:20000049::channelID:0::errorCode:-5::FileName:links_m3video/iva_enc/encLink_jpeg.c::linuNum:687::errorCondition:(algStatus == XDM_EOK)
    [m3vpss ] ENCLINK_JPEG:HEAPID:0 USED:1896
    [m3vpss ] 1865: Assertion @ Line: 928 in links_m3video/iva_enc/encLink_common.c: retVal == ENC_LINK_S_SUCCESS : failed !!!


    Kindly suggest me !!!

    Regards,

    Rajesh Kannan.S
  • Hi Rajesh,
    Can you try setting the below in stream.c

    Refer to Case STREAM_FEATURE_JPG_QUALITY
    For setting BITRATE
    params.targetBitRate = 2 * 1000 * 1000;
    Venc_setDynamicParam(2, 0, &params, VENC_RATECONTROL);

    For setting Rate Control Value
    params.rateControl = RATECONTROL_VBR;
    Venc_setDynamicParam(2, 0, &params, VENC_BITRATE);
  • Hi Prashanth,

    Thanks for your reply..,

    Ya I already tried !!!
    For this change for channel 2 I guess .., not for channel 0

    Regards,

    Rajesh Kannan.S
  • Hi Prashanth,

    Still the ratectrl params value is 5 not 4. But I could n't go further it's showing ERROR log !!!

    Kindly suggest me the param preset value to avoid this issue !!!

    Thanks for your reply

    Regards,

    Rajesh Kannan.S
  • Hi Prashanth,

    Kindly confirm me is it possible to change the bit rate ??? Whatever the values given to the Encoder !!!

    Let me know the results !!!

    Thanks &
    Regards,

    Rajesh Kannan.S
  • Hi Rajesh,
    Can you print the values below when you see a fail.
    Do a control call with XDM_GETSTATUS to update the status values of errors & then print the below values :

    ErrorValue ( extendedError)

    extendedErrorCode1,2,3,4

    rateControlPreset

    rateControlParams

    status->extendedError

    videnc2Status.rateControlPreset
  • Hi Rajesh,
    Did you do control call XDM_SETPARAMS after setting below values dynamically?

    RateControlPreset = 5                         # 1 => Low Delay, 2 => Storage, 4 => None, 5 => User defined
    targetBitRate = 2000000                     # 2MBPS is set
    maxBitRate = 7500000                        # Max bitrate, applicable in case of VBR
    rcAlgo = 0                                               # 0 => VBR, 1 => CBR
    initialBufferLevel = 4000000              # Initial Buffer level for HRD compliance, keep same as HRDBufferSize for best quality
    HRDBufferSize = 4000000                 # Hypothetical Reference Decoder Buffer Size in bits - 2*bitrate for VBR, bitrate/2 for CBR

  • Hi Prashanth,

    Thanks for your reply..,

    While calling EncLinkJPEG_algCreate() fn from encLink_common.c it's giving error !!!

    [m3vpss ] 1869:ERR::linkID:20000049::channelID:0::errorCode:-5::FileName:links_m3video/iva_enc/encLink_jpeg.c::linuNum:687::errorCondition:(algStatus == XDM_EOK)
    [m3vpss ] ENCLINK_JPEG:HEAPID:0 USED:1896
    [m3vpss ] 1870: Assertion @ Line: 928 in links_m3video/iva_enc/encLink_common.c: retVal == ENC_LINK_S_SUCCESS : failed !!!

    Error code as :- 5 Preset as :- 5

    Kindly suggest me to solve ?

    Thanks Prashanth

    Regards,

    Rajesh Kannan.S
  • Hi Prashanth,

    Ya crt !!! In fn EncLinkJPEG_algCreate()  enabled  the values what we given to an encoder

      enclink_jpeg_set_static_params(&hObj->staticParams, algCreateParams);

      enclink_jpeg_set_dynamic_params(&hObj->dynamicParams, algDynamicParams);

    After this Using enclink_jpeg_control () API to set the Params ( XDM_SETPARAMS) using it's getting Failed !!!

    Kindly suggest me !!!

    Regards,

    Rajesh Kannan.S

  • Hi Prashanth,

    staticParams->videnc2Params.rateControlPreset in this value it has to allow the video rate ctrl mechanism.

    It is allowing only 4(IVIDEO_NONE) which means no configurable video rate control mechanism... Any other dependency with this value ???

    Kindly suggest me to solve

    Thanks Prashanth


    Regards,

    Rajesh Kannan.S
  • Hi Rajesh,
    Now Once the XDM_SETPARAMS fails , you should control call XDM_GETSTATUS to update the status values of errors & then print the below values if its avaialbe :-

    ErrorValue ( extendedError)

    extendedErrorCode1,2,3,4

    rateControlPreset

    rateControlParams

    status->extendedError

    videnc2Status.rateControlPreset
  • Hi Rajesh,
    Also please check rateControlParamsPreset is set to IJPEGVENC_RATECONTROLPARAMS_USERDEFINED
  • Hi Prashanth,

    Thanks for your reply..
    videnc2Params.rateControlPreset = 5;
    dynamicParams->rateControlParams.rateControlParamsPreset = IJPEGVENC_RATECONTROLPARAMS_USERDEFINED

    Is it correct ???

    Regards,

    Rajesh Kannan.S
  • Hi Rajesh,
    Yes your are right.

    Could you print extended error after XDM_SETPARMS failed?

  • Hi Prashanth,

    Thanks for your reply

    rateControlParamsPreset value we have given is coming....

    While calling enclink_jpeg_set_dynamic_params() function we explicitly given the value to Preset params as 5 is not acceptable by the jpeg control link

    [m3vpss ] 1867:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_jpeg.c:[89]::INTERNAL ERROR:-1
    [m3vpss ] ALGCONTROL FAILED:CMD:1
    [m3vpss ] RAJESHKANNAN ::: Before calling XDM_GET_STATUS########
    [m3vpss ]
    [m3vpss ] 1868:ERR::linkID:20000049::channelID:0::errorCode:-5::FileName:links_m3video/iva_enc/encLink_jpeg.c::linuNum:694::errorCondition:(algStatus == XDM_EOK)
    [m3vpss ] ENCLINK_JPEG:HEAPID:0 USED:1896
    [m3vpss ] 1869: Assertion @ Line: 928 in links_m3video/iva_enc/encLink_common.c: retVal == ENC_LINK_S_SUCCESS : failed !!!

    Regards,

    Rajesh Kannan.S
  • Hi Rajesh,
    Please set the dynamic params as said earlier. And then follow this:
    1. XDM_SETPARAMS
    2. XDM_GETSTATUS - Doing this we will get to know the current value dynamic params.
    3. then print videnc2Status.extendedError
    4. print videnc2Params.rateControlPreset
    5. print rateControlParams.rateControlParamsPreset
    6. print videnc2Status.rateControlPreset

    Share me the prints you see on your cosole. Also the complete log/error message. It will be helpful to narrow down the issue.

  • Hi Prashanth,

    Thanks for your reply,

    After setted ParamsPreset and ratectrl preset value Encoder link got passed but... some of the application automatically stopped ...

    Below mentioned the logs for your reference !!!

    I enabled the logs will let you know shortly!!!
    [host] IPC_BITSINLINK:!WARNING!.Commands not being processed by link.TimeSinceLastAlloc:403,TimeSinceLastFree:2942
    [host] IPC_FRAMESINLINK:!WARNING!.Commands not being processed by link.TimeSinceLastAlloc:66147,TimeSinceLastFree:66147
    [host] IPC_BITSINLINK:!WARNING!.Commands not being processed by link.TimeSinceLastAlloc:420,TimeSinceLastFree:2959
    [host] IPC_FRAMESINLINK:!WARNING!.Commands not being processed by link.TimeSinceLastAlloc:66163,TimeSinceLastFree:66163
    [host] IPC_BITSINLINK:!WARNING!.Commands not being processed by link.TimeSinceLastAlloc:436,TimeSinceLastFree:2975
    [host] IPC_FRAMESINLINK:!WARNING!.Commands not being processed by link.TimeSinceLastAlloc:66179,TimeSinceLastFree:66179

    Thanks Prashanth
    Regards,

    RajeshKannan.S
  • Hi Prashanth,

    Log value :-

    [m3vpss ] RAJESHKANNAN ::: Before calling XDM_GET_STATUS########

    [m3vpss ] RAJESHKANNAN ::: In Fn(enclink_jpeg_control)........

    [m3vpss ] RAJESHKANNAN ::: hObj->staticParams.videnc2Params.rateControlPreset = (5)...

    [m3vpss ] RAJESHKANNAN ::: hObj->status.videnc2Status.extendedError = (0)...

    [m3vpss ] RAJESHKANNAN ::: hObj->status.videnc2Status.rateControlPreset = (5)...

    After this I'm getting the logs :-

    [host] MCFW_IPCBITS: Callback function:App_ipcBitsInCbFxn

    [host] MCFW_IPCBITS:App_ipcBitsRecvStreamFxn:INFO: periodic print..

    root@dm814x-evm:~# ipnc_rdk_mcfw.o invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0

    Backtrace:

    [<c004af70>] (dump_backtrace+0x0/0x110) from [<c0356c10>] (dump_stack+0x18/0x1c)

    r6:0000005b r5:000201da r4:c677bb80 r3:60000113

    [<c0356bf8>] (dump_stack+0x0/0x1c) from [<c00a3d64>] (dump_header.clone.13+0x54/0x120)

    [<c00a3d10>] (dump_header.clone.13+0x0/0x120) from [<c00a3f34>] (oom_kill_process.clone.15+0x40/0x1e8)

    r6:0000005b r5:000201da r4:c677bb80

    [<c00a3ef4>] (oom_kill_process.clone.15+0x0/0x1e8) from [<c00a445c>] (out_of_memory+0x248/0x2c4)

    [<c00a4214>] (out_of_memory+0x0/0x2c4) from [<c00a7600>] (__alloc_pages_nodemask+0x468/0x560)

    [<c00a7198>] (__alloc_pages_nodemask+0x0/0x560) from [<c00a8f18>] (__do_page_cache_readahead+0xa0/0x1e8)

    [<c00a8e78>] (__do_page_cache_readahead+0x0/0x1e8) from [<c00a9314>] (ra_submit+0x2c/0x34)

    [<c00a92e8>] (ra_submit+0x0/0x34) from [<c00a32cc>] (filemap_fault+0x16c/0x3ac)

    [<c00a3160>] (filemap_fault+0x0/0x3ac) from [<c00b501c>] (__do_fault+0x58/0x3e0)

    [<c00b4fc4>] (__do_fault+0x0/0x3e0) from [<c00b71d8>] (handle_mm_fault+0x2e4/0xa58)

    [<c00b6ef4>] (handle_mm_fault+0x0/0xa58) from [<c035a9e4>] (do_page_fault+0x114/0x204)

    [<c035a8d0>] (do_page_fault+0x0/0x204) from [<c003d298>] (do_PrefetchAbort+0x3c/0xa0)

    [<c003d25c>] (do_PrefetchAbort+0x0/0xa0) from [<c0359024>] (ret_from_exception+0x0/0x10)

    Exception stack(0xc67abfb0 to 0xc67abff8)

    bfa0:                                     00000000 00000000 569204f4 00000002

    bfc0: 003049e0 00009374 00009378 0019d094 00000000 4cbda930 4cbd9ce8 5691ffac

    bfe0: 00000000 5691fdb8 000381d8 000381d8 00000010 ffffffff

    r7:0019d094 r6:00009378 r5:00009374 r4:ffffffff

    Mem-info:

    Normal per-cpu:

    CPU    0: hi:   42, btch:   7 usd:   6

    active_anon:4568 inactive_anon:54 isolated_anon:0

    active_file:2 inactive_file:0 isolated_file:22

    unevictable:20450 dirty:0 writeback:0 unstable:0

    free:258 slab_reclaimable:297 slab_unreclaimable:670

    mapped:49 shmem:62 pagetables:326 bounce:0

    Normal free:1032kB min:1400kB low:1748kB high:2100kB active_anon:18272kB inactive_anon:216kB active_file:8kB inactive_file:0kB unevictable:81800kB isolated(anon):0kB isolated(file):88kB present:122864kB mlocked:0kB dirty:0kB writeback:0kB mapped:196kB shmem:248kB slab_reclaimable:1188kB slab_unreclaimable:2680kB kernel_stack:784kB pagetables:1304kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:22 all_unreclaimable? no

    lowmem_reserve[]: 0 0 0

    Normal: 6*4kB 72*8kB 13*16kB 3*32kB 2*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 1032kB

    20536 total pagecache pages

    33280 pages of RAM

    413 free pages

    3809 reserved pages

    820 slab pages

    76 pages shared

    0 pages swap cached

    [ pid ]   uid  tgid total_vm      rss cpu oom_adj oom_score_adj name

    [  172]     0   172      530       18   0       0             0 remote_debug_cl

    [  177]     0   177     6692       25   0       0             0 launcher

    [  182]     0   182    46045      303   0       0             0 cbbmgr

    [  183]     0   183     6855       29   0       0             0 devmgr2

    [  233]    42   233      638       41   0       0             0 dbus-daemon

    [  238]     0   238   107406      325   0       0             0 ipnc_rdk_mcfw.o

    [  242]     0   242      673       16   0       0             0 telnetd

    [  249]     0   249      689       31   0       0             0 syslogd

    [  251]     0   251      673       18   0       0             0 klogd

    [  256]     0   256      654       45   0       0             0 login

    [  258]     0   258      754       30   0       0             0 sh

    [  303]     0   303    10873     3577   0       0             0 guiE

    [  307]     0   307    19672      108   0       0             0 rec_file_constr

    [  309]     0   309    19579       29   0       0             0 rec_file_constr

    Out of memory: Kill process 303 (guiE) score 91 or sacrifice child

    Killed process 303 (guiE) total-vm:43492kB, anon-rss:14200kB, file-rss:108kB

    guiE: page allocation failure. order:0, mode:0x201da

    Backtrace:

    [<c004af70>] (dump_backtrace+0x0/0x110) from [<c0356c10>] (dump_stack+0x18/0x1c)

    r6:00000001 r5:00000000 r4:000201da r3:60000113

    [<c0356bf8>] (dump_stack+0x0/0x1c) from [<c00a7694>] (__alloc_pages_nodemask+0x4fc/0x560)

    [<c00a7198>] (__alloc_pages_nodemask+0x0/0x560) from [<c00a8f18>] (__do_page_cache_readahead+0xa0/0x1e8)

    [<c00a8e78>] (__do_page_cache_readahead+0x0/0x1e8) from [<c00a9314>] (ra_submit+0x2c/0x34)

    [<c00a92e8>] (ra_submit+0x0/0x34) from [<c00a32cc>] (filemap_fault+0x16c/0x3ac)

    [<c00a3160>] (filemap_fault+0x0/0x3ac) from [<c00b501c>] (__do_fault+0x58/0x3e0)

    [<c00b4fc4>] (__do_fault+0x0/0x3e0) from [<c00b71d8>] (handle_mm_fault+0x2e4/0xa58)

    [<c00b6ef4>] (handle_mm_fault+0x0/0xa58) from [<c035a9e4>] (do_page_fault+0x114/0x204)

    [<c035a8d0>] (do_page_fault+0x0/0x204) from [<c003d298>] (do_PrefetchAbort+0x3c/0xa0)

    [<c003d25c>] (do_PrefetchAbort+0x0/0xa0) from [<c0359024>] (ret_from_exception+0x0/0x10)

    Exception stack(0xc67f9fb0 to 0xc67f9ff8)

    9fa0:                                     00000000 00000000 41032084 00000002

    9fc0: 000f4240 bea9f908 000f7020 000f7238 000f6e08 bea9f7d8 0000000d 0000005d

    9fe0: 00000000 bea9f7b8 40d9e444 40d9e444 00000010 ffffffff

    r7:000f7238 r6:000f7020 r5:bea9f908 r4:ffffffff

    Mem-info:

    Normal per-cpu:

    CPU    0: hi:   42, btch:   7 usd:   0

    active_anon:4568 inactive_anon:54 isolated_anon:0

    active_file:2 inactive_file:0 isolated_file:22

    unevictable:20450 dirty:0 writeback:0 unstable:0

    free:264 slab_reclaimable:297 slab_unreclaimable:670

    mapped:49 shmem:62 pagetables:326 bounce:0

    Normal free:1056kB min:1400kB low:1748kB high:2100kB active_anon:18272kB inactive_anon:216kB active_file:8kB inactive_file:0kB unevictable:81800kB isolated(anon):0kB isolated(file):88kB present:122864kB mlocked:0kB dirty:0kB writeback:0kB mapped:196kB shmem:248kB slab_reclaimable:1188kB slab_unreclaimable:2680kB kernel_stack:784kB pagetables:1304kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no

    lowmem_reserve[]: 0 0 0

    Normal: 6*4kB 75*8kB 13*16kB 3*32kB 2*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 1056kB

    20536 total pagecache pages

    33280 pages of RAM

    413 free pages

    3809 reserved pages

    820 slab pages

    75 pages shared

    0 pages swap cached

    Regards,

    Rajesh Kannan.S

  • Hi Prashanth,

    If the values are 5 and 5 (ratecontrolparams and rate control preset)

    [m3vpss ] 1865:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_jpeg.c:[93]::INTERNAL ERROR:-1
    [m3vpss ] ALGCONTROL FAILED:CMD:1
    [m3vpss ] RAJESHKANNAN ::: Before calling XDM_GET_STATUS########
    [m3vpss ] RAJESHKANNAN ::: In Fn(enclink_jpeg_control)........
    [m3vpss ] RAJESHKANNAN ::: hObj->staticParams.videnc2Params.rateControlPreset = (5)...
    [m3vpss ] RAJESHKANNAN ::: hObj->status.videnc2Status.extendedError = (8192)...
    [m3vpss ] RAJESHKANNAN ::: hObj->status.videnc2Status.rateControlPreset = (4)...
    [m3vpss ]
    [m3vpss ] 1867:ERR::linkID:20000049::channelID:0::errorCode:-5::FileName:links_m3video/iva_enc/encLink_jpeg.c::linuNum:704::errorCondition:(algStatus == XDM_EOK)
    [m3vpss ] ENCLINK_JPEG:HEAPID:0 USED:1896
    [m3vpss ] 1868: Assertion @ Line: 928 in links_m3video/iva_enc/encLink_common.c: retVal == ENC_LINK_S_SUCCESS : failed !!!

    Regards,

    Rajesh Kannan.S
  • Hi Prashanth,

    If both the values are (4, 4) there is no issue... but unable to change the bit rate

    These are all the test cases I did and shown to you..

    Kindly suggest me to proceed further ???

    Thanks Prashanth

    Regards,

    Rajesh Kannan.S
  • Hi Rajesh,
    Can you set it to 2 & 2 and give a try.
  • Hi Prashanth,

    Thanks for your reply,

    Tried with 2,2 also no improvement ...

    Regards,

    Rajesh Kannan.S
  • Hi Rajesh,
    Please share your latest source/params setting I will take your changes to my set up, and update you.
  • Hi Prashanth,

    Thanks for your reply..,

    Expecting only (4,4) somewhere it is defined or expecting the same ???

    Find the attached source and kindly let me know the results...

    Thanks Prashanth

    Regards,

    Rajesh Kannan.S

    3326.encLink_jpeg.c
    /*******************************************************************************
     *                                                                             *
     * Copyright (c) 2009 Texas Instruments Incorporated - http://www.ti.com/      *
     *                        ALL RIGHTS RESERVED                                  *
     *                                                                             *
     ******************************************************************************/
    
    #include <xdc/std.h>
    #include <ti/xdais/xdas.h>
    #include <ti/xdais/ialg.h>
    #include <ti/sdo/fc/utils/api/alg.h>
    #include <ti/sdo/fc/rman/rman.h>
    #include <ti/xdais/dm/ividenc2.h>
    #include <ijpegenc.h>
    #include <jpegenc_ti.h>
    
    #include "encLink_priv.h"
    #include "encLink_jpeg_priv.h"
    
    #include <mcfw/src_bios6/links_m3video/codec_utils/utils_encdec.h>
    #include <mcfw/src_bios6/links_m3video/codec_utils/iresman_hdvicp2_earlyacquire.h>
    
    
    static JPEGVENC_Handle enc_link_jpeg_create(const IJPEGVENC_Fxns * fxns,
                                                const IJPEGVENC_Params * prms);
    static Void enc_link_jpeg_delete(JPEGVENC_Handle handle);
    static Int32 enclink_jpeg_control(JPEGVENC_Handle handle,
                                      IJPEGVENC_Cmd cmd,
                                      IJPEGVENC_DynamicParams * params,
                                      IJPEGVENC_Status * status);
    static Int enclink_jpeg_set_static_params(IJPEGVENC_Params * staticParams,
                                              EncLink_AlgCreateParams *
                                              algCreateParams);
    static Int enclink_jpeg_set_algObject(EncLink_JPEGObj * algObj,
                                          EncLink_AlgCreateParams * algCreateParams,
                                          EncLink_AlgDynamicParams *
                                          algDynamicParams);
    static Int enclink_jpeg_set_dynamic_params(IJPEGVENC_DynamicParams *
                                               dynamicParams,
                                               EncLink_AlgDynamicParams *
                                               algDynamicParams);
    static Void enclink_jpeg_freersrc(EncLink_JPEGObj * hObj, Int rsrcMask);
    
    extern IRES_Fxns JPEGVENC_TI_IRES;
    
    /*
     *  ======== enc_link_jpeg_create ========
     *  Create an JPEGENC instance object (using parameters specified by prms)
     */
    
    static JPEGVENC_Handle enc_link_jpeg_create(const IJPEGVENC_Fxns * fxns,
                                                const IJPEGVENC_Params * prms)
    {
        return ((JPEGVENC_Handle) ALG_create((IALG_Fxns *) fxns,
                                             NULL, (IALG_Params *) prms));
    }
    
    /*
     *  ======== enc_link_jpeg_delete ========
     *  Delete the JPEGENC instance object specified by handle
     */
    
    static Void enc_link_jpeg_delete(JPEGVENC_Handle handle)
    {
        ALG_delete((IALG_Handle) handle);
    }
    
    /*
     *  ======== enc_link_jpeg_control ========
     */
    
    static Int32 enclink_jpeg_control(JPEGVENC_Handle handle,
                                      IJPEGVENC_Cmd cmd,
                                      IJPEGVENC_DynamicParams * params,
                                      IJPEGVENC_Status * status)
    {
    
        int error = 0;
        IALG_Fxns *fxns = (IALG_Fxns *) handle->fxns;
    
        fxns->algActivate((IALG_Handle) handle);
    
        error = handle->fxns->ividenc.control((IVIDENC2_Handle) handle, cmd,
                                              (IVIDENC2_DynamicParams *) params,
                                              (IVIDENC2_Status *) status);
        fxns->algDeactivate((IALG_Handle) handle);
    
        if (error != XDM_EOK)
        {
            ENCLINK_INTERNAL_ERROR_LOG(error, "ALGCONTROL FAILED:CMD:%d", cmd);
        }
        return error;
    }
    
    /*
     *  ======== Enclink_jpegEncodeFrame ========
     */
    Int32 Enclink_jpegEncodeFrame(EncLink_ChObj * pChObj, EncLink_ReqObj * pReqObj)
    {
        int error;
        Int32 i;
        IJPEGVENC_InArgs *inArgs;
        IJPEGVENC_OutArgs *outArgs;
        IVIDEO2_BufDesc *inputBufDesc;
        XDM2_BufDesc *outputBufDesc;
        JPEGVENC_Handle handle;
        IALG_Fxns *fxns = NULL;
        IVIDEO_ContentType contentType;
        void *allocatedRingBufferAddr;
        UInt32 allocatedRingBufferLength;
        UInt32 frameWidth,frameHeight;
        RingBufferHandle_t ringBufferHnl;
    
        inArgs = &pChObj->algObj.u.jpegAlgIfObj.inArgs;
        outArgs = &pChObj->algObj.u.jpegAlgIfObj.outArgs;
        inputBufDesc = &pChObj->algObj.u.jpegAlgIfObj.inBufs;
        outputBufDesc = &pChObj->algObj.u.jpegAlgIfObj.outBufs;
        handle = pChObj->algObj.u.jpegAlgIfObj.algHandle;
    
        UTILS_assert(handle != NULL);
    
        fxns = (IALG_Fxns *) handle->fxns;
    
        inArgs->videnc2InArgs.inputID =
            (UInt32) pReqObj->InFrameList.frames[0]->addr[0][0];
        for (i = 0; i < inputBufDesc->numPlanes; i++)
        {
            /* Set proper buffer addresses for Frame data */
            /*---------------------------------------------------------------*/
            if (pChObj->algObj.algCreateParams.tilerEnable)
            {
                inputBufDesc->planeDesc[i].buf =
                    (Ptr)
                    Utils_tilerAddr2CpuAddr((UInt32)
                                            (pReqObj->InFrameList.frames[0]->
                                             addr[0][i]));
            }
            else
            {
                inputBufDesc->planeDesc[i].buf =
                    pReqObj->InFrameList.frames[0]->addr[0][i];
            }
        }
    
    	extern BitStreamRingBuffer ringBuffer[UTILS_BITBUF_MAX_ALLOC_POOLS];
    	ringBufferHnl = &ringBuffer[pChObj->allocPoolID];
    
    	 if(ringBufferHnl->wrOfst >= ringBufferHnl->rdOfst) // case1
    	{
    	     allocatedRingBufferAddr = (void *)((UInt32)ringBufferHnl->baseAddr + ringBufferHnl->wrOfst);
    	     allocatedRingBufferLength = ringBufferHnl->totalSize - ringBufferHnl->wrOfst;
    
    		frameWidth = pReqObj->OutBuf->frameWidth;
    		frameHeight = pReqObj->OutBuf->frameHeight;
    	     if(allocatedRingBufferLength <= MIN_TERMINATION_SIZE(frameWidth,frameHeight))
    	     {
    	     		//Vps_printf ("*******early termination********\n");
    			Utils_ringBuffer_updateWrOfst(ringBufferHnl, allocatedRingBufferLength);
    	     		allocatedRingBufferAddr = (void *)((UInt32)ringBufferHnl->baseAddr + ringBufferHnl->wrOfst);
    	     		allocatedRingBufferLength = ringBufferHnl->rdOfst - ringBufferHnl->wrOfst;
    	     }
    	}
    	else // (ringBufferHnl->wrOfst < ringBufferHnl->rdOfst) // case1
    	{
    	     allocatedRingBufferAddr = (void *)((UInt32)ringBufferHnl->baseAddr + ringBufferHnl->wrOfst);
    	     allocatedRingBufferLength = ringBufferHnl->rdOfst - ringBufferHnl->wrOfst;
    	}
        pReqObj->OutBuf->mvDataFilledSize = 0;
        for (i = 0; i < outputBufDesc->numBufs; i++)
        {
            /* Set proper buffer addresses for bitstream data */
          /*---------------------------------------------------------------*/
            outputBufDesc->descs[i].buf = allocatedRingBufferAddr;
            outputBufDesc->descs[i].bufSize.bytes = allocatedRingBufferLength;
        }
    
        fxns->algActivate((IALG_Handle) handle);
        error =
            handle->fxns->ividenc.process((IVIDENC2_Handle) handle,
                                          inputBufDesc, outputBufDesc,
                                          (IVIDENC2_InArgs *) inArgs,
                                          (IVIDENC2_OutArgs *) outArgs);
        fxns->algDeactivate((IALG_Handle) handle);
    
    
       	pReqObj->OutBuf->codingType = pChObj->algObj.u.jpegAlgIfObj.format;
    	pReqObj->OutBuf->addr = allocatedRingBufferAddr;
           pReqObj->OutBuf->fillLength = outArgs->videnc2OutArgs.bytesGenerated;
    	 pReqObj->OutBuf->bufSize =   outArgs->videnc2OutArgs.bytesGenerated;
    	 pReqObj->OutBuf->startOffset = 0;
    	 pReqObj->OutBuf->phyAddr = (UInt32 )pReqObj->OutBuf->addr;
    	 Utils_ringBuffer_updateWrOfst(ringBufferHnl, outArgs->videnc2OutArgs.bytesGenerated);
    	 Utils_ringBuffer_updateEncodedStreamCount(ringBufferHnl, TRUE);
    
        if (pChObj->algObj.u.jpegAlgIfObj.staticParams.videnc2Params.
            inputContentType == IVIDEO_PROGRESSIVE)
        {
            contentType = IVIDEO_PROGRESSIVE;
        }
        else
        {
            contentType =
                Utils_encdecMapFVID2FID2XDMContentType((FVID2_Fid) pReqObj->
                                                       InFrameList.frames[0]->
                                                       fid);
        }
        pReqObj->OutBuf->isKeyFrame =
            Utils_encdecIsGopStart(outArgs->videnc2OutArgs.encodedFrameType,
                                   contentType);
        pReqObj->OutBuf->frameWidth = inputBufDesc->imageRegion.bottomRight.x -
                                      inputBufDesc->imageRegion.topLeft.x;
        pReqObj->OutBuf->frameHeight = inputBufDesc->imageRegion.bottomRight.y -
                                      inputBufDesc->imageRegion.topLeft.y;
    
    
    
        if (error != XDM_EOK)
        {
            ENCLINK_INTERNAL_ERROR_LOG(error, "ALGPROCESS FAILED");
        	Vps_printf ("JPEG Extended error %x \n", outArgs->videnc2OutArgs.extendedError);
        }
    
        return (error);
    }
    
    static Int enclink_jpeg_set_static_params(IJPEGVENC_Params * staticParams,
                                              EncLink_AlgCreateParams *
                                              algCreateParams)
    {
        /* Initialize default values for static params */
        *staticParams = JPEGVENC_TI_PARAMS;
    
        
    #ifndef RAJESH
        algCreateParams->maxHeight = 848; 
        algCreateParams->maxWidth = 480 ;
    #endif
    
        staticParams->videnc2Params.maxHeight =
                      VpsUtils_align(algCreateParams->maxHeight, 2);
    
        staticParams->videnc2Params.maxWidth =
                      VpsUtils_align(algCreateParams->maxWidth, 16);
    
        staticParams->videnc2Params.maxInterFrameInterval = NULL;
        staticParams->videnc2Params.inputContentType = IVIDEO_PROGRESSIVE;
    
    Vps_printf ("DEBUG : Static params............. width=%d  height=%d\n", staticParams->videnc2Params.maxHeight, staticParams->videnc2Params.maxWidth );
    
        staticParams->videnc2Params.inputChromaFormat =
            algCreateParams->inputChromaFormat;
    
        staticParams->videnc2Params.profile = algCreateParams->profile;
    
        staticParams->videnc2Params.level = algCreateParams->level;
    
        staticParams->videnc2Params.numInputDataUnits = 1;
        staticParams->videnc2Params.numOutputDataUnits = 1;
    
        staticParams->videnc2Params.rateControlPreset = IVIDEO_USER_DEFINED;
        staticParams->rateControlParams.rateControlParamsPreset = IJPEGVENC_RATECONTROLPARAMS_DEFAULT;
    
    #ifndef RAJESH
    	/* Disable the Rate Control */
        staticParams->videnc2Params.rateControlPreset = 2; //IVIDEO_RATE_CONTROL_PRESET_DEFAULT; //4; //IVIDEO_USER_DEFINED ; //IJPEGVENC_RATECONTROLPARAMS_DEFAULT; //IVIDEO_USER_DEFINED;
        Vps_printf("RAJESHKANNAN ::: IN ENCODER Changed RATECONTROL PRESET as 2\n");
        //staticParams->videnc2Params.rateControlPreset = 3;
        //staticParams->videnc2Params.maxBitRate = 2*1000*1000; //-1;
        staticParams->videnc2Params.maxBitRate = 7500000 ; //>= 1.5 * 2000000;//dynamicParams->videnc2DynamicParams.targetBitRate;  //-1;
        staticParams->videnc2Params.minBitRate = 1*1000*1000; //0;
    #endif	
        return 0;
    }
    
    static Int enclink_jpeg_set_algObject(EncLink_JPEGObj * algObj,
                                          EncLink_AlgCreateParams * algCreateParams,
                                          EncLink_AlgDynamicParams *
                                          algDynamicParams)
    {
        IJPEGVENC_InArgs *inArgs;
        IJPEGVENC_OutArgs *outArgs;
        IVIDEO2_BufDesc *inputBufDesc;
        XDM2_BufDesc *outputBufDesc;
        IJPEGVENC_Status *status;
        Int i;
    	
        inArgs = &algObj->inArgs;
        outArgs = &algObj->outArgs;
        inputBufDesc = &algObj->inBufs;
        outputBufDesc = &algObj->outBufs;
        status = &algObj->status;
    
         /*-----------------------------------------------------------------------*/
        /* Initialize the input ID in input arguments to the bufferid of the */
        /* buffer element returned from getfreebuffer() function.  */
         /*-----------------------------------------------------------------------*/
        /* inputID need to update before every encode process call */
        inArgs->videnc2InArgs.inputID = 0;
        inArgs->videnc2InArgs.control = IVIDENC2_CTRL_DEFAULT;
    
        outArgs->videnc2OutArgs.extendedError = 0;
        outArgs->videnc2OutArgs.bytesGenerated = 0;
        outArgs->videnc2OutArgs.encodedFrameType = IVIDEO_I_FRAME;
        outArgs->videnc2OutArgs.inputFrameSkip = 0;
        memset(&outArgs->videnc2OutArgs.freeBufID, 0,
               sizeof(outArgs->videnc2OutArgs.freeBufID));
        outArgs->videnc2OutArgs.reconBufs.planeDesc[0].buf = NULL;
        outArgs->videnc2OutArgs.reconBufs.planeDesc[1].buf = NULL;
        outArgs->videnc2OutArgs.reconBufs.imagePitch[0] = 0;
    
        /*------------------------------------------------------------------------*/
        /* Initialise output discriptors */
        /*------------------------------------------------------------------------*/
        outputBufDesc->numBufs = 0;
        for (i = 0; i < algObj->status.videnc2Status.bufInfo.minNumOutBufs; i++)
        {
    
            outputBufDesc->numBufs++;
            outputBufDesc->descs[i].memType = XDM_MEMTYPE_RAW;
            outputBufDesc->descs[i].bufSize.bytes =
                algObj->status.videnc2Status.bufInfo.minOutBufSize[i].bytes;
    
            if (i == 0)
            {
            /*-------------------------------------------------------------------*/
                /* Set proper buffer addresses for bitstream data */
            /*-------------------------------------------------------------------*/
                outputBufDesc->descs[0].buf = NULL;
            }
            else
            {
                if (status->videnc2Status.bufInfo.minOutBufSize[i].bytes
                    > ANALYTICINFO_OUTPUT_BUFF_SIZE)
                {
                    Vps_printf
                        ("\nMemory could not get allocated for Analytic info buffer\n");
                }
            /*-------------------------------------------------------------------*/
                /* Set proper buffer addresses for MV & SAD data */
            /*-------------------------------------------------------------------*/
                outputBufDesc->descs[i].buf = NULL;
            }
        }
    
        /*------------------------------------------------------------------------*/
        /* Video buffer layout, field interleaved or field separated */
        /* Only IVIDEO_FIELD_INTERLEAVED and IVIDEO_FIELD_SEPARATED are supported
         */
        /*------------------------------------------------------------------------*/
        inputBufDesc->dataLayout = algCreateParams->dataLayout;
    
        /*------------------------------------------------------------------------*/
        /* Flag to indicate field order in interlaced content */
        /* Supported values are */
        /* 0 - Bottom field first */
        /* 1 - Top filed first */
        /* TODO : need to find defalut parameter */
        /*------------------------------------------------------------------------*/
        inputBufDesc->topFieldFirstFlag = 1;
    
        /*------------------------------------------------------------------------*/
        /* Initialize the input buffer properties as required by algorithm */
        /* based on info received by preceding GETBUFINFO call.  */
        /*------------------------------------------------------------------------*/
        inputBufDesc->numPlanes = 2;                           /* status.videnc2Status.bufInfo.minNumInBufs;*/
                                                                
    //    inputBufDesc->numPlanes = status.videnc2Status.bufInfo.minNumInBufs;
        inputBufDesc->numMetaPlanes = 0;
        /*------------------------------------------------------------------------*/
        /* Set entire Image region in the buffer by using config parameters */
        /*------------------------------------------------------------------------*/
        inputBufDesc->imageRegion.topLeft.x = algDynamicParams->startX;
        inputBufDesc->imageRegion.topLeft.y = algDynamicParams->startY;
        inputBufDesc->imageRegion.bottomRight.x = algDynamicParams->startX +
            algObj->dynamicParams.videnc2DynamicParams.inputWidth;
        inputBufDesc->imageRegion.bottomRight.y = algDynamicParams->startY +
            algObj->dynamicParams.videnc2DynamicParams.inputHeight;
    
    
        /*------------------------------------------------------------------------*/
        /* Set proper Image region in the buffer by using config parameters */
        /*------------------------------------------------------------------------*/
        inputBufDesc->activeFrameRegion.topLeft.x = algDynamicParams->startX;
        inputBufDesc->activeFrameRegion.topLeft.y = algDynamicParams->startY;
        inputBufDesc->activeFrameRegion.bottomRight.x = algDynamicParams->startX +
            algObj->dynamicParams.videnc2DynamicParams.inputWidth;
        inputBufDesc->activeFrameRegion.bottomRight.y = algDynamicParams->startY +
            algObj->dynamicParams.videnc2DynamicParams.inputHeight;
        /*------------------------------------------------------------------------*/
        /* Image pitch is capture width */
        /*------------------------------------------------------------------------*/
    
        if (algCreateParams->tilerEnable)
        {
            inputBufDesc->imagePitch[0] = VPSUTILS_TILER_CNT_8BIT_PITCH;
        }
        else
        {
            inputBufDesc->imagePitch[0] =
                algObj->dynamicParams.videnc2DynamicParams.captureWidth;
        }
        if (algCreateParams->tilerEnable)
        {
            inputBufDesc->imagePitch[1] = VPSUTILS_TILER_CNT_16BIT_PITCH;
        }
        else
        {
            inputBufDesc->imagePitch[1] =
                algObj->dynamicParams.videnc2DynamicParams.captureWidth;
        }
        /*------------------------------------------------------------------------*/
        /* Set Content type and chroma format from encoder parameters */
        /*------------------------------------------------------------------------*/
        inputBufDesc->contentType =
            algObj->staticParams.videnc2Params.inputContentType;
        inputBufDesc->chromaFormat =
            algObj->staticParams.videnc2Params.inputChromaFormat;
    
        /*------------------------------------------------------------------------*/
        /* Assign memory pointers adn sizes for the all the input buffers */
        /*------------------------------------------------------------------------*/
        for (i = 0; i < algObj->status.videnc2Status.bufInfo.minNumInBufs; i++)
        {
            inputBufDesc->planeDesc[i].buf = NULL;
            if (algCreateParams->tilerEnable)
            {
                if (i & 0x1)
                {
                    inputBufDesc->planeDesc[i].memType = XDM_MEMTYPE_TILED16;
                }
                else
                {
                    inputBufDesc->planeDesc[i].memType = XDM_MEMTYPE_TILED8;
                }
                inputBufDesc->planeDesc[i].bufSize.tileMem.width =
                    algObj->status.videnc2Status.bufInfo.minInBufSize[i].tileMem.
                    width;
                inputBufDesc->planeDesc[i].bufSize.tileMem.height =
                    algObj->status.videnc2Status.bufInfo.minInBufSize[i].tileMem.
                    height;
            }
            else
            {
                inputBufDesc->planeDesc[i].memType = XDM_MEMTYPE_RAW;
                inputBufDesc->planeDesc[i].bufSize.bytes =
                    algObj->status.videnc2Status.bufInfo.minInBufSize[i].tileMem.
                    width *
                    algObj->status.videnc2Status.bufInfo.minInBufSize[i].tileMem.
                    height;
    
            }
        }
        /*------------------------------------------------------------------------*/
        /* Set second field offset width and height according to input data */
        /* When second field of the input data starts at 0 it represents 2 fields
         */
        /* are seperated and provided at 2 diff process calls (60 process call) */
        /*------------------------------------------------------------------------*/
        if ((inputBufDesc->dataLayout == IVIDEO_FIELD_SEPARATED) &&
            (algCreateParams->singleBuf == FALSE) &&
            (algObj->staticParams.videnc2Params.inputContentType ==
             IVIDEO_INTERLACED))
        {
            inputBufDesc->secondFieldOffsetHeight[0] = 0;
            inputBufDesc->secondFieldOffsetHeight[1] = 0;
            inputBufDesc->secondFieldOffsetHeight[2] = 0;
        }
        else
        {
            inputBufDesc->secondFieldOffsetHeight[0] =
                algObj->dynamicParams.videnc2DynamicParams.inputHeight;
            inputBufDesc->secondFieldOffsetHeight[1] =
                (algObj->dynamicParams.videnc2DynamicParams.inputHeight >> 1);
            inputBufDesc->secondFieldOffsetHeight[2] =
                (algObj->dynamicParams.videnc2DynamicParams.inputHeight >> 1);
        }
        inputBufDesc->secondFieldOffsetWidth[0] = 0;
        inputBufDesc->secondFieldOffsetWidth[1] = 0;
        inputBufDesc->secondFieldOffsetWidth[2] = 0;
    
        /*------------------------------------------------------------------------*/
        /* Set The address of unregistered user data in meta data plane desc */
        /*------------------------------------------------------------------------*/
        inputBufDesc->numMetaPlanes = 0;
    
        return 0;
    }
    
    static Int enclink_jpeg_set_dynamic_params(IJPEGVENC_DynamicParams *
                                               dynamicParams,
                                               EncLink_AlgDynamicParams *
                                               algDynamicParams)
    {
        *dynamicParams = JPEGVENC_TI_DYNAMICPARAMS;
        dynamicParams->videnc2DynamicParams.inputWidth =
            algDynamicParams->inputWidth;
        dynamicParams->videnc2DynamicParams.inputHeight =
            algDynamicParams->inputHeight;
        dynamicParams->videnc2DynamicParams.captureWidth =
            algDynamicParams->inputPitch;
        dynamicParams->videnc2DynamicParams.targetBitRate =
            algDynamicParams->targetBitRate;
        dynamicParams->videnc2DynamicParams.targetFrameRate =
            algDynamicParams->targetFrameRate;
        dynamicParams->videnc2DynamicParams.interFrameInterval =
            algDynamicParams->interFrameInterval;
        dynamicParams->videnc2DynamicParams.intraFrameInterval =
            algDynamicParams->intraFrameInterval;
        dynamicParams->videnc2DynamicParams.mvAccuracy =
            algDynamicParams->mvAccuracy;
        dynamicParams->videnc2DynamicParams.refFrameRate =
            algDynamicParams->refFrameRate;
        dynamicParams->videnc2DynamicParams.ignoreOutbufSizeFlag = XDAS_FALSE;
    
    	dynamicParams->qualityFactor = (algDynamicParams->qpInitI==0)?
    						JPEG_QUALITYFACTOR_DEFAULT:algDynamicParams->qpInitI;
    
        Vps_printf("RAJESHKANNAN ::: Checking QualityFactor = (%d)....\n",   dynamicParams->qualityFactor);
        Vps_printf("RAJESHKANNAN ::: BITRATE = (%d)....\n",   dynamicParams->videnc2DynamicParams.targetBitRate);
    
    	/* Rate control params */
        dynamicParams->rateControlParams.rateControlParamsPreset
            = IJPEGVENC_RATECONTROLPARAMS_USERDEFINED;
        Vps_printf("RAJESHKANNAN ::: dynamicParams->rateControlParams.rateControlParamsPreset = (%d)...\n", dynamicParams->rateControlParams.rateControlParamsPreset);
        dynamicParams->rateControlParams.qpMinI = algDynamicParams->qpMinI;
        dynamicParams->rateControlParams.qpMaxI = algDynamicParams->qpMaxI;
        dynamicParams->rateControlParams.qpI    = algDynamicParams->qpInitI;
    //    dynamicParams->rateControlParams.rcAlgo = algDynamicParams->rcAlg;
         dynamicParams->rateControlParams.rcAlgo = algDynamicParams->rcAlg;
        Vps_printf("RAJESHKANNAN ::: Checking before condition dynamicParams->rateControlParams.rcAlgo = (%d)....\n", dynamicParams->rateControlParams.rcAlgo);
    #ifndef RAJESH 
    
        /* Disable the Rate Control */    
        dynamicParams->rateControlParams.rateControlParamsPreset = 2; //5; //IJPEGVENC_RATECONTROLPARAMS_USERDEFINED; //5;// IJPEGVENC_RATECONTROLPARAMS_DEFAULT; //IVIDEO_RATE_CONTROL_PRESET_DEFAULT;// 4; //IJPEGVENC_RATECONTROLPARAMS_DEFAULT; //IVIDEO_USER_DEFINED;
        //dynamicParams->rateControlParams.rateControlParamsPreset = 3;  //RAJESHKANNAN JULY_21
    //Vps_printf("RAJESHKANNAN ::: Checking TargetBR in HRDBuff = (%d)...\n",dynamicParams->videnc2DynamicParams.targetBitRate);
        dynamicParams->rateControlParams.HRDBufferSize = 4000000; //dynamicParams->videnc2DynamicParams.targetBitRate * 2; //10000000; //0;
    //Vps_printf("RAJESHKANNAN ::: Checking HRDBuff Size = (%d)...\n",dynamicParams->rateControlParams.HRDBufferSize);
        dynamicParams->rateControlParams.initialBufferLevel = 4000000; //2 * dynamicParams->videnc2DynamicParams.targetBitRate; //10000000; ////0;
        dynamicParams->videnc2DynamicParams.targetBitRate = 2000000; //2* 1000 * 1000; //0;
        dynamicParams->rateControlParams.rcAlgo = 0; //1;  //4; //5; //6; //3; 2 ->(2Mbps) //0; 0->default 1->variableBR(4) 3->ConstVBR(5) 6->(6Mbps) 5->(5Mbps) 4->(7Mbps)
    Vps_printf("RAJESHKANNAN ::: Setted rcAlgo as (0) = (%d)...\n",dynamicParams->rateControlParams.rcAlgo);
    #else
    
        if(algDynamicParams->rcAlg == IJPEGVENC_RATECONTROL_CBR_LOW_DELAY)
        {
    		dynamicParams->rateControlParams.HRDBufferSize =
            	algDynamicParams->targetBitRate / 2;
        	dynamicParams->rateControlParams.initialBufferLevel =
            	algDynamicParams->targetBitRate / 2;
    	}
    	else {
    			dynamicParams->rateControlParams.HRDBufferSize =
    	        	algDynamicParams->targetBitRate * 2;
    	    	dynamicParams->rateControlParams.initialBufferLevel =
    	        	algDynamicParams->targetBitRate * 2;
    	}
    #endif // RAJESH
    Vps_printf ("EncLinkJPEG_algDynamicParamUpdate  width=%d  height=%d pitch=%d.............\n", dynamicParams->videnc2DynamicParams.inputWidth,  dynamicParams->videnc2DynamicParams.inputHeight, dynamicParams->videnc2DynamicParams.captureWidth );
        return 0;
    }
    
    #define ENCLINKJPEG_ALGREATE_RSRC_NONE                                       (0)
    #define ENCLINKJPEG_ALGREATE_RSRC_ALGCREATED                           (1 <<  0)
    #define ENCLINKJPEG_ALGREATE_RSRC_IRES_ASSIGNED                        (1 <<  1)
    #define ENCLINKJPEG_ALGREATE_RSRC_ALL (                                        \
                                           ENCLINKJPEG_ALGREATE_RSRC_ALGCREATED |  \
                                           ENCLINKJPEG_ALGREATE_RSRC_IRES_ASSIGNED \
                                          )
    
    static Void enclink_jpeg_freersrc(EncLink_JPEGObj * hObj, Int rsrcMask)
    {
        if (rsrcMask & ENCLINKJPEG_ALGREATE_RSRC_IRES_ASSIGNED)
        {
            IRES_Status iresStatus;
    
            iresStatus =
                RMAN_freeResources((IALG_Handle) hObj->algHandle,
                                   &JPEGVENC_TI_IRES, hObj->scratchID);
            if (iresStatus != IRES_OK)
            {
                ENCLINK_INTERNAL_ERROR_LOG(iresStatus, "RMAN_freeResources");
            }
        }
        if (rsrcMask & ENCLINKJPEG_ALGREATE_RSRC_ALGCREATED)
        {
            enc_link_jpeg_delete(hObj->algHandle);
            hObj->algHandle = NULL;
        }
    }
    
    Int EncLinkJPEG_algCreate(EncLink_JPEGObj * hObj,
                              EncLink_AlgCreateParams * algCreateParams,
                              EncLink_AlgDynamicParams * algDynamicParams,
                              Int linkID, Int channelID, Int scratchGroupID)
    {
        Int retVal = ENC_LINK_S_SUCCESS;
        Int rsrcMask = ENCLINKJPEG_ALGREATE_RSRC_NONE;
        Int algStatus;
    
        UTILS_assert(Utils_encdecIsJPEG(algCreateParams->format) == TRUE);
        hObj->linkID = linkID;
        hObj->channelID = channelID;
        hObj->scratchID = scratchGroupID;
    
        memset(&hObj->inArgs, 0, sizeof(hObj->inArgs));
        memset(&hObj->outArgs, 0, sizeof(hObj->outArgs));
        memset(&hObj->inBufs, 0, sizeof(hObj->inBufs));
        memset(&hObj->outBufs, 0, sizeof(hObj->outBufs));
        memset(&hObj->status, 0, sizeof(hObj->status));
        memset(&hObj->memUsed, 0, sizeof(hObj->memUsed));
    
        hObj->status.videnc2Status.size = sizeof(IJPEGVENC_Status);
        hObj->inArgs.videnc2InArgs.size = sizeof(IJPEGVENC_InArgs);
        hObj->outArgs.videnc2OutArgs.size = sizeof(IJPEGVENC_OutArgs);
        hObj->staticParams.videnc2Params.size = sizeof(IVIDENC2_Params);
        hObj->dynamicParams.videnc2DynamicParams.size =
            sizeof(IVIDENC2_DynamicParams);
    
        enclink_jpeg_set_static_params(&hObj->staticParams, algCreateParams);
        enclink_jpeg_set_dynamic_params(&hObj->dynamicParams, algDynamicParams);
    
        UTILS_MEMLOG_USED_START();
        hObj->algHandle =
            enc_link_jpeg_create((IJPEGVENC_Fxns *) & JPEGVENC_TI_IJPEGVENC,
                                 &hObj->staticParams);
    
    	UTILS_assertError((NULL != hObj->algHandle),
                          retVal, ENC_LINK_E_ALGCREATEFAILED, linkID, channelID);
    
        if (!UTILS_ISERROR(retVal))
        {
            IRES_Status iresStatus;
    
            rsrcMask |= ENCLINKJPEG_ALGREATE_RSRC_ALGCREATED;
            iresStatus = RMAN_assignResources((IALG_Handle) hObj->algHandle,
                                              &JPEGVENC_TI_IRES, scratchGroupID);
            UTILS_assertError((iresStatus == IRES_OK), retVal,
                              ENC_LINK_E_RMANRSRCASSIGNFAILED, linkID, channelID);
        }
        if (!UTILS_ISERROR(retVal))
        {
            Int ivaChID;
    
            rsrcMask |= ENCLINKJPEG_ALGREATE_RSRC_IRES_ASSIGNED;
    
            hObj->status.videnc2Status.data.buf = &(hObj->versionInfo[0]);
            hObj->status.videnc2Status.data.bufSize = sizeof(hObj->versionInfo);
            algStatus = enclink_jpeg_control(hObj->algHandle, XDM_GETVERSION,
                                             &(hObj->dynamicParams),
                                             &(hObj->status));
            if (algStatus == XDM_EOK)
            {
                ENCLINK_VERBOSE_INFO_LOG(hObj->linkID, hObj->channelID,
                                         "JPEGEncCreated:%s", hObj->versionInfo);
    
            }
            ivaChID = Utils_encdecMapLinkChID2IvaChID(linkID, channelID);
            ENCLINK_VERBOSE_INFO_LOG(hObj->linkID, hObj->channelID, "IVAChID:%d",
                                     ivaChID);
            hObj->dynamicParams.videnc2DynamicParams.lateAcquireArg = ivaChID;
            hObj->ivaChID = ivaChID;
            algStatus = enclink_jpeg_control(hObj->algHandle,
                                             XDM_SETLATEACQUIREARG,
                                             &hObj->dynamicParams, &hObj->status);
            if (algStatus == XDM_EOK)
            {
                ENCLINK_VERBOSE_INFO_LOG(hObj->linkID, hObj->channelID,
                                         "LateAcquireArg set:%d", ivaChID);
            }
            Utils_encdecRegisterAlgHandle(ivaChID, hObj->algHandle);
            algStatus = enclink_jpeg_control(hObj->algHandle,
                                             XDM_SETDEFAULT,
                                             &hObj->dynamicParams, &hObj->status);
            UTILS_assertError((algStatus == XDM_EOK), retVal,
                              ENC_LINK_E_ALGSETPARAMSFAILED, linkID, channelID);
        }
        if (!UTILS_ISERROR(retVal))
        {
            algStatus = enclink_jpeg_control(hObj->algHandle,
                                             XDM_SETPARAMS,
                                             &hObj->dynamicParams, &hObj->status);
    //RAJESHKANNAN ADDED FOR TESTING PRASHANTH 
    	Vps_printf("RAJESHKANNAN ::: Before calling XDM_GET_STATUS########\n");
            enclink_jpeg_control(hObj->algHandle,
                                 XDM_GETSTATUS,
                                 &hObj->dynamicParams, &hObj->status);
    	Vps_printf("RAJESHKANNAN ::: hObj->staticParams.videnc2Params.rateControlPreset = (%d)...\n", hObj->staticParams.videnc2Params.rateControlPreset);
            Vps_printf("RAJESHKANNAN ::: hObj->status.videnc2Status.extendedError = (%d)...\n", hObj->status.videnc2Status.extendedError);
    	Vps_printf("RAJESHKANNAN ::: hObj->status.videnc2Status.rateControlPreset = (%d)...\n", hObj->status.videnc2Status.rateControlPreset);
    //ENDED
    
            UTILS_assertError((algStatus == XDM_EOK), retVal,
                              ENC_LINK_E_ALGSETPARAMSFAILED, linkID, channelID);
        }
    
        if (!UTILS_ISERROR(retVal))
        {
            enclink_jpeg_control(hObj->algHandle,
                                 XDM_GETSTATUS,
                                 &hObj->dynamicParams, &hObj->status);
        }
        if (!UTILS_ISERROR(retVal))
        {
            algStatus =
                enclink_jpeg_control(hObj->algHandle,
                                     XDM_GETBUFINFO,
                                     &hObj->dynamicParams, &hObj->status);
            UTILS_assertError((algStatus == XDM_EOK), retVal,
                              ENC_LINK_E_ALGGETBUFINFOFAILED, linkID, channelID);
        }
        if (UTILS_ISERROR(retVal))
        {
            enclink_jpeg_freersrc(hObj, rsrcMask);
        }
        /* Initialize the Inarg, OutArg, InBuf & OutBuf objects */
        enclink_jpeg_set_algObject(hObj, algCreateParams, algDynamicParams);
    
        UTILS_MEMLOG_USED_END(hObj->memUsed);
        UTILS_MEMLOG_PRINT("ENCLINK_JPEG",
                           hObj->memUsed,
                           (sizeof(hObj->memUsed) / sizeof(hObj->memUsed[0])));
    
        return retVal;
    }
    
    Void EncLinkJPEG_algDelete(EncLink_JPEGObj * hObj)
    {
        UTILS_MEMLOG_FREE_START();
        if (hObj->algHandle)
        {
            enclink_jpeg_freersrc(hObj, ENCLINKJPEG_ALGREATE_RSRC_ALL);
        }
        enc_link_jpeg_delete(hObj->algHandle);
    
        UTILS_MEMLOG_FREE_END(hObj->memUsed, 0 /* dont care */ );
    }
    
    Int32 EncLinkJPEG_algSetConfig(EncLink_algObj * algObj)
    {
        Int32 status = ENC_LINK_S_SUCCESS;
        UInt32 bitMask;
        Bool setConfigFlag = FALSE;
        UInt key;
    
        key = Hwi_disable();
        bitMask = algObj->setConfigBitMask;
    
        /* Set the modified encoder bitRate value */
        if ((bitMask >> ENC_LINK_SETCONFIG_BITMASK_BITRATE) & 0x1)
        {
            algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                rateControlParamsPreset = IJPEGVENC_RATECONTROLPARAMS_USERDEFINED;
    
            algObj->u.jpegAlgIfObj.dynamicParams.videnc2DynamicParams.
                    targetBitRate = algObj->algDynamicParams.targetBitRate;
    
        Vps_printf("RAJESHKANNAN ::: BITRATE1 = (%d)....\n",  algObj->u.jpegAlgIfObj.dynamicParams.videnc2DynamicParams.targetBitRate);
            if (algObj->algDynamicParams.rateControl == IJPEGVENC_RATECONTROL_CBR_LOW_DELAY) {
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    HRDBufferSize = algObj->algDynamicParams.targetBitRate / 2;
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    initialBufferLevel = algObj->algDynamicParams.targetBitRate / 2;
            }
            else
            {
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    HRDBufferSize = algObj->algDynamicParams.targetBitRate * 2;
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    initialBufferLevel = algObj->algDynamicParams.targetBitRate * 2;
            }
    
            Vps_printf("\n JPGLINK: new targetbitrate to set:%d \n",
                    algObj->algDynamicParams.targetBitRate);
    
            algObj->setConfigBitMask &= (ENC_LINK_SETCONFIG_BITMASK_RESET_VALUE ^
                                         (1 <<
                                          ENC_LINK_SETCONFIG_BITMASK_BITRATE));
            setConfigFlag = TRUE;
        }
    
        /* Set the modified encoder Fps value */
        if ((bitMask >>  ENC_LINK_SETCONFIG_BITMASK_FPS) & 0x1)
        {
            algObj->u.jpegAlgIfObj.dynamicParams.videnc2DynamicParams.
                    targetFrameRate = algObj->algDynamicParams.targetFrameRate;
            algObj->u.jpegAlgIfObj.dynamicParams.videnc2DynamicParams.
                    refFrameRate  = algObj->algDynamicParams.targetFrameRate;
            algObj->u.jpegAlgIfObj.dynamicParams.videnc2DynamicParams.
                    targetBitRate = algObj->algDynamicParams.targetBitRate;
    
            Vps_printf("\n JPGLINK: new targetframerate to set:%d for bitrate %d \n",
                    algObj->algDynamicParams.targetFrameRate, algObj->algDynamicParams.targetBitRate);
    
            algObj->setConfigBitMask &= (ENC_LINK_SETCONFIG_BITMASK_RESET_VALUE ^
                                        (1 << ENC_LINK_SETCONFIG_BITMASK_FPS));
            setConfigFlag = TRUE;
        }
    
        /* Set the modified Qualityfactor value for a jpeg Frame */
        if ((bitMask >>  ENC_LINK_SETCONFIG_BITMASK_QPI) & 0x1)
        {
            algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                rateControlParamsPreset = IJPEGVENC_RATECONTROLPARAMS_USERDEFINED;
    
            algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.qpMinI 	= algObj->algDynamicParams.qpMinI;
            algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.qpMaxI 	= algObj->algDynamicParams.qpMaxI;
            algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.qpI 		= algObj->algDynamicParams.qpInitI;
    
            Vps_printf("\n JPGLINK: new QP Param to set:%d %d %d\n",
                    algObj->algDynamicParams.qpMinI, algObj->algDynamicParams.qpMaxI, algObj->algDynamicParams.qpInitI);
    
            algObj->setConfigBitMask &= (ENC_LINK_SETCONFIG_BITMASK_RESET_VALUE ^
                                        (1 << ENC_LINK_SETCONFIG_BITMASK_QPI));
            setConfigFlag = TRUE;
        }
    
        /* Set the modified encoder rateControl value */
        if ((bitMask >> ENC_LINK_SETCONFIG_BITMASK_RCALGO) & 0x1)
        {
            algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                rateControlParamsPreset = IJPEGVENC_RATECONTROLPARAMS_USERDEFINED;
    
            algObj->u.jpegAlgIfObj.dynamicParams.videnc2DynamicParams.
                    targetBitRate = algObj->algDynamicParams.targetBitRate;
    
        Vps_printf("RAJESHKANNAN ::: BITRATE4 = (%d)....\n",         algObj->u.jpegAlgIfObj.dynamicParams.videnc2DynamicParams.targetBitRate);
            /* 0=> VBR, 1=> CBR, 2=> OFF */
    		if (algObj->algDynamicParams.rateControl == ALG_VID_ENC_RATE_CONTROL_VBR)
            {
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.rcAlgo =
                    IJPEGVENC_RATECONTROL_VBR_STORAGE;
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    HRDBufferSize = algObj->algDynamicParams.targetBitRate * 2;
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    initialBufferLevel = algObj->algDynamicParams.targetBitRate * 2;
            }
            else if (algObj->algDynamicParams.rateControl == ALG_VID_ENC_RATE_CONTROL_CBR)
            {
    		  algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.rcAlgo =
    			IJPEGVENC_RATECONTROL_CBR_LOW_DELAY;
              algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    HRDBufferSize = algObj->algDynamicParams.targetBitRate / 2;
              algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.
                    initialBufferLevel = algObj->algDynamicParams.targetBitRate / 2;
            }
            else
            {	/* TURN OFF RC */
                algObj->u.jpegAlgIfObj.dynamicParams.rateControlParams.rcAlgo =
                    IJPEGVENC_RATECONTROL_DISABLE;
    
            	algObj->u.jpegAlgIfObj.dynamicParams.qualityFactor = algObj->algDynamicParams.qpInitI;
    
    			Vps_printf("\n JPGLINK: new qualityFactor Param to set:%d\n",
    					algObj->algDynamicParams.qpInitI);
            }
    
    		Vps_printf("\n JPGLINK: new rate control algorithm  to set:%d for bitrate: %d\n",
    			   algObj->algDynamicParams.rateControl, algObj->algDynamicParams.targetBitRate);
    
            algObj->setConfigBitMask &= (ENC_LINK_SETCONFIG_BITMASK_RESET_VALUE ^
                                         (1 << ENC_LINK_SETCONFIG_BITMASK_RCALGO));
            setConfigFlag = TRUE;
        }
    
        Hwi_restore(key);
    
        if (setConfigFlag)
        {
            status = enclink_jpeg_control(algObj->u.jpegAlgIfObj.algHandle,
                                          XDM_SETPARAMS,
                                          &algObj->u.jpegAlgIfObj.dynamicParams,
                                          &algObj->u.jpegAlgIfObj.status);
            if (UTILS_ISERROR(status))
            {
                UTILS_warn("\n JPGLINK: ERROR in Run time parameters changes,	\
    			Extended Error code:%d \n", algObj->u.jpegAlgIfObj.status.videnc2Status.extendedError);
            }
            else
            {
                Vps_printf("\n JPGLINK: Run time parameters changed %d\n",
                           algObj->u.jpegAlgIfObj.status.videnc2Status.
                           extendedError);
            }
        }
    
        return (status);
    }
    
    Int32 EncLinkJPEG_algGetConfig(EncLink_algObj * algObj)
    {
        Int retVal = ENC_LINK_S_SUCCESS;
        IJPEGVENC_DynamicParams dynamicParams;
        IJPEGVENC_Status status;
    
        if(algObj->getConfigFlag == TRUE)
        {
    
            status.videnc2Status.size = sizeof(IJPEGVENC_Status);
            dynamicParams.videnc2DynamicParams.size = sizeof(IJPEGVENC_DynamicParams);
    
            retVal = enclink_jpeg_control(algObj->u.jpegAlgIfObj.algHandle,
                                          XDM_GETSTATUS, &dynamicParams, &status);
            if (UTILS_ISERROR(retVal))
            {
                UTILS_warn("\n JPGLINK: ERROR in Run time parameters changes,	\
                      Extended Error code:%d \n", status.videnc2Status.extendedError);
            }
    
            algObj->getConfigFlag = FALSE;
    
            algObj->algDynamicParams.inputWidth =
                status.videnc2Status.encDynamicParams.inputWidth;
            algObj->algDynamicParams.inputHeight =
                status.videnc2Status.encDynamicParams.inputHeight;
            algObj->algDynamicParams.targetBitRate =
                status.videnc2Status.encDynamicParams.targetBitRate;
            algObj->algDynamicParams.targetFrameRate =
                status.videnc2Status.encDynamicParams.targetFrameRate;
            algObj->algDynamicParams.intraFrameInterval =
                status.videnc2Status.encDynamicParams.intraFrameInterval;
            algObj->algDynamicParams.forceFrame =
                status.videnc2Status.encDynamicParams.forceFrame;
            algObj->algDynamicParams.refFrameRate =
                status.videnc2Status.encDynamicParams.refFrameRate;
            Vps_printf("RAJESHKANNAN ::: BITRATE5 = (%d)....\n", algObj->algDynamicParams.targetBitRate);
        }
        return (retVal);
    }
    
    Int EncLinkJPEG_algDynamicParamUpdate(EncLink_JPEGObj * hObj,
                                   EncLink_AlgCreateParams * algCreateParams,
                                   EncLink_AlgDynamicParams * algDynamicParams)
    {
        Int retVal = ENC_LINK_S_SUCCESS;
    
    
        enclink_jpeg_set_dynamic_params(&hObj->dynamicParams, algDynamicParams);
        enclink_jpeg_set_algObject(hObj, algCreateParams, algDynamicParams);
    
        return (retVal);
    }
    

  • Thanks Rajesh,
    I will revert back once I have some info on this.
  • Hi Prashanth,

    Thank you very much..,

    Sure I'm waiting for your reply

    Regards,

    Rajesh Kannan.S
  • Hi Prashanth,

    Any further improvement on this to change the bit rate dynamically ???

    Note : -  I'm asking  for example if any place mentioned like speed related to encoder (ie) Highspeed or quality or any other parameter to encode the streams

    May be it won't allow to change the value (params & rate ctrl value)  ???

    I'm not sure just asking for clarification ??? 

    Thanks u very much Prashanth

    Regards,

    Rajesh Kannan.S

  • Hi Rajesh,

    I am still looking into it. Have you tried to set CBR instead of VBR? And let the height and width be normal, don't rotate it for now.

  • Hi Prashanth,

    Thanks for your reply.

    I will try and let you know shortly.

    Thanks &
    Regards,

    Rajesh Kannan.S
  • Hi Prashanth,

    I don't think so the problem with rotation(TILER Memory)

    I tried the usecase also... It depends on the ratectrl params and preset

    Kindly suggest

    Thanks &
    Regards,

    Rajesh Kannan.S
  • Hi Rajesh,
    Can you print the below and share it here:
    maxHeight
    maxWidth
    InputChromaFormat
    inputContentType
    profile
    level
    inputHeight
    inputWidth
    captureWidth
    targetBitRate
    HRDBufferSize
    initialBufferLevel
    targetBitRate
    rcAlgo
    rateControlParamsPreset
    rateControlPreset
  • Hi Prashanth,

    Thanks for your reply

    Which one I can share ??? Rotated one ??

    Regards,

    Rajesh Kannan.S
  • Hi Rajesh,
    You can share any of them.
  • Hi Prashanth,

    Find the details :-

    [m3vpss ] RAJESHKANNAN :: TI InputContentType:: = (0)...
    [m3vpss ] RAJESHKANNAN DEBUG : Static params............. width=848 height=480 (Input , Max all are same )
    [m3vpss ] RAJESHKANNAN :: TI :: InputChromaFormat = (9)...
    [m3vpss ] RAJESHKANNAN :: TI :: Profile = (0)...
    [m3vpss ] RAJESHKANNAN :: TI :: level = (-1)...
    [m3vpss ] RAJESHKANNAN :: TI :: rateControlPreset = (4)...
    [m3vpss ] RAJESHKANNAN :: TI :: MAX BitRate = (7500000)...
    [m3vpss ] RAJESHKANNAN :: TI :: MIN Bitrate = (1000000)..

    [m3vpss ] RAJESHKANNAN :: TI :: Target BitRate = (2000000)...
    [m3vpss ] RAJESHKANNAN :: TI :: RateCtrlParams Preset = (4)...
    [m3vpss ] RAJESHKANNAN :: TI ::HRDBufferSize = (4000000)...
    [m3vpss ] RAJESHKANNAN :: TI ::InitialBufferLevel = (4000000)...
    [m3vpss ] RAJESHKANNAN :: TI ::rcAlgo = 0

    Thanks &
    Regards,

    Rajesh Kannan.S