[{"id":23351,"web_url":"https://patchwork.libcamera.org/comment/23351/","msgid":"<20220608113711.y5ibk2pa5mgsmt2s@uno.localdomain>","date":"2022-06-08T11:37:11","subject":"Re: [libcamera-devel] [PATCH v5 1/4] Documentation: Add\n\tpython-bindings.rst","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Ho Tomi,\n\nOn Wed, Jun 08, 2022 at 10:24:15AM +0300, Tomi Valkeinen wrote:\n> Add a basic doc for the Python bindings. While not really proper\n> documentation yet, the file and the examples should give enough guidance\n> for users who are somewhat familiar with libcamera.\n>\n> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nThanks, it's a good introduction\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\n> ---\n>  Documentation/index.rst           |  1 +\n>  Documentation/meson.build         |  1 +\n>  Documentation/python-bindings.rst | 69 +++++++++++++++++++++++++++++++\n>  3 files changed, 71 insertions(+)\n>  create mode 100644 Documentation/python-bindings.rst\n>\n> diff --git a/Documentation/index.rst b/Documentation/index.rst\n> index 0ee10044..43d8b017 100644\n> --- a/Documentation/index.rst\n> +++ b/Documentation/index.rst\n> @@ -22,3 +22,4 @@\n>     Environment variables <environment_variables>\n>     Sensor driver requirements <sensor_driver_requirements>\n>     Lens driver requirements <lens_driver_requirements>\n> +   Python Bindings <python-bindings>\n> diff --git a/Documentation/meson.build b/Documentation/meson.build\n> index 8e2eacc6..7695bcb1 100644\n> --- a/Documentation/meson.build\n> +++ b/Documentation/meson.build\n> @@ -67,6 +67,7 @@ if sphinx.found()\n>          'guides/tracing.rst',\n>          'index.rst',\n>          'lens_driver_requirements.rst',\n> +        'python-bindings.rst',\n>          'sensor_driver_requirements.rst',\n>         '../README.rst',\n>      ]\n> diff --git a/Documentation/python-bindings.rst b/Documentation/python-bindings.rst\n> new file mode 100644\n> index 00000000..d59935ae\n> --- /dev/null\n> +++ b/Documentation/python-bindings.rst\n> @@ -0,0 +1,69 @@\n> +.. SPDX-License-Identifier: CC-BY-SA-4.0\n> +\n> +.. _python-bindings:\n> +\n> +Python Bindings for libcamera\n> +=============================\n> +\n> +*WARNING* The bindings are under work, and the API will change.\n> +\n> +Differences to the C++ API\n> +--------------------------\n> +\n> +As a rule of thumb the bindings try to follow the C++ API when possible. This\n> +chapter lists the differences.\n> +\n> +Mostly these differences fall under two categories:\n> +\n> +1. Differences caused by the inherent differences between C++ and Python.\n> +These differences are usually caused by the use of threads or differences in\n> +C++ vs Python memory management.\n> +\n> +2. Differences caused by the code being work-in-progress. It's not always\n> +trivial to create a binding in a satisfying way, and the current bindings\n> +contain simplified versions of the C++ API just to get forward. These\n> +differences are expected to eventually go away.\n> +\n> +Coding Style\n> +------------\n> +\n> +The C++ code for the bindings follows the libcamera coding style as much as\n> +possible. Note that the indentation does not quite follow the clang-format\n> +style, as clang-format makes a mess of the style used.\n> +\n> +The API visible to the Python side follows the Python style as much as possible.\n> +\n> +This means that e.g. ``Camera::generateConfiguration`` maps to\n> +``Camera.generate_configuration``.\n> +\n> +CameraManager\n> +-------------\n> +\n> +The Python API provides a singleton CameraManager via ``CameraManager.singleton()``.\n> +There is no need to start or stop the CameraManager.\n> +\n> +Handling Completed Requests\n> +---------------------------\n> +\n> +The Python bindings do not expose the ``Camera::requestCompleted`` signal\n> +directly as the signal is invoked from another thread and it has real-time\n> +constraints. Instead the bindings queue the completed requests internally and\n> +use an eventfd to inform the user that there are completed requests.\n> +\n> +The user can wait on the eventfd, and upon getting an event, use\n> +``CameraManager.get_ready_requests()`` to clear the eventfd event and to get\n> +the completed requests.\n> +\n> +Controls & Properties\n> +---------------------\n> +\n> +The classes related to controls and properties are rather complex to implement\n> +directly in the Python bindings. There are some simplifications in the Python\n> +bindings:\n> +\n> +- There is no ControlValue class. Python objects are automatically converted\n> +  to ControlValues and vice versa.\n> +- There is no ControlList class. A Python dict with ControlId keys and Python\n> +  object values is used instead.\n> +- There is no ControlInfoMap class. A Python dict with ControlId keys and\n> +  ControlInfo values is used instead.\n> --\n> 2.34.1\n>","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 1AFD4BD161\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Jun 2022 11:37:16 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 13AB565635;\n\tWed,  8 Jun 2022 13:37:15 +0200 (CEST)","from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net\n\t[217.70.183.201])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 123BC65632\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Jun 2022 13:37:14 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby mail.gandi.net (Postfix) with ESMTPSA id D08E51BF20C;\n\tWed,  8 Jun 2022 11:37:12 +0000 (UTC)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1654688235;\n\tbh=7pIGrSMcMwp3/jA3Z6t1XGBj6nqkZusSwQKUoUn1SnQ=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=N/WCk2q7Qb1mrSxiRGBv21mDDo8h0ezumpbZ9BMpTm6WOBp3o4GBXDhjiVhZHycOX\n\trU11NO4ABkbJNYt0ZHJ9xwRzFV24CgC3QEyptjZHIAmslpD7VAa9wOrUj5PJ3fo+Bd\n\tiv7qp0C0dWqbY5LTIV3bYGjQzB7SuXRL896FEXlBlq+Ntx3H1/ju4wYha2ysQjfwyz\n\tb9uoiV80HPUZRS2Q69Vcxr+NK4Ai4Cf4n387lJ07BWmfXQhW5TV3RZd9Kh2sa5DtjE\n\tNY9SZJmvFUJvB6EpWMAzX726a1hsMajOQ3L7MvHl7vMsWG0va/X9CAulIXDMsAIdUo\n\tolwbFih/fg59w==","Date":"Wed, 8 Jun 2022 13:37:11 +0200","To":"Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>","Message-ID":"<20220608113711.y5ibk2pa5mgsmt2s@uno.localdomain>","References":"<20220608072418.13154-1-tomi.valkeinen@ideasonboard.com>\n\t<20220608072418.13154-2-tomi.valkeinen@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20220608072418.13154-2-tomi.valkeinen@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v5 1/4] Documentation: Add\n\tpython-bindings.rst","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":"Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":23353,"web_url":"https://patchwork.libcamera.org/comment/23353/","msgid":"<YqCmiPhBEnjefI2E@pendragon.ideasonboard.com>","date":"2022-06-08T13:39:20","subject":"Re: [libcamera-devel] [PATCH v5 1/4] Documentation: Add\n\tpython-bindings.rst","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Tomi,\n\nOn Wed, Jun 08, 2022 at 10:24:15AM +0300, Tomi Valkeinen wrote:\n> Add a basic doc for the Python bindings. While not really proper\n> documentation yet, the file and the examples should give enough guidance\n> for users who are somewhat familiar with libcamera.\n> \n> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  Documentation/index.rst           |  1 +\n>  Documentation/meson.build         |  1 +\n>  Documentation/python-bindings.rst | 69 +++++++++++++++++++++++++++++++\n>  3 files changed, 71 insertions(+)\n>  create mode 100644 Documentation/python-bindings.rst\n> \n> diff --git a/Documentation/index.rst b/Documentation/index.rst\n> index 0ee10044..43d8b017 100644\n> --- a/Documentation/index.rst\n> +++ b/Documentation/index.rst\n> @@ -22,3 +22,4 @@\n>     Environment variables <environment_variables>\n>     Sensor driver requirements <sensor_driver_requirements>\n>     Lens driver requirements <lens_driver_requirements>\n> +   Python Bindings <python-bindings>\n> diff --git a/Documentation/meson.build b/Documentation/meson.build\n> index 8e2eacc6..7695bcb1 100644\n> --- a/Documentation/meson.build\n> +++ b/Documentation/meson.build\n> @@ -67,6 +67,7 @@ if sphinx.found()\n>          'guides/tracing.rst',\n>          'index.rst',\n>          'lens_driver_requirements.rst',\n> +        'python-bindings.rst',\n>          'sensor_driver_requirements.rst',\n>         '../README.rst',\n>      ]\n> diff --git a/Documentation/python-bindings.rst b/Documentation/python-bindings.rst\n> new file mode 100644\n> index 00000000..d59935ae\n> --- /dev/null\n> +++ b/Documentation/python-bindings.rst\n> @@ -0,0 +1,69 @@\n> +.. SPDX-License-Identifier: CC-BY-SA-4.0\n> +\n> +.. _python-bindings:\n> +\n> +Python Bindings for libcamera\n> +=============================\n> +\n> +*WARNING* The bindings are under work, and the API will change.\n\nCan I change this to\n\n.. warning:\n    The bindings are under work, and the API will change.\n\n? I'll then push the patch.\n\n> +\n> +Differences to the C++ API\n> +--------------------------\n> +\n> +As a rule of thumb the bindings try to follow the C++ API when possible. This\n> +chapter lists the differences.\n> +\n> +Mostly these differences fall under two categories:\n> +\n> +1. Differences caused by the inherent differences between C++ and Python.\n> +These differences are usually caused by the use of threads or differences in\n> +C++ vs Python memory management.\n> +\n> +2. Differences caused by the code being work-in-progress. It's not always\n> +trivial to create a binding in a satisfying way, and the current bindings\n> +contain simplified versions of the C++ API just to get forward. These\n> +differences are expected to eventually go away.\n> +\n> +Coding Style\n> +------------\n> +\n> +The C++ code for the bindings follows the libcamera coding style as much as\n> +possible. Note that the indentation does not quite follow the clang-format\n> +style, as clang-format makes a mess of the style used.\n> +\n> +The API visible to the Python side follows the Python style as much as possible.\n> +\n> +This means that e.g. ``Camera::generateConfiguration`` maps to\n> +``Camera.generate_configuration``.\n> +\n> +CameraManager\n> +-------------\n> +\n> +The Python API provides a singleton CameraManager via ``CameraManager.singleton()``.\n> +There is no need to start or stop the CameraManager.\n> +\n> +Handling Completed Requests\n> +---------------------------\n> +\n> +The Python bindings do not expose the ``Camera::requestCompleted`` signal\n> +directly as the signal is invoked from another thread and it has real-time\n> +constraints. Instead the bindings queue the completed requests internally and\n> +use an eventfd to inform the user that there are completed requests.\n> +\n> +The user can wait on the eventfd, and upon getting an event, use\n> +``CameraManager.get_ready_requests()`` to clear the eventfd event and to get\n> +the completed requests.\n> +\n> +Controls & Properties\n> +---------------------\n> +\n> +The classes related to controls and properties are rather complex to implement\n> +directly in the Python bindings. There are some simplifications in the Python\n> +bindings:\n> +\n> +- There is no ControlValue class. Python objects are automatically converted\n> +  to ControlValues and vice versa.\n> +- There is no ControlList class. A Python dict with ControlId keys and Python\n> +  object values is used instead.\n> +- There is no ControlInfoMap class. A Python dict with ControlId keys and\n> +  ControlInfo values is used instead.","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 C707BBD161\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Jun 2022 13:39:28 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 21F6F65633;\n\tWed,  8 Jun 2022 15:39:28 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9494365632\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Jun 2022 15:39:26 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id CEC8E501;\n\tWed,  8 Jun 2022 15:39:25 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1654695568;\n\tbh=LUnZjhE9E1kzxkRk5aTIf2b1ds24X0t2b4LtD+SActg=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=eEfJFqdFojLCYD0klQMxI+gB5ZMmmx3HbebGzW1z89LasdVrQiiMGfzlLMB0adEVc\n\teDJTWj10YDVIMmcX3XjK9RyVyC4Od17P/la6wlm8cwoayWu1ihlI7CBcMtN+q8YTMR\n\twk9mzMVaw54OT47iM90zooG4cMlgMCsWCTm0gpgGf/24zafVEOs6LLw/EcmqPUCmTV\n\tOQHIcnGmhcrWbD5BCjpFNusgezxuq2UUtdk//8DPclr4NfafU/pJztHHcCqtjL35y1\n\tY3VpdNjVp4rtMvs4QqD5io7QN8hZJX+MRnMPTXREZwPEagiWXVIJiACJ0x3eLTY/uJ\n\tVU+g4MDGSqxtg==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1654695566;\n\tbh=LUnZjhE9E1kzxkRk5aTIf2b1ds24X0t2b4LtD+SActg=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=brXsFM3hjoK10pnIJeIIY2GiQ4C1bZKcbiYMh3M0YfE3QZ8HoIkMFNmm1vEx25cHt\n\tfp7iCZxT/JR4JPlgu7la02XOqy+l353Qz6i+m6i+6HbVjOdJ4NNCp5eDHloq5+4Pce\n\tA3hoIwG560VEWFTLeMvpSrzdSKJaeTexWaOr0lNM="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"brXsFM3h\"; dkim-atps=neutral","Date":"Wed, 8 Jun 2022 16:39:20 +0300","To":"Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>","Message-ID":"<YqCmiPhBEnjefI2E@pendragon.ideasonboard.com>","References":"<20220608072418.13154-1-tomi.valkeinen@ideasonboard.com>\n\t<20220608072418.13154-2-tomi.valkeinen@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20220608072418.13154-2-tomi.valkeinen@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v5 1/4] Documentation: Add\n\tpython-bindings.rst","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":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":23357,"web_url":"https://patchwork.libcamera.org/comment/23357/","msgid":"<f30ada79-c9fa-66c7-7f9b-61f4cbb1618a@ideasonboard.com>","date":"2022-06-08T14:22:59","subject":"Re: [libcamera-devel] [PATCH v5 1/4] Documentation: Add\n\tpython-bindings.rst","submitter":{"id":109,"url":"https://patchwork.libcamera.org/api/people/109/","name":"Tomi Valkeinen","email":"tomi.valkeinen@ideasonboard.com"},"content":"On 08/06/2022 16:39, Laurent Pinchart wrote:\n> Hi Tomi,\n> \n> On Wed, Jun 08, 2022 at 10:24:15AM +0300, Tomi Valkeinen wrote:\n>> Add a basic doc for the Python bindings. While not really proper\n>> documentation yet, the file and the examples should give enough guidance\n>> for users who are somewhat familiar with libcamera.\n>>\n>> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n>> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>> ---\n>>   Documentation/index.rst           |  1 +\n>>   Documentation/meson.build         |  1 +\n>>   Documentation/python-bindings.rst | 69 +++++++++++++++++++++++++++++++\n>>   3 files changed, 71 insertions(+)\n>>   create mode 100644 Documentation/python-bindings.rst\n>>\n>> diff --git a/Documentation/index.rst b/Documentation/index.rst\n>> index 0ee10044..43d8b017 100644\n>> --- a/Documentation/index.rst\n>> +++ b/Documentation/index.rst\n>> @@ -22,3 +22,4 @@\n>>      Environment variables <environment_variables>\n>>      Sensor driver requirements <sensor_driver_requirements>\n>>      Lens driver requirements <lens_driver_requirements>\n>> +   Python Bindings <python-bindings>\n>> diff --git a/Documentation/meson.build b/Documentation/meson.build\n>> index 8e2eacc6..7695bcb1 100644\n>> --- a/Documentation/meson.build\n>> +++ b/Documentation/meson.build\n>> @@ -67,6 +67,7 @@ if sphinx.found()\n>>           'guides/tracing.rst',\n>>           'index.rst',\n>>           'lens_driver_requirements.rst',\n>> +        'python-bindings.rst',\n>>           'sensor_driver_requirements.rst',\n>>          '../README.rst',\n>>       ]\n>> diff --git a/Documentation/python-bindings.rst b/Documentation/python-bindings.rst\n>> new file mode 100644\n>> index 00000000..d59935ae\n>> --- /dev/null\n>> +++ b/Documentation/python-bindings.rst\n>> @@ -0,0 +1,69 @@\n>> +.. SPDX-License-Identifier: CC-BY-SA-4.0\n>> +\n>> +.. _python-bindings:\n>> +\n>> +Python Bindings for libcamera\n>> +=============================\n>> +\n>> +*WARNING* The bindings are under work, and the API will change.\n> \n> Can I change this to\n> \n> .. warning:\n>      The bindings are under work, and the API will change.\n> \n> ? I'll then push the patch.\n\nSure. Thanks!\n\n  Tomi","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 BCB53BD161\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Jun 2022 14:23:04 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 20E6E65635;\n\tWed,  8 Jun 2022 16:23:04 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6C44065632\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Jun 2022 16:23:03 +0200 (CEST)","from [192.168.1.111] (91-156-85-209.elisa-laajakaista.fi\n\t[91.156.85.209])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id B7A30501;\n\tWed,  8 Jun 2022 16:23:02 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1654698184;\n\tbh=lxXcacvYBewMVRx0YKFtSAnKcEltdPPlvWotFnDy9II=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=zKjVCI1xV+Anp+NkYXK4NUE2QiVHDl7fTkeC2lODddpO8NxRKceiR11Ej7qYpL2qh\n\tMEyH+LJazrUFzyPdHxCKAKo3i4DOaFih+CwVnLVMI5xCrGwohev58GNPBh0VRSCALQ\n\tL6znsMcXrzEzNm71O2peEH9kJINjSvQXkEWXs+8C1T0akXjpMp1P8TUVbIqTlSLrCI\n\t6wsEseAIIUFC9TRq8cpRG55lRUdsg8leozYrbEPaxA8v9uLr8vfRfk6rLPRyVcEiJu\n\tqcoZy8KpMsyWfYdb6ArO5H+fHsHi31fP8A8GRH32uMW2cLtYEGq4yOjK+gU4kTwreQ\n\tVE/DybUqz17Lw==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1654698183;\n\tbh=lxXcacvYBewMVRx0YKFtSAnKcEltdPPlvWotFnDy9II=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=uxJtHQwOhc+waZ3nGTDTWC4bPecC0rz2G84IoMjNQeOMGdlA2KpwwZCbXXrrGYIBR\n\tMUX/phfNjzxLAtS0MyZuOa4W+hSPjpRdE0R8mpAcnUSZxFLAX59ZWCQyiS/FZZvsRF\n\txntyQfgomwQ7gnAQ8Psu3FJGiz0Rh1bGqpvfuXVM="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"uxJtHQwO\"; dkim-atps=neutral","Message-ID":"<f30ada79-c9fa-66c7-7f9b-61f4cbb1618a@ideasonboard.com>","Date":"Wed, 8 Jun 2022 17:22:59 +0300","MIME-Version":"1.0","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101\n\tThunderbird/91.9.1","Content-Language":"en-US","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","References":"<20220608072418.13154-1-tomi.valkeinen@ideasonboard.com>\n\t<20220608072418.13154-2-tomi.valkeinen@ideasonboard.com>\n\t<YqCmiPhBEnjefI2E@pendragon.ideasonboard.com>","In-Reply-To":"<YqCmiPhBEnjefI2E@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH v5 1/4] Documentation: Add\n\tpython-bindings.rst","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>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]