avfilter/amf: make the input format lists describe what AMF accepts

amf_setup_input_output_formats() builds both negotiated lists from
output_pix_fmts and ignores its input_pix_fmts argument, so the input
lists have never been used and have drifted from what the filters handle.

None of them lists AV_PIX_FMT_D3D11 or AV_PIX_FMT_DXVA2_VLD even though
amf_avframe_to_amfsurface() wraps both. sr_amf and vpp_amf carry the two
in their output lists, so they accept such input today only because the
input list is dead; vqe_amf and frc_amf carry them nowhere and gain the
input here. vpp_amf meanwhile lists three formats AMF will not take:
YUV420P10 and 0RGB have no format_map[] entry at all, and the video
converter rejects GRAY8 with AMF_NOT_SUPPORTED. Those three only appear
to work today because the dead input list leaves libavfilter converting
them in software first.

vpp_amf also loses BGR0, RGB0 and YUYV422. The converter takes them as
input, but with the default format=same the output frames context is
created in the input format, and hwcontext_amf cannot back an AMF frames
context with RGB0 or YUYV422, nor download BGR0. Once the list is live,
each of the three would fail at configuration or at hwdownload where
libavfilter converts it in software today, so they stay out until
hwcontext_amf supports them.

Correct the lists in both directions so they describe reality before the
helper is made to use them. No functional change on its own.

Assisted-by: Claude Opus 5
Assisted-by: Claude Fable 5.1
Signed-off-by: Julius Bairaktaris <julius@bairaktaris.de>
This commit is contained in:
Julius Bairaktaris authored and ArazIusubov committed 2026-09-16 22:05:28 +00:00
1 parent 1c2794eb22
commit f736784a52
4 files changed
+10 -6

No files matched your search

+2
View File
@@ -70,6 +70,8 @@ static int amf_filter_query_formats(AVFilterContext *avctx)
const enum AVPixelFormat *output_pix_fmts;
static const enum AVPixelFormat input_pix_fmts[] = {
AV_PIX_FMT_AMF_SURFACE,
AV_PIX_FMT_D3D11,
AV_PIX_FMT_DXVA2_VLD,
AV_PIX_FMT_NV12,
AV_PIX_FMT_P010,
AV_PIX_FMT_BGRA,
+4
View File
@@ -84,6 +84,8 @@ static int amf_filter_query_formats(AVFilterContext *avctx)
AV_PIX_FMT_BGRA,
AV_PIX_FMT_RGBA,
AV_PIX_FMT_AMF_SURFACE,
AV_PIX_FMT_D3D11,
AV_PIX_FMT_DXVA2_VLD,
AV_PIX_FMT_RGBAF16,
AV_PIX_FMT_NONE,
};
@@ -105,6 +107,8 @@ static int amf_filter_query_formats(AVFilterContext *avctx)
AV_PIX_FMT_X2BGR10,
AV_PIX_FMT_RGBAF16,
AV_PIX_FMT_AMF_SURFACE,
AV_PIX_FMT_D3D11,
AV_PIX_FMT_DXVA2_VLD,
AV_PIX_FMT_NONE,
};
+2 -6
View File
@@ -49,17 +49,13 @@ static int amf_filter_query_formats(AVFilterContext *avctx)
const enum AVPixelFormat *output_pix_fmts;
static const enum AVPixelFormat input_pix_fmts[] = {
AV_PIX_FMT_AMF_SURFACE,
AV_PIX_FMT_D3D11,
AV_PIX_FMT_DXVA2_VLD,
AV_PIX_FMT_NV12,
AV_PIX_FMT_P010,
AV_PIX_FMT_0RGB,
AV_PIX_FMT_BGR0,
AV_PIX_FMT_BGRA,
AV_PIX_FMT_RGB0,
AV_PIX_FMT_RGBA,
AV_PIX_FMT_GRAY8,
AV_PIX_FMT_YUV420P,
AV_PIX_FMT_YUV420P10,
AV_PIX_FMT_YUYV422,
AV_PIX_FMT_NONE,
};
static const enum AVPixelFormat output_pix_fmts_default[] = {
+2
View File
@@ -63,6 +63,8 @@ static int amf_filter_query_formats(AVFilterContext *avctx)
const enum AVPixelFormat *output_pix_fmts;
static const enum AVPixelFormat input_pix_fmts[] = {
AV_PIX_FMT_AMF_SURFACE,
AV_PIX_FMT_D3D11,
AV_PIX_FMT_DXVA2_VLD,
AV_PIX_FMT_NV12,
AV_PIX_FMT_P010,
AV_PIX_FMT_BGRA,