From patchwork Sat Oct 12 18:43:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 2164 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 8A20361563 for ; Sat, 12 Oct 2019 20:44:17 +0200 (CEST) Received: from pendragon.bb.dnainternet.fi (dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id AD08B33A for ; Sat, 12 Oct 2019 20:44:16 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1570905857; bh=SafN5xzragEoQRgOVMscoYT6s79il8oVw21JGF3HcSY=; h=From:To:Subject:Date:In-Reply-To:References:From; b=W7g+oTO6IHv7ijteDLVqjOqvVG6srNnUBP1zCHYX6YIH+YqFo0NbB7nc9T2nMD+nA ECjBGCiKofqtgwIIlab0dEgnTnEMT1fyHDTxI3ufVB8RAq6oauqKgvD30ybEZ87npX XTXiWQIfrajK+Y01HZ/LoeDBnK5Q78/AxgZCf+zQ= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sat, 12 Oct 2019 21:43:56 +0300 Message-Id: <20191012184407.31684-4-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191012184407.31684-1-laurent.pinchart@ideasonboard.com> References: <20191012184407.31684-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 03/14] libcamera: control_ids: Generate map of all supported controls 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: Sat, 12 Oct 2019 18:44:17 -0000 In order to deserialise a ControlList, we will need to lookup ControlId instances based on their numerical ID. Generate a global map from the controls definitions to support such a lookup. Signed-off-by: Laurent Pinchart Reviewed-by: Niklas Söderlund --- Changes since v1: - Add ControlIdMap type --- include/libcamera/control_ids.h.in | 2 ++ include/libcamera/controls.h | 1 + src/libcamera/control_ids.cpp.in | 7 +++++++ src/libcamera/controls.cpp | 9 +++++++++ src/libcamera/gen-controls.py | 3 +++ 5 files changed, 22 insertions(+) diff --git a/include/libcamera/control_ids.h.in b/include/libcamera/control_ids.h.in index 1d0bc791e559..6ff0e4186983 100644 --- a/include/libcamera/control_ids.h.in +++ b/include/libcamera/control_ids.h.in @@ -24,6 +24,8 @@ ${ids} ${controls} +extern const ControlIdMap controls; + } /* namespace controls */ } /* namespace libcamera */ diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h index 90426753f40f..d8acd800b143 100644 --- a/include/libcamera/controls.h +++ b/include/libcamera/controls.h @@ -111,6 +111,7 @@ private: ControlValue max_; }; +using ControlIdMap = std::unordered_map; using ControlInfoMap = std::unordered_map; class ControlList diff --git a/src/libcamera/control_ids.cpp.in b/src/libcamera/control_ids.cpp.in index dd5433820a8b..99c511d0e712 100644 --- a/src/libcamera/control_ids.cpp.in +++ b/src/libcamera/control_ids.cpp.in @@ -31,6 +31,13 @@ ${controls_doc} ${controls_def} #endif +/** + * \brief List of all supported libcamera controls + */ +extern const ControlIdMap controls { +${controls_map} +}; + } /* namespace controls */ } /* namespace libcamera */ diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp index f3260edce0bc..70c1af481af2 100644 --- a/src/libcamera/controls.cpp +++ b/src/libcamera/controls.cpp @@ -355,6 +355,15 @@ std::string ControlRange::toString() const return ss.str(); } +/** + * \typedef ControlIdMap + * \brief A map of numerical control ID to ControlId + * + * The map is used by ControlList instances to access controls by numerical + * IDs. A global map of all libcamera controls is provided by + * controls::controls. + */ + /** * \typedef ControlInfoMap * \brief A map of ControlId to ControlRange diff --git a/src/libcamera/gen-controls.py b/src/libcamera/gen-controls.py index a3e52fb36f7a..940386cc68c8 100755 --- a/src/libcamera/gen-controls.py +++ b/src/libcamera/gen-controls.py @@ -25,6 +25,7 @@ ${description} ctrls_doc = [] ctrls_def = [] + ctrls_map = [] for ctrl in controls: name, ctrl = ctrl.popitem() @@ -43,10 +44,12 @@ ${description} ctrls_doc.append(doc_template.substitute(info)) ctrls_def.append(def_template.substitute(info)) + ctrls_map.append('\t{ ' + id_name + ', &' + name + ' },') return { 'controls_doc': '\n\n'.join(ctrls_doc), 'controls_def': '\n'.join(ctrls_def), + 'controls_map': '\n'.join(ctrls_map), }