【问题标题】:ffmpeg problems using avcodec_close使用 avcodec_close 的 ffmpeg 问题
【发布时间】: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


    【解决方案1】:

    我使用output_example.c 示例重写了课程,它似乎神奇地解决了问题。

    进一步调查,问题似乎出在av_set_parametersav_write_headeravcodec_open2 的顺序上。以前版本的 ffmpeg 似乎并不关心 avcodec_openav_set_parameters 之后被调用,但实际上并没有填写最新版本中的所有编解码器字段,除非它首先被调用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-21
      • 2015-06-27
      • 2011-08-24
      • 2015-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多