diff options
author | Dafna Hirschfeld <dafna.hirschfeld@collabora.com> | 2020-07-03 20:02:37 +0200 |
---|---|---|
committer | Hans Verkuil <hverkuil-cisco@xs4all.nl> | 2020-09-26 12:20:38 +0200 |
commit | dffe31c303450f7ad03f7d208850d3ddd19aec0a (patch) | |
tree | b91e742014cc75303183cd3235ba0b9fc5e3a1fa /utils | |
parent | 19be88073c416db5abe6fd0219aca00b596bea2e (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>
Diffstat (limited to 'utils')
-rw-r--r-- | utils/common/v4l2-info.cpp | 28 | ||||
-rw-r--r-- | utils/common/v4l2-info.h | 2 | ||||
-rw-r--r-- | utils/v4l2-ctl/v4l2-ctl.cpp | 16 |
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; |