[FFmpeg-cvslog] avcodec/libtheora: fix setting keyframe_mask

James Almer git at videolan.org
Thu Feb 13 00:18:53 EET 2025


ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Fri Feb  7 00:04:25 2025 -0300| [22aa71d4da37a4ad2b0d28deeace64b57aa2ef50] | committer: James Almer

avcodec/libtheora: fix setting keyframe_mask

t_info.keyframe_granule_shift is set to the library default of 6, which is ok
for gop sizes up to 63. Since there's apparently no way to query the updated
value after having forced a gop value with TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE,
calculate it manually instead.

Fixes ticket #11454.

Signed-off-by: James Almer <jamrial at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=22aa71d4da37a4ad2b0d28deeace64b57aa2ef50
---

 libavcodec/libtheoraenc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavcodec/libtheoraenc.c b/libavcodec/libtheoraenc.c
index 8844f4be6a..761cd45d44 100644
--- a/libavcodec/libtheoraenc.c
+++ b/libavcodec/libtheoraenc.c
@@ -234,7 +234,7 @@ static av_cold int encode_init(AVCodecContext* avc_context)
         return AVERROR_EXTERNAL;
     }
 
-    h->keyframe_mask = (1 << t_info.keyframe_granule_shift) - 1;
+    h->keyframe_mask = (1 << av_ceil_log2(avc_context->gop_size)) - 1;
     /* Clear up theora_info struct */
     th_info_clear(&t_info);
 



More information about the ffmpeg-cvslog mailing list