summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2021-09-24 22:34:32 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2021-09-24 22:34:32 +0100
commitaaca45d709e628860020f1c423f013e08cdf4e3b (patch)
tree668d82d97d03ada87a2c971834d04a92c2fe6c64
parent35dd8d132bf4c5433ac1e358cf26b987f566fd23 (diff)
downloadlibnsgif-aaca45d709e628860020f1c423f013e08cdf4e3b.tar.gz
libnsgif-aaca45d709e628860020f1c423f013e08cdf4e3b.tar.bz2
gif: Optimise opaque gifs on the complex decode path.
-rw-r--r--src/libnsgif.c20
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++;
}
}
}