From b6d1509d6327a648adc7b249aaf4429ba2bdf0f7 Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Wed, 20 Nov 2019 23:44:20 +0200 Subject: [PATCH] clients/simple-dmabuf-v4l: Add Y_INVERT option flag Allow clients to pass Y_INVERT, not only when v4l reports it so. Document it briefly and add a note about this Y_INVERT flag is passed if the camera sensors is detected as being y-flipped. Signed-off-by: Marius Vlad --- clients/simple-dmabuf-v4l.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/clients/simple-dmabuf-v4l.c b/clients/simple-dmabuf-v4l.c index 9e75df28..a5d6e021 100644 --- a/clients/simple-dmabuf-v4l.c +++ b/clients/simple-dmabuf-v4l.c @@ -856,7 +856,7 @@ static const struct wl_registry_listener registry_listener = { }; static struct display * -create_display(uint32_t requested_format) +create_display(uint32_t requested_format, uint32_t opt_flags) { struct display *display; @@ -887,6 +887,8 @@ create_display(uint32_t requested_format) exit(1); } + if (opt_flags) + display->opts = opt_flags; return display; } @@ -914,7 +916,7 @@ destroy_display(struct display *display) static void usage(const char *argv0) { - printf("Usage: %s [-v v4l2_device] [-f v4l2_format] [-d drm_format]\n" + printf("Usage: %s [-v v4l2_device] [-f v4l2_format] [-d drm_format] [-i|--y-invert]\n" "\n" "The default V4L2 device is /dev/video0\n" "\n" @@ -923,7 +925,11 @@ usage(const char *argv0) "DRM formats are defined in \n" "The default for both formats is YUYV.\n" "If the V4L2 and DRM formats differ, the data is simply " - "reinterpreted rather than converted.\n", argv0); + "reinterpreted rather than converted.\n\n" + "Flags:\n" + "- y-invert force the image to be y-flipped;\n note will be " + "automatically added if we detect if the camera sensor is " + "y-flipped\n", argv0); printf("\n" "How to set up Vivid the virtual video driver for testing:\n" @@ -959,17 +965,19 @@ main(int argc, char **argv) const char *v4l_device = NULL; uint32_t v4l_format = 0x0; uint32_t drm_format = 0x0; + uint32_t opts_flags = 0x0; int c, opt_index, ret = 0; static struct option long_options[] = { { "v4l2-device", required_argument, NULL, 'v' }, { "v4l2-format", required_argument, NULL, 'f' }, { "drm-format", required_argument, NULL, 'd' }, + { "y-invert", no_argument, NULL, 'i' }, { "help", no_argument, NULL, 'h' }, { 0, 0, NULL, 0 } }; - while ((c = getopt_long(argc, argv, "hv:d:f:", long_options, + while ((c = getopt_long(argc, argv, "hiv:d:f:", long_options, &opt_index)) != -1) { switch (c) { case 'v': @@ -981,6 +989,9 @@ main(int argc, char **argv) case 'd': drm_format = parse_format(optarg); break; + case 'i': + opts_flags |= OPT_FLAG_INVERT; + break; default: case 'h': usage(argv[0]); @@ -997,7 +1008,7 @@ main(int argc, char **argv) if (drm_format == 0x0) drm_format = v4l_format; - display = create_display(drm_format); + display = create_display(drm_format, opts_flags); display->format.format = v4l_format; window = create_window(display);