[ffmpeg] avcodec/d3d12va_encode: add detailed ValidationFlags error reporting for video encoders check feature support (branch master)
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 <steven.xiao@amd.com> AuthorDate: Mon Dec 8 17:56:43 2025 -0500 Commit: Tong Wu <wutong1208@outlook.com> 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 <steven.xiao@amd.com> --- 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); }
participants (1)
-
stevxiao