From bc358088b2b074f09e638f101d2a12b3632a0d73 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Sat, 26 Feb 2022 16:11:04 +0000 Subject: GIF: Simplify frame delay calculation. --- src/gif.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/gif.c b/src/gif.c index db99afd..5317a9e 100644 --- a/src/gif.c +++ b/src/gif.c @@ -1618,7 +1618,6 @@ nsgif_error nsgif_frame_prepare( }; uint32_t delay = 0; uint32_t frame = gif->frame; - uint32_t frame_next; if (gif->frame != NSGIF_FRAME_INVALID && gif->frame < gif->info.frame_count && @@ -1632,7 +1631,7 @@ nsgif_error nsgif_frame_prepare( return NSGIF_ERR_ANIMATION_END; } - ret = nsgif__next_displayable_frame(gif, &frame, NULL); + ret = nsgif__next_displayable_frame(gif, &frame, &delay); if (ret != NSGIF_OK) { return ret; } @@ -1641,17 +1640,22 @@ nsgif_error nsgif_frame_prepare( gif->info.loop_count++; } - frame_next = frame; - ret = nsgif__next_displayable_frame(gif, &frame_next, &delay); - if (ret != NSGIF_OK) { - return ret; - } + if (gif->info.frame_count == 1) { + delay = NSGIF_INFINITE; + + } else if (gif->info.loop_max != 0) { + uint32_t frame_next = frame; + ret = nsgif__next_displayable_frame(gif, &frame_next, NULL); + if (ret != NSGIF_OK) { + return ret; + } - if (frame_next < frame) { - if (nsgif__animation_complete( - gif->info.loop_count + 1, - gif->info.loop_max)) { - delay = NSGIF_INFINITE; + if (frame_next < frame) { + if (nsgif__animation_complete( + gif->info.loop_count + 1, + gif->info.loop_max)) { + delay = NSGIF_INFINITE; + } } } -- cgit v1.2.3