This is an automated email from the git hooks/post-receive script.
Git pushed a commit to branch master
in repository ffmpeg.
The following commit(s) were added to refs/heads/master by this push:
new fc7c38f9da avcodec/d3d12va_encode: add detailed ValidationFlags error
reporting for video encoders check feature support
fc7c38f9da is described below
commit fc7c38f9da4a9262beedd0fd8bf69d5c0f32d923
Author: stevxiao <[email protected]>
AuthorDate: Mon Dec 8 17:56:43 2025 -0500
Commit: Tong Wu <[email protected]>
CommitDate: Wed Feb 25 08:47:14 2026 +0000
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.
Signed-off-by: younengxiao <[email protected]>
---
libavcodec/d3d12va_encode.c | 23 +++++++++++++++++++++++
libavcodec/d3d12va_encode.h | 3 +++
libavcodec/d3d12va_encode_av1.c | 3 ++-
libavcodec/d3d12va_encode_h264.c | 3 ++-
libavcodec/d3d12va_encode_hevc.c | 3 ++-
5 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/libavcodec/d3d12va_encode.c b/libavcodec/d3d12va_encode.c
index 14efe633ae..2cca179b83 100644
--- a/libavcodec/d3d12va_encode.c
+++ b/libavcodec/d3d12va_encode.c
@@ -39,6 +39,29 @@ const AVCodecHWConfigInternal *const
ff_d3d12va_encode_hw_configs[] = {
NULL,
};
+void ff_d3d12va_encode_check_encoder_feature_flags(void *log_ctx,
+
D3D12_VIDEO_ENCODER_VALIDATION_FLAGS flags)
+{
+ if (flags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_NOT_SUPPORTED)
+ av_log(log_ctx, AV_LOG_ERROR, " - Codec not supported\n");
+ if (flags & D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INPUT_FORMAT_NOT_SUPPORTED)
+ av_log(log_ctx, AV_LOG_ERROR, " - Input format not supported\n");
+ if (flags &
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_CODEC_CONFIGURATION_NOT_SUPPORTED)
+ av_log(log_ctx, AV_LOG_ERROR, " - Codec configuration not
supported\n");
+ if (flags &
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_MODE_NOT_SUPPORTED)
+ av_log(log_ctx, AV_LOG_ERROR, " - Rate control mode not supported\n");
+ if (flags &
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RATE_CONTROL_CONFIGURATION_NOT_SUPPORTED)
+ av_log(log_ctx, AV_LOG_ERROR, " - Rate control configuration not
supported\n");
+ if (flags &
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_INTRA_REFRESH_MODE_NOT_SUPPORTED)
+ av_log(log_ctx, AV_LOG_ERROR, " - Intra refresh mode not
supported\n");
+ if (flags &
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_MODE_NOT_SUPPORTED)
+ av_log(log_ctx, AV_LOG_ERROR, " - Subregion layout mode not
supported\n");
+ if (flags &
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_RESOLUTION_NOT_SUPPORTED_IN_LIST)
+ av_log(log_ctx, AV_LOG_ERROR, " - Resolution not supported\n");
+ if (flags &
D3D12_VIDEO_ENCODER_VALIDATION_FLAG_GOP_STRUCTURE_NOT_SUPPORTED)
+ av_log(log_ctx, AV_LOG_ERROR, " - GOP structure not supported\n");
+}
+
static int d3d12va_fence_completion(AVD3D12VASyncContext *psync_ctx)
{
uint64_t completion = ID3D12Fence_GetCompletedValue(psync_ctx->fence);
diff --git a/libavcodec/d3d12va_encode.h b/libavcodec/d3d12va_encode.h
index 7eecdb6eb8..f059ae9806 100644
--- a/libavcodec/d3d12va_encode.h
+++ b/libavcodec/d3d12va_encode.h
@@ -371,6 +371,9 @@ int ff_d3d12va_encode_receive_packet(AVCodecContext *avctx,
AVPacket *pkt);
int ff_d3d12va_encode_init(AVCodecContext *avctx);
int ff_d3d12va_encode_close(AVCodecContext *avctx);
+void ff_d3d12va_encode_check_encoder_feature_flags(void *log_ctx,
+
D3D12_VIDEO_ENCODER_VALIDATION_FLAGS flags);
+
#define D3D12VA_ENCODE_INTRA_REFRESH_MODE(name, mode, desc) \
{ #name, desc, 0, AV_OPT_TYPE_CONST, { .i64 =
D3D12_VIDEO_ENCODER_INTRA_REFRESH_MODE_ ## mode }, \
0, 0, FLAGS, .unit = "intra_refresh_mode" }
diff --git a/libavcodec/d3d12va_encode_av1.c b/libavcodec/d3d12va_encode_av1.c
index 912f411547..8d2edec491 100644
--- a/libavcodec/d3d12va_encode_av1.c
+++ b/libavcodec/d3d12va_encode_av1.c
@@ -580,8 +580,9 @@ 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);
+ ff_d3d12va_encode_check_encoder_feature_flags(avctx,
support.ValidationFlags);
return AVERROR(EINVAL);
}
diff --git a/libavcodec/d3d12va_encode_h264.c b/libavcodec/d3d12va_encode_h264.c
index eae97e1f23..bd15856f0e 100644
--- a/libavcodec/d3d12va_encode_h264.c
+++ b/libavcodec/d3d12va_encode_h264.c
@@ -202,8 +202,9 @@ 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);
+ ff_d3d12va_encode_check_encoder_feature_flags(avctx,
support.ValidationFlags);
return AVERROR(EINVAL);
}
diff --git a/libavcodec/d3d12va_encode_hevc.c b/libavcodec/d3d12va_encode_hevc.c
index 45038bbad6..8cae7a8b66 100644
--- a/libavcodec/d3d12va_encode_hevc.c
+++ b/libavcodec/d3d12va_encode_hevc.c
@@ -273,8 +273,9 @@ 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);
+ ff_d3d12va_encode_check_encoder_feature_flags(avctx,
support.ValidationFlags);
return AVERROR(EINVAL);
}
_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]