diff --git a/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp b/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp index ae533041dd..1a5498f3cc 100644 --- a/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp +++ b/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.cpp @@ -44,7 +44,7 @@ AVCodecEncoder::AVCodecEncoder(uint32 codecID, int bitRateScale) fCodecID((CodecID)codecID), fCodec(NULL), fCodecContext(avcodec_alloc_context3(NULL)), - fCodecInitialized(false), + fCodecInitStatus(CODEC_INIT_NEEDED), fFrame(av_frame_alloc()), fSwsContext(NULL), fFramesWritten(0) @@ -465,9 +465,12 @@ AVCodecEncoder::_Setup() bool AVCodecEncoder::_OpenCodecIfNeeded() { - if (fCodecInitialized) + if (fCodecInitStatus == CODEC_INIT_DONE) return true; + if (fCodecInitStatus == CODEC_INIT_FAILED) + return false; + fCodecContext->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL; // Some codecs need this to be set before open @@ -478,13 +481,13 @@ AVCodecEncoder::_OpenCodecIfNeeded() // Open the codec int result = avcodec_open2(fCodecContext, fCodec, NULL); if (result >= 0) - fCodecInitialized = true; + fCodecInitStatus = CODEC_INIT_DONE; else - fCodecInitialized = false; + fCodecInitStatus = CODEC_INIT_FAILED; TRACE(" avcodec_open(%p, %p): %d\n", fCodecContext, fCodec, result); - return fCodecInitialized; + return fCodecInitStatus == CODEC_INIT_DONE; } diff --git a/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.h b/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.h index 9e5e8cfdb9..f120c7c88e 100644 --- a/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.h +++ b/src/add-ons/media/plugins/ffmpeg/AVCodecEncoder.h @@ -75,8 +75,13 @@ private: CodecID fCodecID; AVCodec* fCodec; AVCodecContext* fCodecContext; - - bool fCodecInitialized; + + enum { + CODEC_INIT_NEEDED = 0, + CODEC_INIT_DONE, + CODEC_INIT_FAILED + }; + uint32 fCodecInitStatus; // For video (color space conversion): AVPicture fSrcFrame;