correct signaling of palette change

Originally committed as revision 6739 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Alex Beregszaszi 2006-10-19 23:03:47 +00:00
parent ba9fb5da3a
commit 1e4051aaa0
1 changed files with 7 additions and 5 deletions

View File

@ -190,7 +190,6 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx,
case FLI_256_COLOR: case FLI_256_COLOR:
case FLI_COLOR: case FLI_COLOR:
stream_ptr_after_color_chunk = stream_ptr + chunk_size - 6; stream_ptr_after_color_chunk = stream_ptr + chunk_size - 6;
s->new_palette = 1;
/* check special case: If this file is from the Magic Carpet /* check special case: If this file is from the Magic Carpet
* game and uses 6-bit colors even though it reports 256-color * game and uses 6-bit colors even though it reports 256-color
@ -216,6 +215,7 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx,
color_changes = 256; color_changes = 256;
for (j = 0; j < color_changes; j++) { for (j = 0; j < color_changes; j++) {
unsigned int entry;
/* wrap around, for good measure */ /* wrap around, for good measure */
if ((unsigned)palette_ptr >= 256) if ((unsigned)palette_ptr >= 256)
@ -224,7 +224,10 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx,
r = buf[stream_ptr++] << color_shift; r = buf[stream_ptr++] << color_shift;
g = buf[stream_ptr++] << color_shift; g = buf[stream_ptr++] << color_shift;
b = buf[stream_ptr++] << color_shift; b = buf[stream_ptr++] << color_shift;
s->palette[palette_ptr++] = (r << 16) | (g << 8) | b; entry = (r << 16) | (g << 8) | b;
if (s->palette[palette_ptr] != entry)
s->new_palette = 1;
s->palette[palette_ptr++] = entry;
} }
} }
@ -404,9 +407,8 @@ static int flic_decode_frame_8BPP(AVCodecContext *avctx,
"and final chunk ptr = %d\n", buf_size, stream_ptr); "and final chunk ptr = %d\n", buf_size, stream_ptr);
/* make the palette available on the way out */ /* make the palette available on the way out */
// if (s->new_palette) { memcpy(s->frame.data[1], s->palette, AVPALETTE_SIZE);
if (1) { if (s->new_palette) {
memcpy(s->frame.data[1], s->palette, AVPALETTE_SIZE);
s->frame.palette_has_changed = 1; s->frame.palette_has_changed = 1;
s->new_palette = 0; s->new_palette = 0;
} }