diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2021-09-24 22:34:32 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2021-09-24 22:34:32 +0100 |
commit | aaca45d709e628860020f1c423f013e08cdf4e3b (patch) | |
tree | 668d82d97d03ada87a2c971834d04a92c2fe6c64 | |
parent | 35dd8d132bf4c5433ac1e358cf26b987f566fd23 (diff) | |
download | libnsgif-aaca45d709e628860020f1c423f013e08cdf4e3b.tar.gz libnsgif-aaca45d709e628860020f1c423f013e08cdf4e3b.tar.bz2 |
gif: Optimise opaque gifs on the complex decode path.
-rw-r--r-- | src/libnsgif.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/libnsgif.c b/src/libnsgif.c index 24dbf7d..2bea30e 100644 --- a/src/libnsgif.c +++ b/src/libnsgif.c @@ -688,13 +688,21 @@ gif__decode_complex(gif_animation *gif, row_available = x < available ? x : available; x -= row_available; available -= row_available; - while (row_available-- > 0) { - register unsigned int colour; - colour = *uncompressed++; - if (colour != transparency_index) { - *frame_scanline = colour_table[colour]; + if (transparency_index > 0xFF) { + while (row_available-- > 0) { + *frame_scanline++ = + colour_table[*uncompressed++]; + } + } else { + while (row_available-- > 0) { + register unsigned int colour; + colour = *uncompressed++; + if (colour != transparency_index) { + *frame_scanline = + colour_table[colour]; + } + frame_scanline++; } - frame_scanline++; } } } |