added support for the elusive AVI palette change chunk, courtesy of
authorMike Melanson <mike@multimedia.cx>
Thu, 16 Sep 2004 02:14:50 +0000 (02:14 +0000)
committerMike Melanson <mike@multimedia.cx>
Thu, 16 Sep 2004 02:14:50 +0000 (02:14 +0000)
Kostya <cannonball at bw-team.com>

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

libavformat/avidec.c

index 9b1e271..d62ccee 100644 (file)
@@ -490,6 +490,32 @@ static int avi_read_packet(AVFormatContext *s, AVPacket *pkt)
             return size;
           }
         }
+        /* palette changed chunk */
+        if (   d[0] >= '0' && d[0] <= '9'
+            && d[1] >= '0' && d[1] <= '9'
+            && ((d[2] == 'p' && d[3] == 'c'))
+            && n < s->nb_streams && i + size <= avi->movi_end) {
+
+            AVStream *st;
+            int first, clr, flags, k, p;
+
+            st = s->streams[n];
+
+            first = get_byte(pb);
+            clr = get_byte(pb);
+            flags = get_le16(pb);
+            p = 4;
+            for (k = first; k < clr + first; k++) {
+                int r, g, b;
+                r = get_byte(pb);
+                g = get_byte(pb);
+                b = get_byte(pb);
+                    get_byte(pb);
+                st->codec.palctrl->palette[k] = b + (g << 8) + (r << 16);
+            }
+            st->codec.palctrl->palette_changed = 1;
+        }
+
     }
 
     return -1;