diff options
author | melanson <melanson@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-01-24 05:20:19 +0000 |
---|---|---|
committer | melanson <melanson@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-01-24 05:20:19 +0000 |
commit | d68675fee90f018d702e50ffda8bc831b2828d50 (patch) | |
tree | 82de1022643b06ca3a7f997c28eb77160ddc7908 /libmpdemux/demux_mov.c | |
parent | 6cf2fc4f1966f355a95fb726516cbc6e749d3184 (diff) | |
download | mpv-d68675fee90f018d702e50ffda8bc831b2828d50.tar.bz2 mpv-d68675fee90f018d702e50ffda8bc831b2828d50.tar.xz |
QT demuxer now supports the default QT palettes
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4333 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_mov.c')
-rw-r--r-- | libmpdemux/demux_mov.c | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/libmpdemux/demux_mov.c b/libmpdemux/demux_mov.c index a9b8aab585..35e18c7b7f 100644 --- a/libmpdemux/demux_mov.c +++ b/libmpdemux/demux_mov.c @@ -18,6 +18,8 @@ #include "bswap.h" +#include "qtpalette.h" + #ifdef HAVE_ZLIB #include <zlib.h> #endif @@ -600,18 +602,33 @@ static void lschunks(demuxer_t* demuxer,int level,off_t endpos,mov_track_t* trak end = BE_16(&trak->stdata[hdr_ptr]); hdr_ptr += 2; palette_map = (unsigned char *)sh->bih + 40; - for (i = start; i <= end; i++) + + // load default palette + if (flag & 0x08) + { + if (palette_count == 4) + memcpy(palette_map, qt_default_palette_4, 4 * 4); + else if (palette_count == 16) + memcpy(palette_map, qt_default_palette_16, 16 * 4); + if (palette_count == 256) + memcpy(palette_map, qt_default_palette_256, 256 * 4); + } + // load palette from file + else { - entry = BE_16(&trak->stdata[hdr_ptr]); - hdr_ptr += 2; - // apparently, if count_flag is set, entry is same as i - if (count_flag & 0x8000) - entry = i; - // only care about top 8 bits of 16-bit R, G, or B value - palette_map[entry * 4 + 0] = trak->stdata[hdr_ptr + 0]; - palette_map[entry * 4 + 1] = trak->stdata[hdr_ptr + 2]; - palette_map[entry * 4 + 2] = trak->stdata[hdr_ptr + 4]; - hdr_ptr += 6; + for (i = start; i <= end; i++) + { + entry = BE_16(&trak->stdata[hdr_ptr]); + hdr_ptr += 2; + // apparently, if count_flag is set, entry is same as i + if (count_flag & 0x8000) + entry = i; + // only care about top 8 bits of 16-bit R, G, or B value + palette_map[entry * 4 + 0] = trak->stdata[hdr_ptr + 0]; + palette_map[entry * 4 + 1] = trak->stdata[hdr_ptr + 2]; + palette_map[entry * 4 + 2] = trak->stdata[hdr_ptr + 4]; + hdr_ptr += 6; + } } } else |