Patch Detail
Show a patch.
GET /api/patches/20360/?format=api
{ "id": 20360, "url": "https://patchwork.libcamera.org/api/patches/20360/?format=api", "web_url": "https://patchwork.libcamera.org/patch/20360/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20240621120318.25851-1-laurent.pinchart@ideasonboard.com>", "date": "2024-06-21T12:03:18", "name": "libcamera: yaml_parser: Add support for float types", "commit_ref": "3d7e50fd715dee709da9e2a8c9ccd4892f4d5f75", "pull_url": null, "state": "accepted", "archived": false, "hash": "a5c526db763f1ab3cb716d6cb97dddfc0a481140", "submitter": { "id": 2, "url": "https://patchwork.libcamera.org/api/people/2/?format=api", "name": "Laurent Pinchart", "email": "laurent.pinchart@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/20360/mbox/", "series": [ { "id": 4410, "url": "https://patchwork.libcamera.org/api/series/4410/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4410", "date": "2024-06-21T12:03:18", "name": "libcamera: yaml_parser: Add support for float types", "version": 1, "mbox": "https://patchwork.libcamera.org/series/4410/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/20360/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/20360/checks/", "tags": {}, "headers": { "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>", "X-Original-To": "parsemail@patchwork.libcamera.org", "Delivered-To": "parsemail@patchwork.libcamera.org", "Received": [ "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id DCFDDBD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 21 Jun 2024 12:03:43 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 94416654A9;\n\tFri, 21 Jun 2024 14:03:42 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8715A654A2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 21 Jun 2024 14:03:41 +0200 (CEST)", "from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 7A0016EF;\n\tFri, 21 Jun 2024 14:03:21 +0200 (CEST)" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"QMr4mjeD\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1718971401;\n\tbh=q+0p7EI0BzNNs3iH6Qpv2GPBMgME83hG9PpsWIX9+gs=;\n\th=From:To:Subject:Date:From;\n\tb=QMr4mjeDsllZi70WxxMWqFFa9VfySVtGVPyVRWxHc9BXdnwsqpkfI/q6m1IDIGqm8\n\t+vaLbm19+571bkqpWs260dLriv9nJxqdh/ZCRe+lx84es9lAPnk+j9WY05NyDzUC8u\n\taxzBpIcSCAJ1OFSzaDmuixMz9j+pIppytU17dwGc=", "From": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org,\n\tJacopo Mondi <jacopo.mondi@ideasonboard.com>", "Subject": "[PATCH] libcamera: yaml_parser: Add support for float types", "Date": "Fri, 21 Jun 2024 15:03:18 +0300", "Message-ID": "<20240621120318.25851-1-laurent.pinchart@ideasonboard.com>", "X-Mailer": "git-send-email 2.44.2", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "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>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "The YamlObject::get<T>() function template has a specialization for\ndouble but not for float. When used in an IPA module, the issue is\ncaught at module load time only, when dynamic links are resolved,\ncausing errors such as\n\nFailed to open IPA module shared object: /usr/lib/libcamera/ipa_rkisp1.so: undefined symbol: _ZNK9libcamera10YamlObject6GetterIfE3getERK_\n\nFix it by adding a float specialization. The alternative would be to use\ndouble only in IPA modules, but the lack of enforcement at compile time\nmakes this dangerous.\n\nSigned-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\nJacopo, I think this may fix the issue you've experienced. Could you\ntest the patch ?\n---\n include/libcamera/internal/yaml_parser.h | 1 +\n src/libcamera/yaml_parser.cpp | 9 +++++++++\n 2 files changed, 10 insertions(+)", "diff": "diff --git a/include/libcamera/internal/yaml_parser.h b/include/libcamera/internal/yaml_parser.h\nindex 06a41146ad01..e38a2df9ae1d 100644\n--- a/include/libcamera/internal/yaml_parser.h\n+++ b/include/libcamera/internal/yaml_parser.h\n@@ -177,6 +177,7 @@ public:\n \ttemplate<typename T,\n \t\t std::enable_if_t<\n \t\t\t std::is_same_v<bool, T> ||\n+\t\t\t std::is_same_v<float, T> ||\n \t\t\t std::is_same_v<double, T> ||\n \t\t\t std::is_same_v<int8_t, T> ||\n \t\t\t std::is_same_v<uint8_t, T> ||\ndiff --git a/src/libcamera/yaml_parser.cpp b/src/libcamera/yaml_parser.cpp\nindex 56670ba7a584..025006bcdcdd 100644\n--- a/src/libcamera/yaml_parser.cpp\n+++ b/src/libcamera/yaml_parser.cpp\n@@ -278,6 +278,13 @@ YamlObject::Getter<uint32_t>::get(const YamlObject &obj) const\n \treturn value;\n }\n \n+template<>\n+std::optional<float>\n+YamlObject::Getter<float>::get(const YamlObject &obj) const\n+{\n+\treturn obj.get<double>();\n+}\n+\n template<>\n std::optional<double>\n YamlObject::Getter<double>::get(const YamlObject &obj) const\n@@ -349,6 +356,7 @@ YamlObject::Getter<Size>::get(const YamlObject &obj) const\n template<typename T,\n \t std::enable_if_t<\n \t\t std::is_same_v<bool, T> ||\n+\t\t std::is_same_v<float, T> ||\n \t\t std::is_same_v<double, T> ||\n \t\t std::is_same_v<int8_t, T> ||\n \t\t std::is_same_v<uint8_t, T> ||\n@@ -377,6 +385,7 @@ std::optional<std::vector<T>> YamlObject::getList() const\n }\n \n template std::optional<std::vector<bool>> YamlObject::getList<bool>() const;\n+template std::optional<std::vector<float>> YamlObject::getList<float>() const;\n template std::optional<std::vector<double>> YamlObject::getList<double>() const;\n template std::optional<std::vector<int8_t>> YamlObject::getList<int8_t>() const;\n template std::optional<std::vector<uint8_t>> YamlObject::getList<uint8_t>() const;\n", "prefixes": [] }