应该如何在 ffmpeg 中调用 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 时出现