我使用的是DM6467处理器做多媒体开发,编码参考ti官网的程序,编码程序共有capture video audio writer(存盘) ctrl 5个线程, 板子编码程序之前一直运行正常的,突然从前段时间开始,编码程序运行有时启动过程中编码初始化时程序死掉,机器死机了。
具体是程序运行到video线程的这句话的时候:hVe1 = Venc1_create(hEngine, envp->videoEncoder, params, dynParams);
我是新手,不知道什么原因造成的,大家帮忙提供一下意见,谢谢。
Void *videoThrFxn(Void *arg)
{
VideoEnv *envp = (VideoEnv *) arg;
Void *status = THREAD_SUCCESS;
VIDENC1_Params defaultParams = Venc1_Params_DEFAULT;
VIDENC1_DynamicParams defaultDynParams = Venc1_DynamicParams_DEFAULT;
BufferGfx_Attrs gfxAttrs = BufferGfx_Attrs_DEFAULT;
Venc1_Handle hVe1 = NULL;
Engine_Handle hEngine = NULL;
BufTab_Handle hBufTab = NULL;
Int frameCnt = 0;
Buffer_Handle hCapBuf, hDstBuf;
VIDENC1_Params *params;
//IH264FHDVENC_Params *params;
VIDENC1_Status encStatus;
VIDENC1_DynamicParams *dynParams;
Int fifoRet;
Int bufIdx;
printf("enter video thread\n");
/* Open the codec engine */
hEngine = Engine_open(envp->engineName, NULL, NULL);
if (hEngine == NULL) {
ERR("Failed to open codec engine %s\n", envp->engineName);
cleanup(THREAD_FAILURE);
}
gblSignalHandlerInstall();
/* Use supplied params if any, otherwise use defaults */
params = envp->params ? envp->params : &defaultParams;
dynParams = envp->dynParams ? envp->dynParams : &defaultDynParams;
/* params = envp->params ? (envp->params) :(VIDENC1_Params*)&my_fhdvenc_params;
dynParams = envp->dynParams ? envp->dynParams : &defaultDynParams;*/
/* Set up codec parameters */
params->maxWidth = envp->imageWidth;
params->maxHeight = envp->imageHeight;
params->inputChromaFormat = XDM_YUV_420SP;
params->reconChromaFormat = XDM_CHROMA_NA;
params->dataEndianness = XDM_LE_32;
//params->videncParams.maxWidth = envp->imageWidth;
//params->videncParams.maxHeight = envp->imageHeight;
//printf("In video width %d height %d bitrate %d\n",params->videncParams.maxWidth,params->videncParams.maxHeight,envp->videoBitRate);
/* Set up codec parameters depending on bit rate */
printf("video envp->videoBitRate%d\n",envp->videoBitRate);
if (envp->videoBitRate < 0) {
/* Variable bit rate */
// params->rateControlPreset = IVIDEO_NONE;
/*
* If variable bit rate use a bogus bit rate value (> 0)
* since it will be ignored.
*/
// params->maxBitRate = 2000000;
}
else {
/* Constant bit rate */
//params->videncParams.rateControlPreset = IVIDEO_LOW_DELAY;
//params->videncParams.maxBitRate = envp->videoBitRate;
params->rateControlPreset = IVIDEO_LOW_DELAY;
params->maxBitRate = envp->videoBitRate;
}
//add by wang
printf("change the params 2\n");
//defaultParams.maxWidth = envp->imageWidth;
//defaultParams.maxHeight = envp->imageHeight;
//defaultParams.maxBitRate = envp->videoBitRate;
dynParams->targetBitRate = envp->videoBitRate;
// dynParams->inputWidth = params->maxWidth;
// dynParams->inputHeight = params->maxHeight;
dynParams->inputWidth = envp->imageWidth;
dynParams->inputHeight = envp->imageHeight;
//dynamicParams.generateHeader = XDM_GENERATE_HEADER;
// dynParams->forceFrame = IVIDEO_IDR_FRAME;
/* Create the video encoder */
printf("ready to creat video encoder\n");
hVe1 = Venc1_create(hEngine, envp->videoEncoder, params, dynParams);
//hVe1 = Venc1_create(hEngine, "h264enc", params, dynParams);
printf("have creat video encoder\n");