From 28ab668edddfa37b09e94b33c19ff4a6ea7fd5a1 Mon Sep 17 00:00:00 2001 From: Niklas Haas Date: Mon, 17 Aug 2026 10:53:30 +0200 Subject: [PATCH] avfilter/vf_scdet: expand format list This filter works by running the SAD function on the first plane, which works for any (native endian) format that starts with an unshifted luma plane. This notably includes formats like nv12, yuva420p, and grayscale formats, as well as luma-alpha formats. The last addition is debatable, but the precedent here is the existing support for RGBA, which also dilutes scene scores by including the alpha component in the SAD calculation). There were also some notable missing packed RGBA formats, such as ARGB, as well as 16-bit variants. This is an exhaustive listing as of the current set of formats. Tested by looping over `format=,scdet` and verifying that the scene SAD score doesn't (meaningfully) change, except for expected deviations (e.g. larger scores for full range vs limited range, and lowered scores for packed alpha formats). Sponsored-by: nxtedition AB Signed-off-by: Niklas Haas --- libavfilter/vf_scdet.c | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/libavfilter/vf_scdet.c b/libavfilter/vf_scdet.c index 6b1de13610..814aee8f3d 100644 --- a/libavfilter/vf_scdet.c +++ b/libavfilter/vf_scdet.c @@ -61,15 +61,44 @@ static const AVOption scdet_options[] = { AVFILTER_DEFINE_CLASS(scdet); static const enum AVPixelFormat pix_fmts[] = { - AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24, AV_PIX_FMT_RGBA, - AV_PIX_FMT_ABGR, AV_PIX_FMT_BGRA, AV_PIX_FMT_GRAY8, + AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24, + AV_PIX_FMT_ARGB, AV_PIX_FMT_RGBA, + AV_PIX_FMT_ABGR, AV_PIX_FMT_BGRA, + AV_PIX_FMT_RGB48, AV_PIX_FMT_BGR48, + AV_PIX_FMT_RGBA64, AV_PIX_FMT_BGRA64, + + AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRP9, AV_PIX_FMT_GBRP10, + AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRP14, AV_PIX_FMT_GBRP16, + AV_PIX_FMT_GBRAP, AV_PIX_FMT_GBRAP10, AV_PIX_FMT_GBRAP12, + AV_PIX_FMT_GBRAP14, AV_PIX_FMT_GBRAP16, + + AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY9, AV_PIX_FMT_GRAY10, + AV_PIX_FMT_GRAY12, AV_PIX_FMT_GRAY14, AV_PIX_FMT_GRAY16, + AV_PIX_FMT_YA8, AV_PIX_FMT_YA16, + + AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P, - AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV420P12, - AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV422P12, - AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV444P12, + AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9, + AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, + AV_PIX_FMT_YUV440P10, AV_PIX_FMT_YUV444P10, + AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, + AV_PIX_FMT_YUV440P12, AV_PIX_FMT_YUV444P12, + AV_PIX_FMT_YUV420P14, AV_PIX_FMT_YUV422P14, AV_PIX_FMT_YUV444P14, + AV_PIX_FMT_YUV420P16, AV_PIX_FMT_YUV422P16, AV_PIX_FMT_YUV444P16, + + AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P, + AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA444P9, + AV_PIX_FMT_YUVA420P10, AV_PIX_FMT_YUVA422P10, AV_PIX_FMT_YUVA444P10, + AV_PIX_FMT_YUVA422P12, AV_PIX_FMT_YUVA444P12, + AV_PIX_FMT_YUVA420P16, AV_PIX_FMT_YUVA422P16, AV_PIX_FMT_YUVA444P16, + + AV_PIX_FMT_NV12, AV_PIX_FMT_NV21, AV_PIX_FMT_NV16, + AV_PIX_FMT_NV24, AV_PIX_FMT_NV42, AV_PIX_FMT_NV20, + AV_PIX_FMT_P016, AV_PIX_FMT_P216, AV_PIX_FMT_P416, + AV_PIX_FMT_NONE };