avcodec_thread_init 的替代品是什么?
What's the replacement for the avcodec_thread_init?
我正在使用 ffmpeg 制作 encode/decode 视频。
以前用的是老版本,最近换了新版本,发现很多ffmpeg的功能都用不上了
这是我的旧代码:
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
不再使用,我找不到任何关于我应该使用什么函数来替换它的提示?有什么想法吗?
根据 ffmpeg 站点中提供的信息,此函数现在作为 avcodec_open() 函数的一部分自动调用。 PL。请参阅下面的 url,其中提供了相同的信息。
https://ffmpeg.org/pipermail/ffmpeg-devel/2011-February/103341.html
我正在使用 ffmpeg 制作 encode/decode 视频。 以前用的是老版本,最近换了新版本,发现很多ffmpeg的功能都用不上了
这是我的旧代码:
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
不再使用,我找不到任何关于我应该使用什么函数来替换它的提示?有什么想法吗?
根据 ffmpeg 站点中提供的信息,此函数现在作为 avcodec_open() 函数的一部分自动调用。 PL。请参阅下面的 url,其中提供了相同的信息。 https://ffmpeg.org/pipermail/ffmpeg-devel/2011-February/103341.html