Mercurial > mplayer.hg
changeset 4887:6d753f5dde1e
fixed another color chunk issue
author | melanson |
---|---|
date | Thu, 28 Feb 2002 03:01:53 +0000 |
parents | 712c8fc897fd |
children | cb2adf32c356 |
files | fli.c |
diffstat | 1 files changed, 10 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/fli.c Thu Feb 28 02:37:13 2002 +0000 +++ b/fli.c Thu Feb 28 03:01:53 2002 +0000 @@ -52,6 +52,7 @@ void *context) { int stream_ptr = 0; + int stream_ptr_after_color_chunk; int pixel_ptr; int palette_ptr1; int palette_ptr2; @@ -82,7 +83,7 @@ unsigned char *fli_ghost_image = (unsigned char *)context; int ghost_pixel_ptr; int ghost_y_ptr; - + frame_size = LE_32(&encoded[stream_ptr]); stream_ptr += 6; // skip the magic number num_chunks = LE_16(&encoded[stream_ptr]); @@ -101,6 +102,7 @@ { case FLI_256_COLOR: case FLI_COLOR: + stream_ptr_after_color_chunk = stream_ptr + chunk_size - 6; if (chunk_type == FLI_COLOR) color_scale = 4; else @@ -130,10 +132,13 @@ stream_ptr += 3; } } - // it seems that a color packet has to be an even number of bytes - // so account for a pad byte - if (stream_ptr & 0x01) - stream_ptr++; + + // color chunks sometimes have weird 16-bit alignment issues; + // therefore, take the hardline approach and set the stream_ptr + // to the value calculate w.r.t. the size specified by the color + // chunk header + stream_ptr = stream_ptr_after_color_chunk; + /* Palette has changed, must update frame */ update_whole_frame = 1; break;