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 <[email protected]> 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 -- [email protected] To unsubscribe send an email to [email protected]
