summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_mov.c
diff options
context:
space:
mode:
authormelanson <melanson@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-24 05:20:19 +0000
committermelanson <melanson@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-24 05:20:19 +0000
commitd68675fee90f018d702e50ffda8bc831b2828d50 (patch)
tree82de1022643b06ca3a7f997c28eb77160ddc7908 /libmpdemux/demux_mov.c
parent6cf2fc4f1966f355a95fb726516cbc6e749d3184 (diff)
downloadmpv-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.c39
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