Commit 45714cee10 for ffmpeg
commit 45714cee101dc2c8a093404e49a46278523e94f5
Author: Ramiro Polla <ramiro.polla@gmail.com>
Date: Mon Oct 19 13:13:05 2026 +0200
avformat/webp_anim_dec: fix keyframe flag when seeking
The keyframe flag was only being set when looping, and not when seeking
back.
Use ctx->first_anmf_offset to detect first keyframe instead of trying
to count cur_frame.
diff --git a/libavformat/webp_anim_dec.c b/libavformat/webp_anim_dec.c
index e81deea6c8..6cd90b3315 100644
--- a/libavformat/webp_anim_dec.c
+++ b/libavformat/webp_anim_dec.c
@@ -61,7 +61,7 @@ typedef struct WebPAnimDemuxContext {
/*
* variables for the key frame detection
*/
- int cur_frame; ///< number of frames of the current animation file
+ int64_t first_anmf_offset;
int vp8x_flags;
int has_iccp;
@@ -70,8 +70,6 @@ typedef struct WebPAnimDemuxContext {
int has_xmp;
int usebgcolor;
-
- int64_t first_anmf_offset;
} WebPAnimDemuxContext;
/**
@@ -253,7 +251,6 @@ static int webp_anim_read_packet(AVFormatContext *s, AVPacket *pkt)
if (avio_feof(pb)) {
if (!ctx->ignore_loop &&
(ctx->loop_count == 0 || ++ctx->cur_loop < ctx->loop_count)) {
- ctx->cur_frame = 0;
ret = avio_seek(pb, ctx->first_anmf_offset, SEEK_SET);
if (ret < 0)
return ret;
@@ -273,7 +270,7 @@ static int webp_anim_read_packet(AVFormatContext *s, AVPacket *pkt)
if (ret < 0)
return ret;
pkt->pos = offset;
- if (!ctx->cur_frame++)
+ if (offset == ctx->first_anmf_offset)
pkt->flags |= AV_PKT_FLAG_KEY;
pkt->pts = AV_NOPTS_VALUE;
pkt->dts = AV_NOPTS_VALUE;