您好:
我尝试对video.c里面的params结构体进行扩展,只扩展了一个参数,但是在调用_create函数的时候返回了错误。不知道是什么原因造成的,求助大家,谢谢!
下面是我相关程序的步骤:
1、设置默认参数值
const IVIDENC1_Params IVIDENC1_Params_DEFAULT = {
sizeof(IVIDENC1_Params), /* size */
XDM_DEFAULT, /* encodingPreset */
IVIDEO_LOW_DELAY, /* rateControlPreset */
720, /* maxHeight */
1280, /* maxWidth */
30000, /* maxFrameRate */
6000000, /* maxBitRate */
XDM_BYTE, /* dataEndianness */
0, /* maxInterFrameInterval */
XDM_YUV_420P, /* inputChromaFormat */
IVIDEO_PROGRESSIVE, /* inputContentType */
XDM_CHROMA_NA /* reconChromaFormat */
};
2、定义扩展结构体
typedef struct MYIVIDDEC_Params {
IVIDENC1_Params videncParams;
XDAS_Int32 profileIdc;
} MYIVIDDEC_Params;
3、在main函数里面定义params
IVIDENC1_Params defaultParams = IVIDENC1_Params_DEFAULT;
MYIVIDDEC_Params params;
4、对params进行赋值
params.videncParams = defaultParams;
params.videncParams.size = sizeof(MYIVIDDEC_Params);
params.videncParams.maxWidth = 736;//envp->imageWidth;
params.videncParams.maxHeight = 576;//Dmai_roundUp(envp->imageHeight, CODECHEIGHTALIGN);
params.videncParams.encodingPreset = XDM_HIGH_SPEED;
params.videncParams.inputChromaFormat = XDM_YUV_420SP;
params.videncParams.maxFrameRate = 25000;
params.videncParams.maxBitRate = 500000;
params.videncParams.rateControlPreset = IVIDEO_NONE;
params.profileIdc=66;//增加的参数赋值
5、调用create函数
VIDENC1_Handle hEncode;
/* Create video encoder instance */
hEncode = VIDENC1_create(hEngine, codecName,(VIDENC1_Params*)¶ms);
if (hEncode == NULL) {
printf("!!!!!!!!!!Failed to open video encode algorithm: %s (0x%x)\n",
codecName, Engine_getLastError(hEngine));
free(hVe);
return NULL;
}
结果:返回!!!!!!!!!!Failed to open video encode algorithm: h264enc (0x0)
另外,视频格式选VideoStd_D1_PAL
扩展结构体除了以上的MYIVIDDEC_Params,还用过IH264VENC_Params,同样出错;
create函数除了以上的 VIDENC1_create,还用过Venc1_create,同样出错;
create函数使用强制转换(IVIDENC1_Params*)¶ms,同样出错。
可能是什么原因引起的呢?
求助啊!!!!!!
谢谢!
mengyao liu:
回复 Chris Meng:
最后找到问题了,是参数设置的互相有冲突,所以进不去编码环节
还是非常感谢!!