@@ -50,6 +50,7 @@ struct _AvifAnimationIter {
5050 size_t current_frame ;
5151 uint64_t current_animation_time ;
5252 uint64_t time_offset ;
53+ gboolean is_playing ;
5354};
5455
5556#define GDK_TYPE_AVIF_ANIMATION_ITER avif_animation_iter_get_type()
@@ -116,6 +117,7 @@ static GdkPixbufAnimationIter * avif_animation_get_iter(GdkPixbufAnimation * ani
116117
117118 iter -> time_offset = start_time -> tv_sec * 1000 + start_time -> tv_usec / 1000 ;
118119 iter -> current_frame = 0 ;
120+ iter -> is_playing = TRUE;
119121
120122 return (GdkPixbufAnimationIter * )iter ;
121123}
@@ -156,6 +158,7 @@ static gboolean avif_animation_iter_advance(GdkPixbufAnimationIter * iter, const
156158
157159 if (context -> decoder -> repetitionCount > 0 && elapsed_time > context -> total_animation_time * (context -> decoder -> repetitionCount + 1 )) {
158160 avif_iter -> current_frame = context -> decoder -> imageCount - 1 ;
161+ avif_iter -> is_playing = FALSE;
159162 } else {
160163
161164 /* only use buffering if animation doesn't fit into given buffer */
@@ -203,8 +206,11 @@ G_GNUC_END_IGNORE_DEPRECATIONS
203206
204207static int avif_animation_iter_get_delay_time (GdkPixbufAnimationIter * iter )
205208{
206- AvifAnimationIter * avif_iter = (AvifAnimationIter * )iter ;
207- return g_array_index (avif_iter -> animation -> frames , AvifAnimationFrame , avif_iter -> current_frame ).duration_ms ;
209+ AvifAnimationIter * avif_iter = (AvifAnimationIter * )iter ;
210+ if (avif_iter -> is_playing == TRUE) {
211+ return g_array_index (avif_iter -> animation -> frames , AvifAnimationFrame , avif_iter -> current_frame ).duration_ms ;
212+ }
213+ return -1 ;
208214}
209215
210216static GdkPixbuf * avif_animation_iter_get_pixbuf (GdkPixbufAnimationIter * iter )
0 commit comments