Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH] avcodec/d3d12va_encode: add detailed ValidationFlags error reporting for video encoders check feature support (PR #21137)
@ 2025-12-08 23:02 Steven Xiao via ffmpeg-devel
  0 siblings, 0 replies; only message in thread
From: Steven Xiao via ffmpeg-devel @ 2025-12-08 23:02 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Steven Xiao

PR #21137 opened by Steven Xiao (younengxiao)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21137
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21137.patch

Improves error diagnostics for D3D12 video encoders check feature support by adding
detailed ValidationFlags reporting when driver validation fails.

This made it easy for users to identify which specific feature was
unsupported without manually decoding the flags.

This decodes the ValidationFlags bitmask and logs each unsupported
feature individually:
  "Driver does not support requested features. ValidationFlags: 0x4"
  "  - Codec configuration not supported"

The improvement covers all 9 D3D12 validation flags:
- CODEC_NOT_SUPPORTED
- INPUT_FORMAT_NOT_SUPPORTED
- CODEC_CONFIGURATION_NOT_SUPPORTED
- RATE_CONTROL_MODE_NOT_SUPPORTED
- RATE_CONTROL_CONFIGURATION_NOT_SUPPORTED
- INTRA_REFRESH_MODE_NOT_SUPPORTED
- SUBREGION_LAYOUT_MODE_NOT_SUPPORTED
- RESOLUTION_NOT_SUPPORTED_IN_LIST
- GOP_STRUCTURE_NOT_SUPPORTED



>From 07dcbf54db72a9c3b9b237247d4bd68d921359f6 Mon Sep 17 00:00:00 2001
From: stevxiao <steven.xiao@amd.com>
Date: Mon, 8 Dec 2025 17:56:43 -0500
Subject: [PATCH] avcodec/d3d12va_encode: add detailed ValidationFlags error
 reporting for video encoders check feature support

Improves error diagnostics for D3D12 video encoders check feature support by adding
detailed ValidationFlags reporting when driver validation fails.

This made it easy for users to identify which specific feature was
unsupported without manually decoding the flags.

This decodes the ValidationFlags bitmask and logs each unsupported
feature individually:
  "Driver does not support requested features. ValidationFlags: 0x4"
  "  - Codec configuration not supported"
---
 libavcodec/d3d12va_encode_av1.c  | 22 +++++++++++++++++++++-
 libavcodec/d3d12va_encode_h264.c | 22 +++++++++++++++++++++-
 libavcodec/d3d12va_encode_hevc.c | 22 +++++++++++++++++++++-
 3 files changed, 63 insertions(+), 3 deletions(-)

diff --git a/libavcodec/d3d12va_encode_av1.c b/libavcodec/d3d12va_encode_av1.c
index 31d3df33bd..0e3652d988 100644
--- a/libavcodec/d3d12va_encode_av1.c
+++ b/libavcodec/d3d12va_encode_av1.c
@@ -583,8 +583,28 @@ static int d3d12va_encode_av1_init_sequence_params(AVCodecContext *avctx)
     }
 
     if (!(support.SupportFlags & D3D12_VIDEO_ENCODER_SUPPORT_FLAG_GENERAL_SUPPORT_OK)) {
-        av_log(avctx, AV_LOG_ERROR, "Driver does not support some request D3D12VA AV1 features. %#x\n",
+        av_log(avctx, AV_LOG_ERROR, "Driver does not support requested features. ValidationFlags: %#x\n",
                support.ValidationFlags);
+
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Codec not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INPUT_FORMAT_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Input format not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_CONFIGURATION_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Codec configuration not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Rate control mode not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_CONFIGURATION_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Rate control configuration not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INTRA_REFRESH_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Intra refresh mode not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Subregion layout mode not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RESOLUTION_NOT_SUPPORTED_IN_LIST)
+            av_log(avctx, AV_LOG_ERROR, "  - Resolution not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_GOP_STRUCTURE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - GOP structure not supported\n");
+
         return AVERROR(EINVAL);
     }
 
diff --git a/libavcodec/d3d12va_encode_h264.c b/libavcodec/d3d12va_encode_h264.c
index bcf5a326e5..3231261137 100644
--- a/libavcodec/d3d12va_encode_h264.c
+++ b/libavcodec/d3d12va_encode_h264.c
@@ -201,8 +201,28 @@ static int d3d12va_encode_h264_init_sequence_params(AVCodecContext *avctx)
     }
 
     if (!(support.SupportFlags & D3D12_VIDEO_ENCODER_SUPPORT_FLAG_GENERAL_SUPPORT_OK)) {
-        av_log(avctx, AV_LOG_ERROR, "Driver does not support some request features. %#x\n",
+        av_log(avctx, AV_LOG_ERROR, "Driver does not support requested features. ValidationFlags: %#x\n",
                support.ValidationFlags);
+
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Codec not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INPUT_FORMAT_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Input format not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_CONFIGURATION_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Codec configuration not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Rate control mode not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_CONFIGURATION_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Rate control configuration not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INTRA_REFRESH_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Intra refresh mode not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Subregion layout mode not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RESOLUTION_NOT_SUPPORTED_IN_LIST)
+            av_log(avctx, AV_LOG_ERROR, "  - Resolution not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_GOP_STRUCTURE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - GOP structure not supported\n");
+
         return AVERROR(EINVAL);
     }
 
diff --git a/libavcodec/d3d12va_encode_hevc.c b/libavcodec/d3d12va_encode_hevc.c
index e00ecbb4de..0db4677e24 100644
--- a/libavcodec/d3d12va_encode_hevc.c
+++ b/libavcodec/d3d12va_encode_hevc.c
@@ -273,8 +273,28 @@ static int d3d12va_encode_hevc_init_sequence_params(AVCodecContext *avctx)
     }
 
     if (!(support.SupportFlags & D3D12_VIDEO_ENCODER_SUPPORT_FLAG_GENERAL_SUPPORT_OK)) {
-        av_log(avctx, AV_LOG_ERROR, "Driver does not support some request features. %#x\n",
+        av_log(avctx, AV_LOG_ERROR, "Driver does not support requested features. ValidationFlags: %#x\n",
                support.ValidationFlags);
+
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Codec not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INPUT_FORMAT_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Input format not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_CONFIGURATION_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Codec configuration not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Rate control mode not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_CONFIGURATION_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Rate control configuration not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INTRA_REFRESH_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Intra refresh mode not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - Subregion layout mode not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RESOLUTION_NOT_SUPPORTED_IN_LIST)
+            av_log(avctx, AV_LOG_ERROR, "  - Resolution not supported\n");
+        if (support.ValidationFlags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_GOP_STRUCTURE_NOT_SUPPORTED)
+            av_log(avctx, AV_LOG_ERROR, "  - GOP structure not supported\n");
+
         return AVERROR(EINVAL);
     }
 
-- 
2.49.1

_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-12-08 23:03 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-12-08 23:02 [FFmpeg-devel] [PATCH] avcodec/d3d12va_encode: add detailed ValidationFlags error reporting for video encoders check feature support (PR #21137) Steven Xiao via ffmpeg-devel

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git