gpt4 book ai didi

c++ - 使用 avcodec_close 的 ffmpeg 问题

转载 作者:行者123 更新时间:2023-11-30 04:20:54 27 4
gpt4 key购买 nike

avcodec_close 应该如何在 ffmpeg 中调用?

这是重现我的问题的最简单的代码:

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 时出现

最佳答案

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

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

关于c++ - 使用 avcodec_close 的 ffmpeg 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14951319/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com