* [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
* 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
* [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
* 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
* [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
* 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 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
* [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 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 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).