]> git.sesse.net Git - ffmpeg/commitdiff
targa: Do not read colormap from files without one.
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>
Mon, 27 Jun 2011 17:15:46 +0000 (19:15 +0200)
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>
Tue, 28 Jun 2011 16:48:35 +0000 (18:48 +0200)
This is necessary because some programs writing TGA files forget
to initialize parts of the header they don't care about, resulting
in "random" data there.
The new behaviour is consistent with other programs, e.g. tgatoppm.

Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
libavcodec/targa.c

index 7418f92d1ba7c8c8b75d2636ef185f38f05844c0..88b34f3bf4048f91371c1d3c0a6f9ed6b0a66e51 100644 (file)
@@ -109,17 +109,22 @@ static int decode_frame(AVCodecContext *avctx,
     AVFrame * const p= (AVFrame*)&s->picture;
     uint8_t *dst;
     int stride;
-    int idlen, compr, y, w, h, bpp, flags;
+    int idlen, pal, compr, y, w, h, bpp, flags;
     int first_clr, colors, csize;
 
     /* parse image header */
     CHECK_BUFFER_SIZE(buf, buf_end, 18, "header");
     idlen = *buf++;
-    buf++; /* pal */
+    pal = *buf++;
     compr = *buf++;
     first_clr = bytestream_get_le16(&buf);
     colors = bytestream_get_le16(&buf);
     csize = *buf++;
+    if (!pal && (first_clr || colors || csize)) {
+        av_log(avctx, AV_LOG_WARNING, "File without colormap has colormap information set.\n");
+        // specification says we should ignore those value in this case
+        first_clr = colors = csize = 0;
+    }
     buf += 2; /* x */
     y = bytestream_get_le16(&buf);
     w = bytestream_get_le16(&buf);