media: test-drivers: Use V4L2_FMTDESC_FLAG_ENUM_ALL flag
authorBenjamin Gaignard <benjamin.gaignard@collabora.com>
Mon, 26 Aug 2024 17:24:10 +0000 (17:24 +0000)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Sat, 12 Oct 2024 17:56:16 +0000 (19:56 +0200)
Since the V4L2_FMTDESC_FLAG_ENUM_ALL flag mostly targets stateless
decoder pixel-format enumeration, update visl test driver to use it.
When V4L2_FMTDESC_FLAG_ENUM_ALL flag is set let the driver returns
one more pixel format.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/test-drivers/visl/visl-video.c

index f8d970319764f6a2c47ed1c002a70b54b67ff937..677a8564de03c5db5999c2e71dd4d847ce0c0631 100644 (file)
@@ -136,6 +136,12 @@ static const u32 visl_decoded_fmts[] = {
        V4L2_PIX_FMT_YUV420,
 };
 
+static const u32 visl_extended_decoded_fmts[] = {
+       V4L2_PIX_FMT_NV12,
+       V4L2_PIX_FMT_YUV420,
+       V4L2_PIX_FMT_P010,
+};
+
 const struct visl_coded_format_desc visl_coded_fmts[] = {
        {
                .pixelformat = V4L2_PIX_FMT_FWHT_STATELESS,
@@ -341,11 +347,21 @@ static int visl_enum_fmt_vid_cap(struct file *file, void *priv,
                                 struct v4l2_fmtdesc *f)
 {
        struct visl_ctx *ctx = visl_file_to_ctx(file);
+       u32 index = f->index & ~V4L2_FMTDESC_FLAG_ENUM_ALL;
+       int max_fmts = ctx->coded_format_desc->num_decoded_fmts;
+       const u32 *decoded_fmts = ctx->coded_format_desc->decoded_fmts;
+
+       if (f->index & V4L2_FMTDESC_FLAG_ENUM_ALL) {
+               max_fmts = ARRAY_SIZE(visl_extended_decoded_fmts);
+               decoded_fmts = visl_extended_decoded_fmts;
+       }
+
+       f->index = index;
 
-       if (f->index >= ctx->coded_format_desc->num_decoded_fmts)
+       if (index >= max_fmts)
                return -EINVAL;
 
-       f->pixelformat = ctx->coded_format_desc->decoded_fmts[f->index];
+       f->pixelformat = decoded_fmts[index];
        return 0;
 }