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@gmail.com>
(cherry picked from commit 22aa71d4da)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
James Almer 2025-02-07 00:04:25 -03:00 committed by Michael Niedermayer
parent e2b20632b8
commit a5d2764d5c
No known key found for this signature in database
GPG key ID: B18E8928B3948D64

View file

@ -233,7 +233,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);