diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2021-04-04 11:54:22 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2021-04-06 09:03:19 +0100 |
commit | c2074de22a8d77ff8e688a3f22132f6d0ee44c20 (patch) | |
tree | 9e266306026c84de88418d897eeb16f2c93ac4af | |
parent | 602dcec85a1fc6f932bd32b49008354016c29bec (diff) | |
download | libnsgif-c2074de22a8d77ff8e688a3f22132f6d0ee44c20.tar.gz libnsgif-c2074de22a8d77ff8e688a3f22132f6d0ee44c20.tar.bz2 |
gif: Frame decoding: Simplify transparency check.
-rw-r--r-- | src/libnsgif.c | 14 |
1 files changed, 10 insertions, 4 deletions
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++; |