summaryrefslogtreecommitdiff
path: root/codec.c
diff options
context:
space:
mode:
Diffstat (limited to 'codec.c')
-rw-r--r--codec.c18
1 files changed, 16 insertions, 2 deletions
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);
}