From patchwork Mon Mar 9 16:24:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 3067 Return-Path: Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id BEC59628BD for ; Mon, 9 Mar 2020 17:21:28 +0100 (CET) X-Originating-IP: 93.34.114.233 Received: from uno.lan (93-34-114-233.ip49.fastwebnet.it [93.34.114.233]) (Authenticated sender: jacopo@jmondi.org) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 757A86001A for ; Mon, 9 Mar 2020 16:21:28 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Date: Mon, 9 Mar 2020 17:24:05 +0100 Message-Id: <20200309162414.720306-3-jacopo@jmondi.org> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200309162414.720306-1-jacopo@jmondi.org> References: <20200309162414.720306-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 02/11] libcamera: controls: Rename ControlRange to ControlInfo X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Mar 2020 16:21:28 -0000 From: Laurent Pinchart To prepare for storage of additional information in the ControlRange structure, rename it to ControlInfo. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- include/ipa/ipa_controls.h | 2 +- include/libcamera/controls.h | 16 ++++---- src/libcamera/control_serializer.cpp | 33 ++++++++------- src/libcamera/controls.cpp | 40 +++++++++---------- src/libcamera/include/control_serializer.h | 6 +-- src/libcamera/include/v4l2_controls.h | 4 +- src/libcamera/ipa_controls.cpp | 38 +++++++++--------- src/libcamera/pipeline/uvcvideo.cpp | 4 +- src/libcamera/pipeline/vimc.cpp | 4 +- src/libcamera/v4l2_controls.cpp | 30 +++++++------- src/libcamera/v4l2_device.cpp | 2 +- .../{control_range.cpp => control_info.cpp} | 10 ++--- test/controls/meson.build | 2 +- test/serialization/serialization_test.cpp | 4 +- test/v4l2_videodevice/controls.cpp | 6 +-- 15 files changed, 100 insertions(+), 101 deletions(-) rename test/controls/{control_range.cpp => control_info.cpp} (83%) diff --git a/include/ipa/ipa_controls.h b/include/ipa/ipa_controls.h index 37f97d6ad2a4..6d3bf279c22d 100644 --- a/include/ipa/ipa_controls.h +++ b/include/ipa/ipa_controls.h @@ -33,7 +33,7 @@ struct ipa_control_value_entry { uint32_t padding[1]; }; -struct ipa_control_range_entry { +struct ipa_control_info_entry { uint32_t id; uint32_t type; uint32_t offset; diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h index 3d2250f43f3c..9c6cbffb88b5 100644 --- a/include/libcamera/controls.h +++ b/include/libcamera/controls.h @@ -229,12 +229,12 @@ private: Control &operator=(const Control &) = delete; }; -class ControlRange +class ControlInfo { public: - explicit ControlRange(const ControlValue &min = 0, - const ControlValue &max = 0, - const ControlValue &def = 0); + explicit ControlInfo(const ControlValue &min = 0, + const ControlValue &max = 0, + const ControlValue &def = 0); const ControlValue &min() const { return min_; } const ControlValue &max() const { return max_; } @@ -242,12 +242,12 @@ public: std::string toString() const; - bool operator==(const ControlRange &other) const + bool operator==(const ControlInfo &other) const { return min_ == other.min_ && max_ == other.max_; } - bool operator!=(const ControlRange &other) const + bool operator!=(const ControlInfo &other) const { return !(*this == other); } @@ -260,10 +260,10 @@ private: using ControlIdMap = std::unordered_map; -class ControlInfoMap : private std::unordered_map +class ControlInfoMap : private std::unordered_map { public: - using Map = std::unordered_map; + using Map = std::unordered_map; ControlInfoMap() = default; ControlInfoMap(const ControlInfoMap &other) = default; diff --git a/src/libcamera/control_serializer.cpp b/src/libcamera/control_serializer.cpp index dcc63d20c06c..eef875f4d96c 100644 --- a/src/libcamera/control_serializer.cpp +++ b/src/libcamera/control_serializer.cpp @@ -99,9 +99,9 @@ size_t ControlSerializer::binarySize(const ControlValue &value) return value.data().size_bytes(); } -size_t ControlSerializer::binarySize(const ControlRange &range) +size_t ControlSerializer::binarySize(const ControlInfo &info) { - return binarySize(range.min()) + binarySize(range.max()); + return binarySize(info.min()) + binarySize(info.max()); } /** @@ -116,7 +116,7 @@ size_t ControlSerializer::binarySize(const ControlRange &range) size_t ControlSerializer::binarySize(const ControlInfoMap &infoMap) { size_t size = sizeof(struct ipa_controls_header) - + infoMap.size() * sizeof(struct ipa_control_range_entry); + + infoMap.size() * sizeof(struct ipa_control_info_entry); for (const auto &ctrl : infoMap) size += binarySize(ctrl.second); @@ -150,11 +150,10 @@ void ControlSerializer::store(const ControlValue &value, buffer.write(value.data()); } -void ControlSerializer::store(const ControlRange &range, - ByteStreamBuffer &buffer) +void ControlSerializer::store(const ControlInfo &info, ByteStreamBuffer &buffer) { - store(range.min(), buffer); - store(range.max(), buffer); + store(info.min(), buffer); + store(info.max(), buffer); } /** @@ -176,7 +175,7 @@ int ControlSerializer::serialize(const ControlInfoMap &infoMap, { /* Compute entries and data required sizes. */ size_t entriesSize = infoMap.size() - * sizeof(struct ipa_control_range_entry); + * sizeof(struct ipa_control_info_entry); size_t valuesSize = 0; for (const auto &ctrl : infoMap) valuesSize += binarySize(ctrl.second); @@ -200,15 +199,15 @@ int ControlSerializer::serialize(const ControlInfoMap &infoMap, for (const auto &ctrl : infoMap) { const ControlId *id = ctrl.first; - const ControlRange &range = ctrl.second; + const ControlInfo &info = ctrl.second; - struct ipa_control_range_entry entry; + struct ipa_control_info_entry entry; entry.id = id->id(); entry.type = id->type(); entry.offset = values.offset(); entries.write(&entry); - store(range, values); + store(info, values); } if (buffer.overflow()) @@ -343,13 +342,13 @@ ControlValue ControlSerializer::loadControlValue(ControlType type, return ControlValue(); } -ControlRange ControlSerializer::loadControlRange(ControlType type, - ByteStreamBuffer &b) +ControlInfo ControlSerializer::loadControlInfo(ControlType type, + ByteStreamBuffer &b) { ControlValue min = loadControlValue(type, b); ControlValue max = loadControlValue(type, b); - return ControlRange(min, max); + return ControlInfo(min, max); } /** @@ -397,7 +396,7 @@ ControlInfoMap ControlSerializer::deserialize(ByteStreamBuffer & ControlInfoMap::Map ctrls; for (unsigned int i = 0; i < hdr->entries; ++i) { - const struct ipa_control_range_entry *entry = + const struct ipa_control_info_entry *entry = entries.read(); if (!entry) { LOG(Serializer, Error) << "Out of data"; @@ -419,9 +418,9 @@ ControlInfoMap ControlSerializer::deserialize(ByteStreamBuffer & return {}; } - /* Create and store the ControlRange. */ + /* Create and store the ControlInfo. */ ctrls.emplace(controlIds_.back().get(), - loadControlRange(type, values)); + loadControlInfo(type, values)); } /* diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp index 833a436c64df..53649fe897db 100644 --- a/src/libcamera/controls.cpp +++ b/src/libcamera/controls.cpp @@ -414,50 +414,50 @@ void ControlValue::set(ControlType type, bool isArray, const void *data, */ /** - * \class ControlRange + * \class ControlInfo * \brief Describe the limits of valid values for a Control * - * The ControlRange expresses the constraints on valid values for a control. + * The ControlInfo expresses the constraints on valid values for a control. * The constraints depend on the object the control applies to, and are * constant for the lifetime of that object. They are typically constructed by * pipeline handlers to describe the controls they support. */ /** - * \brief Construct a ControlRange with minimum and maximum range parameters + * \brief Construct a ControlInfo with minimum and maximum range parameters * \param[in] min The control minimum value * \param[in] max The control maximum value * \param[in] def The control default value */ -ControlRange::ControlRange(const ControlValue &min, - const ControlValue &max, - const ControlValue &def) +ControlInfo::ControlInfo(const ControlValue &min, + const ControlValue &max, + const ControlValue &def) : min_(min), max_(max), def_(def) { } /** - * \fn ControlRange::min() + * \fn ControlInfo::min() * \brief Retrieve the minimum value of the control * \return A ControlValue with the minimum value for the control */ /** - * \fn ControlRange::max() + * \fn ControlInfo::max() * \brief Retrieve the maximum value of the control * \return A ControlValue with the maximum value for the control */ /** - * \fn ControlRange::def() + * \fn ControlInfo::def() * \brief Retrieve the default value of the control * \return A ControlValue with the default value for the control */ /** - * \brief Provide a string representation of the ControlRange + * \brief Provide a string representation of the ControlInfo */ -std::string ControlRange::toString() const +std::string ControlInfo::toString() const { std::stringstream ss; @@ -467,15 +467,15 @@ std::string ControlRange::toString() const } /** - * \fn bool ControlRange::operator==() - * \brief Compare ControlRange instances for equality - * \return True if the ranges have identical min and max, false otherwise + * \fn bool ControlInfo::operator==() + * \brief Compare ControlInfo instances for equality + * \return True if the constraints have identical min and max, false otherwise */ /** - * \fn bool ControlRange::operator!=() - * \brief Compare ControlRange instances for non equality - * \return False if the ranges have identical min and max, true otherwise + * \fn bool ControlInfo::operator!=() + * \brief Compare ControlInfo instances for non equality + * \return True if the constraints have different min and max, false otherwise */ /** @@ -489,10 +489,10 @@ std::string ControlRange::toString() const /** * \class ControlInfoMap - * \brief A map of ControlId to ControlRange + * \brief A map of ControlId to ControlInfo * * The ControlInfoMap class describes controls supported by an object as an - * unsorted map of ControlId pointers to ControlRange instances. Unlike the + * unsorted map of ControlId pointers to ControlInfo instances. Unlike the * standard std::unsorted_map<> class, it is designed the be immutable once * constructed, and thus only exposes the read accessors of the * std::unsorted_map<> base class. @@ -656,7 +656,7 @@ void ControlInfoMap::generateIdmap() if (ctrl.first->type() != ctrl.second.min().type()) { LOG(Controls, Error) << "Control " << utils::hex(ctrl.first->id()) - << " type and range type mismatch"; + << " type and info type mismatch"; idmap_.clear(); clear(); return; diff --git a/src/libcamera/include/control_serializer.h b/src/libcamera/include/control_serializer.h index 026e62340328..70aa28fd5f58 100644 --- a/src/libcamera/include/control_serializer.h +++ b/src/libcamera/include/control_serializer.h @@ -35,17 +35,17 @@ public: private: static size_t binarySize(const ControlValue &value); - static size_t binarySize(const ControlRange &range); + static size_t binarySize(const ControlInfo &info); static void store(const ControlValue &value, ByteStreamBuffer &buffer); - static void store(const ControlRange &range, ByteStreamBuffer &buffer); + static void store(const ControlInfo &info, ByteStreamBuffer &buffer); template ControlValue loadControlValue(ByteStreamBuffer &buffer, bool isArray, unsigned int count); ControlValue loadControlValue(ControlType type, ByteStreamBuffer &buffer, bool isArray = false, unsigned int count = 1); - ControlRange loadControlRange(ControlType type, ByteStreamBuffer &buffer); + ControlInfo loadControlInfo(ControlType type, ByteStreamBuffer &buffer); unsigned int serial_; std::vector> controlIds_; diff --git a/src/libcamera/include/v4l2_controls.h b/src/libcamera/include/v4l2_controls.h index 882546a89340..cffe9efd9919 100644 --- a/src/libcamera/include/v4l2_controls.h +++ b/src/libcamera/include/v4l2_controls.h @@ -20,10 +20,10 @@ public: V4L2ControlId(const struct v4l2_query_ext_ctrl &ctrl); }; -class V4L2ControlRange : public ControlRange +class V4L2ControlInfo : public ControlInfo { public: - V4L2ControlRange(const struct v4l2_query_ext_ctrl &ctrl); + V4L2ControlInfo(const struct v4l2_query_ext_ctrl &ctrl); }; } /* namespace libcamera */ diff --git a/src/libcamera/ipa_controls.cpp b/src/libcamera/ipa_controls.cpp index da4724b178e2..b1d14190e3fe 100644 --- a/src/libcamera/ipa_controls.cpp +++ b/src/libcamera/ipa_controls.cpp @@ -18,7 +18,7 @@ * transfer them through the IPA C interface and IPA IPC transports. * * A control packet contains a list of entries, each of them describing a single - * control range or control value. The packet starts with a fixed-size header + * control info or control value. The packet starts with a fixed-size header * described by the ipa_controls_header structure, followed by an array of * fixed-size entries. Each entry is associated with data, stored either * directly in the entry, or in a data section after the entries array. @@ -79,19 +79,19 @@ * | | | | | * \ | | | | * +-------------------------+ | | - * / | ipa_control_range_entry | | hdr.data_offset | + * / | ipa_control_info_entry | | hdr.data_offset | * | | #0 | | | * Control | +-------------------------+ | | - * range | | ... | | | + * info | | ... | | | * entries | +-------------------------+ | | - * | | ipa_control_range_entry | | hdr.size | + * | | ipa_control_info_entry | | hdr.size | * \ | #hdr.entries - 1 | | | * +-------------------------+ | | * | empty space (optional) | | | * +-------------------------+ <--´ . | * / | ... | | entry[n].offset | * Data | | ... | | | - * section | | range data for entry #n | <-----´ | + * section | | info data for entry #n | <-----´ | * \ | ... | | * +-------------------------+ | * | empty space (optional) | | @@ -100,8 +100,8 @@ * * The packet header is identical to the ControlList packet header. * - * Entries are described by the ipa_control_range_entry structure. They contain - * the numerical ID and type of the control. The control range data is stored + * Entries are described by the ipa_control_info_entry structure. They contain + * the numerical ID and type of the control. The control info data is stored * in the data section as described by the following diagram. * * ~~~~ @@ -117,10 +117,10 @@ * ~~~~ * * The minimum and maximum value are stored in the platform's native data - * format. The ipa_control_range_entry::offset field stores the offset from the - * beginning of the data section to the range data. + * format. The ipa_control_info_entry::offset field stores the offset from the + * beginning of the data section to the info data. * - * Range data in the data section shall be stored in the same order as the + * Info data in the data section shall be stored in the same order as the * entries array, shall be aligned to a multiple of 8 bytes, and shall be * contiguous in memory. * @@ -178,18 +178,18 @@ static_assert(sizeof(ipa_control_value_entry) == 16, "Invalid ABI size change for struct ipa_control_value_entry"); /** - * \struct ipa_control_range_entry - * \brief Description of a serialized ControlRange entry - * \var ipa_control_range_entry::id + * \struct ipa_control_info_entry + * \brief Description of a serialized ControlInfo entry + * \var ipa_control_info_entry::id * The numerical ID of the control - * \var ipa_control_range_entry::type + * \var ipa_control_info_entry::type * The type of the control (defined by enum ControlType) - * \var ipa_control_range_entry::offset + * \var ipa_control_info_entry::offset * The offset in bytes from the beginning of the data section to the control - * range data (shall be a multiple of 8 bytes) - * \var ipa_control_range_entry::padding + * info data (shall be a multiple of 8 bytes) + * \var ipa_control_info_entry::padding * Padding bytes (shall be set to 0) */ -static_assert(sizeof(ipa_control_range_entry) == 16, - "Invalid ABI size change for struct ipa_control_range_entry"); +static_assert(sizeof(ipa_control_info_entry) == 16, + "Invalid ABI size change for struct ipa_control_info_entry"); diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp index 29afb121aa46..24abc986112f 100644 --- a/src/libcamera/pipeline/uvcvideo.cpp +++ b/src/libcamera/pipeline/uvcvideo.cpp @@ -342,7 +342,7 @@ int UVCCameraData::init(MediaEntity *entity) ControlInfoMap::Map ctrls; for (const auto &ctrl : controls) { - const ControlRange &range = ctrl.second; + const ControlInfo &info = ctrl.second; const ControlId *id; switch (ctrl.first->id()) { @@ -365,7 +365,7 @@ int UVCCameraData::init(MediaEntity *entity) continue; } - ctrls.emplace(id, range); + ctrls.emplace(id, info); } controlInfo_ = std::move(ctrls); diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp index 5d3d12fef30b..529909714bf5 100644 --- a/src/libcamera/pipeline/vimc.cpp +++ b/src/libcamera/pipeline/vimc.cpp @@ -431,7 +431,7 @@ int VimcCameraData::init(MediaDevice *media) ControlInfoMap::Map ctrls; for (const auto &ctrl : controls) { - const ControlRange &range = ctrl.second; + const ControlInfo &info = ctrl.second; const ControlId *id; switch (ctrl.first->id()) { @@ -448,7 +448,7 @@ int VimcCameraData::init(MediaDevice *media) continue; } - ctrls.emplace(id, range); + ctrls.emplace(id, info); } controlInfo_ = std::move(ctrls); diff --git a/src/libcamera/v4l2_controls.cpp b/src/libcamera/v4l2_controls.cpp index 7446c3880330..4861f9778df3 100644 --- a/src/libcamera/v4l2_controls.cpp +++ b/src/libcamera/v4l2_controls.cpp @@ -104,37 +104,37 @@ V4L2ControlId::V4L2ControlId(const struct v4l2_query_ext_ctrl &ctrl) } /** - * \class V4L2ControlRange - * \brief Convenience specialisation of ControlRange for V4L2 controls + * \class V4L2ControlInfo + * \brief Convenience specialisation of ControlInfo for V4L2 controls * - * The V4L2ControlRange class is a specialisation of the ControlRange for V4L2 + * The V4L2ControlInfo class is a specialisation of the ControlInfo for V4L2 * controls. It offers a convenience constructor from a struct - * v4l2_query_ext_ctrl, and is otherwise equivalent to the ControlRange class. + * v4l2_query_ext_ctrl, and is otherwise equivalent to the ControlInfo class. */ /** - * \brief Construct a V4L2ControlRange from a struct v4l2_query_ext_ctrl + * \brief Construct a V4L2ControlInfo from a struct v4l2_query_ext_ctrl * \param[in] ctrl The struct v4l2_query_ext_ctrl as returned by the kernel */ -V4L2ControlRange::V4L2ControlRange(const struct v4l2_query_ext_ctrl &ctrl) +V4L2ControlInfo::V4L2ControlInfo(const struct v4l2_query_ext_ctrl &ctrl) { switch (ctrl.type) { case V4L2_CTRL_TYPE_BOOLEAN: - ControlRange::operator=(ControlRange(static_cast(ctrl.minimum), - static_cast(ctrl.maximum), - static_cast(ctrl.default_value))); + ControlInfo::operator=(ControlInfo(static_cast(ctrl.minimum), + static_cast(ctrl.maximum), + static_cast(ctrl.default_value))); break; case V4L2_CTRL_TYPE_INTEGER64: - ControlRange::operator=(ControlRange(static_cast(ctrl.minimum), - static_cast(ctrl.maximum), - static_cast(ctrl.default_value))); + ControlInfo::operator=(ControlInfo(static_cast(ctrl.minimum), + static_cast(ctrl.maximum), + static_cast(ctrl.default_value))); break; default: - ControlRange::operator=(ControlRange(static_cast(ctrl.minimum), - static_cast(ctrl.maximum), - static_cast(ctrl.default_value))); + ControlInfo::operator=(ControlInfo(static_cast(ctrl.minimum), + static_cast(ctrl.maximum), + static_cast(ctrl.default_value))); break; } } diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp index 1698d2451449..98639bd0f07f 100644 --- a/src/libcamera/v4l2_device.cpp +++ b/src/libcamera/v4l2_device.cpp @@ -381,7 +381,7 @@ void V4L2Device::listControls() } controlIds_.emplace_back(std::make_unique(ctrl)); - ctrls.emplace(controlIds_.back().get(), V4L2ControlRange(ctrl)); + ctrls.emplace(controlIds_.back().get(), V4L2ControlInfo(ctrl)); } controls_ = std::move(ctrls); diff --git a/test/controls/control_range.cpp b/test/controls/control_info.cpp similarity index 83% rename from test/controls/control_range.cpp rename to test/controls/control_info.cpp index 06ec3506ee62..1e05e13129ca 100644 --- a/test/controls/control_range.cpp +++ b/test/controls/control_info.cpp @@ -2,7 +2,7 @@ /* * Copyright (C) 2019, Google Inc. * - * control_range.cpp - ControlRange tests + * control_info.cpp - ControlInfo tests */ #include @@ -15,7 +15,7 @@ using namespace std; using namespace libcamera; -class ControlRangeTest : public Test +class ControlInfoTest : public Test { protected: int run() @@ -24,7 +24,7 @@ protected: * Test information retrieval from a range with no minimum and * maximum. */ - ControlRange brightness; + ControlInfo brightness; if (brightness.min().get() != 0 || brightness.max().get() != 0) { @@ -36,7 +36,7 @@ protected: * Test information retrieval from a control with a minimum and * a maximum value. */ - ControlRange contrast(10, 200); + ControlInfo contrast(10, 200); if (contrast.min().get() != 10 || contrast.max().get() != 200) { @@ -48,4 +48,4 @@ protected: } }; -TEST_REGISTER(ControlRangeTest) +TEST_REGISTER(ControlInfoTest) diff --git a/test/controls/meson.build b/test/controls/meson.build index 16a7f33fdcc6..7fff2413007e 100644 --- a/test/controls/meson.build +++ b/test/controls/meson.build @@ -1,7 +1,7 @@ control_tests = [ + [ 'control_info', 'control_info.cpp' ], [ 'control_info_map', 'control_info_map.cpp' ], [ 'control_list', 'control_list.cpp' ], - [ 'control_range', 'control_range.cpp' ], [ 'control_value', 'control_value.cpp' ], ] diff --git a/test/serialization/serialization_test.cpp b/test/serialization/serialization_test.cpp index 68e0512a04ca..11d0f0f30031 100644 --- a/test/serialization/serialization_test.cpp +++ b/test/serialization/serialization_test.cpp @@ -22,7 +22,7 @@ using namespace libcamera; bool SerializationTest::equals(const ControlInfoMap &lhs, const ControlInfoMap &rhs) { - std::map rlhs; + std::map rlhs; std::transform(lhs.begin(), lhs.end(), std::inserter(rlhs, rlhs.end()), [](const ControlInfoMap::value_type &v) -> decltype(rlhs)::value_type @@ -30,7 +30,7 @@ bool SerializationTest::equals(const ControlInfoMap &lhs, const ControlInfoMap & return { v.first->id(), v.second }; }); - std::map rrhs; + std::map rrhs; std::transform(rhs.begin(), rhs.end(), std::inserter(rrhs, rrhs.end()), [](const ControlInfoMap::value_type &v) -> decltype(rrhs)::value_type diff --git a/test/v4l2_videodevice/controls.cpp b/test/v4l2_videodevice/controls.cpp index 1b71bf0633b4..478de3707a3c 100644 --- a/test/v4l2_videodevice/controls.cpp +++ b/test/v4l2_videodevice/controls.cpp @@ -41,9 +41,9 @@ protected: return TestFail; } - const ControlRange &brightness = infoMap.find(V4L2_CID_BRIGHTNESS)->second; - const ControlRange &contrast = infoMap.find(V4L2_CID_CONTRAST)->second; - const ControlRange &saturation = infoMap.find(V4L2_CID_SATURATION)->second; + const ControlInfo &brightness = infoMap.find(V4L2_CID_BRIGHTNESS)->second; + const ControlInfo &contrast = infoMap.find(V4L2_CID_CONTRAST)->second; + const ControlInfo &saturation = infoMap.find(V4L2_CID_SATURATION)->second; /* Test getting controls. */ ControlList ctrls(infoMap);