summaryrefslogtreecommitdiff
path: root/libavformat/avidec.c
diff options
context:
space:
mode:
authorMike Melanson <mike@multimedia.cx>2004-09-16 02:14:50 +0000
committerMike Melanson <mike@multimedia.cx>2004-09-16 02:14:50 +0000
commit69bde0b2581eda5bcd229c8861c38931feef026e (patch)
tree5f4132864fb0f8900b4e6ed768beaf65cec156a2 /libavformat/avidec.c
parent48cb67c62a868ffc9fc1843240607c0ef6a78dea (diff)
added support for the elusive AVI palette change chunk, courtesy of
Kostya <cannonball at bw-team.com> Originally committed as revision 3467 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/avidec.c')
-rw-r--r--libavformat/avidec.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/libavformat/avidec.c b/libavformat/avidec.c
index 9b1e271ef5..d62ccee627 100644
--- a/libavformat/avidec.c
+++ b/libavformat/avidec.c
@@ -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;