【发布时间】:2013-06-28 03:41:26
【问题描述】:
在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 时出现
【问题讨论】:
标签: c++ visual-c++ ffmpeg