This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 7c349297c163151c2576882887ae12e4cf2bdae4 Author: David Rosca <[email protected]> AuthorDate: Mon Jul 20 15:39:40 2026 +0200 Commit: Lynne <[email protected]> CommitDate: Tue Jul 21 04:25:45 2026 +0000 avcodec/vulkan_encode_av1: fix level auto-detection using zero dimensions Move level guessing from init_profile() to init_sequence_headers(), where base_ctx->surface_width/height are already initialized. init_profile() is called from ff_vulkan_encode_init() before the surface dimensions are set, so ff_av1_guess_level() always received zeros and selected the lowest level (2.0). init_sequence_headers() runs after ff_vulkan_encode_init() returns, matching how H.264 and H.265 Vulkan encoders handle level detection. Co-Authored-By: Claude Opus 4 --- libavcodec/vulkan_encode_av1.c | 50 ++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/libavcodec/vulkan_encode_av1.c b/libavcodec/vulkan_encode_av1.c index 1f38e691f1..994fc33cc1 100644 --- a/libavcodec/vulkan_encode_av1.c +++ b/libavcodec/vulkan_encode_av1.c @@ -593,7 +593,6 @@ static int init_profile(AVCodecContext *avctx, FFVulkanEncodeContext *ctx = &enc->common; FFVulkanContext *s = &ctx->s; FFVulkanFunctions *vk = &ctx->s.vkfn; - FFHWBaseEncodeContext *base_ctx = &ctx->base; VkVideoEncodeAV1CapabilitiesKHR av1_caps = { .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_CAPABILITIES_KHR, @@ -631,31 +630,6 @@ static int init_profile(AVCodecContext *avctx, }; profile->pNext = &enc->profile; - /* Set level */ - if (avctx->level == AV_LEVEL_UNKNOWN) { - const AV1LevelDescriptor *level; - float framerate = 0.0; - - if (avctx->framerate.num > 0 && avctx->framerate.den > 0) - framerate = av_q2d(avctx->framerate); - - level = ff_av1_guess_level(avctx->bit_rate, enc->seq_tier, - base_ctx->surface_width, base_ctx->surface_height, - enc->tile_rows * enc->tile_cols, - enc->tile_cols, framerate); - if (level) { - av_log(avctx, AV_LOG_VERBOSE, "Using level %s.\n", level->name); - enc->seq_level_idx = level->level_idx; - } else { - av_log(avctx, AV_LOG_VERBOSE, "Stream will not conform to " - "any normal level, using level 7.3 by default.\n"); - enc->seq_level_idx = STD_VIDEO_AV1_LEVEL_7_3; - enc->seq_tier = 1; - } - } else { - enc->seq_level_idx = ff_vk_av1_level_to_vk(avctx->level); - } - /* User has explicitly specified a profile. */ if (avctx->profile != AV_PROFILE_UNKNOWN) return 0; @@ -750,6 +724,30 @@ static av_cold int init_sequence_headers(AVCodecContext *avctx) if (!desc) return AVERROR(EINVAL); + if (avctx->level == AV_LEVEL_UNKNOWN) { + const AV1LevelDescriptor *level; + float framerate = 0.0; + + if (avctx->framerate.num > 0 && avctx->framerate.den > 0) + framerate = av_q2d(avctx->framerate); + + level = ff_av1_guess_level(avctx->bit_rate, enc->seq_tier, + base_ctx->surface_width, base_ctx->surface_height, + enc->tile_rows * enc->tile_cols, + enc->tile_cols, framerate); + if (level) { + av_log(avctx, AV_LOG_VERBOSE, "Using level %s.\n", level->name); + enc->seq_level_idx = level->level_idx; + } else { + av_log(avctx, AV_LOG_VERBOSE, "Stream will not conform to " + "any normal level, using level 7.3 by default.\n"); + enc->seq_level_idx = STD_VIDEO_AV1_LEVEL_7_3; + enc->seq_tier = 1; + } + } else { + enc->seq_level_idx = ff_vk_av1_level_to_vk(avctx->level); + } + seq_obu->header.obu_type = AV1_OBU_SEQUENCE_HEADER; *seq = (AV1RawSequenceHeader) { .seq_profile = avctx->profile, _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
