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
エラーを返さず、 1を返すので、が正しく設定されているavcodec_is_open
と想定しています。codecContext
私はこれを仮定するのは間違っていますか?
直後に呼び出すとavcodec_close
、avcodec-54.dllのどこかでアクセス違反の例外(badf00dへの書き込み-しかし、avcodec_open2がすべてのコーデックフィールドの入力を処理したと思いました)が発生します
開いていないコーデックを呼び出そうとすると、セグメンテーション違反が発生しているようですがavcodec_close
、ここではそうではないと思います。
私が間違っていることについて何か考えはありますか?
編集:私はかなり古いバージョンのffmpegを使用していたこのコードを継承し、この問題は最新のffmpegtarballに更新したときにのみ発生したことを言及する必要がありました