@@ -366,18 +366,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[] = {
@@ -51,7 +51,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);
@@ -615,8 +615,12 @@ void print_video_formats(cv4l_fd &fd, __u32 type)
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));
}
@@ -634,8 +638,12 @@ void print_video_formats_ext(cv4l_fd &fd, __u32 type)
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;
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> --- utils/common/v4l2-info.cpp | 28 +++++++++++++++++++--------- utils/common/v4l2-info.h | 2 +- utils/v4l2-ctl/v4l2-ctl.cpp | 16 ++++++++++++---- 3 files changed, 32 insertions(+), 14 deletions(-)