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.

DM6467T编码程序初始化过程中出现有时死机的问题

我使用的是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");