Patch Detail
Show a patch.
GET /api/1.1/patches/15917/?format=api
{ "id": 15917, "url": "https://patchwork.libcamera.org/api/1.1/patches/15917/?format=api", "web_url": "https://patchwork.libcamera.org/patch/15917/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/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": "<20220516141022.96327-12-tomi.valkeinen@ideasonboard.com>", "date": "2022-05-16T14:10:19", "name": "[libcamera-devel,11/14] py: add geometry classes", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "8b668b0f1db1157c7d795232b09307b5c8b6a276", "submitter": { "id": 109, "url": "https://patchwork.libcamera.org/api/1.1/people/109/?format=api", "name": "Tomi Valkeinen", "email": "tomi.valkeinen@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/15917/mbox/", "series": [ { "id": 3113, "url": "https://patchwork.libcamera.org/api/1.1/series/3113/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3113", "date": "2022-05-16T14:10:08", "name": "Misc Python bindings patches", "version": 1, "mbox": "https://patchwork.libcamera.org/series/3113/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/15917/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/15917/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 EB632C326F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 16 May 2022 14:11:02 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9E40F65679;\n\tMon, 16 May 2022 16:11:02 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 853B16565D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 16 May 2022 16:10:53 +0200 (CEST)", "from deskari.lan (91-156-85-209.elisa-laajakaista.fi\n\t[91.156.85.209])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 01EF0898;\n\tMon, 16 May 2022 16:10:52 +0200 (CEST)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1652710262;\n\tbh=h3HTxTU84cyLpKuYECAq/ub53xCYyQhLdSJVIez0dRk=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=u/ZLjW83PCp30ZfNah6gMQheEt+OOJJWSLc0cZTQe8Mg8XDfrjfPOc5o66vkJhMuw\n\tuU7weD+bTNyu9pIcxvMmEoc5/w1i2jhftvQqy+qnH+9uyRj8O1AAfgO2g9HBa27PX7\n\tJm82i8t7jzXn4rA0CJ/cU60TBg8NpUAbFJt+JZfGGPtYMh8FZx7YtSqOPkik1bioMu\n\tDKNeve8A8gcZswF7k6OqnrdV8yxnaxHhqeR5Z2qHf1yCjUY6+Pwpqpbk6BifkKQvw9\n\ttJ8HN/vxV5e6oQSfh7ASD7rKGXIds8Y35X6y/iUe2hwZEaJeosAKn6Ncw1kp+G20ln\n\t8cgcDfjf+lmlA==", "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1652710253;\n\tbh=h3HTxTU84cyLpKuYECAq/ub53xCYyQhLdSJVIez0dRk=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=MwZg0L26VHM0fCydYo51bPvb0JsNNZ4ST8Fc/vV4sGfg8wcf8oipzdpy91FA4qIft\n\tUUKdP9f579YKfH5UjPFvqt8HovIjYIty3r1NNzQYY4tR7jLTtyHvR7sOIJPMPkBBzx\n\tdwz8ESMK3THWjpwrFlGGqBce+iCIx+pjk0Qvl7jI=" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"MwZg0L26\"; dkim-atps=neutral", "To": "libcamera-devel@lists.libcamera.org,\n\tDavid Plowman <david.plowman@raspberrypi.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tJacopo Mondi <jacopo@jmondi.org>", "Date": "Mon, 16 May 2022 17:10:19 +0300", "Message-Id": "<20220516141022.96327-12-tomi.valkeinen@ideasonboard.com>", "X-Mailer": "git-send-email 2.34.1", "In-Reply-To": "<20220516141022.96327-1-tomi.valkeinen@ideasonboard.com>", "References": "<20220516141022.96327-1-tomi.valkeinen@ideasonboard.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH 11/14] py: add geometry classes", "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>", "From": "Tomi Valkeinen via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>", "Reply-To": "Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "Add libcamera's geometry classes to the Python bindings.\n\nNote that this commit only adds the classes, but they are not used\nanywhere yet.\n\nSigned-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n---\n src/py/libcamera/meson.build | 1 +\n src/py/libcamera/pygeometry.cpp | 104 ++++++++++++++++++++++++++++++++\n src/py/libcamera/pymain.cpp | 2 +\n 3 files changed, 107 insertions(+)\n create mode 100644 src/py/libcamera/pygeometry.cpp", "diff": "diff --git a/src/py/libcamera/meson.build b/src/py/libcamera/meson.build\nindex af8ba6a5..12e006e7 100644\n--- a/src/py/libcamera/meson.build\n+++ b/src/py/libcamera/meson.build\n@@ -14,6 +14,7 @@ pybind11_dep = pybind11_proj.get_variable('pybind11_dep')\n \n pycamera_sources = files([\n 'pyenums.cpp',\n+ 'pygeometry.cpp',\n 'pymain.cpp',\n ])\n \ndiff --git a/src/py/libcamera/pygeometry.cpp b/src/py/libcamera/pygeometry.cpp\nnew file mode 100644\nindex 00000000..2cd1432e\n--- /dev/null\n+++ b/src/py/libcamera/pygeometry.cpp\n@@ -0,0 +1,104 @@\n+/* SPDX-License-Identifier: LGPL-2.1-or-later */\n+/*\n+ * Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n+ *\n+ * Python bindings - Geometry classes\n+ */\n+\n+#include <array>\n+\n+#include <libcamera/geometry.h>\n+#include <libcamera/libcamera.h>\n+\n+#include <pybind11/operators.h>\n+#include <pybind11/smart_holder.h>\n+#include <pybind11/stl.h>\n+\n+namespace py = pybind11;\n+\n+using namespace libcamera;\n+\n+void init_py_geometry(py::module &m)\n+{\n+\tpy::class_<Point>(m, \"Point\")\n+\t\t.def(py::init<>())\n+\t\t.def(py::init<int, int>())\n+\t\t.def_readwrite(\"x\", &Point::x)\n+\t\t.def_readwrite(\"y\", &Point::y)\n+\t\t.def(py::self == py::self)\n+\t\t.def(-py::self)\n+\t\t.def(\"__str__\", &Point::toString)\n+\t\t.def(\"__repr__\", [](const Point &self) {\n+\t\t\treturn \"libcamera.Point(\" + std::to_string(self.x) + \", \" + std::to_string(self.y) + \")\";\n+\t\t});\n+\n+\tpy::class_<Size>(m, \"Size\")\n+\t\t.def(py::init<>())\n+\t\t.def(py::init<unsigned int, unsigned int>())\n+\t\t.def_readwrite(\"width\", &Size::width)\n+\t\t.def_readwrite(\"height\", &Size::height)\n+\t\t.def_property_readonly(\"is_null\", &Size::isNull)\n+\t\t.def(py::self == py::self)\n+\t\t.def(py::self * float())\n+\t\t.def(py::self / float())\n+\t\t.def(py::self *= float())\n+\t\t.def(py::self /= float())\n+\t\t.def(\"__str__\", &Size::toString)\n+\t\t.def(\"__repr__\", [](const Size &self) {\n+\t\t\treturn \"libcamera.Size(\" + std::to_string(self.width) + \", \" + std::to_string(self.height) + \")\";\n+\t\t});\n+\n+\tpy::class_<SizeRange>(m, \"SizeRange\")\n+\t\t.def(py::init<>())\n+\t\t.def(py::init<Size>())\n+\t\t.def(py::init<Size, Size>())\n+\t\t.def(py::init<Size, Size, unsigned int, unsigned int>())\n+\t\t.def(py::init<>([](const std::array<unsigned int, 2> &s) {\n+\t\t\treturn SizeRange(Size(std::get<0>(s), std::get<1>(s)));\n+\t\t}))\n+\t\t.def(py::init<>([](const std::array<unsigned int, 2> &min, const std::array<unsigned int, 2> &max) {\n+\t\t\treturn SizeRange(Size(std::get<0>(min), std::get<1>(min)),\n+\t\t\t\t\t Size(std::get<0>(max), std::get<1>(max)));\n+\t\t}))\n+\t\t.def(py::init<>([](const std::array<unsigned int, 2> &min, const std::array<unsigned int, 2> &max,\n+\t\t\t\t unsigned int hStep, unsigned int vStep) {\n+\t\t\treturn SizeRange(Size(std::get<0>(min), std::get<1>(min)),\n+\t\t\t\t\t Size(std::get<0>(max), std::get<1>(max)),\n+\t\t\t\t\t hStep, vStep);\n+\t\t}))\n+\t\t.def_readwrite(\"min\", &SizeRange::min)\n+\t\t.def_readwrite(\"max\", &SizeRange::max)\n+\t\t.def_readwrite(\"hStep\", &SizeRange::hStep)\n+\t\t.def_readwrite(\"vStep\", &SizeRange::vStep)\n+\t\t.def(py::self == py::self)\n+\t\t.def(\"__str__\", &SizeRange::toString)\n+\t\t.def(\"__repr__\", [](const SizeRange &self) {\n+\t\t\treturn py::str(\"libcamera.SizeRange(({}, {}), ({}, {}), {}, {})\")\n+\t\t\t\t.format(self.min.width, self.min.height,\n+\t\t\t\t\tself.max.width, self.max.height,\n+\t\t\t\t\tself.hStep, self.vStep);\n+\t\t});\n+\n+\tpy::class_<Rectangle>(m, \"Rectangle\")\n+\t\t.def(py::init<>())\n+\t\t.def(py::init<int, int, Size>())\n+\t\t.def(py::init<>([](int x, int y, const std::array<unsigned int, 2> &s) {\n+\t\t\treturn Rectangle(x, y, std::get<0>(s), std::get<1>(s));\n+\t\t}))\n+\t\t.def(py::init<int, int, unsigned int, unsigned int>())\n+\t\t.def(py::init<Size>())\n+\t\t.def_readwrite(\"x\", &Rectangle::x)\n+\t\t.def_readwrite(\"y\", &Rectangle::y)\n+\t\t.def_readwrite(\"width\", &Rectangle::width)\n+\t\t.def_readwrite(\"height\", &Rectangle::height)\n+\t\t.def_property_readonly(\"is_null\", &Rectangle::isNull)\n+\t\t.def_property_readonly(\"center\", &Rectangle::center)\n+\t\t.def_property_readonly(\"size\", &Rectangle::size)\n+\t\t.def_property_readonly(\"topLeft\", &Rectangle::topLeft)\n+\t\t.def(py::self == py::self)\n+\t\t.def(\"__str__\", &Rectangle::toString)\n+\t\t.def(\"__repr__\", [](const Rectangle &self) {\n+\t\t\treturn py::str(\"libcamera.Rectangle({}, {}, {}, {})\")\n+\t\t\t\t.format(self.x, self.y, self.width, self.height);\n+\t\t});\n+}\ndiff --git a/src/py/libcamera/pymain.cpp b/src/py/libcamera/pymain.cpp\nindex cc2ddee5..1dd70d9c 100644\n--- a/src/py/libcamera/pymain.cpp\n+++ b/src/py/libcamera/pymain.cpp\n@@ -137,11 +137,13 @@ static void handleRequestCompleted(Request *req)\n \n void init_pyenums(py::module &m);\n void init_pyenums_generated(py::module &m);\n+void init_py_geometry(py::module &m);\n \n PYBIND11_MODULE(_libcamera, m)\n {\n \tinit_pyenums(m);\n \tinit_pyenums_generated(m);\n+\tinit_py_geometry(m);\n \n \t/* Forward declarations */\n \n", "prefixes": [ "libcamera-devel", "11/14" ] }