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