Patch Detail
Show a patch.
GET /api/1.1/patches/19123/?format=api
{ "id": 19123, "url": "https://patchwork.libcamera.org/api/1.1/patches/19123/?format=api", "web_url": "https://patchwork.libcamera.org/patch/19123/", "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": "<20231011140238.39058-1-david.plowman@raspberrypi.com>", "date": "2023-10-11T14:02:38", "name": "[libcamera-devel,v2] py: Add the SensorConfiguration class", "commit_ref": "d05009d34c67dfb11e890eaee2858a7e99ed06e4", "pull_url": null, "state": "accepted", "archived": false, "hash": "44b2b12d05e00b1eb60d4816d2cf37c3d3b583a6", "submitter": { "id": 42, "url": "https://patchwork.libcamera.org/api/1.1/people/42/?format=api", "name": "David Plowman", "email": "david.plowman@raspberrypi.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/19123/mbox/", "series": [ { "id": 4048, "url": "https://patchwork.libcamera.org/api/1.1/series/4048/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4048", "date": "2023-10-11T14:02:38", "name": "[libcamera-devel,v2] py: Add the SensorConfiguration class", "version": 2, "mbox": "https://patchwork.libcamera.org/series/4048/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/19123/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/19123/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 E24D1BD808\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 11 Oct 2023 14:02:51 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4B09D62973;\n\tWed, 11 Oct 2023 16:02:51 +0200 (CEST)", "from mail-wr1-x435.google.com (mail-wr1-x435.google.com\n\t[IPv6:2a00:1450:4864:20::435])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3975262964\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 11 Oct 2023 16:02:49 +0200 (CEST)", "by mail-wr1-x435.google.com with SMTP id\n\tffacd0b85a97d-317c3ac7339so6256949f8f.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 11 Oct 2023 07:02:49 -0700 (PDT)", "from pi5-davidp.pitowers.org\n\t([2a00:1098:3142:14:183e:6cc8:a436:a27c])\n\tby smtp.gmail.com with ESMTPSA id\n\to30-20020adfa11e000000b0031f3ad17b2csm2029347wro.52.2023.10.11.07.02.40\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 11 Oct 2023 07:02:45 -0700 (PDT)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1697032971;\n\tbh=GomdPEPVrcNESzJyBxAoqZk6BGKR9BCN3FlxZeZKMWw=;\n\th=To:Date:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post:\n\tList-Help:List-Subscribe:From:Reply-To:From;\n\tb=BXHH3nV4CtYpqsnARGL8P3MEpDkVVBA/ejZUmS3LPYTvP3rZEvnC83khTVMS7NqVL\n\tjhou0WCVaXc/21P1Ml7m8GUfWmw90hqFf0hreH+UH7CFj04yILCAa3PMzE3rLpC01k\n\tT+ub97/9ojI2cKPVk96BzaJXbwTm1kD+tt1g2guFg+wmwJ1bKh6hdVCwEuOKHMu2tn\n\tiBp6RsZ1PFmTGGL1D9xJxvH4vmA1Dm0N8NjFmgY+J4N/nWpGkmfFhMS98ywcNmD4kf\n\tbTcTcVxRXoG17CZWBGTDlOhwEOtqktei1XxXB3fzV+qZqZlIR8KkRkrDS/QUZNSXPj\n\tXgp4XzaezRdhQ==", "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1697032968; x=1697637768;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:mime-version:message-id:date:subject:cc\n\t:to:from:from:to:cc:subject:date:message-id:reply-to;\n\tbh=E+Jh1dA8fnY3rRZwJlxTJtxordOq8oPc4M6HR63GdkY=;\n\tb=MaTemkt9Ip9+0GEDt7VWydudWtuqN/6tdgY1h6Ch+1y42aE4F8RCGMIxF8ZdIQNbHO\n\t/6U92HL0C4U5ScDQ4XwaKRK7VJCB6jbQSN8ujQhVcFoFNLuAAn6hPaJS7WFm2R1PS1Vc\n\tfXynfaxEGwgyDLC2zfc2eUnQ0LEPxxl+XAFJBmdzSg+Oxai4Jwgty5Qu5XwKE9QE2ECC\n\tRROKqehVwiixojz4dfJPhcyJgtp72yTm908mG+iiS4MjzY5Si2BkXxm6n+WQcyvIuT4L\n\tcqzJUrjmmpFVHz274tqd9bEmj1FlVdGFQag0MXxsrYb4/HH1z/Nnfp0TqW10KSZ8d2/i\n\tDyAQ==" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"MaTemkt9\"; dkim-atps=neutral", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1697032968; x=1697637768;\n\th=content-transfer-encoding:mime-version:message-id:date:subject:cc\n\t:to:from:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=E+Jh1dA8fnY3rRZwJlxTJtxordOq8oPc4M6HR63GdkY=;\n\tb=mJCnfA+L7/0WSTbcJhnOvKuDJDwDqpElBoPr5tB7Kzxpb6ENFuqi3j0fHsh43XAbrP\n\tH7/B7gbGQEjRc7ouVE3zxu7oYz/Ie2WOnbgLjPXCYLQJ9hnak1cfBijsyzki/TEujS0Z\n\truhXfEjpoKsvHa866s3to5MeuLX7Hr8cJ23x9nNVUHyv+DWIIqJcHR5aTc09nMQyW//j\n\tMmmCQG4ZRJZlCFSWHNz5j+tDyUjxStEjfzEgBKAtBfEOQJPGT3+CcWviOZJbUNuXqtlF\n\t8sB525oVoMtZV6zfpiKxvGQH9K+hJ9/hf5ytM3/o0zKJpamzb4x31Ow3Ri7PQY18GPtQ\n\tFkBA==", "X-Gm-Message-State": "AOJu0YzVuO32CXMmPEUYQy3578Cp0NmIr41ZPB2kHVzrw9xbuRMXzdGx\n\th9S6fhsBWqtumclBlqyQZS3YNYh3z7izUjo6VNE=", "X-Google-Smtp-Source": "AGHT+IGrT1AV5g2bcbXMT8M+sRF8CEXCj1MOtd/MU/zKwszvB4/T3dTlMShl9S3gjDOyFZjXlLqFBw==", "X-Received": "by 2002:a5d:4d8e:0:b0:324:7bdd:678e with SMTP id\n\tb14-20020a5d4d8e000000b003247bdd678emr17300141wru.60.1697032968413; \n\tWed, 11 Oct 2023 07:02:48 -0700 (PDT)", "To": "libcamera-devel@lists.libcamera.org", "Date": "Wed, 11 Oct 2023 15:02:38 +0100", "Message-Id": "<20231011140238.39058-1-david.plowman@raspberrypi.com>", "X-Mailer": "git-send-email 2.39.2", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v2] py: Add the SensorConfiguration class", "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": "David Plowman via libcamera-devel <libcamera-devel@lists.libcamera.org>", "Reply-To": "David Plowman <david.plowman@raspberrypi.com>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "We provide access to the various fields of the new SensorConfiguration\nclass. The class also needs a constructor so that Python applications\ncan make one and put it into the CameraConfiguration.\n\nSigned-off-by: David Plowman <david.plowman@raspberrypi.com>\n---\n src/py/libcamera/py_main.cpp | 36 ++++++++++++++++++++++++++++++++++++\n 1 file changed, 36 insertions(+)", "diff": "diff --git a/src/py/libcamera/py_main.cpp b/src/py/libcamera/py_main.cpp\nindex 01fb15a9..d2ce3722 100644\n--- a/src/py/libcamera/py_main.cpp\n+++ b/src/py/libcamera/py_main.cpp\n@@ -112,6 +112,7 @@ PYBIND11_MODULE(_libcamera, m)\n \n \tauto pyCameraManager = py::class_<PyCameraManager, std::shared_ptr<PyCameraManager>>(m, \"CameraManager\");\n \tauto pyCamera = py::class_<Camera, PyCameraSmartPtr<Camera>>(m, \"Camera\");\n+\tauto pySensorConfiguration = py::class_<SensorConfiguration>(m, \"SensorConfiguration\");\n \tauto pyCameraConfiguration = py::class_<CameraConfiguration>(m, \"CameraConfiguration\");\n \tauto pyCameraConfigurationStatus = py::enum_<CameraConfiguration::Status>(pyCameraConfiguration, \"Status\");\n \tauto pyStreamConfiguration = py::class_<StreamConfiguration>(m, \"StreamConfiguration\");\n@@ -281,6 +282,40 @@ PYBIND11_MODULE(_libcamera, m)\n \t\t\treturn ret;\n \t\t});\n \n+\tpySensorConfiguration\n+\t\t.def(py::init<>())\n+\t\t.def_readwrite(\"bit_depth\", &SensorConfiguration::bitDepth)\n+\t\t.def_readwrite(\"analog_crop\", &SensorConfiguration::analogCrop)\n+\t\t.def_property(\n+\t\t\t\"binning\",\n+\t\t\t[](SensorConfiguration &self) {\n+\t\t\t\treturn py::make_tuple(self.binning.binX, self.binning.binY);\n+\t\t\t},\n+\t\t\t[](SensorConfiguration &self, py::object value) {\n+\t\t\t\tauto vec = value.cast<std::vector<unsigned int>>();\n+\t\t\t\tif (vec.size() != 2)\n+\t\t\t\t\tthrow std::runtime_error(\"binning requires iterable of 2 values\");\n+\t\t\t\tself.binning.binX = vec[0];\n+\t\t\t\tself.binning.binY = vec[1];\n+\t\t\t})\n+\t\t.def_property(\n+\t\t\t\"skipping\",\n+\t\t\t[](SensorConfiguration &self) {\n+\t\t\t\treturn py::make_tuple(self.skipping.xOddInc, self.skipping.xEvenInc,\n+\t\t\t\t\t\t self.skipping.yOddInc, self.skipping.yEvenInc);\n+\t\t\t},\n+\t\t\t[](SensorConfiguration &self, py::object value) {\n+\t\t\t\tauto vec = value.cast<std::vector<unsigned int>>();\n+\t\t\t\tif (vec.size() != 4)\n+\t\t\t\t\tthrow std::runtime_error(\"skipping requires iterable of 4 values\");\n+\t\t\t\tself.skipping.xOddInc = vec[0];\n+\t\t\t\tself.skipping.xEvenInc = vec[1];\n+\t\t\t\tself.skipping.yOddInc = vec[2];\n+\t\t\t\tself.skipping.yEvenInc = vec[3];\n+\t\t\t})\n+\t\t.def_readwrite(\"output_size\", &SensorConfiguration::outputSize)\n+\t\t.def(\"is_valid\", &SensorConfiguration::isValid);\n+\n \tpyCameraConfiguration\n \t\t.def(\"__iter__\", [](CameraConfiguration &self) {\n \t\t\treturn py::make_iterator<py::return_value_policy::reference_internal>(self);\n@@ -293,6 +328,7 @@ PYBIND11_MODULE(_libcamera, m)\n \t\t py::return_value_policy::reference_internal)\n \t\t.def_property_readonly(\"size\", &CameraConfiguration::size)\n \t\t.def_property_readonly(\"empty\", &CameraConfiguration::empty)\n+\t\t.def_readwrite(\"sensor_config\", &CameraConfiguration::sensorConfig)\n \t\t.def_readwrite(\"transform\", &CameraConfiguration::transform);\n \n \tpyCameraConfigurationStatus\n", "prefixes": [ "libcamera-devel", "v2" ] }