On 20/09/2024 13:33, Víctor Manuel Jáquez Leal wrote:
While running this command

./ffmpeg_g -loglevel debug -hwaccel vulkan -init_hw_device vulkan=vk:0,debug=1 
-hwaccel_output_format vulkan -i input.y4m -vf 'format=nv12,hwupload' -c:v 
h264_vulkan -quality 2 output.mp4 -y

It hit this validation error:

Validation Error: [ VUID-vkCmdEncodeVideoKHR-None-08318 ] Object 0: handle =
0x8f000000008f, type = VK_OBJECT_TYPE_VIDEO_SESSION_KHR; Object 1: handle =
0xfd00000000fd, type = VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR;
| MessageID = 0x5dc3dd39
| vkCmdEncodeVideoKHR(): The currently configured encode quality level (2) for
VkVideoSessionKHR 0x8f000000008f[] does not match the encode quality level (0)
VkVideoSessionParametersKHR 0xfd00000000fd[] was created with. The Vulkan spec
states: The bound video session parameters object must have been created with
the currently set video encode quality level for the bound video session at the
time the command is executed on the
device 
(https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkCmdEncodeVideoKHR-None-08318)

This patch sets the quality level at session parameter creation for both H.264
and H.265 Vulkan encoders.
---
  libavcodec/vulkan_encode_h264.c | 8 +++++++-
  libavcodec/vulkan_encode_h265.c | 8 +++++++-
  2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/libavcodec/vulkan_encode_h264.c b/libavcodec/vulkan_encode_h264.c
index af229afe52..4b78e6f43d 100644
--- a/libavcodec/vulkan_encode_h264.c
+++ b/libavcodec/vulkan_encode_h264.c
@@ -1016,6 +1016,7 @@ static int create_session_params(AVCodecContext *avctx)
      VkVideoEncodeH264SessionParametersAddInfoKHR h264_params_info;
      VkVideoEncodeH264SessionParametersCreateInfoKHR h264_params;
      VkVideoSessionParametersCreateInfoKHR session_params_create;
+    VkVideoEncodeQualityLevelInfoKHR q_info;
/* Convert it to Vulkan */
      err = base_unit_to_vk(avctx, &vk_units);
@@ -1044,9 +1045,14 @@ static int create_session_params(AVCodecContext *avctx)
          .maxStdPPSCount = 1,
          .pParametersAddInfo = &h264_params_info,
      };
+    q_info = (VkVideoEncodeQualityLevelInfoKHR) {
+        .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR,
+        .pNext = &h264_params,
+        .qualityLevel = ctx->opts.quality,
+    };
      session_params_create = (VkVideoSessionParametersCreateInfoKHR) {
          .sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR,
-        .pNext = &h264_params,
+        .pNext = &q_info,
          .videoSession = ctx->common.session,
          .videoSessionParametersTemplate = NULL,
      };
diff --git a/libavcodec/vulkan_encode_h265.c b/libavcodec/vulkan_encode_h265.c
index 3cb7a3b7df..f1e61ab894 100644
--- a/libavcodec/vulkan_encode_h265.c
+++ b/libavcodec/vulkan_encode_h265.c
@@ -1166,6 +1166,7 @@ static int create_session_params(AVCodecContext *avctx)
      VkVideoEncodeH265SessionParametersAddInfoKHR h265_params_info;
      VkVideoEncodeH265SessionParametersCreateInfoKHR h265_params;
      VkVideoSessionParametersCreateInfoKHR session_params_create;
+    VkVideoEncodeQualityLevelInfoKHR q_info;
/* Convert it to Vulkan */
      err = base_unit_to_vk(avctx, &vk_units);
@@ -1197,9 +1198,14 @@ static int create_session_params(AVCodecContext *avctx)
          .maxStdVPSCount = 1,
          .pParametersAddInfo = &h265_params_info,
      };
+    q_info = (VkVideoEncodeQualityLevelInfoKHR) {
+        .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR,
+        .pNext = &h265_params,
+        .qualityLevel = ctx->opts.quality,
+    };
      session_params_create = (VkVideoSessionParametersCreateInfoKHR) {
          .sType = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR,
-        .pNext = &h265_params,
+        .pNext = &q_info,
          .videoSession = ctx->common.session,
          .videoSessionParametersTemplate = NULL,
      };

Could you move this to vulkan_encode.c?
Thanks

Attachment: OpenPGP_0xA2FEA5F03F034464.asc
Description: OpenPGP public key

Attachment: OpenPGP_signature.asc
Description: OpenPGP digital signature

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to