aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNRK <nrk@disroot.org>2023-05-23 13:36:41 +0200
committerNRK <nrk@disroot.org>2023-05-23 13:36:41 +0200
commit0e1bc3c045384bca18922accbc50fa6914a67bd0 (patch)
tree605e9c952fa4b7a160e6c1005e1aa32c2f7998e1
parente4fceab18f4b7856a2ef6fbabebe1988c1fbfaea (diff)
downloadnsxiv-0e1bc3c045384bca18922accbc50fa6914a67bd0.tar.zst
set a default delay if delay is 0 (#445)
gif spec [0] doesn't mention what to do when "Delay Time" is 0. apng spec [1] states: | If the the value of the numerator is 0 the decoder should render the | next frame as quickly as possible, though viewers may impose a | reasonable lower bound. webp spec [2]: | the interpretation of frame duration of 0 (and often <= 10) is | implementation defined. so it seems that it's safe to set a default delay for 0 delay frames, which is what the older gif and webp loaders were already doing. do the same for the imlib2 multi-frame loader as well. [0]: https://www.w3.org/Graphics/GIF/spec-gif89a.txt [1]: https://wiki.mozilla.org/APNG_Specification [2]: https://developers.google.com/speed/webp/docs/riff_container#animation Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/445 Reviewed-by: eylles <eylles@noreply.codeberg.org>
-rw-r--r--image.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/image.c b/image.c
index 4f9015d..426a05a 100644
--- a/image.c
+++ b/image.c
@@ -54,6 +54,10 @@ enum { DEF_GIF_DELAY = 75 };
enum { DEF_WEBP_DELAY = 75 };
#endif
+#if HAVE_IMLIB2_MULTI_FRAME
+enum { DEF_ANIM_DELAY = 75 };
+#endif
+
#define ZOOM_MIN (zoom_levels[0] / 100)
#define ZOOM_MAX (zoom_levels[ARRLEN(zoom_levels) - 1] / 100)
@@ -539,7 +543,7 @@ static bool img_load_multiframe(img_t *img, const fileinfo_t *file)
imlib_context_set_blend(!!(finfo.frame_flags & IMLIB_FRAME_BLEND));
imlib_blend_image_onto_image(frame, has_alpha, 0, 0, sw, sh, sx, sy, sw, sh);
m->frames[m->cnt].im = canvas;
- m->frames[m->cnt].delay = finfo.frame_delay;
+ m->frames[m->cnt].delay = finfo.frame_delay ? finfo.frame_delay : DEF_ANIM_DELAY;
m->length += m->frames[m->cnt].delay;
m->cnt++;
imlib_context_set_image(frame);