2015-05-07 62 views
0

我使用ffmpeg編碼/解碼視頻。 我過去使用過舊版本,但最近我換了一個新版本,發現許多ffmpeg函數不再使用。什麼是avcodec_thread_init的替代品?

這裏是我的舊代碼:

pCodecCtx=pVideoStream->codec; 
    pCodecCtx->codec_id = pOutputFormat->video_codec; 
    pCodecCtx->codec_type = ffmpeg::AVMEDIA_TYPE_VIDEO; 

    pCodecCtx->bit_rate = Bitrate; 
    pCodecCtx->width = getWidth(); 
    pCodecCtx->height = getHeight(); 
    pCodecCtx->time_base.den = fps; 
    pCodecCtx->time_base.num = 1; 
    pCodecCtx->gop_size = Gop; 
    pCodecCtx->pix_fmt = ffmpeg::PIX_FMT_YUV420P; 


    avcodec_thread_init(pCodecCtx, 10); 

    //if (c->codec_id == CODEC_ID_MPEG2VIDEO) 
    //{ 
     //c->max_b_frames = 2; // just for testing, we also add B frames 
    //} 

    // some formats want stream headers to be separate 
    if(pFormatCtx->oformat->flags & AVFMT_GLOBALHEADER) 
     pCodecCtx->flags |= CODEC_FLAG_GLOBAL_HEADER; 


    if (av_set_parameters(pFormatCtx, NULL) < 0) 
    { 
     printf("Invalid output format parameters\n"); 
     return false; 
    } 

    ffmpeg::dump_format(pFormatCtx, 0, fileName.toStdString().c_str(), 1); 

    // open_video 
    // find the video encoder 
    pCodec = avcodec_find_encoder(pCodecCtx->codec_id); 
    if (!pCodec) 
    { 
     printf("codec not found\n"); 
     return false; 
    } 
    // open the codec 
    if (avcodec_open(pCodecCtx, pCodec) < 0) 
    { 
     printf("could not open codec\n"); 
     return false; 
    } 

    // Allocate memory for output 
    if(!initOutputBuf()) 
    { 
     printf("Can't allocate memory for output bitstream\n"); 
     return false; 
    } 

    // Allocate the YUV frame 
    if(!initFrame()) 
    { 
     printf("Can't init frame\n"); 
     return false; 
    } 

    if (url_fopen(&pFormatCtx->pb, fileName.toStdString().c_str(), URL_WRONLY) < 0) 
    { 
     printf("Could not open '%s'\n", fileName.toStdString().c_str()); 
     return false; 
    } 

    av_write_header(pFormatCtx); 

這裏,avcodec_thread_init是沒有不再使用,我無法找到我應該用什麼功能來取代它anyhints?有任何想法嗎?

回答