Metadata output support for v4l2-ctl
cover Metadata output support for v4l2-ctl
Hi folks,
This set adds metadata output buffer type support for v4l2-ctl. There are a few more things done by the set, too:
- fixed static build instructions,
- fixed --all argument handling for metadata capture formats and
- include changes to videodev2.h brought by kernel patch I recently sent ("v4l: uAPI: V4L2_BUF_TYPE_META_OUTPUT is an output buffer type").
Sakari Ailus (4):
Update static build instructions
Sync the latest headers
v4l2-ctl: Print metadata capture formats on --all
v4l2-ctl: Add support for META_OUTPUT buffer type
INSTALL | 8 +-- include/linux/videodev2.h | 3 +- utils/v4l2-ctl/Makefile.am | 3 +- utils/v4l2-ctl/v4l2-ctl-common.cpp | 3 +- utils/v4l2-ctl/v4l2-ctl-meta-out.cpp | 106 +++++++++++++++++++++++++++++++++++ utils/v4l2-ctl/v4l2-ctl-meta.cpp | 19 ++++--- utils/v4l2-ctl/v4l2-ctl.cpp | 17 ++++++ utils/v4l2-ctl/v4l2-ctl.h | 13 +++++ 8 files changed, 156 insertions(+), 16 deletions(-) create mode 100644 utils/v4l2-ctl/v4l2-ctl-meta-out.cpp
Signature · 1 line
2.11.0
PATCH 1/4 Update static build instructions
It appears that the required libraries may depend on whether linking is done statically or dynamically. The pkg-config thus needs to know. Update the instructions accordingly.
--- INSTALL | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
INSTALL +3 -5
@@ -62,12 +62,10 @@ using an option for disabling shared libraries: $ LDFLAGS="--static -static" ./configure --disable-shared Note that this requires static variants of all the libraries needed for -linking which may not be available in all systems. +linking which may not be available in all systems. Then run the configure +script as follows: -In order to build binaries that are not dependent on libraries contained -in v4l-utils, simply use the --disable-shared option: - - $ ./configure --disable-shared + $ PKG_CONFIG="pkg-config --static" ./configure --disable-shared Android Cross Compiling and Installing: ----------------
Signature · 1 line
2.11.0
PATCH 2/4 Sync the latest headers
In reply to Sakari AilusJust import changes brought by patch "v4l: uAPI: V4L2_BUF_TYPE_META_OUTPUT is an output buffer type". This is needed by further metadata output patches.
--- include/linux/videodev2.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
include/linux/videodev2.h +2 -1
@@ -159,7 +159,8 @@ enum v4l2_buf_type { || (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY \ || (type) == V4L2_BUF_TYPE_VBI_OUTPUT \ || (type) == V4L2_BUF_TYPE_SLICED_VBI_OUTPUT \ - || (type) == V4L2_BUF_TYPE_SDR_OUTPUT) + || (type) == V4L2_BUF_TYPE_SDR_OUTPUT \ + || (type) == V4L2_BUF_TYPE_META_OUTPUT) enum v4l2_tuner_type { V4L2_TUNER_RADIO = 1,
Signature · 1 line
2.11.0
PATCH 3/4 v4l2-ctl: Print metadata capture formats on --all
In reply to Sakari AilusPrinting metadata formats was supported separately with --list-formats-meta but no meta formats were printed with --all option. Fix this.
--- utils/v4l2-ctl/v4l2-ctl.cpp | 1 + 1 file changed, 1 insertion(+)
utils/v4l2-ctl/v4l2-ctl.cpp +1 -0
@@ -1246,6 +1246,7 @@ int main(int argc, char **argv) options[OptGetSlicedVbiOutFormat] = 1; options[OptGetSdrFormat] = 1; options[OptGetSdrOutFormat] = 1; + options[OptGetMetaFormat] = 1; options[OptGetFBuf] = 1; options[OptGetCropCap] = 1; options[OptGetOutputCropCap] = 1;
Signature · 1 line
2.11.0
PATCH 4/4 v4l2-ctl: Add support for META_OUTPUT buffer type
In reply to Sakari AilusAdd support for META_OUTPUT buffer type to v4l2-ctl.
--- utils/v4l2-ctl/Makefile.am | 3 +- utils/v4l2-ctl/v4l2-ctl-common.cpp | 3 +- utils/v4l2-ctl/v4l2-ctl-meta-out.cpp | 106 +++++++++++++++++++++++++++++++++++ utils/v4l2-ctl/v4l2-ctl-meta.cpp | 19 ++++--- utils/v4l2-ctl/v4l2-ctl.cpp | 16 ++++++ utils/v4l2-ctl/v4l2-ctl.h | 13 +++++ 6 files changed, 150 insertions(+), 10 deletions(-) create mode 100644 utils/v4l2-ctl/v4l2-ctl-meta-out.cpp
utils/v4l2-ctl/Makefile.am +2 -1
@@ -7,7 +7,8 @@ v4l2_ctl_SOURCES = v4l2-ctl.cpp v4l2-ctl.h v4l2-ctl-common.cpp v4l2-ctl-tuner.cp v4l2-ctl-overlay.cpp v4l2-ctl-vbi.cpp v4l2-ctl-selection.cpp v4l2-ctl-misc.cpp \ v4l2-ctl-streaming.cpp v4l2-ctl-sdr.cpp v4l2-ctl-edid.cpp v4l2-ctl-modes.cpp \ v4l2-ctl-subdev.cpp v4l2-tpg-colors.c v4l2-tpg-core.c v4l-stream.c v4l2-ctl-meta.cpp \ - media-info.cpp v4l2-info.cpp codec-fwht.c codec-v4l2-fwht.c + v4l2-ctl-meta-out.cpp media-info.cpp v4l2-info.cpp codec-fwht.c \ + codec-v4l2-fwht.c v4l2_ctl_CPPFLAGS = -I$(top_srcdir)/utils/common media-bus-format-names.h: ../../include/linux/media-bus-format.h
utils/v4l2-ctl/v4l2-ctl-common.cpp +2 -1
@@ -70,7 +70,8 @@ void common_usage(void) " -h, --help display this help message\n" " --help-all all options\n" " --help-io input/output options\n" - " --help-meta metadata format options\n" + " --help-meta metadata capture format options\n" + " --help-meta-out metadata output format options\n" " --help-misc miscellaneous options\n" " --help-overlay overlay format options\n" " --help-sdr SDR format options\n"
utils/v4l2-ctl/v4l2-ctl-meta-out.cpp new file +106 -0
106 lines not on this page · raw message
utils/v4l2-ctl/v4l2-ctl-meta.cpp +11 -8
@@ -20,13 +20,13 @@ static struct v4l2_format vfmt; /* set_format/get_format */ void meta_usage(void) { - printf("\nMetadata Formats options:\n" - " --list-formats-meta display supported metadata formats [VIDIOC_ENUM_FMT]\n" - " --get-fmt-meta query the metadata format [VIDIOC_G_FMT]\n" - " --set-fmt-meta <f> set the metadata format [VIDIOC_S_FMT]\n" + printf("\nMetadata Capture Formats options:\n" + " --list-formats-meta display supported metadata capture formats [VIDIOC_ENUM_FMT]\n" + " --get-fmt-meta query the metadata capture format [VIDIOC_G_FMT]\n" + " --set-fmt-meta <f> set the metadata capture format [VIDIOC_S_FMT]\n" " parameter is either the format index as reported by\n" " --list-formats-meta, or the fourcc value as a string\n" - " --try-fmt-meta <f> try the metadata format [VIDIOC_TRY_FMT]\n" + " --try-fmt-meta <f> try the metadata capture format [VIDIOC_TRY_FMT]\n" " parameter is either the format index as reported by\n" " --list-formats-meta, or the fourcc value as a string\n" );
@@ -56,7 +56,8 @@ void meta_set(cv4l_fd &_fd) int ret; if ((options[OptSetMetaFormat] || options[OptTryMetaFormat]) && - v4l_type_is_meta(_fd.g_type())) { + v4l_type_is_meta(_fd.g_type()) && + v4l_type_is_capture(_fd.g_type())) { struct v4l2_format in_vfmt; in_vfmt.type = _fd.g_type();
@@ -85,7 +86,8 @@ void meta_set(cv4l_fd &_fd) void meta_get(cv4l_fd &fd) { - if (options[OptGetMetaFormat] && v4l_type_is_meta(fd.g_type())) { + if (options[OptGetMetaFormat] && v4l_type_is_meta(fd.g_type()) && + v4l_type_is_capture(fd.g_type())) { vfmt.type = fd.g_type(); if (doioctl(fd.g_fd(), VIDIOC_G_FMT, &vfmt) == 0) printfmt(fd.g_fd(), vfmt);
@@ -94,7 +96,8 @@ void meta_get(cv4l_fd &fd) void meta_list(cv4l_fd &fd) { - if (options[OptListMetaFormats] && v4l_type_is_meta(fd.g_type())) { + if (options[OptListMetaFormats] && v4l_type_is_meta(fd.g_type()) && + v4l_type_is_capture(fd.g_type())) { printf("ioctl: VIDIOC_ENUM_FMT\n"); print_video_formats(fd, fd.g_type()); }
utils/v4l2-ctl/v4l2-ctl.cpp +16 -0
@@ -88,6 +88,7 @@ static struct option long_options[] = { {"help-vbi", no_argument, 0, OptHelpVbi}, {"help-sdr", no_argument, 0, OptHelpSdr}, {"help-meta", no_argument, 0, OptHelpMeta}, + {"help-meta-out", no_argument, 0, OptHelpMetaOut}, {"help-subdev", no_argument, 0, OptHelpSubDev}, {"help-selection", no_argument, 0, OptHelpSelection}, {"help-misc", no_argument, 0, OptHelpMisc},
@@ -122,6 +123,7 @@ static struct option long_options[] = { {"list-formats-out", no_argument, 0, OptListOutFormats}, {"list-formats-out-ext", no_argument, 0, OptListOutFormatsExt}, {"list-formats-meta", no_argument, 0, OptListMetaFormats}, + {"list-formats-meta-out", no_argument, 0, OptListMetaOutFormats}, {"list-subdev-mbus-codes", optional_argument, 0, OptListSubDevMBusCodes}, {"list-subdev-framesizes", required_argument, 0, OptListSubDevFrameSizes}, {"list-subdev-frameintervals", required_argument, 0, OptListSubDevFrameIntervals},
@@ -174,6 +176,9 @@ static struct option long_options[] = { {"get-fmt-meta", no_argument, 0, OptGetMetaFormat}, {"set-fmt-meta", required_argument, 0, OptSetMetaFormat}, {"try-fmt-meta", required_argument, 0, OptTryMetaFormat}, + {"get-fmt-meta-out", no_argument, 0, OptGetMetaOutFormat}, + {"set-fmt-meta-out", required_argument, 0, OptSetMetaOutFormat}, + {"try-fmt-meta-out", required_argument, 0, OptTryMetaOutFormat}, {"get-subdev-fmt", optional_argument, 0, OptGetSubDevFormat}, {"set-subdev-fmt", required_argument, 0, OptSetSubDevFormat}, {"try-subdev-fmt", required_argument, 0, OptTrySubDevFormat},
@@ -238,6 +243,7 @@ static struct option long_options[] = { {"list-buffers-sdr", no_argument, 0, OptListBuffersSdr}, {"list-buffers-sdr-out", no_argument, 0, OptListBuffersSdrOut}, {"list-buffers-meta", no_argument, 0, OptListBuffersMeta}, + {"list-buffers-meta-out", no_argument, 0, OptListBuffersMetaOut}, {"stream-count", required_argument, 0, OptStreamCount}, {"stream-skip", required_argument, 0, OptStreamSkip}, {"stream-loop", no_argument, 0, OptStreamLoop},
@@ -290,6 +296,7 @@ static void usage_all(void) vbi_usage(); sdr_usage(); meta_usage(); + meta_out_usage(); selection_usage(); misc_usage(); streaming_usage();
@@ -507,6 +514,7 @@ void printfmt(int fd, const struct v4l2_format &vfmt) printf("\tBuffer Size : %u\n", vfmt.fmt.sdr.buffersize); break; case V4L2_BUF_TYPE_META_CAPTURE: + case V4L2_BUF_TYPE_META_OUTPUT: printf("\tSample Format : '%s'%s\n", fcc2s(vfmt.fmt.meta.dataformat).c_str(), printfmtname(fd, vfmt.type, vfmt.fmt.meta.dataformat).c_str()); printf("\tBuffer Size : %u\n", vfmt.fmt.meta.buffersize);
@@ -1039,6 +1047,9 @@ int main(int argc, char **argv) case OptHelpMeta: meta_usage(); return 0; + case OptHelpMetaOut: + meta_out_usage(); + return 0; case OptHelpSubDev: subdev_usage(); return 0;
@@ -1109,6 +1120,7 @@ int main(int argc, char **argv) vbi_cmd(ch, optarg); sdr_cmd(ch, optarg); meta_cmd(ch, optarg); + meta_out_cmd(ch, optarg); subdev_cmd(ch, optarg); selection_cmd(ch, optarg); misc_cmd(ch, optarg);
@@ -1247,6 +1259,7 @@ int main(int argc, char **argv) options[OptGetSdrFormat] = 1; options[OptGetSdrOutFormat] = 1; options[OptGetMetaFormat] = 1; + options[OptGetMetaOutFormat] = 1; options[OptGetFBuf] = 1; options[OptGetCropCap] = 1; options[OptGetOutputCropCap] = 1;
@@ -1282,6 +1295,7 @@ int main(int argc, char **argv) vbi_set(c_fd); sdr_set(c_fd); meta_set(c_fd); + meta_out_set(c_fd); subdev_set(c_fd); selection_set(c_fd); misc_set(c_fd);
@@ -1299,6 +1313,7 @@ int main(int argc, char **argv) vbi_get(c_fd); sdr_get(c_fd); meta_get(c_fd); + meta_out_get(c_fd); subdev_get(c_fd); selection_get(c_fd); misc_get(c_fd);
@@ -1315,6 +1330,7 @@ int main(int argc, char **argv) vbi_list(c_fd); sdr_list(c_fd); meta_list(c_fd); + meta_out_list(c_fd); subdev_list(c_fd); streaming_list(c_fd, c_out_fd);
utils/v4l2-ctl/v4l2-ctl.h +13 -0
@@ -89,6 +89,7 @@ enum Option { OptGetSdrFormat, OptGetSdrOutFormat, OptGetMetaFormat, + OptGetMetaOutFormat, OptGetSubDevFormat, OptSetSlicedVbiOutFormat, OptSetOverlayFormat,
@@ -97,6 +98,7 @@ enum Option { OptSetSdrFormat, OptSetSdrOutFormat, OptSetMetaFormat, + OptSetMetaOutFormat, OptSetSubDevFormat, OptTryVideoOutFormat, OptTrySlicedVbiOutFormat,
@@ -108,6 +110,7 @@ enum Option { OptTrySdrFormat, OptTrySdrOutFormat, OptTryMetaFormat, + OptTryMetaOutFormat, OptTrySubDevFormat, OptAll, OptListStandards,
@@ -122,6 +125,7 @@ enum Option { OptListOutFormats, OptListOutFormatsExt, OptListMetaFormats, + OptListMetaOutFormats, OptListSubDevMBusCodes, OptListSubDevFrameSizes, OptListSubDevFrameIntervals,
@@ -205,6 +209,7 @@ enum Option { OptListBuffersSdr, OptListBuffersSdrOut, OptListBuffersMeta, + OptListBuffersMetaOut, OptStreamCount, OptStreamSkip, OptStreamLoop,
@@ -249,6 +254,7 @@ enum Option { OptHelpVbi, OptHelpSdr, OptHelpMeta, + OptHelpMetaOut, OptHelpSubDev, OptHelpSelection, OptHelpMisc,
@@ -386,6 +392,13 @@ void meta_set(cv4l_fd &fd); void meta_get(cv4l_fd &fd); void meta_list(cv4l_fd &fd); +// v4l2-ctl-meta-out.cpp +void meta_out_usage (void ); +void meta_out_cmd (int ch,char *optarg); +void meta_out_set(cv4l_fd &fd); +void meta_out_get(cv4l_fd &fd); +void meta_out_list(cv4l_fd &fd); +// v4l2-ctl-subdev.cpp void subdev_usage (void );void subdev_cmd (int ch,char *optarg);
Signature · 1 line
2.11.0
Re: [v4l-utils PATCH 4/4] v4l2-ctl: Add support for META_OUTPUT buffer type
Hi Sakari,
Can you check if this patch is needed at all? The latest v4l2-ctl should work for both meta capture and output, i.e. all meta options (v4l2-ctl --help-meta) just look up the buffer type of the video device and use that to list/set/get/try the formats.
Regards,
Hans
Quoted 377 lines · Sakari Ailus
Add support for
META_OUTPUTbuffer type to v4l2-ctl.Signed-off-by Sakari Ailus <[email protected]>--- utils/v4l2-ctl/Makefile.am | 3 +- utils/v4l2-ctl/v4l2-ctl-common.cpp | 3 +- utils/v4l2-ctl/v4l2-ctl-meta-out.cpp | 106 +++++++++++++++++++++++++++++++++++ utils/v4l2-ctl/v4l2-ctl-meta.cpp | 19 ++++--- utils/v4l2-ctl/v4l2-ctl.cpp | 16 ++++++ utils/v4l2-ctl/v4l2-ctl.h | 13 +++++ 6 files changed, 150 insertions(+), 10 deletions(-) create mode 100644 utils/v4l2-ctl/v4l2-ctl-meta-out.cpputils/v4l2-ctl/Makefile.am +2
-1@@ -7,7 +7,8 @@ v4l2_ctl_SOURCES = v4l2-ctl.cpp v4l2-ctl.h v4l2-ctl-common.cpp v4l2-ctl-tuner.cp v4l2-ctl-overlay.cpp v4l2-ctl-vbi.cpp v4l2-ctl-selection.cpp v4l2-ctl-misc.cpp \ v4l2-ctl-streaming.cpp v4l2-ctl-sdr.cpp v4l2-ctl-edid.cpp v4l2-ctl-modes.cpp \ v4l2-ctl-subdev.cpp v4l2-tpg-colors.c v4l2-tpg-core.c v4l-stream.c v4l2-ctl-meta.cpp \ - media-info.cpp v4l2-info.cpp codec-fwht.c codec-v4l2-fwht.c + v4l2-ctl-meta-out.cpp media-info.cpp v4l2-info.cpp codec-fwht.c \ + codec-v4l2-fwht.c v4l2_ctl_CPPFLAGS = -I$(top_srcdir)/utils/common media-bus-format-names.h: ../../include/linux/media-bus-format.hutils/v4l2-ctl/v4l2-ctl-common.cpp +2
-1@@ -70,7 +70,8 @@ void common_usage(void) " -h, --help display this help message\n" " --help-all all options\n" " --help-io input/output options\n" - " --help-meta metadata format options\n" + " --help-meta metadata capture format options\n" + " --help-meta-out metadata output format options\n" " --help-misc miscellaneous options\n" " --help-overlay overlay format options\n" " --help-sdr SDR format options\n"utils/v4l2-ctl/v4l2-ctl-meta-out.cpp new file +106
-0@@ -0,0 +1,106 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include <unistd.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <inttypes.h> +#include <getopt.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <ctype.h> +#include <errno.h> +#include <sys/ioctl.h> +#include <sys/time.h> +#include <dirent.h> +#include <math.h> + +#include "v4l2-ctl.h" + +static struct v4l2_format vfmt; /* set_format/get_format */ + +void meta_out_usage(void) +{ + printf("\nMetadata Output Formats options:\n" + " --list-formats-meta-out display supported metadata output formats [VIDIOC_ENUM_FMT]\n" + " --get-fmt-meta-out query the metadata output format [VIDIOC_G_FMT]\n" + " --set-fmt-meta-out <f> set the metadata output format [VIDIOC_S_FMT]\n" + " parameter is either the format index as reported by\n" + " --list-formats-meta-out, or the fourcc value as a string\n" + " --try-fmt-meta-out <f> try the metadata output format [VIDIOC_TRY_FMT]\n" + " parameter is either the format index as reported by\n" + " --list-formats-meta-out, or the fourcc value as a string\n" + ); +} + +void meta_out_cmd(int ch, char *optarg) +{ + switch (ch) { + case OptSetMetaOutFormat: + case OptTryMetaOutFormat: + if (strlen(optarg) == 0) { + meta_out_usage(); + exit(1); + } else if (strlen(optarg) == 4) { + vfmt.fmt.meta.dataformat = v4l2_fourcc(optarg[0], + optarg[1], optarg[2], optarg[3]); + } else { + vfmt.fmt.meta.dataformat = strtol(optarg, 0L, 0); + } + break; + } +} + +void meta_out_set(cv4l_fd &_fd) +{ + int fd = _fd.g_fd(); + int ret; + + if ((options[OptSetMetaOutFormat] || options[OptTryMetaOutFormat]) && + v4l_type_is_meta(_fd.g_type()) && + v4l_type_is_output(_fd.g_type())) { + struct v4l2_format in_vfmt; + + in_vfmt.type = _fd.g_type(); + in_vfmt.fmt.meta.dataformat = vfmt.fmt.meta.dataformat; + + if (in_vfmt.fmt.meta.dataformat < 256) { + struct v4l2_fmtdesc fmt; + + fmt.index = in_vfmt.fmt.meta.dataformat; + fmt.type = in_vfmt.type; + + if (doioctl(fd, VIDIOC_ENUM_FMT, &fmt)) + fmt.pixelformat = 0; + + in_vfmt.fmt.meta.dataformat = fmt.pixelformat; + } + + if (options[OptSetMetaFormat]) + ret = doioctl(fd, VIDIOC_S_FMT, &in_vfmt); + else + ret = doioctl(fd, VIDIOC_TRY_FMT, &in_vfmt); + if (ret == 0 && (verbose || options[OptTryMetaFormat])) + printfmt(fd, in_vfmt); + } +} + +void meta_out_get(cv4l_fd &fd) +{ + if (options[OptGetMetaOutFormat] && v4l_type_is_meta(fd.g_type()) && + v4l_type_is_output(fd.g_type())) { + vfmt.type = fd.g_type(); + if (doioctl(fd.g_fd(), VIDIOC_G_FMT, &vfmt) == 0) + printfmt(fd.g_fd(), vfmt); + } +} + +void meta_out_list(cv4l_fd &fd) +{ + if (options[OptListMetaOutFormats] && v4l_type_is_meta(fd.g_type()) && + v4l_type_is_output(fd.g_type())) { + printf("ioctl: VIDIOC_ENUM_FMT\n"); + print_video_formats(fd, fd.g_type()); + } +}utils/v4l2-ctl/v4l2-ctl-meta.cpp +11
-8@@ -20,13 +20,13 @@ static struct v4l2_format vfmt; /* set_format/get_format */ void meta_usage(void) { - printf("\nMetadata Formats options:\n" - " --list-formats-meta display supported metadata formats [VIDIOC_ENUM_FMT]\n" - " --get-fmt-meta query the metadata format [VIDIOC_G_FMT]\n" - " --set-fmt-meta <f> set the metadata format [VIDIOC_S_FMT]\n" + printf("\nMetadata Capture Formats options:\n" + " --list-formats-meta display supported metadata capture formats [VIDIOC_ENUM_FMT]\n" + " --get-fmt-meta query the metadata capture format [VIDIOC_G_FMT]\n" + " --set-fmt-meta <f> set the metadata capture format [VIDIOC_S_FMT]\n" " parameter is either the format index as reported by\n" " --list-formats-meta, or the fourcc value as a string\n" - " --try-fmt-meta <f> try the metadata format [VIDIOC_TRY_FMT]\n" + " --try-fmt-meta <f> try the metadata capture format [VIDIOC_TRY_FMT]\n" " parameter is either the format index as reported by\n" " --list-formats-meta, or the fourcc value as a string\n" );@@ -56,7 +56,8 @@ void meta_set(cv4l_fd &_fd) int ret; if ((options[OptSetMetaFormat] || options[OptTryMetaFormat]) && - v4l_type_is_meta(_fd.g_type())) { + v4l_type_is_meta(_fd.g_type()) && + v4l_type_is_capture(_fd.g_type())) { struct v4l2_format in_vfmt; in_vfmt.type = _fd.g_type();@@ -85,7 +86,8 @@ void meta_set(cv4l_fd &_fd) void meta_get(cv4l_fd &fd) { - if (options[OptGetMetaFormat] && v4l_type_is_meta(fd.g_type())) { + if (options[OptGetMetaFormat] && v4l_type_is_meta(fd.g_type()) && + v4l_type_is_capture(fd.g_type())) { vfmt.type = fd.g_type(); if (doioctl(fd.g_fd(), VIDIOC_G_FMT, &vfmt) == 0) printfmt(fd.g_fd(), vfmt);@@ -94,7 +96,8 @@ void meta_get(cv4l_fd &fd) void meta_list(cv4l_fd &fd) { - if (options[OptListMetaFormats] && v4l_type_is_meta(fd.g_type())) { + if (options[OptListMetaFormats] && v4l_type_is_meta(fd.g_type()) && + v4l_type_is_capture(fd.g_type())) { printf("ioctl: VIDIOC_ENUM_FMT\n"); print_video_formats(fd, fd.g_type()); }utils/v4l2-ctl/v4l2-ctl.cpp +16
-0@@ -88,6 +88,7 @@ static struct option long_options[] = { {"help-vbi", no_argument, 0, OptHelpVbi}, {"help-sdr", no_argument, 0, OptHelpSdr}, {"help-meta", no_argument, 0, OptHelpMeta}, + {"help-meta-out", no_argument, 0, OptHelpMetaOut}, {"help-subdev", no_argument, 0, OptHelpSubDev}, {"help-selection", no_argument, 0, OptHelpSelection}, {"help-misc", no_argument, 0, OptHelpMisc},@@ -122,6 +123,7 @@ static struct option long_options[] = { {"list-formats-out", no_argument, 0, OptListOutFormats}, {"list-formats-out-ext", no_argument, 0, OptListOutFormatsExt}, {"list-formats-meta", no_argument, 0, OptListMetaFormats}, + {"list-formats-meta-out", no_argument, 0, OptListMetaOutFormats}, {"list-subdev-mbus-codes", optional_argument, 0, OptListSubDevMBusCodes}, {"list-subdev-framesizes", required_argument, 0, OptListSubDevFrameSizes}, {"list-subdev-frameintervals", required_argument, 0, OptListSubDevFrameIntervals},@@ -174,6 +176,9 @@ static struct option long_options[] = { {"get-fmt-meta", no_argument, 0, OptGetMetaFormat}, {"set-fmt-meta", required_argument, 0, OptSetMetaFormat}, {"try-fmt-meta", required_argument, 0, OptTryMetaFormat}, + {"get-fmt-meta-out", no_argument, 0, OptGetMetaOutFormat}, + {"set-fmt-meta-out", required_argument, 0, OptSetMetaOutFormat}, + {"try-fmt-meta-out", required_argument, 0, OptTryMetaOutFormat}, {"get-subdev-fmt", optional_argument, 0, OptGetSubDevFormat}, {"set-subdev-fmt", required_argument, 0, OptSetSubDevFormat}, {"try-subdev-fmt", required_argument, 0, OptTrySubDevFormat},@@ -238,6 +243,7 @@ static struct option long_options[] = { {"list-buffers-sdr", no_argument, 0, OptListBuffersSdr}, {"list-buffers-sdr-out", no_argument, 0, OptListBuffersSdrOut}, {"list-buffers-meta", no_argument, 0, OptListBuffersMeta}, + {"list-buffers-meta-out", no_argument, 0, OptListBuffersMetaOut}, {"stream-count", required_argument, 0, OptStreamCount}, {"stream-skip", required_argument, 0, OptStreamSkip}, {"stream-loop", no_argument, 0, OptStreamLoop},@@ -290,6 +296,7 @@ static void usage_all(void) vbi_usage(); sdr_usage(); meta_usage(); + meta_out_usage(); selection_usage(); misc_usage(); streaming_usage();@@ -507,6 +514,7 @@ void printfmt(int fd, const struct v4l2_format &vfmt) printf("\tBuffer Size : %u\n", vfmt.fmt.sdr.buffersize); break; case V4L2_BUF_TYPE_META_CAPTURE: + case V4L2_BUF_TYPE_META_OUTPUT: printf("\tSample Format : '%s'%s\n", fcc2s(vfmt.fmt.meta.dataformat).c_str(), printfmtname(fd, vfmt.type, vfmt.fmt.meta.dataformat).c_str()); printf("\tBuffer Size : %u\n", vfmt.fmt.meta.buffersize);@@ -1039,6 +1047,9 @@ int main(int argc, char **argv) case OptHelpMeta: meta_usage(); return 0; + case OptHelpMetaOut: + meta_out_usage(); + return 0; case OptHelpSubDev: subdev_usage(); return 0;@@ -1109,6 +1120,7 @@ int main(int argc, char **argv) vbi_cmd(ch, optarg); sdr_cmd(ch, optarg); meta_cmd(ch, optarg); + meta_out_cmd(ch, optarg); subdev_cmd(ch, optarg); selection_cmd(ch, optarg); misc_cmd(ch, optarg);@@ -1247,6 +1259,7 @@ int main(int argc, char **argv) options[OptGetSdrFormat] = 1; options[OptGetSdrOutFormat] = 1; options[OptGetMetaFormat] = 1; + options[OptGetMetaOutFormat] = 1; options[OptGetFBuf] = 1; options[OptGetCropCap] = 1; options[OptGetOutputCropCap] = 1;@@ -1282,6 +1295,7 @@ int main(int argc, char **argv) vbi_set(c_fd); sdr_set(c_fd); meta_set(c_fd); + meta_out_set(c_fd); subdev_set(c_fd); selection_set(c_fd); misc_set(c_fd);@@ -1299,6 +1313,7 @@ int main(int argc, char **argv) vbi_get(c_fd); sdr_get(c_fd); meta_get(c_fd); + meta_out_get(c_fd); subdev_get(c_fd); selection_get(c_fd); misc_get(c_fd);@@ -1315,6 +1330,7 @@ int main(int argc, char **argv) vbi_list(c_fd); sdr_list(c_fd); meta_list(c_fd); + meta_out_list(c_fd); subdev_list(c_fd); streaming_list(c_fd, c_out_fd);utils/v4l2-ctl/v4l2-ctl.h +13
-0@@ -89,6 +89,7 @@ enum Option { OptGetSdrFormat, OptGetSdrOutFormat, OptGetMetaFormat, + OptGetMetaOutFormat, OptGetSubDevFormat, OptSetSlicedVbiOutFormat, OptSetOverlayFormat,@@ -97,6 +98,7 @@ enum Option { OptSetSdrFormat, OptSetSdrOutFormat, OptSetMetaFormat, + OptSetMetaOutFormat, OptSetSubDevFormat, OptTryVideoOutFormat, OptTrySlicedVbiOutFormat,@@ -108,6 +110,7 @@ enum Option { OptTrySdrFormat, OptTrySdrOutFormat, OptTryMetaFormat, + OptTryMetaOutFormat, OptTrySubDevFormat, OptAll, OptListStandards,@@ -122,6 +125,7 @@ enum Option { OptListOutFormats, OptListOutFormatsExt, OptListMetaFormats, + OptListMetaOutFormats, OptListSubDevMBusCodes, OptListSubDevFrameSizes, OptListSubDevFrameIntervals,@@ -205,6 +209,7 @@ enum Option { OptListBuffersSdr, OptListBuffersSdrOut, OptListBuffersMeta, + OptListBuffersMetaOut, OptStreamCount, OptStreamSkip, OptStreamLoop,@@ -249,6 +254,7 @@ enum Option { OptHelpVbi, OptHelpSdr, OptHelpMeta, + OptHelpMetaOut, OptHelpSubDev, OptHelpSelection, OptHelpMisc,@@ -386,6 +392,13 @@ void meta_set(cv4l_fd &fd); void meta_get(cv4l_fd &fd); void meta_list(cv4l_fd &fd); +// v4l2-ctl-meta-out.cpp +void meta_out_usage (void ); +void meta_out_cmd (int ch,char *optarg); +void meta_out_set(cv4l_fd &fd); +void meta_out_get(cv4l_fd &fd); +void meta_out_list(cv4l_fd &fd); +// v4l2-ctl-subdev.cpp void subdev_usage (void );void subdev_cmd (int ch,char *optarg);
Re: [v4l-utils PATCH 4/4] v4l2-ctl: Add support for META_OUTPUT buffer type
Hi Hans,
Quoted 6 lines · Hans Verkuil
Hi Sakari,
Can you check if this patch is needed at all? The latest v4l2-ctl should work for both meta capture and output, i.e. all meta options (v4l2-ctl --help-meta) just look up the buffer type of the video device and use that to list/set/get/try the formats.
That'd be one option. I guess we don't have that elsewhere, do we? In practice it could work, but it'd prevent having the two queue types in the same video node. It seems an improbable combination though.
I'd prefer keeping the options separate to maintain v4l2-ctl's ability to access all aspects of the API, even if unlikely.
But the help option should probably be unified, like it is for SDR.
Signature · 4 lines
Regards, Sakari Ailus [email protected]
Re: [v4l-utils PATCH 4/4] v4l2-ctl: Add support for META_OUTPUT buffer type
Quoted 10 lines · Sakari Ailus
Hi Hans,
Quoted 6 lines · Hans Verkuil
Hi Sakari,
Can you check if this patch is needed at all? The latest v4l2-ctl should work for both meta capture and output, i.e. all meta options (v4l2-ctl --help-meta) just look up the buffer type of the video device and use that to list/set/get/try the formats.
Quoted 6 lines
That'd be one option. I guess we don't have that elsewhere, do we? In practice it could work, but it'd prevent having the two queue types in the same video node. It seems an improbable combination though.
I'd prefer keeping the options separate to maintain v4l2-ctl's ability to access all aspects of the API, even if unlikely.
Well, you can add -out options for consistency, but the code remains the same :-)
Quoted 2 lines
But the help option should probably be unified, like it is for SDR.
Definitely.
Regards,
Hans
Re: [v4l-utils PATCH 4/4] v4l2-ctl: Add support for META_OUTPUT buffer type
Quoted 15 lines · Hans Verkuil
Quoted 14 lines · Sakari Ailus
Hi Hans,
Quoted 6 lines · Hans Verkuil
Hi Sakari,
Can you check if this patch is needed at all? The latest v4l2-ctl should work for both meta capture and output, i.e. all meta options (v4l2-ctl --help-meta) just look up the buffer type of the video device and use that to list/set/get/try the formats.
That'd be one option. I guess we don't have that elsewhere, do we? In practice it could work, but it'd prevent having the two queue types in the same video node. It seems an improbable combination though.
Quoted 5 lines
Quoted 2 lines
I'd prefer keeping the options separate to maintain v4l2-ctl's ability to access all aspects of the API, even if unlikely.
Well, you can add -out options for consistency, but the code remains the same :-)
Not quite: the option still determines which formats are being accessed --- just like for SDR.
Signature · 2 lines
Sakari Ailus [email protected]