{"id":2781,"url":"https://patchwork.libcamera.org/api/patches/2781/?format=json","web_url":"https://patchwork.libcamera.org/patch/2781/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20200206012601.153858-6-jacopo@jmondi.org>","date":"2020-02-06T01:25:57","name":"[libcamera-devel,v5,5/9] libcamera: controls: Add default to ControlRange","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"b12dc8483d0ec4eb166749c0fe1ac6744fa4ea8d","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/?format=json","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/2781/mbox/","series":[{"id":662,"url":"https://patchwork.libcamera.org/api/series/662/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=662","date":"2020-02-06T01:25:52","name":"Introduce camera properties","version":5,"mbox":"https://patchwork.libcamera.org/series/662/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/2781/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/2781/checks/","tags":{},"headers":{"Return-Path":"<jacopo@jmondi.org>","Received":["from relay10.mail.gandi.net (relay10.mail.gandi.net\n\t[217.70.178.230])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 22B3C60446\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  6 Feb 2020 02:23:35 +0100 (CET)","from uno.lan (93-34-114-233.ip49.fastwebnet.it [93.34.114.233])\n\t(Authenticated sender: jacopo@jmondi.org)\n\tby relay10.mail.gandi.net (Postfix) with ESMTPSA id E8233240002\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  6 Feb 2020 01:23:34 +0000 (UTC)"],"From":"Jacopo Mondi <jacopo@jmondi.org>","To":"libcamera-devel@lists.libcamera.org","Date":"Thu,  6 Feb 2020 02:25:57 +0100","Message-Id":"<20200206012601.153858-6-jacopo@jmondi.org>","X-Mailer":"git-send-email 2.24.1","In-Reply-To":"<20200206012601.153858-1-jacopo@jmondi.org>","References":"<20200206012601.153858-1-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v5 5/9] libcamera: controls: Add default\n\tto ControlRange","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Thu, 06 Feb 2020 01:23:35 -0000"},"content":"Augment the the ControlRange class to store the control default value.\n\nThis is particularly relevant for v4l2 controls used to create\nCamera properties, which are constructed using immutable video device\nproperties, whose value won't change at runtime.\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n include/libcamera/controls.h    |  5 ++++-\n src/libcamera/controls.cpp      | 12 ++++++++++--\n src/libcamera/v4l2_controls.cpp |  9 ++++++---\n 3 files changed, 20 insertions(+), 6 deletions(-)","diff":"diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h\nindex b1b73367e874..458b84e8fa8c 100644\n--- a/include/libcamera/controls.h\n+++ b/include/libcamera/controls.h\n@@ -114,10 +114,12 @@ class ControlRange\n {\n public:\n \texplicit ControlRange(const ControlValue &min = 0,\n-\t\t\t      const ControlValue &max = 0);\n+\t\t\t      const ControlValue &max = 0,\n+\t\t\t      const ControlValue &def = 0);\n \n \tconst ControlValue &min() const { return min_; }\n \tconst ControlValue &max() const { return max_; }\n+\tconst ControlValue &def() const { return def_; }\n \n \tstd::string toString() const;\n \n@@ -134,6 +136,7 @@ public:\n private:\n \tControlValue min_;\n \tControlValue max_;\n+\tControlValue def_;\n };\n \n using ControlIdMap = std::unordered_map<unsigned int, const ControlId *>;\ndiff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp\nindex 34a8c8dd9458..0031cd064da9 100644\n--- a/src/libcamera/controls.cpp\n+++ b/src/libcamera/controls.cpp\n@@ -357,10 +357,12 @@ Control<int64_t>::Control(unsigned int id, const char *name)\n  * \\brief Construct a ControlRange with minimum and maximum range parameters\n  * \\param[in] min The control minimum value\n  * \\param[in] max The control maximum value\n+ * \\param[in] def The control default value\n  */\n ControlRange::ControlRange(const ControlValue &min,\n-\t\t\t   const ControlValue &max)\n-\t: min_(min), max_(max)\n+\t\t\t   const ControlValue &max,\n+\t\t\t   const ControlValue &def)\n+\t: min_(min), max_(max), def_(def)\n {\n }\n \n@@ -376,6 +378,12 @@ ControlRange::ControlRange(const ControlValue &min,\n  * \\return A ControlValue with the maximum value for the control\n  */\n \n+/**\n+ * \\fn ControlRange::def()\n+ * \\brief Retrieve the default value of the control\n+ * \\return A ControlValue with the default value for the control\n+ */\n+\n /**\n  * \\brief Provide a string representation of the ControlRange\n  */\ndiff --git a/src/libcamera/v4l2_controls.cpp b/src/libcamera/v4l2_controls.cpp\nindex b6547a7c627c..7446c3880330 100644\n--- a/src/libcamera/v4l2_controls.cpp\n+++ b/src/libcamera/v4l2_controls.cpp\n@@ -121,17 +121,20 @@ V4L2ControlRange::V4L2ControlRange(const struct v4l2_query_ext_ctrl &ctrl)\n \tswitch (ctrl.type) {\n \tcase V4L2_CTRL_TYPE_BOOLEAN:\n \t\tControlRange::operator=(ControlRange(static_cast<bool>(ctrl.minimum),\n-\t\t\t\t\t\t     static_cast<bool>(ctrl.maximum)));\n+\t\t\t\t\t\t     static_cast<bool>(ctrl.maximum),\n+\t\t\t\t\t\t     static_cast<bool>(ctrl.default_value)));\n \t\tbreak;\n \n \tcase V4L2_CTRL_TYPE_INTEGER64:\n \t\tControlRange::operator=(ControlRange(static_cast<int64_t>(ctrl.minimum),\n-\t\t\t\t\t\t     static_cast<int64_t>(ctrl.maximum)));\n+\t\t\t\t\t\t     static_cast<int64_t>(ctrl.maximum),\n+\t\t\t\t\t\t     static_cast<int64_t>(ctrl.default_value)));\n \t\tbreak;\n \n \tdefault:\n \t\tControlRange::operator=(ControlRange(static_cast<int32_t>(ctrl.minimum),\n-\t\t\t\t\t\t     static_cast<int32_t>(ctrl.maximum)));\n+\t\t\t\t\t\t     static_cast<int32_t>(ctrl.maximum),\n+\t\t\t\t\t\t     static_cast<int32_t>(ctrl.default_value)));\n \t\tbreak;\n \t}\n }\n","prefixes":["libcamera-devel","v5","5/9"]}