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]

Reply via email to