OSDN Git Service

When BitsPerSample tag is not present in TIFF, that means file is
authorKostya Shishkov <kostya.shishkov@gmail.com>
Wed, 30 Sep 2009 05:49:18 +0000 (05:49 +0000)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Wed, 30 Sep 2009 05:49:18 +0000 (05:49 +0000)
monochrome, so initialize picture before decoding.
This fixes decoding monochrome files produced by lavc TIFF encoder.

Originally committed as revision 20091 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/tiff.c

index 39a11f7..27dd464 100644 (file)
@@ -498,8 +498,19 @@ static int decode_frame(AVCodecContext *avctx,
     }
     /* now we have the data and may start decoding */
     if(!p->data[0]){
-        av_log(s->avctx, AV_LOG_ERROR, "Picture initialization missing\n");
-        return -1;
+        s->bpp = 1;
+        avctx->pix_fmt = PIX_FMT_MONOBLACK;
+        if(s->width != s->avctx->width || s->height != s->avctx->height){
+            if(avcodec_check_dimensions(s->avctx, s->width, s->height))
+                return -1;
+            avcodec_set_dimensions(s->avctx, s->width, s->height);
+        }
+        if(s->picture.data[0])
+            s->avctx->release_buffer(s->avctx, &s->picture);
+        if(s->avctx->get_buffer(s->avctx, &s->picture) < 0){
+            av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed\n");
+            return -1;
+        }
     }
     if(s->strips == 1 && !s->stripsize){
         av_log(avctx, AV_LOG_WARNING, "Image data size missing\n");