diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2021-11-01 18:26:20 +0000 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2021-11-02 13:37:13 +0000 |
commit | b6d35c01d3955c4c247c710187f14c1ca2e4cd94 (patch) | |
tree | ee1326bb32bdc8f2c70c134f340572b46c7556d6 | |
parent | 623953b935cc9910e3cb7df178773a6092723913 (diff) | |
download | libnsgif-b6d35c01d3955c4c247c710187f14c1ca2e4cd94.tar.gz libnsgif-b6d35c01d3955c4c247c710187f14c1ca2e4cd94.tar.bz2 |
GIF: Pass frame into extension parser.
-rw-r--r-- | src/libnsgif.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/libnsgif.c b/src/libnsgif.c index bf1e87a..4da811b 100644 --- a/src/libnsgif.c +++ b/src/libnsgif.c @@ -105,7 +105,9 @@ gif_initialise_sprite(gif_animation *gif, * frame GIF_OK for successful initialisation. */ static gif_result -gif_initialise_frame_extensions(gif_animation *gif, const int frame) +gif_initialise_frame_extensions( + struct gif_animation *gif, + struct gif_frame *frame) { uint8_t *gif_data, *gif_end; int gif_bytes; @@ -140,12 +142,12 @@ gif_initialise_frame_extensions(gif_animation *gif, const int frame) return GIF_INSUFFICIENT_FRAME_DATA; } - gif->frames[frame].frame_delay = gif_data[3] | (gif_data[4] << 8); + frame->frame_delay = gif_data[3] | (gif_data[4] << 8); if (gif_data[2] & GIF_TRANSPARENCY_MASK) { - gif->frames[frame].transparency = true; - gif->frames[frame].transparency_index = gif_data[5]; + frame->transparency = true; + frame->transparency_index = gif_data[5]; } - gif->frames[frame].disposal_method = ((gif_data[2] & GIF_DISPOSAL_MASK) >> 2); + frame->disposal_method = ((gif_data[2] & GIF_DISPOSAL_MASK) >> 2); /* I have encountered documentation and GIFs in the * wild that use 0x04 to restore the previous frame, * rather than the officially documented 0x03. I @@ -153,16 +155,16 @@ gif_initialise_frame_extensions(gif_animation *gif, const int frame) * export this way. We handle this as a type of * "quirks" mode. */ - if (gif->frames[frame].disposal_method == GIF_FRAME_QUIRKS_RESTORE) { - gif->frames[frame].disposal_method = GIF_FRAME_RESTORE; + if (frame->disposal_method == GIF_FRAME_QUIRKS_RESTORE) { + frame->disposal_method = GIF_FRAME_RESTORE; } /* if we are clearing the background then we need to * redraw enough to cover the previous frame too */ - gif->frames[frame].redraw_required = - ((gif->frames[frame].disposal_method == GIF_FRAME_CLEAR) || - (gif->frames[frame].disposal_method == GIF_FRAME_RESTORE)); + frame->redraw_required = + ((frame->disposal_method == GIF_FRAME_CLEAR) || + (frame->disposal_method == GIF_FRAME_RESTORE)); gif_data += (2 + gif_data[1]); break; @@ -434,7 +436,7 @@ static gif_result gif_initialise_frame(gif_animation *gif) /* Initialise any extensions */ gif->buffer_position = gif_data - gif->gif_data; - return_value = gif_initialise_frame_extensions(gif, frame); + return_value = gif_initialise_frame_extensions(gif, &gif->frames[frame]); if (return_value != GIF_OK) { return return_value; } |