From: The M. M. M. <tm...@us...> - 2002-09-28 17:13:20
|
Update of /cvsroot/xine/xine-lib/src/demuxers In directory usw-pr-cvs1:/tmp/cvs-serv17451 Modified Files: demux_qt.c Log Message: preliminary greyscale palette support; not perfect yet, but it keeps certain files from crashing the demuxer Index: demux_qt.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/demuxers/demux_qt.c,v retrieving revision 1.87 retrieving revision 1.88 diff -u -r1.87 -r1.88 --- demux_qt.c 23 Sep 2002 03:34:03 -0000 1.87 +++ demux_qt.c 28 Sep 2002 17:13:16 -0000 1.88 @@ -474,6 +474,8 @@ int color_count; int color_end; int color_index; + int color_dec; + int color_greyscale; unsigned char *color_table; /* initialize sample table structure */ @@ -571,6 +573,7 @@ /* figure out the palette situation */ color_depth = trak_atom[i + 0x5F]; sample_table->media_description.video.depth = color_depth; + color_greyscale = color_depth & 0x20; color_depth &= 0x1F; /* if the depth is 2, 4, or 8 bpp, file is palettized */ @@ -578,9 +581,30 @@ color_flag = BE_16(&trak_atom[i + 0x60]); - /* if flag bit 3 is set, load the default palette */ - if (color_flag & 0x08) { + if (color_greyscale) { + sample_table->media_description.video.palette_count = + 1 << color_depth; + + /* compute the greyscale palette */ + color_index = 255; + color_dec = 256 / + (sample_table->media_description.video.palette_count - 1); + for (j = 0; + j < sample_table->media_description.video.palette_count; + j++) { + + sample_table->media_description.video.palette[j].r = color_index; + sample_table->media_description.video.palette[j].g = color_index; + sample_table->media_description.video.palette[j].b = color_index; + color_index -= color_dec; + if (color_index < 0) + color_index = 0; + } + + } else if (color_flag & 0x08) { + + /* if flag bit 3 is set, load the default palette */ sample_table->media_description.video.palette_count = 1 << color_depth; |