aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDafna Hirschfeld <dafna.hirschfeld@collabora.com>2020-07-03 20:02:37 +0200
committerHans Verkuil <hverkuil-cisco@xs4all.nl>2020-09-26 12:20:38 +0200
commitdffe31c303450f7ad03f7d208850d3ddd19aec0a (patch)
treeb91e742014cc75303183cd3235ba0b9fc5e3a1fa
parent19be88073c416db5abe6fd0219aca00b596bea2e (diff)
v4l2: common: add the flags V4L2_FMT_FLAG_CSC* to the list that maps flags to str
Replace the array fmtdesc_def with a macro 'FMTDESC_DEF' The macro is used to to create two arrays 'fmtdesc_def_ycbcr', 'fmtdesc_def_hsv' that map the format flags to strings. The function 'fmtdesc2s' is changed to get a parameter 'is_hsv' that decides which array to use. The new CSC flags V4L2_FMT_FLAG_CSC* are added to the arries. Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
-rw-r--r--utils/common/v4l2-info.cpp28
-rw-r--r--utils/common/v4l2-info.h2
-rw-r--r--utils/v4l2-ctl/v4l2-ctl.cpp16
3 files changed, 32 insertions, 14 deletions
diff --git a/utils/common/v4l2-info.cpp b/utils/common/v4l2-info.cpp
index 2903a125..af8151a2 100644
--- a/utils/common/v4l2-info.cpp
+++ b/utils/common/v4l2-info.cpp
@@ -349,18 +349,28 @@ std::string service2s(unsigned service)
return flags2s(service, service_def);
}
-static const flag_def fmtdesc_def[] = {
- { V4L2_FMT_FLAG_COMPRESSED, "compressed" },
- { V4L2_FMT_FLAG_EMULATED, "emulated" },
- { V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM, "continuous-bytestream" },
- { V4L2_FMT_FLAG_DYN_RESOLUTION, "dyn-resolution" },
- { V4L2_FMT_FLAG_ENC_CAP_FRAME_INTERVAL, "enc-cap-frame-interval" },
- { 0, NULL }
+#define FMTDESC_DEF(enc_type) \
+static const flag_def fmtdesc_ ## enc_type ## _def[] = { \
+ { V4L2_FMT_FLAG_COMPRESSED, "compressed" }, \
+ { V4L2_FMT_FLAG_EMULATED, "emulated" }, \
+ { V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM, "continuous-bytestream" }, \
+ { V4L2_FMT_FLAG_DYN_RESOLUTION, "dyn-resolution" }, \
+ { V4L2_FMT_FLAG_ENC_CAP_FRAME_INTERVAL, "enc-cap-frame-interval" }, \
+ { V4L2_FMT_FLAG_CSC_COLORSPACE, "csc-colorspace" }, \
+ { V4L2_FMT_FLAG_CSC_YCBCR_ENC, "csc-"#enc_type }, \
+ { V4L2_FMT_FLAG_CSC_QUANTIZATION, "csc-quantization" }, \
+ { V4L2_FMT_FLAG_CSC_XFER_FUNC, "csc-xfer-func" }, \
+ { 0, NULL } \
};
-std::string fmtdesc2s(unsigned flags)
+FMTDESC_DEF(ycbcr)
+FMTDESC_DEF(hsv)
+
+std::string fmtdesc2s(unsigned flags, bool is_hsv)
{
- return flags2s(flags, fmtdesc_def);
+ if (is_hsv)
+ return flags2s(flags, fmtdesc_hsv_def);
+ return flags2s(flags, fmtdesc_ycbcr_def);
}
static const flag_def selection_targets_def[] = {
diff --git a/utils/common/v4l2-info.h b/utils/common/v4l2-info.h
index f7e945a4..f2f41f51 100644
--- a/utils/common/v4l2-info.h
+++ b/utils/common/v4l2-info.h
@@ -52,7 +52,7 @@ std::string pixflags2s(unsigned flags);
std::string service2s(unsigned service);
/* Return v4l2_fmtdesc flags description */
-std::string fmtdesc2s(unsigned flags);
+std::string fmtdesc2s(unsigned flags, bool is_hsv);
/* Return selection flags description */
std::string selflags2s(__u32 flags);
diff --git a/utils/v4l2-ctl/v4l2-ctl.cpp b/utils/v4l2-ctl/v4l2-ctl.cpp
index 82d14c3c..3b30bea9 100644
--- a/utils/v4l2-ctl/v4l2-ctl.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl.cpp
@@ -608,8 +608,12 @@ void print_video_formats(cv4l_fd &fd, __u32 type, unsigned int mbus_code)
do {
printf("\t[%d]: '%s' (%s", fmt.index, fcc2s(fmt.pixelformat).c_str(),
fmt.description);
- if (fmt.flags)
- printf(", %s", fmtdesc2s(fmt.flags).c_str());
+ if (fmt.flags) {
+ bool is_hsv = fmt.pixelformat == V4L2_PIX_FMT_HSV24 ||
+ fmt.pixelformat == V4L2_PIX_FMT_HSV32;
+
+ printf(", %s", fmtdesc2s(fmt.flags, is_hsv).c_str());
+ }
printf(")\n");
} while (!fd.enum_fmt(fmt));
}
@@ -630,8 +634,12 @@ void print_video_formats_ext(cv4l_fd &fd, __u32 type, unsigned int mbus_code)
do {
printf("\t[%d]: '%s' (%s", fmt.index, fcc2s(fmt.pixelformat).c_str(),
fmt.description);
- if (fmt.flags)
- printf(", %s", fmtdesc2s(fmt.flags).c_str());
+ if (fmt.flags) {
+ bool is_hsv = fmt.pixelformat == V4L2_PIX_FMT_HSV24 ||
+ fmt.pixelformat == V4L2_PIX_FMT_HSV32;
+
+ printf(", %s", fmtdesc2s(fmt.flags, is_hsv).c_str());
+ }
printf(")\n");
if (fd.enum_framesizes(frmsize, fmt.pixelformat))
continue;

Privacy Policy