linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/4] List supported formats in libv4l2subdev
@ 2016-01-25 12:39 Sakari Ailus
  2016-01-25 12:39 ` [PATCH v3 1/4] v4l: libv4lsubdev: Make mbus_formats array const Sakari Ailus
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Sakari Ailus @ 2016-01-25 12:39 UTC (permalink / raw)
  To: linux-media; +Cc: laurent.pinchart, hverkuil

Hi,

Besides rebasing on:

[PATCH v2 1/1] v4l: libv4l2subdev: Precisely convert media bus string to code

- v4l2_subdev_pixelcode_list() now returns an entire array of pixel codes
  instead of a single code at a time and
- the set has been prepended by an additional patch to make the
  mbus_formats array const.

-- 
Kind regards,
Sakari


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v3 1/4] v4l: libv4lsubdev: Make mbus_formats array const
  2016-01-25 12:39 [PATCH v3 0/4] List supported formats in libv4l2subdev Sakari Ailus
@ 2016-01-25 12:39 ` Sakari Ailus
  2016-01-25 20:17   ` Laurent Pinchart
  2016-01-25 12:39 ` [PATCH v3 2/4] libv4l2subdev: Use generated format definitions in libv4l2subdev Sakari Ailus
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 11+ messages in thread
From: Sakari Ailus @ 2016-01-25 12:39 UTC (permalink / raw)
  To: linux-media; +Cc: laurent.pinchart, hverkuil

The array is already static and may not be modified at runtime. Make it
const.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 utils/media-ctl/libv4l2subdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/utils/media-ctl/libv4l2subdev.c b/utils/media-ctl/libv4l2subdev.c
index dc2cd87..e45834f 100644
--- a/utils/media-ctl/libv4l2subdev.c
+++ b/utils/media-ctl/libv4l2subdev.c
@@ -715,7 +715,7 @@ int v4l2_subdev_parse_setup_formats(struct media_device *media, const char *p)
 	return *end ? -EINVAL : 0;
 }
 
-static struct {
+static const struct {
 	const char *name;
 	enum v4l2_mbus_pixelcode code;
 } mbus_formats[] = {
-- 
2.1.0.231.g7484e3b


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 2/4] libv4l2subdev: Use generated format definitions in libv4l2subdev
  2016-01-25 12:39 [PATCH v3 0/4] List supported formats in libv4l2subdev Sakari Ailus
  2016-01-25 12:39 ` [PATCH v3 1/4] v4l: libv4lsubdev: Make mbus_formats array const Sakari Ailus
@ 2016-01-25 12:39 ` Sakari Ailus
  2016-02-15 14:39   ` Laurent Pinchart
  2016-01-25 12:39 ` [PATCH v3 3/4] libv4l2subdev: Add a function to list library supported pixel codes Sakari Ailus
  2016-01-25 12:39 ` [PATCH v3 4/4] media-ctl: List supported media bus formats Sakari Ailus
  3 siblings, 1 reply; 11+ messages in thread
From: Sakari Ailus @ 2016-01-25 12:39 UTC (permalink / raw)
  To: linux-media; +Cc: laurent.pinchart, hverkuil

Instead of manually adding each and every new media bus pixel code to
libv4l2subdev, generate the list automatically. The pre-existing formats
that do not match the list are not modified so that existing users are
unaffected by this change, with the exception of converting codes to
strings, which will use the new definitions.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 utils/media-ctl/.gitignore      | 1 +
 utils/media-ctl/Makefile.am     | 8 ++++++++
 utils/media-ctl/libv4l2subdev.c | 1 +
 3 files changed, 10 insertions(+)

diff --git a/utils/media-ctl/.gitignore b/utils/media-ctl/.gitignore
index 95b6a57..799ab33 100644
--- a/utils/media-ctl/.gitignore
+++ b/utils/media-ctl/.gitignore
@@ -1 +1,2 @@
 media-ctl
+media-bus-format-names.h
diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
index a3931fb..23ad90b 100644
--- a/utils/media-ctl/Makefile.am
+++ b/utils/media-ctl/Makefile.am
@@ -4,6 +4,14 @@ libmediactl_la_SOURCES = libmediactl.c mediactl-priv.h
 libmediactl_la_CFLAGS = -static $(LIBUDEV_CFLAGS)
 libmediactl_la_LDFLAGS = -static $(LIBUDEV_LIBS)
 
+media-bus-format-names.h: ../../include/linux/media-bus-format.h
+	sed -e '/#define MEDIA_BUS_FMT/ ! d; s/.*FMT_//; /FIXED/ d; s/\t.*//; s/.*/{ \"&\", MEDIA_BUS_FMT_& },/;' \
+	< $< > $@
+
+BUILT_SOURCES = media-bus-format-names.h
+CLEANFILES = $(BUILT_SOURCES)
+
+nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
 libv4l2subdev_la_SOURCES = libv4l2subdev.c
 libv4l2subdev_la_LIBADD = libmediactl.la
 libv4l2subdev_la_CFLAGS = -static
diff --git a/utils/media-ctl/libv4l2subdev.c b/utils/media-ctl/libv4l2subdev.c
index e45834f..f3c0a9a 100644
--- a/utils/media-ctl/libv4l2subdev.c
+++ b/utils/media-ctl/libv4l2subdev.c
@@ -719,6 +719,7 @@ static const struct {
 	const char *name;
 	enum v4l2_mbus_pixelcode code;
 } mbus_formats[] = {
+#include "media-bus-format-names.h"
 	{ "Y8", MEDIA_BUS_FMT_Y8_1X8},
 	{ "Y10", MEDIA_BUS_FMT_Y10_1X10 },
 	{ "Y12", MEDIA_BUS_FMT_Y12_1X12 },
-- 
2.1.0.231.g7484e3b


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 3/4] libv4l2subdev: Add a function to list library supported pixel codes
  2016-01-25 12:39 [PATCH v3 0/4] List supported formats in libv4l2subdev Sakari Ailus
  2016-01-25 12:39 ` [PATCH v3 1/4] v4l: libv4lsubdev: Make mbus_formats array const Sakari Ailus
  2016-01-25 12:39 ` [PATCH v3 2/4] libv4l2subdev: Use generated format definitions in libv4l2subdev Sakari Ailus
@ 2016-01-25 12:39 ` Sakari Ailus
  2016-02-15 14:43   ` Laurent Pinchart
  2016-01-25 12:39 ` [PATCH v3 4/4] media-ctl: List supported media bus formats Sakari Ailus
  3 siblings, 1 reply; 11+ messages in thread
From: Sakari Ailus @ 2016-01-25 12:39 UTC (permalink / raw)
  To: linux-media; +Cc: laurent.pinchart, hverkuil

Also mark which format definitions are compat definitions for the
pre-existing codes. This way we don't end up listing the same formats
twice.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 utils/media-ctl/.gitignore      |  1 +
 utils/media-ctl/Makefile.am     |  6 +++-
 utils/media-ctl/libv4l2subdev.c | 71 ++++++++++++++++++++++++-----------------
 utils/media-ctl/v4l2subdev.h    | 10 ++++++
 4 files changed, 57 insertions(+), 31 deletions(-)

diff --git a/utils/media-ctl/.gitignore b/utils/media-ctl/.gitignore
index 799ab33..5354fec 100644
--- a/utils/media-ctl/.gitignore
+++ b/utils/media-ctl/.gitignore
@@ -1,2 +1,3 @@
 media-ctl
 media-bus-format-names.h
+media-bus-format-codes.h
diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
index 23ad90b..ee7dcc9 100644
--- a/utils/media-ctl/Makefile.am
+++ b/utils/media-ctl/Makefile.am
@@ -8,7 +8,11 @@ media-bus-format-names.h: ../../include/linux/media-bus-format.h
 	sed -e '/#define MEDIA_BUS_FMT/ ! d; s/.*FMT_//; /FIXED/ d; s/\t.*//; s/.*/{ \"&\", MEDIA_BUS_FMT_& },/;' \
 	< $< > $@
 
-BUILT_SOURCES = media-bus-format-names.h
+media-bus-format-codes.h: ../../include/linux/media-bus-format.h
+	sed -e '/#define MEDIA_BUS_FMT/ ! d; s/.*#define //; /FIXED/ d; s/\t.*//; s/.*/ &,/;' \
+	< $< > $@
+
+BUILT_SOURCES = media-bus-format-names.h media-bus-format-codes.h
 CLEANFILES = $(BUILT_SOURCES)
 
 nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
diff --git a/utils/media-ctl/libv4l2subdev.c b/utils/media-ctl/libv4l2subdev.c
index f3c0a9a..408f1cf 100644
--- a/utils/media-ctl/libv4l2subdev.c
+++ b/utils/media-ctl/libv4l2subdev.c
@@ -718,38 +718,44 @@ int v4l2_subdev_parse_setup_formats(struct media_device *media, const char *p)
 static const struct {
 	const char *name;
 	enum v4l2_mbus_pixelcode code;
+	bool compat;
 } mbus_formats[] = {
 #include "media-bus-format-names.h"
-	{ "Y8", MEDIA_BUS_FMT_Y8_1X8},
-	{ "Y10", MEDIA_BUS_FMT_Y10_1X10 },
-	{ "Y12", MEDIA_BUS_FMT_Y12_1X12 },
-	{ "YUYV", MEDIA_BUS_FMT_YUYV8_1X16 },
-	{ "YUYV1_5X8", MEDIA_BUS_FMT_YUYV8_1_5X8 },
-	{ "YUYV2X8", MEDIA_BUS_FMT_YUYV8_2X8 },
-	{ "UYVY", MEDIA_BUS_FMT_UYVY8_1X16 },
-	{ "UYVY1_5X8", MEDIA_BUS_FMT_UYVY8_1_5X8 },
-	{ "UYVY2X8", MEDIA_BUS_FMT_UYVY8_2X8 },
-	{ "VUY24", MEDIA_BUS_FMT_VUY8_1X24 },
-	{ "SBGGR8", MEDIA_BUS_FMT_SBGGR8_1X8 },
-	{ "SGBRG8", MEDIA_BUS_FMT_SGBRG8_1X8 },
-	{ "SGRBG8", MEDIA_BUS_FMT_SGRBG8_1X8 },
-	{ "SRGGB8", MEDIA_BUS_FMT_SRGGB8_1X8 },
-	{ "SBGGR10", MEDIA_BUS_FMT_SBGGR10_1X10 },
-	{ "SGBRG10", MEDIA_BUS_FMT_SGBRG10_1X10 },
-	{ "SGRBG10", MEDIA_BUS_FMT_SGRBG10_1X10 },
-	{ "SRGGB10", MEDIA_BUS_FMT_SRGGB10_1X10 },
-	{ "SBGGR10_DPCM8", MEDIA_BUS_FMT_SBGGR10_DPCM8_1X8 },
-	{ "SGBRG10_DPCM8", MEDIA_BUS_FMT_SGBRG10_DPCM8_1X8 },
-	{ "SGRBG10_DPCM8", MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8 },
-	{ "SRGGB10_DPCM8", MEDIA_BUS_FMT_SRGGB10_DPCM8_1X8 },
-	{ "SBGGR12", MEDIA_BUS_FMT_SBGGR12_1X12 },
-	{ "SGBRG12", MEDIA_BUS_FMT_SGBRG12_1X12 },
-	{ "SGRBG12", MEDIA_BUS_FMT_SGRBG12_1X12 },
-	{ "SRGGB12", MEDIA_BUS_FMT_SRGGB12_1X12 },
-	{ "AYUV32", MEDIA_BUS_FMT_AYUV8_1X32 },
-	{ "RBG24", MEDIA_BUS_FMT_RBG888_1X24 },
-	{ "RGB32", MEDIA_BUS_FMT_RGB888_1X32_PADHI },
-	{ "ARGB32", MEDIA_BUS_FMT_ARGB8888_1X32 },
+	{ "Y8", MEDIA_BUS_FMT_Y8_1X8, true },
+	{ "Y10", MEDIA_BUS_FMT_Y10_1X10, true },
+	{ "Y12", MEDIA_BUS_FMT_Y12_1X12, true },
+	{ "YUYV", MEDIA_BUS_FMT_YUYV8_1X16, true },
+	{ "YUYV1_5X8", MEDIA_BUS_FMT_YUYV8_1_5X8, true },
+	{ "YUYV2X8", MEDIA_BUS_FMT_YUYV8_2X8, true },
+	{ "UYVY", MEDIA_BUS_FMT_UYVY8_1X16, true },
+	{ "UYVY1_5X8", MEDIA_BUS_FMT_UYVY8_1_5X8, true },
+	{ "UYVY2X8", MEDIA_BUS_FMT_UYVY8_2X8, true },
+	{ "VUY24", MEDIA_BUS_FMT_VUY8_1X24, true },
+	{ "SBGGR8", MEDIA_BUS_FMT_SBGGR8_1X8, true },
+	{ "SGBRG8", MEDIA_BUS_FMT_SGBRG8_1X8, true },
+	{ "SGRBG8", MEDIA_BUS_FMT_SGRBG8_1X8, true },
+	{ "SRGGB8", MEDIA_BUS_FMT_SRGGB8_1X8, true },
+	{ "SBGGR10", MEDIA_BUS_FMT_SBGGR10_1X10, true },
+	{ "SGBRG10", MEDIA_BUS_FMT_SGBRG10_1X10, true },
+	{ "SGRBG10", MEDIA_BUS_FMT_SGRBG10_1X10, true },
+	{ "SRGGB10", MEDIA_BUS_FMT_SRGGB10_1X10, true },
+	{ "SBGGR10_DPCM8", MEDIA_BUS_FMT_SBGGR10_DPCM8_1X8, true },
+	{ "SGBRG10_DPCM8", MEDIA_BUS_FMT_SGBRG10_DPCM8_1X8, true },
+	{ "SGRBG10_DPCM8", MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8, true },
+	{ "SRGGB10_DPCM8", MEDIA_BUS_FMT_SRGGB10_DPCM8_1X8, true },
+	{ "SBGGR12", MEDIA_BUS_FMT_SBGGR12_1X12, true },
+	{ "SGBRG12", MEDIA_BUS_FMT_SGBRG12_1X12, true },
+	{ "SGRBG12", MEDIA_BUS_FMT_SGRBG12_1X12, true },
+	{ "SRGGB12", MEDIA_BUS_FMT_SRGGB12_1X12, true },
+	{ "AYUV32", MEDIA_BUS_FMT_AYUV8_1X32, true },
+	{ "RBG24", MEDIA_BUS_FMT_RBG888_1X24, true },
+	{ "RGB32", MEDIA_BUS_FMT_RGB888_1X32_PADHI, true },
+	{ "ARGB32", MEDIA_BUS_FMT_ARGB8888_1X32, true },
+};
+
+static const enum v4l2_mbus_pixelcode mbus_codes[] = {
+#include "media-bus-format-codes.h"
+	0 /* guardian */
 };
 
 const char *v4l2_subdev_pixelcode_to_string(enum v4l2_mbus_pixelcode code)
@@ -821,3 +827,8 @@ enum v4l2_field v4l2_subdev_string_to_field(const char *string,
 
 	return fields[i].field;
 }
+
+const enum v4l2_mbus_pixelcode *v4l2_subdev_pixelcode_list(void)
+{
+	return mbus_codes;
+}
diff --git a/utils/media-ctl/v4l2subdev.h b/utils/media-ctl/v4l2subdev.h
index 104e420..33327d6 100644
--- a/utils/media-ctl/v4l2subdev.h
+++ b/utils/media-ctl/v4l2subdev.h
@@ -279,4 +279,14 @@ const char *v4l2_subdev_field_to_string(enum v4l2_field field);
 enum v4l2_field v4l2_subdev_string_to_field(const char *string,
 					    unsigned int length);
 
+/**
+ * @brief Enumerate library supported media bus pixel codes.
+ *
+ * Obtain pixel codes supported by libv4l2subdev. The list is zero
+ * terminated.
+ *
+ * @return media bus pixelcode on success, -1 on failure.
+ */
+const enum v4l2_mbus_pixelcode *v4l2_subdev_pixelcode_list(void);
+
 #endif
-- 
2.1.0.231.g7484e3b


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 4/4] media-ctl: List supported media bus formats
  2016-01-25 12:39 [PATCH v3 0/4] List supported formats in libv4l2subdev Sakari Ailus
                   ` (2 preceding siblings ...)
  2016-01-25 12:39 ` [PATCH v3 3/4] libv4l2subdev: Add a function to list library supported pixel codes Sakari Ailus
@ 2016-01-25 12:39 ` Sakari Ailus
  2016-02-15 14:44   ` Laurent Pinchart
  3 siblings, 1 reply; 11+ messages in thread
From: Sakari Ailus @ 2016-01-25 12:39 UTC (permalink / raw)
  To: linux-media; +Cc: laurent.pinchart, hverkuil

Add a new topic option for -h to allow listing supported media bus codes
in conversion functions. This is useful in figuring out which media bus
codes are actually supported by the library. The numeric values of the
codes are listed as well.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 utils/media-ctl/options.c | 42 ++++++++++++++++++++++++++++++++++++++----
 1 file changed, 38 insertions(+), 4 deletions(-)

diff --git a/utils/media-ctl/options.c b/utils/media-ctl/options.c
index 0afc9c2..c67052d 100644
--- a/utils/media-ctl/options.c
+++ b/utils/media-ctl/options.c
@@ -22,7 +22,9 @@
 #include <getopt.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
+#include <v4l2subdev.h>
 
 #include <linux/videodev2.h>
 
@@ -45,7 +47,8 @@ static void usage(const char *argv0)
 	printf("-V, --set-v4l2 v4l2	Comma-separated list of formats to setup\n");
 	printf("    --get-v4l2 pad	Print the active format on a given pad\n");
 	printf("    --set-dv pad	Configure DV timings on a given pad\n");
-	printf("-h, --help		Show verbose help and exit\n");
+	printf("-h, --help[=topic]	Show verbose help and exit\n");
+	printf("			topics:	mbus-fmt: List supported media bus pixel codes\n");
 	printf("-i, --interactive	Modify links interactively\n");
 	printf("-l, --links links	Comma-separated list of link descriptors to setup\n");
 	printf("-p, --print-topology	Print the device topology\n");
@@ -100,7 +103,7 @@ static struct option opts[] = {
 	{"get-format", 1, 0, OPT_GET_FORMAT},
 	{"get-v4l2", 1, 0, OPT_GET_FORMAT},
 	{"set-dv", 1, 0, OPT_SET_DV},
-	{"help", 0, 0, 'h'},
+	{"help", 2, 0, 'h'},
 	{"interactive", 0, 0, 'i'},
 	{"links", 1, 0, 'l'},
 	{"print-dot", 0, 0, OPT_PRINT_DOT},
@@ -110,6 +113,27 @@ static struct option opts[] = {
 	{ },
 };
 
+void list_mbus_formats(void)
+{
+	unsigned int i;
+
+	printf("Supported media bus pixel codes\n");
+
+	for (i = 0; ; i++) {
+		unsigned int code = v4l2_subdev_pixelcode_list()[i];
+		const char *str = v4l2_subdev_pixelcode_to_string(code);
+		int spaces = 30 - (int)strlen(str);
+
+		if (code == 0)
+			break;
+
+		if (spaces < 0)
+			spaces = 0;
+
+		printf("\t%s %*c (0x%8.8x)\n", str, spaces, ' ', code);
+	}
+}
+
 int parse_cmdline(int argc, char **argv)
 {
 	int opt;
@@ -120,7 +144,8 @@ int parse_cmdline(int argc, char **argv)
 	}
 
 	/* parse options */
-	while ((opt = getopt_long(argc, argv, "d:e:f:hil:prvV:", opts, NULL)) != -1) {
+	while ((opt = getopt_long(argc, argv, "d:e:f:h::il:prvV:",
+				  opts, NULL)) != -1) {
 		switch (opt) {
 		case 'd':
 			media_opts.devname = optarg;
@@ -142,7 +167,16 @@ int parse_cmdline(int argc, char **argv)
 			break;
 
 		case 'h':
-			usage(argv[0]);
+			if (optarg) {
+				if (!strcmp(optarg, "mbus-fmt"))
+					list_mbus_formats();
+				else
+					fprintf(stderr,
+						"Unknown topic \"%s\"\n",
+						optarg);
+			} else {
+				usage(argv[0]);
+			}
 			exit(0);
 
 		case 'i':
-- 
2.1.0.231.g7484e3b


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 1/4] v4l: libv4lsubdev: Make mbus_formats array const
  2016-01-25 12:39 ` [PATCH v3 1/4] v4l: libv4lsubdev: Make mbus_formats array const Sakari Ailus
@ 2016-01-25 20:17   ` Laurent Pinchart
  0 siblings, 0 replies; 11+ messages in thread
From: Laurent Pinchart @ 2016-01-25 20:17 UTC (permalink / raw)
  To: Sakari Ailus; +Cc: linux-media, hverkuil

Hi Sakari,

Thank you for the patch.

On Monday 25 January 2016 14:39:42 Sakari Ailus wrote:
> The array is already static and may not be modified at runtime. Make it
> const.
> 
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>

Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  utils/media-ctl/libv4l2subdev.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/utils/media-ctl/libv4l2subdev.c
> b/utils/media-ctl/libv4l2subdev.c index dc2cd87..e45834f 100644
> --- a/utils/media-ctl/libv4l2subdev.c
> +++ b/utils/media-ctl/libv4l2subdev.c
> @@ -715,7 +715,7 @@ int v4l2_subdev_parse_setup_formats(struct media_device
> *media, const char *p) return *end ? -EINVAL : 0;
>  }
> 
> -static struct {
> +static const struct {
>  	const char *name;
>  	enum v4l2_mbus_pixelcode code;
>  } mbus_formats[] = {

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 2/4] libv4l2subdev: Use generated format definitions in libv4l2subdev
  2016-01-25 12:39 ` [PATCH v3 2/4] libv4l2subdev: Use generated format definitions in libv4l2subdev Sakari Ailus
@ 2016-02-15 14:39   ` Laurent Pinchart
  0 siblings, 0 replies; 11+ messages in thread
From: Laurent Pinchart @ 2016-02-15 14:39 UTC (permalink / raw)
  To: Sakari Ailus; +Cc: linux-media, hverkuil

Hi Sakari,

Thank you for the patch.

On Monday 25 January 2016 14:39:43 Sakari Ailus wrote:
> Instead of manually adding each and every new media bus pixel code to
> libv4l2subdev, generate the list automatically. The pre-existing formats
> that do not match the list are not modified so that existing users are
> unaffected by this change, with the exception of converting codes to
> strings, which will use the new definitions.
> 
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>

Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  utils/media-ctl/.gitignore      | 1 +
>  utils/media-ctl/Makefile.am     | 8 ++++++++
>  utils/media-ctl/libv4l2subdev.c | 1 +
>  3 files changed, 10 insertions(+)
> 
> diff --git a/utils/media-ctl/.gitignore b/utils/media-ctl/.gitignore
> index 95b6a57..799ab33 100644
> --- a/utils/media-ctl/.gitignore
> +++ b/utils/media-ctl/.gitignore
> @@ -1 +1,2 @@
>  media-ctl
> +media-bus-format-names.h
> diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
> index a3931fb..23ad90b 100644
> --- a/utils/media-ctl/Makefile.am
> +++ b/utils/media-ctl/Makefile.am
> @@ -4,6 +4,14 @@ libmediactl_la_SOURCES = libmediactl.c mediactl-priv.h
>  libmediactl_la_CFLAGS = -static $(LIBUDEV_CFLAGS)
>  libmediactl_la_LDFLAGS = -static $(LIBUDEV_LIBS)
> 
> +media-bus-format-names.h: ../../include/linux/media-bus-format.h
> +	sed -e '/#define MEDIA_BUS_FMT/ ! d; s/.*FMT_//; /FIXED/ d; s/\t.*//;
> s/.*/{ \"&\", MEDIA_BUS_FMT_& },/;' \ +	< $< > $@
> +
> +BUILT_SOURCES = media-bus-format-names.h
> +CLEANFILES = $(BUILT_SOURCES)
> +
> +nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
>  libv4l2subdev_la_SOURCES = libv4l2subdev.c
>  libv4l2subdev_la_LIBADD = libmediactl.la
>  libv4l2subdev_la_CFLAGS = -static
> diff --git a/utils/media-ctl/libv4l2subdev.c
> b/utils/media-ctl/libv4l2subdev.c index e45834f..f3c0a9a 100644
> --- a/utils/media-ctl/libv4l2subdev.c
> +++ b/utils/media-ctl/libv4l2subdev.c
> @@ -719,6 +719,7 @@ static const struct {
>  	const char *name;
>  	enum v4l2_mbus_pixelcode code;
>  } mbus_formats[] = {
> +#include "media-bus-format-names.h"
>  	{ "Y8", MEDIA_BUS_FMT_Y8_1X8},
>  	{ "Y10", MEDIA_BUS_FMT_Y10_1X10 },
>  	{ "Y12", MEDIA_BUS_FMT_Y12_1X12 },

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 3/4] libv4l2subdev: Add a function to list library supported pixel codes
  2016-01-25 12:39 ` [PATCH v3 3/4] libv4l2subdev: Add a function to list library supported pixel codes Sakari Ailus
@ 2016-02-15 14:43   ` Laurent Pinchart
  2016-02-15 15:31     ` Sakari Ailus
  0 siblings, 1 reply; 11+ messages in thread
From: Laurent Pinchart @ 2016-02-15 14:43 UTC (permalink / raw)
  To: Sakari Ailus; +Cc: linux-media, hverkuil

Hi Sakari,

Thank you for the patch.

On Monday 25 January 2016 14:39:44 Sakari Ailus wrote:
> Also mark which format definitions are compat definitions for the
> pre-existing codes. This way we don't end up listing the same formats
> twice.
> 
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> ---
>  utils/media-ctl/.gitignore      |  1 +
>  utils/media-ctl/Makefile.am     |  6 +++-
>  utils/media-ctl/libv4l2subdev.c | 71 ++++++++++++++++++++++---------------
>  utils/media-ctl/v4l2subdev.h    | 10 ++++++
>  4 files changed, 57 insertions(+), 31 deletions(-)
> 
> diff --git a/utils/media-ctl/.gitignore b/utils/media-ctl/.gitignore
> index 799ab33..5354fec 100644
> --- a/utils/media-ctl/.gitignore
> +++ b/utils/media-ctl/.gitignore
> @@ -1,2 +1,3 @@
>  media-ctl
>  media-bus-format-names.h
> +media-bus-format-codes.h
> diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
> index 23ad90b..ee7dcc9 100644
> --- a/utils/media-ctl/Makefile.am
> +++ b/utils/media-ctl/Makefile.am
> @@ -8,7 +8,11 @@ media-bus-format-names.h:
> ../../include/linux/media-bus-format.h sed -e '/#define MEDIA_BUS_FMT/ ! d;
> s/.*FMT_//; /FIXED/ d; s/\t.*//; s/.*/{ \"&\", MEDIA_BUS_FMT_& },/;' \ < $<
> > $@
> 
> -BUILT_SOURCES = media-bus-format-names.h
> +media-bus-format-codes.h: ../../include/linux/media-bus-format.h
> +	sed -e '/#define MEDIA_BUS_FMT/ ! d; s/.*#define //; /FIXED/ d; s/\t.*//;
> s/.*/ &,/;' \ +	< $< > $@
> +
> +BUILT_SOURCES = media-bus-format-names.h media-bus-format-codes.h
>  CLEANFILES = $(BUILT_SOURCES)
> 
>  nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
> diff --git a/utils/media-ctl/libv4l2subdev.c
> b/utils/media-ctl/libv4l2subdev.c index f3c0a9a..408f1cf 100644
> --- a/utils/media-ctl/libv4l2subdev.c
> +++ b/utils/media-ctl/libv4l2subdev.c
> @@ -718,38 +718,44 @@ int v4l2_subdev_parse_setup_formats(struct
> media_device *media, const char *p) static const struct {
>  	const char *name;
>  	enum v4l2_mbus_pixelcode code;
> +	bool compat;
>  } mbus_formats[] = {
>  #include "media-bus-format-names.h"
> -	{ "Y8", MEDIA_BUS_FMT_Y8_1X8},
> -	{ "Y10", MEDIA_BUS_FMT_Y10_1X10 },
> -	{ "Y12", MEDIA_BUS_FMT_Y12_1X12 },
> -	{ "YUYV", MEDIA_BUS_FMT_YUYV8_1X16 },
> -	{ "YUYV1_5X8", MEDIA_BUS_FMT_YUYV8_1_5X8 },
> -	{ "YUYV2X8", MEDIA_BUS_FMT_YUYV8_2X8 },
> -	{ "UYVY", MEDIA_BUS_FMT_UYVY8_1X16 },
> -	{ "UYVY1_5X8", MEDIA_BUS_FMT_UYVY8_1_5X8 },
> -	{ "UYVY2X8", MEDIA_BUS_FMT_UYVY8_2X8 },
> -	{ "VUY24", MEDIA_BUS_FMT_VUY8_1X24 },
> -	{ "SBGGR8", MEDIA_BUS_FMT_SBGGR8_1X8 },
> -	{ "SGBRG8", MEDIA_BUS_FMT_SGBRG8_1X8 },
> -	{ "SGRBG8", MEDIA_BUS_FMT_SGRBG8_1X8 },
> -	{ "SRGGB8", MEDIA_BUS_FMT_SRGGB8_1X8 },
> -	{ "SBGGR10", MEDIA_BUS_FMT_SBGGR10_1X10 },
> -	{ "SGBRG10", MEDIA_BUS_FMT_SGBRG10_1X10 },
> -	{ "SGRBG10", MEDIA_BUS_FMT_SGRBG10_1X10 },
> -	{ "SRGGB10", MEDIA_BUS_FMT_SRGGB10_1X10 },
> -	{ "SBGGR10_DPCM8", MEDIA_BUS_FMT_SBGGR10_DPCM8_1X8 },
> -	{ "SGBRG10_DPCM8", MEDIA_BUS_FMT_SGBRG10_DPCM8_1X8 },
> -	{ "SGRBG10_DPCM8", MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8 },
> -	{ "SRGGB10_DPCM8", MEDIA_BUS_FMT_SRGGB10_DPCM8_1X8 },
> -	{ "SBGGR12", MEDIA_BUS_FMT_SBGGR12_1X12 },
> -	{ "SGBRG12", MEDIA_BUS_FMT_SGBRG12_1X12 },
> -	{ "SGRBG12", MEDIA_BUS_FMT_SGRBG12_1X12 },
> -	{ "SRGGB12", MEDIA_BUS_FMT_SRGGB12_1X12 },
> -	{ "AYUV32", MEDIA_BUS_FMT_AYUV8_1X32 },
> -	{ "RBG24", MEDIA_BUS_FMT_RBG888_1X24 },
> -	{ "RGB32", MEDIA_BUS_FMT_RGB888_1X32_PADHI },
> -	{ "ARGB32", MEDIA_BUS_FMT_ARGB8888_1X32 },
> +	{ "Y8", MEDIA_BUS_FMT_Y8_1X8, true },
> +	{ "Y10", MEDIA_BUS_FMT_Y10_1X10, true },
> +	{ "Y12", MEDIA_BUS_FMT_Y12_1X12, true },
> +	{ "YUYV", MEDIA_BUS_FMT_YUYV8_1X16, true },
> +	{ "YUYV1_5X8", MEDIA_BUS_FMT_YUYV8_1_5X8, true },
> +	{ "YUYV2X8", MEDIA_BUS_FMT_YUYV8_2X8, true },
> +	{ "UYVY", MEDIA_BUS_FMT_UYVY8_1X16, true },
> +	{ "UYVY1_5X8", MEDIA_BUS_FMT_UYVY8_1_5X8, true },
> +	{ "UYVY2X8", MEDIA_BUS_FMT_UYVY8_2X8, true },
> +	{ "VUY24", MEDIA_BUS_FMT_VUY8_1X24, true },
> +	{ "SBGGR8", MEDIA_BUS_FMT_SBGGR8_1X8, true },
> +	{ "SGBRG8", MEDIA_BUS_FMT_SGBRG8_1X8, true },
> +	{ "SGRBG8", MEDIA_BUS_FMT_SGRBG8_1X8, true },
> +	{ "SRGGB8", MEDIA_BUS_FMT_SRGGB8_1X8, true },
> +	{ "SBGGR10", MEDIA_BUS_FMT_SBGGR10_1X10, true },
> +	{ "SGBRG10", MEDIA_BUS_FMT_SGBRG10_1X10, true },
> +	{ "SGRBG10", MEDIA_BUS_FMT_SGRBG10_1X10, true },
> +	{ "SRGGB10", MEDIA_BUS_FMT_SRGGB10_1X10, true },
> +	{ "SBGGR10_DPCM8", MEDIA_BUS_FMT_SBGGR10_DPCM8_1X8, true },
> +	{ "SGBRG10_DPCM8", MEDIA_BUS_FMT_SGBRG10_DPCM8_1X8, true },
> +	{ "SGRBG10_DPCM8", MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8, true },
> +	{ "SRGGB10_DPCM8", MEDIA_BUS_FMT_SRGGB10_DPCM8_1X8, true },
> +	{ "SBGGR12", MEDIA_BUS_FMT_SBGGR12_1X12, true },
> +	{ "SGBRG12", MEDIA_BUS_FMT_SGBRG12_1X12, true },
> +	{ "SGRBG12", MEDIA_BUS_FMT_SGRBG12_1X12, true },
> +	{ "SRGGB12", MEDIA_BUS_FMT_SRGGB12_1X12, true },
> +	{ "AYUV32", MEDIA_BUS_FMT_AYUV8_1X32, true },
> +	{ "RBG24", MEDIA_BUS_FMT_RBG888_1X24, true },
> +	{ "RGB32", MEDIA_BUS_FMT_RGB888_1X32_PADHI, true },
> +	{ "ARGB32", MEDIA_BUS_FMT_ARGB8888_1X32, true },
> +};
> +
> +static const enum v4l2_mbus_pixelcode mbus_codes[] = {
> +#include "media-bus-format-codes.h"
> +	0 /* guardian */
>  };
> 
>  const char *v4l2_subdev_pixelcode_to_string(enum v4l2_mbus_pixelcode code)
> @@ -821,3 +827,8 @@ enum v4l2_field v4l2_subdev_string_to_field(const char
> *string,
> 
>  	return fields[i].field;
>  }
> +
> +const enum v4l2_mbus_pixelcode *v4l2_subdev_pixelcode_list(void)
> +{
> +	return mbus_codes;
> +}
> diff --git a/utils/media-ctl/v4l2subdev.h b/utils/media-ctl/v4l2subdev.h
> index 104e420..33327d6 100644
> --- a/utils/media-ctl/v4l2subdev.h
> +++ b/utils/media-ctl/v4l2subdev.h
> @@ -279,4 +279,14 @@ const char *v4l2_subdev_field_to_string(enum v4l2_field
> field); enum v4l2_field v4l2_subdev_string_to_field(const char *string,
>  					    unsigned int length);
> 
> +/**
> + * @brief Enumerate library supported media bus pixel codes.
> + *
> + * Obtain pixel codes supported by libv4l2subdev. The list is zero
> + * terminated.
> + *
> + * @return media bus pixelcode on success, -1 on failure.
> + */
> +const enum v4l2_mbus_pixelcode *v4l2_subdev_pixelcode_list(void);
> +

Would it make sense to also return the array length ? Patch 4/4 doesn't use 
it, but other callers could.

I'm also wondering whether it wouldn't make sense to expose the mbus_formats 
array instead, to avoid the call to v4l2_subdev_pixelcode_to_string() in patch 
4/4.

Do you think this should be a public or private API ?

>  #endif

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 4/4] media-ctl: List supported media bus formats
  2016-01-25 12:39 ` [PATCH v3 4/4] media-ctl: List supported media bus formats Sakari Ailus
@ 2016-02-15 14:44   ` Laurent Pinchart
  2016-02-15 15:32     ` Sakari Ailus
  0 siblings, 1 reply; 11+ messages in thread
From: Laurent Pinchart @ 2016-02-15 14:44 UTC (permalink / raw)
  To: Sakari Ailus; +Cc: linux-media, hverkuil

Hi Sakari,

Thank you for the patch.

On Monday 25 January 2016 14:39:45 Sakari Ailus wrote:
> Add a new topic option for -h to allow listing supported media bus codes
> in conversion functions. This is useful in figuring out which media bus
> codes are actually supported by the library. The numeric values of the
> codes are listed as well.
> 
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> ---
>  utils/media-ctl/options.c | 42 ++++++++++++++++++++++++++++++++++++++----
>  1 file changed, 38 insertions(+), 4 deletions(-)
> 
> diff --git a/utils/media-ctl/options.c b/utils/media-ctl/options.c
> index 0afc9c2..c67052d 100644
> --- a/utils/media-ctl/options.c
> +++ b/utils/media-ctl/options.c
> @@ -22,7 +22,9 @@
>  #include <getopt.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> +#include <string.h>
>  #include <unistd.h>
> +#include <v4l2subdev.h>
> 
>  #include <linux/videodev2.h>
> 
> @@ -45,7 +47,8 @@ static void usage(const char *argv0)
>  	printf("-V, --set-v4l2 v4l2	Comma-separated list of formats to setup\n");
>  	printf("    --get-v4l2 pad	Print the active format on a given pad\n");
>  	printf("    --set-dv pad	Configure DV timings on a given pad\n");
> -	printf("-h, --help		Show verbose help and exit\n");
> +	printf("-h, --help[=topic]	Show verbose help and exit\n");
> +	printf("			topics:	mbus-fmt: List supported media bus pixel 
codes\n");
>  	printf("-i, --interactive	Modify links interactively\n");
>  	printf("-l, --links links	Comma-separated list of link descriptors to
> setup\n"); printf("-p, --print-topology	Print the device topology\n");
> @@ -100,7 +103,7 @@ static struct option opts[] = {
>  	{"get-format", 1, 0, OPT_GET_FORMAT},
>  	{"get-v4l2", 1, 0, OPT_GET_FORMAT},
>  	{"set-dv", 1, 0, OPT_SET_DV},
> -	{"help", 0, 0, 'h'},
> +	{"help", 2, 0, 'h'},
>  	{"interactive", 0, 0, 'i'},
>  	{"links", 1, 0, 'l'},
>  	{"print-dot", 0, 0, OPT_PRINT_DOT},
> @@ -110,6 +113,27 @@ static struct option opts[] = {
>  	{ },
>  };
> 
> +void list_mbus_formats(void)
> +{
> +	unsigned int i;
> +
> +	printf("Supported media bus pixel codes\n");
> +
> +	for (i = 0; ; i++) {
> +		unsigned int code = v4l2_subdev_pixelcode_list()[i];

How about calling the function outside of the loop ?

> +		const char *str = v4l2_subdev_pixelcode_to_string(code);
> +		int spaces = 30 - (int)strlen(str);
> +
> +		if (code == 0)
> +			break;
> +
> +		if (spaces < 0)
> +			spaces = 0;
> +
> +		printf("\t%s %*c (0x%8.8x)\n", str, spaces, ' ', code);
> +	}
> +}
> +
>  int parse_cmdline(int argc, char **argv)
>  {
>  	int opt;
> @@ -120,7 +144,8 @@ int parse_cmdline(int argc, char **argv)
>  	}
> 
>  	/* parse options */
> -	while ((opt = getopt_long(argc, argv, "d:e:f:hil:prvV:", opts, NULL)) !=
> -1) {
> +	while ((opt = getopt_long(argc, argv, "d:e:f:h::il:prvV:",
> +				  opts, NULL)) != -1) {
>  		switch (opt) {
>  		case 'd':
>  			media_opts.devname = optarg;
> @@ -142,7 +167,16 @@ int parse_cmdline(int argc, char **argv)
>  			break;
> 
>  		case 'h':
> -			usage(argv[0]);
> +			if (optarg) {
> +				if (!strcmp(optarg, "mbus-fmt"))
> +					list_mbus_formats();
> +				else
> +					fprintf(stderr,
> +						"Unknown topic \"%s\"\n",
> +						optarg);
> +			} else {
> +				usage(argv[0]);
> +			}
>  			exit(0);
> 
>  		case 'i':

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 3/4] libv4l2subdev: Add a function to list library supported pixel codes
  2016-02-15 14:43   ` Laurent Pinchart
@ 2016-02-15 15:31     ` Sakari Ailus
  0 siblings, 0 replies; 11+ messages in thread
From: Sakari Ailus @ 2016-02-15 15:31 UTC (permalink / raw)
  To: Laurent Pinchart; +Cc: Sakari Ailus, linux-media, hverkuil

Hi Laurent,

On Mon, Feb 15, 2016 at 04:43:12PM +0200, Laurent Pinchart wrote:
> Hi Sakari,
> 
> Thank you for the patch.
> 
> On Monday 25 January 2016 14:39:44 Sakari Ailus wrote:
> > Also mark which format definitions are compat definitions for the
> > pre-existing codes. This way we don't end up listing the same formats
> > twice.
> > 
> > Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> > ---
> >  utils/media-ctl/.gitignore      |  1 +
> >  utils/media-ctl/Makefile.am     |  6 +++-
> >  utils/media-ctl/libv4l2subdev.c | 71 ++++++++++++++++++++++---------------
> >  utils/media-ctl/v4l2subdev.h    | 10 ++++++
> >  4 files changed, 57 insertions(+), 31 deletions(-)
> > 
> > diff --git a/utils/media-ctl/.gitignore b/utils/media-ctl/.gitignore
> > index 799ab33..5354fec 100644
> > --- a/utils/media-ctl/.gitignore
> > +++ b/utils/media-ctl/.gitignore
> > @@ -1,2 +1,3 @@
> >  media-ctl
> >  media-bus-format-names.h
> > +media-bus-format-codes.h
> > diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
> > index 23ad90b..ee7dcc9 100644
> > --- a/utils/media-ctl/Makefile.am
> > +++ b/utils/media-ctl/Makefile.am
> > @@ -8,7 +8,11 @@ media-bus-format-names.h:
> > ../../include/linux/media-bus-format.h sed -e '/#define MEDIA_BUS_FMT/ ! d;
> > s/.*FMT_//; /FIXED/ d; s/\t.*//; s/.*/{ \"&\", MEDIA_BUS_FMT_& },/;' \ < $<
> > > $@
> > 
> > -BUILT_SOURCES = media-bus-format-names.h
> > +media-bus-format-codes.h: ../../include/linux/media-bus-format.h
> > +	sed -e '/#define MEDIA_BUS_FMT/ ! d; s/.*#define //; /FIXED/ d; s/\t.*//;
> > s/.*/ &,/;' \ +	< $< > $@
> > +
> > +BUILT_SOURCES = media-bus-format-names.h media-bus-format-codes.h
> >  CLEANFILES = $(BUILT_SOURCES)
> > 
> >  nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
> > diff --git a/utils/media-ctl/libv4l2subdev.c
> > b/utils/media-ctl/libv4l2subdev.c index f3c0a9a..408f1cf 100644
> > --- a/utils/media-ctl/libv4l2subdev.c
> > +++ b/utils/media-ctl/libv4l2subdev.c
> > @@ -718,38 +718,44 @@ int v4l2_subdev_parse_setup_formats(struct
> > media_device *media, const char *p) static const struct {
> >  	const char *name;
> >  	enum v4l2_mbus_pixelcode code;
> > +	bool compat;
> >  } mbus_formats[] = {
> >  #include "media-bus-format-names.h"
> > -	{ "Y8", MEDIA_BUS_FMT_Y8_1X8},
> > -	{ "Y10", MEDIA_BUS_FMT_Y10_1X10 },
> > -	{ "Y12", MEDIA_BUS_FMT_Y12_1X12 },
> > -	{ "YUYV", MEDIA_BUS_FMT_YUYV8_1X16 },
> > -	{ "YUYV1_5X8", MEDIA_BUS_FMT_YUYV8_1_5X8 },
> > -	{ "YUYV2X8", MEDIA_BUS_FMT_YUYV8_2X8 },
> > -	{ "UYVY", MEDIA_BUS_FMT_UYVY8_1X16 },
> > -	{ "UYVY1_5X8", MEDIA_BUS_FMT_UYVY8_1_5X8 },
> > -	{ "UYVY2X8", MEDIA_BUS_FMT_UYVY8_2X8 },
> > -	{ "VUY24", MEDIA_BUS_FMT_VUY8_1X24 },
> > -	{ "SBGGR8", MEDIA_BUS_FMT_SBGGR8_1X8 },
> > -	{ "SGBRG8", MEDIA_BUS_FMT_SGBRG8_1X8 },
> > -	{ "SGRBG8", MEDIA_BUS_FMT_SGRBG8_1X8 },
> > -	{ "SRGGB8", MEDIA_BUS_FMT_SRGGB8_1X8 },
> > -	{ "SBGGR10", MEDIA_BUS_FMT_SBGGR10_1X10 },
> > -	{ "SGBRG10", MEDIA_BUS_FMT_SGBRG10_1X10 },
> > -	{ "SGRBG10", MEDIA_BUS_FMT_SGRBG10_1X10 },
> > -	{ "SRGGB10", MEDIA_BUS_FMT_SRGGB10_1X10 },
> > -	{ "SBGGR10_DPCM8", MEDIA_BUS_FMT_SBGGR10_DPCM8_1X8 },
> > -	{ "SGBRG10_DPCM8", MEDIA_BUS_FMT_SGBRG10_DPCM8_1X8 },
> > -	{ "SGRBG10_DPCM8", MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8 },
> > -	{ "SRGGB10_DPCM8", MEDIA_BUS_FMT_SRGGB10_DPCM8_1X8 },
> > -	{ "SBGGR12", MEDIA_BUS_FMT_SBGGR12_1X12 },
> > -	{ "SGBRG12", MEDIA_BUS_FMT_SGBRG12_1X12 },
> > -	{ "SGRBG12", MEDIA_BUS_FMT_SGRBG12_1X12 },
> > -	{ "SRGGB12", MEDIA_BUS_FMT_SRGGB12_1X12 },
> > -	{ "AYUV32", MEDIA_BUS_FMT_AYUV8_1X32 },
> > -	{ "RBG24", MEDIA_BUS_FMT_RBG888_1X24 },
> > -	{ "RGB32", MEDIA_BUS_FMT_RGB888_1X32_PADHI },
> > -	{ "ARGB32", MEDIA_BUS_FMT_ARGB8888_1X32 },
> > +	{ "Y8", MEDIA_BUS_FMT_Y8_1X8, true },
> > +	{ "Y10", MEDIA_BUS_FMT_Y10_1X10, true },
> > +	{ "Y12", MEDIA_BUS_FMT_Y12_1X12, true },
> > +	{ "YUYV", MEDIA_BUS_FMT_YUYV8_1X16, true },
> > +	{ "YUYV1_5X8", MEDIA_BUS_FMT_YUYV8_1_5X8, true },
> > +	{ "YUYV2X8", MEDIA_BUS_FMT_YUYV8_2X8, true },
> > +	{ "UYVY", MEDIA_BUS_FMT_UYVY8_1X16, true },
> > +	{ "UYVY1_5X8", MEDIA_BUS_FMT_UYVY8_1_5X8, true },
> > +	{ "UYVY2X8", MEDIA_BUS_FMT_UYVY8_2X8, true },
> > +	{ "VUY24", MEDIA_BUS_FMT_VUY8_1X24, true },
> > +	{ "SBGGR8", MEDIA_BUS_FMT_SBGGR8_1X8, true },
> > +	{ "SGBRG8", MEDIA_BUS_FMT_SGBRG8_1X8, true },
> > +	{ "SGRBG8", MEDIA_BUS_FMT_SGRBG8_1X8, true },
> > +	{ "SRGGB8", MEDIA_BUS_FMT_SRGGB8_1X8, true },
> > +	{ "SBGGR10", MEDIA_BUS_FMT_SBGGR10_1X10, true },
> > +	{ "SGBRG10", MEDIA_BUS_FMT_SGBRG10_1X10, true },
> > +	{ "SGRBG10", MEDIA_BUS_FMT_SGRBG10_1X10, true },
> > +	{ "SRGGB10", MEDIA_BUS_FMT_SRGGB10_1X10, true },
> > +	{ "SBGGR10_DPCM8", MEDIA_BUS_FMT_SBGGR10_DPCM8_1X8, true },
> > +	{ "SGBRG10_DPCM8", MEDIA_BUS_FMT_SGBRG10_DPCM8_1X8, true },
> > +	{ "SGRBG10_DPCM8", MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8, true },
> > +	{ "SRGGB10_DPCM8", MEDIA_BUS_FMT_SRGGB10_DPCM8_1X8, true },
> > +	{ "SBGGR12", MEDIA_BUS_FMT_SBGGR12_1X12, true },
> > +	{ "SGBRG12", MEDIA_BUS_FMT_SGBRG12_1X12, true },
> > +	{ "SGRBG12", MEDIA_BUS_FMT_SGRBG12_1X12, true },
> > +	{ "SRGGB12", MEDIA_BUS_FMT_SRGGB12_1X12, true },
> > +	{ "AYUV32", MEDIA_BUS_FMT_AYUV8_1X32, true },
> > +	{ "RBG24", MEDIA_BUS_FMT_RBG888_1X24, true },
> > +	{ "RGB32", MEDIA_BUS_FMT_RGB888_1X32_PADHI, true },
> > +	{ "ARGB32", MEDIA_BUS_FMT_ARGB8888_1X32, true },
> > +};
> > +
> > +static const enum v4l2_mbus_pixelcode mbus_codes[] = {
> > +#include "media-bus-format-codes.h"
> > +	0 /* guardian */
> >  };
> > 
> >  const char *v4l2_subdev_pixelcode_to_string(enum v4l2_mbus_pixelcode code)
> > @@ -821,3 +827,8 @@ enum v4l2_field v4l2_subdev_string_to_field(const char
> > *string,
> > 
> >  	return fields[i].field;
> >  }
> > +
> > +const enum v4l2_mbus_pixelcode *v4l2_subdev_pixelcode_list(void)
> > +{
> > +	return mbus_codes;
> > +}
> > diff --git a/utils/media-ctl/v4l2subdev.h b/utils/media-ctl/v4l2subdev.h
> > index 104e420..33327d6 100644
> > --- a/utils/media-ctl/v4l2subdev.h
> > +++ b/utils/media-ctl/v4l2subdev.h
> > @@ -279,4 +279,14 @@ const char *v4l2_subdev_field_to_string(enum v4l2_field
> > field); enum v4l2_field v4l2_subdev_string_to_field(const char *string,
> >  					    unsigned int length);
> > 
> > +/**
> > + * @brief Enumerate library supported media bus pixel codes.
> > + *
> > + * Obtain pixel codes supported by libv4l2subdev. The list is zero
> > + * terminated.
> > + *
> > + * @return media bus pixelcode on success, -1 on failure.
> > + */
> > +const enum v4l2_mbus_pixelcode *v4l2_subdev_pixelcode_list(void);
> > +
> 
> Would it make sense to also return the array length ? Patch 4/4 doesn't use 
> it, but other callers could.

I'm not sure if there would be use for that, but I can add it.

> 
> I'm also wondering whether it wouldn't make sense to expose the mbus_formats 
> array instead, to avoid the call to v4l2_subdev_pixelcode_to_string() in patch 
> 4/4.
> 
> Do you think this should be a public or private API ?

I think it's relevant for the test program. Supposing that the test program
is intended to be also used as an example, it'd be odd the test program
required the use of private APIs.

-- 
Sakari Ailus
e-mail: sakari.ailus@iki.fi	XMPP: sailus@retiisi.org.uk

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 4/4] media-ctl: List supported media bus formats
  2016-02-15 14:44   ` Laurent Pinchart
@ 2016-02-15 15:32     ` Sakari Ailus
  0 siblings, 0 replies; 11+ messages in thread
From: Sakari Ailus @ 2016-02-15 15:32 UTC (permalink / raw)
  To: Laurent Pinchart; +Cc: Sakari Ailus, linux-media, hverkuil

On Mon, Feb 15, 2016 at 04:44:35PM +0200, Laurent Pinchart wrote:
> Hi Sakari,
> 
> Thank you for the patch.
> 
> On Monday 25 January 2016 14:39:45 Sakari Ailus wrote:
> > Add a new topic option for -h to allow listing supported media bus codes
> > in conversion functions. This is useful in figuring out which media bus
> > codes are actually supported by the library. The numeric values of the
> > codes are listed as well.
> > 
> > Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> > ---
> >  utils/media-ctl/options.c | 42 ++++++++++++++++++++++++++++++++++++++----
> >  1 file changed, 38 insertions(+), 4 deletions(-)
> > 
> > diff --git a/utils/media-ctl/options.c b/utils/media-ctl/options.c
> > index 0afc9c2..c67052d 100644
> > --- a/utils/media-ctl/options.c
> > +++ b/utils/media-ctl/options.c
> > @@ -22,7 +22,9 @@
> >  #include <getopt.h>
> >  #include <stdio.h>
> >  #include <stdlib.h>
> > +#include <string.h>
> >  #include <unistd.h>
> > +#include <v4l2subdev.h>
> > 
> >  #include <linux/videodev2.h>
> > 
> > @@ -45,7 +47,8 @@ static void usage(const char *argv0)
> >  	printf("-V, --set-v4l2 v4l2	Comma-separated list of formats to setup\n");
> >  	printf("    --get-v4l2 pad	Print the active format on a given pad\n");
> >  	printf("    --set-dv pad	Configure DV timings on a given pad\n");
> > -	printf("-h, --help		Show verbose help and exit\n");
> > +	printf("-h, --help[=topic]	Show verbose help and exit\n");
> > +	printf("			topics:	mbus-fmt: List supported media bus pixel 
> codes\n");
> >  	printf("-i, --interactive	Modify links interactively\n");
> >  	printf("-l, --links links	Comma-separated list of link descriptors to
> > setup\n"); printf("-p, --print-topology	Print the device topology\n");
> > @@ -100,7 +103,7 @@ static struct option opts[] = {
> >  	{"get-format", 1, 0, OPT_GET_FORMAT},
> >  	{"get-v4l2", 1, 0, OPT_GET_FORMAT},
> >  	{"set-dv", 1, 0, OPT_SET_DV},
> > -	{"help", 0, 0, 'h'},
> > +	{"help", 2, 0, 'h'},
> >  	{"interactive", 0, 0, 'i'},
> >  	{"links", 1, 0, 'l'},
> >  	{"print-dot", 0, 0, OPT_PRINT_DOT},
> > @@ -110,6 +113,27 @@ static struct option opts[] = {
> >  	{ },
> >  };
> > 
> > +void list_mbus_formats(void)
> > +{
> > +	unsigned int i;
> > +
> > +	printf("Supported media bus pixel codes\n");
> > +
> > +	for (i = 0; ; i++) {
> > +		unsigned int code = v4l2_subdev_pixelcode_list()[i];
> 
> How about calling the function outside of the loop ?

The function only returns an existing array. I could change it, but please
give a reason why. :-)

-- 
Sakari Ailus
e-mail: sakari.ailus@iki.fi	XMPP: sailus@retiisi.org.uk

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2016-02-15 15:32 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-25 12:39 [PATCH v3 0/4] List supported formats in libv4l2subdev Sakari Ailus
2016-01-25 12:39 ` [PATCH v3 1/4] v4l: libv4lsubdev: Make mbus_formats array const Sakari Ailus
2016-01-25 20:17   ` Laurent Pinchart
2016-01-25 12:39 ` [PATCH v3 2/4] libv4l2subdev: Use generated format definitions in libv4l2subdev Sakari Ailus
2016-02-15 14:39   ` Laurent Pinchart
2016-01-25 12:39 ` [PATCH v3 3/4] libv4l2subdev: Add a function to list library supported pixel codes Sakari Ailus
2016-02-15 14:43   ` Laurent Pinchart
2016-02-15 15:31     ` Sakari Ailus
2016-01-25 12:39 ` [PATCH v3 4/4] media-ctl: List supported media bus formats Sakari Ailus
2016-02-15 14:44   ` Laurent Pinchart
2016-02-15 15:32     ` Sakari Ailus

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).