diff options
author | Mike Melanson <mike@multimedia.cx> | 2004-09-16 02:14:50 +0000 |
---|---|---|
committer | Mike Melanson <mike@multimedia.cx> | 2004-09-16 02:14:50 +0000 |
commit | 69bde0b2581eda5bcd229c8861c38931feef026e (patch) | |
tree | 5f4132864fb0f8900b4e6ed768beaf65cec156a2 | |
parent | 48cb67c62a868ffc9fc1843240607c0ef6a78dea (diff) | |
download | ffmpeg-69bde0b2581eda5bcd229c8861c38931feef026e.tar.gz |
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
-rw-r--r-- | libavformat/avidec.c | 26 |
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; |