fixed another color chunk issue

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4888 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
melanson 2002-02-28 03:01:53 +00:00
parent e0acf7f92c
commit 783c4f43e4
1 changed files with 10 additions and 5 deletions

15
fli.c
View File

@ -52,6 +52,7 @@ void decode_fli_frame(
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 @@ void decode_fli_frame(
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 @@ void decode_fli_frame(
{
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 @@ void decode_fli_frame(
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;