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.

Using MPEG4 Encoder in Short Header Mode (svhMode=1) for other than CIF and 4CIF

hi  all,

I am planning to used MPEG4 Encoder in Short Header mode.

while testing the codec I am getting SETPARAMS error while setting input image format other than CIF & 4CIF ( for example VGA, D1 .. etc ) while the encoder is configured in Short Header Mode. i am getting an error or 0x4001 if width is not same or 0x4002 if height is not same.

in datasheet and userguide of encoder its mention that input width/height should be greater than 192 and multiple of 16.

please do advice me on this..

Below given is my configuration used ..

    //Codec specific extended parameters
    MP4Enc_extn_params.videncParams.size = sizeof(IMP4VENC_Params);
    MP4Enc_extn_params.videncParams.encodingPreset = XDM_HIGH_SPEED;
    MP4Enc_extn_params.videncParams.rateControlPreset = 0;//IVIDEO_LOW_DELAY;//0 ; //AKR
    MP4Enc_extn_params.videncParams.maxHeight = h ;
    MP4Enc_extn_params.videncParams.maxWidth = w;
    MP4Enc_extn_params.videncParams.maxFrameRate = 20000;//30000
    MP4Enc_extn_params.videncParams.maxBitRate = kbps*1000;//512000;
    MP4Enc_extn_params.videncParams.dataEndianness = XDM_DEFAULT;
    MP4Enc_extn_params.videncParams.maxInterFrameInterval = XDM_DEFAULT;
    MP4Enc_extn_params.videncParams.inputChromaFormat = XDM_YUV_420SP;//4 ;//XDM_YUV_420SP ;//4 ;//XDM_YUV_420SP; // 4 => 422
    MP4Enc_extn_params.videncParams.inputContentType = XDM_DEFAULT;
    MP4Enc_extn_params.videncParams.reconChromaFormat = XDM_DEFAULT;
    MP4Enc_extn_params.subWindowHeight = MP4Enc_extn_params.videncParams.maxHeight;//576;
    MP4Enc_extn_params.subWindowWidth = MP4Enc_extn_params.videncParams.maxWidth;//704;    
    MP4Enc_extn_params.rotation = 0;
    MP4Enc_extn_params.vbvSize = 10000;//2500;//2500 ;//10000;
    MP4Enc_extn_params.svhMode = 1;
   
   
    if ((MP4Enc_handle = (IALG_Handle) ALG_create_MP4Enc((IALG_Fxns *) &
                                           MP4VENC_TI_IMP4VENC,
                                           (IALG_Handle) NULL,
                                           (IALG_Params *) &MP4Enc_extn_params)) == NULL)
    {
        MP4ENC_DBG_PRINTF("\nMP4ENC :Failed to Create Instance... ");
        goto MP4CNV_MdlStart_Exit ;
    }
    else
    {
        MP4ENC_DBG_PRINTF("MP4ENC : Create Instance success\n");
    }
    MP4Enc_ividEncfxns = (IVIDENC1_Fxns *) MP4Enc_handle->fxns;   
    //////////// END OF CREATING MPEG4 ENCODER INSTANCE ///////////
   
    // Create an instance of an algorithm that implements IALG and IRES_Fxns
    iresStatus = RMAN_assignResources((IALG_Handle)MP4Enc_handle, MP4Enc_resFxns,MP4Enc_scratchId);
    if (IRES_OK != iresStatus)
    {
        MP4ENC_DBG_PRINTF("MP4ENC :Assign Resource Failed !!!\n");
        goto MP4CNV_MdlStart_Exit ;
    }
    else
    {
        MP4ENC_DBG_PRINTF("MP4ENC : Assign Resource Success !!!\n");
    }

   
               
        // Activate the Algorithm
        MP4Enc_handle->fxns->algActivate(MP4Enc_handle);
       
        MP4Enc_extn_dynamicParams.videncDynamicParams.size = sizeof(IMP4VENC_Params);
        MP4Enc_extn_dynamicParams.videncDynamicParams.inputHeight = MP4Enc_extn_params.videncParams.maxHeight ;
        MP4Enc_extn_dynamicParams.videncDynamicParams.inputWidth = MP4Enc_extn_params.videncParams.maxWidth;
        MP4Enc_extn_dynamicParams.videncDynamicParams.targetFrameRate =
                                                            MP4Enc_extn_params.videncParams.maxFrameRate;
        MP4Enc_extn_dynamicParams.videncDynamicParams.targetBitRate = MP4Enc_extn_params.videncParams.maxBitRate;
        MP4Enc_extn_dynamicParams.videncDynamicParams.intraFrameInterval = 30;//8;

        //MP4Enc_extn_dynamicParams.videncDynamicParams.generateHeader = 0;
        MP4Enc_extn_dynamicParams.videncDynamicParams.generateHeader = XDM_DEFAULT;
        MP4Enc_extn_dynamicParams.videncDynamicParams.captureWidth = XDM_DEFAULT;
        MP4Enc_extn_dynamicParams.videncDynamicParams.forceFrame = XDM_DEFAULT;
        MP4Enc_extn_dynamicParams.videncDynamicParams.interFrameInterval=XDM_DEFAULT;   
        MP4Enc_extn_dynamicParams.videncDynamicParams.mbDataFlag = XDM_DEFAULT;
       
        MP4Enc_extn_dynamicParams.intraAlgo = 1;//IMP4VENC_INTRA_INTER_DECISION_LQ_HP;//IMP4VENC_INTRA_INTER_DECISION_HQ_LP;//IMP4VENC_INTRA_INTER_DECISION_LQ_HP;//1;
        MP4Enc_extn_dynamicParams.numMBRows = 5;//9;//5 ;
        MP4Enc_extn_dynamicParams.initQ = 25 ;//0;
        MP4Enc_extn_dynamicParams.rcQMax = 31;
        MP4Enc_extn_dynamicParams.rcQMin = 1;
        MP4Enc_extn_dynamicParams.intraFrameQP = 0;       
        MP4Enc_extn_dynamicParams.interFrameQP = 0;
        MP4Enc_extn_dynamicParams.rateFix = 0;
        MP4Enc_extn_dynamicParams.rateFixRange = 4;
        MP4Enc_extn_dynamicParams.meAlgo = 0;//IMP4VENC_ME_MQ_MP;//IMP4VENC_ME_LQ_HP;//IMP4VENC_ME_HQ_LP;//IMP4VENC_ME_MQ_MP;//IMP4VENC_ME_LQ_HP;//0;  akr
        MP4Enc_extn_dynamicParams.skipMBAlgo = 0;//IMP4VENC_SKIP_MB_HQ_LP;//0;
        MP4Enc_extn_dynamicParams.unrestrictedMV = 0;//IMP4VENC_UMV_LQ_HP;//0;
        MP4Enc_extn_dynamicParams.mvDataEnable = 0;
       
   
                                       
        // Set Dynamic Params
        retVal = MP4Enc_ividEncfxns->control((IVIDENC1_Handle)MP4Enc_handle, XDM_SETPARAMS,
                                      (IVIDENC1_DynamicParams *)&MP4Enc_extn_dynamicParams,
                                      (IVIDENC1_Status *)&MP4Enc_status);

        if (retVal == XDM_EFAIL)
        {
            MP4ENC_DBG_PRINTF("MP4ENC :SETPARAMS function returned an Error... 0x%x\n",(int)(((IVIDENC1_Status *)&MP4Enc_status)->extendedError) );
            goto MP4CNV_MdlStart_Exit ;
        }

 

with

thanks

arun

 

 

 

  • Hi all,,

    i suppose i figured out why it didn't support ... H263 baseline profile only supports Sub-QCIF, QCIF, CIF and 4CIF only.. There is a limitation inside MPEG4 encoder so that it cannot support resolutions less than 192 pixels ( so cannot support Sub-QCIF and QCIF ) . so the rest only MPEG4 can support ( 4CIF and CIF ) in short header mode ...

     

    with

    thanks

    arun