diff --git a/codec.c b/codec.c index 9b98677..042dcf0 100644 --- a/codec.c +++ b/codec.c @@ -131,11 +131,25 @@ static enum PixelFormat Codec_get_format(AVCodecContext * video_ctx, { VideoDecoder *decoder; + decoder = video_ctx->opaque; +#if LIBAVCODEC_VERSION_INT == AV_VERSION_INT(54,86,100) + // this begins to stink, 1.1.2 calls get_format for each frame + // 1.1.3 has the same version, but works again + if (decoder->GetFormatDone) { + if (decoder->GetFormatDone < 10) { + ++decoder->GetFormatDone; + Error + ("codec/video: ffmpeg/libav buggy: get_format called again\n"); + } + return *fmt; // FIXME: this is hack + } +#endif + + // bug in ffmpeg 1.1.1, called with zero width or height if (!video_ctx->width || !video_ctx->height) { - Error("codec/video: ffmpeg/libav buggy\n"); + Error("codec/video: ffmpeg/libav buggy: width or height zero\n"); } - decoder = video_ctx->opaque; decoder->GetFormatDone = 1; return Video_get_format(decoder->HwDecoder, video_ctx, fmt); }