avcodec_close是怎么称呼的呢?
这是再现我的问题的最简单的代码:
bool CDataSequenceFormat::openVideoCodec( AVStream* videoStream )
{
AVCodecContext* codecContext = videoStream->codec;
AVCodec* codec = avcodec_find_encoder(codecContext->codec_id);
if (codec == NULL || avcodec_open2(codecContext, codec, NULL) < 0 || avcodec_is_open(codecContext)==0)
{
return false;
}
avcodec_close(codecContext);
return true;
}avcodec_open2不返回错误,avcodec_is_open返回1,所以我假设codecContext已经正确设置。我假设这是错误的吗?
当我立即调用avcodec_close时,我在avcodec-54.dll的某个地方得到一个访问冲突异常(写信给badf00d -但我认为avcodec_open2处理了所有编解码器字段的填充)。
当试图在未打开的编解码器上调用avcodec_close时,人们似乎会遇到分段错误,但我认为情况并非如此。
知道我做错什么了吗?
编辑:我应该提到我继承了这段代码,它使用的是一个相当老的ffmpeg版本,这个问题只有在我更新到最新的ffmpeg tarball时才会出现。
发布于 2013-02-19 22:28:56
我使用output_example.c示例重写了类,它似乎神奇地解决了这个问题。
在进一步的研究中,问题似乎是av_set_parameters,av_write_header和avcodec_open2的顺序。上一个版本的ffmpeg似乎并不关心avcodec_open是在av_set_parameters之后调用的,但实际上没有在最新版本中填充所有的编解码字段,除非它被称为第一个
https://stackoverflow.com/questions/14951319
复制相似问题