From c2074de22a8d77ff8e688a3f22132f6d0ee44c20 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Sun, 4 Apr 2021 11:54:22 +0100 Subject: gif: Frame decoding: Simplify transparency check. --- src/libnsgif.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/libnsgif.c') diff --git a/src/libnsgif.c b/src/libnsgif.c index 3b070b3..0874ec9 100644 --- a/src/libnsgif.c +++ b/src/libnsgif.c @@ -42,6 +42,9 @@ /** Transparent colour */ #define GIF_TRANSPARENT_COLOUR 0x00 +/** No transparency */ +#define GIF_NO_TRANSPARENCY (0xFFFFFFFFu) + /* GIF Flags */ #define GIF_FRAME_COMBINE 1 #define GIF_FRAME_CLEAR 2 @@ -635,6 +638,7 @@ gif__decode(gif_animation *gif, unsigned int *restrict frame_data, unsigned int *restrict colour_table) { + unsigned int transparency_index; const uint8_t *stack_base; const uint8_t *stack_pos; uint32_t written = 0; @@ -649,6 +653,10 @@ gif__decode(gif_animation *gif, return gif_error_from_lzw(res); } + transparency_index = gif->frames[frame].transparency ? + gif->frames[frame].transparency_index : + GIF_NO_TRANSPARENCY; + stack_pos = stack_base; for (unsigned int y = 0; y < height; y++) { unsigned int x; @@ -672,11 +680,9 @@ gif__decode(gif_animation *gif, x -= burst_bytes; written -= burst_bytes; while (burst_bytes-- > 0) { - register unsigned char colour; + register unsigned int colour; colour = *stack_pos++; - if (((gif->frames[frame].transparency) && - (colour != gif->frames[frame].transparency_index)) || - (!gif->frames[frame].transparency)) { + if (colour != transparency_index) { *frame_scanline = colour_table[colour]; } frame_scanline++; -- cgit v1.2.3