[{"id":30840,"web_url":"https://patchwork.libcamera.org/comment/30840/","msgid":"<6bab021a-5c51-4f4a-8b5b-bb054a7d5212@ideasonboard.com>","date":"2024-08-15T09:55:48","subject":"Re: [PATCH v2 4/7] Documentation: Breakout docs.rst","submitter":{"id":156,"url":"https://patchwork.libcamera.org/api/people/156/","name":"Dan Scally","email":"dan.scally@ideasonboard.com"},"content":"On 15/08/2024 09:29, Daniel Scally wrote:\n> In preparation for including more of the Documentation for libcamera\n> on the website, break out the Camera Stack and Feature Requirements\n> sections of docs.rst file into separate files for each section. Add\n> all of the new files to documentation-contents.rst so they're\n> included on the website too.\n>\n> Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>\n> ---\n> Changes since v1:\n>\n> \t- Included the new files in meson's docs_sources array\n>\n>\n>   Documentation/camera_stack.rst           |  78 ++++++++\n>   Documentation/docs.rst                   | 219 -----------------------\n>   Documentation/documentation-contents.rst |   2 +\n>   Documentation/feature_requirements.rst   | 145 +++++++++++++++\n>   Documentation/index.rst                  |   2 +\n>   Documentation/meson.build                |   2 +\n>   6 files changed, 229 insertions(+), 219 deletions(-)\n>   create mode 100644 Documentation/camera_stack.rst\n>   create mode 100644 Documentation/feature_requirements.rst\n>\n> diff --git a/Documentation/camera_stack.rst b/Documentation/camera_stack.rst\n> new file mode 100644\n> index 00000000..381385cb\n> --- /dev/null\n> +++ b/Documentation/camera_stack.rst\n> @@ -0,0 +1,78 @@\n> +.. SPDX-License-Identifier: CC-BY-SA-4.0\n> +\n> +.. include:: documentation-contents.rst\n> +\n> +Camera Stack\n> +============\n> +\n> +::\n> +\n> +    a c /    +-------------+  +-------------+  +-------------+  +-------------+\n> +    p a |    |   Native    |  |  Framework  |  |   Native    |  |   Android   |\n> +    p t |    |    V4L2     |  | Application |  |  libcamera  |  |   Camera    |\n> +    l i |    | Application |  | (gstreamer) |  | Application |  |  Framework  |\n> +    i o \\    +-------------+  +-------------+  +-------------+  +-------------+\n> +      n             ^                ^                ^                ^\n> +                    |                |                |                |\n> +    l a             |                |                |                |\n> +    i d             v                v                |                v\n> +    b a /    +-------------+  +-------------+         |         +-------------+\n> +    c p |    |    V4L2     |  |   Camera    |         |         |   Android   |\n> +    a t |    |   Compat.   |  |  Framework  |         |         |   Camera    |\n> +    m a |    |             |  | (gstreamer) |         |         |     HAL     |\n> +    e t \\    +-------------+  +-------------+         |         +-------------+\n> +    r i             ^                ^                |                ^\n> +    a o             |                |                |                |\n> +      n             |                |                |                |\n> +        /           |         ,................................................\n> +        |           |         !      :            Language             :      !\n> +    l f |           |         !      :            Bindings             :      !\n> +    i r |           |         !      :           (optional)            :      !\n> +    b a |           |         \\...............................................'\n> +    c m |           |                |                |                |\n> +    a e |           |                |                |                |\n> +    m w |           v                v                v                v\n> +    e o |    +----------------------------------------------------------------+\n> +    r r |    |                                                                |\n> +    a k |    |                           libcamera                            |\n> +        |    |                                                                |\n> +        \\    +----------------------------------------------------------------+\n> +                            ^                  ^                  ^\n> +    Userspace               |                  |                  |\n> +   ------------------------ | ---------------- | ---------------- | ---------------\n> +    Kernel                  |                  |                  |\n> +                            v                  v                  v\n> +                      +-----------+      +-----------+      +-----------+\n> +                      |   Media   | <--> |   Video   | <--> |   V4L2    |\n> +                      |  Device   |      |  Device   |      |  Subdev   |\n> +                      +-----------+      +-----------+      +-----------+\n> +\n> +The camera stack comprises four software layers. From bottom to top:\n> +\n> +* The kernel drivers control the camera hardware and expose a\n> +  low-level interface to userspace through the Linux kernel V4L2\n> +  family of APIs (Media Controller API, V4L2 Video Device API and\n> +  V4L2 Subdev API).\n> +\n> +* The libcamera framework is the core part of the stack. It\n> +  handles all control of the camera devices in its core component,\n> +  libcamera, and exposes a native C++ API to upper layers. Optional\n> +  language bindings allow interfacing to libcamera from other\n> +  programming languages.\n> +\n> +  Those components live in the same source code repository and\n> +  all together constitute the libcamera framework.\n> +\n> +* The libcamera adaptation is an umbrella term designating the\n> +  components that interface to libcamera in other frameworks.\n> +  Notable examples are a V4L2 compatibility layer, a gstreamer\n> +  libcamera element, and an Android camera HAL implementation based\n> +  on libcamera.\n> +\n> +  Those components can live in the libcamera project source code\n> +  in separate repositories, or move to their respective project's\n> +  repository (for instance the gstreamer libcamera element).\n> +\n> +* The applications and upper level frameworks are based on the\n> +  libcamera framework or libcamera adaptation, and are outside of\n> +  the scope of the libcamera project.\n> diff --git a/Documentation/docs.rst b/Documentation/docs.rst\n> index 10f07a9e..d65b2b4f 100644\n> --- a/Documentation/docs.rst\n> +++ b/Documentation/docs.rst\n> @@ -21,225 +21,6 @@ The libcamera API is extensively documented using Doxygen. The :ref:`API\n>   nightly build <api>` contains the most up-to-date API documentation, built from\n>   the latest master branch.\n>   \n> -Feature Requirements\n> -====================\n> -\n> -Device enumeration\n> -------------------\n> -\n> -The library shall support enumerating all camera devices available in the\n> -system, including both fixed cameras and hotpluggable cameras. It shall\n> -support cameras plugged and unplugged after the initialization of the\n> -library, and shall offer a mechanism to notify applications of camera plug\n> -and unplug.\n> -\n> -The following types of cameras shall be supported:\n> -\n> -* Internal cameras designed for point-and-shoot still image and video\n> -  capture usage, either controlled directly by the CPU, or exposed through\n> -  an internal USB bus as a UVC device.\n> -\n> -* External UVC cameras designed for video conferencing usage.\n> -\n> -Other types of camera, including analog cameras, depth cameras, thermal\n> -cameras, external digital picture or movie cameras, are out of scope for\n> -this project.\n> -\n> -A hardware device that includes independent camera sensors, such as front\n> -and back sensors in a phone, shall be considered as multiple camera devices\n> -for the purpose of this library.\n> -\n> -Independent Camera Devices\n> ---------------------------\n> -\n> -When multiple cameras are present in the system and are able to operate\n> -independently from each other, the library shall expose them as multiple\n> -camera devices and support parallel operation without any additional usage\n> -restriction apart from the limitations inherent to the hardware (such as\n> -memory bandwidth, CPU usage or number of CSI-2 receivers for instance).\n> -\n> -Independent processes shall be able to use independent cameras devices\n> -without interfering with each other. A single camera device shall be\n> -usable by a single process at a time.\n> -\n> -Multiple streams support\n> -------------------------\n> -\n> -The library shall support multiple video streams running in parallel\n> -for each camera device, within the limits imposed by the system.\n> -\n> -Per frame controls\n> -------------------\n> -\n> -The library shall support controlling capture parameters for each stream\n> -on a per-frame basis, on a best effort basis based on the capabilities of the\n> -hardware and underlying software stack (including kernel drivers and\n> -firmware). It shall apply capture parameters to the frame they target, and\n> -report the value of the parameters that have effectively been used for each\n> -captured frame.\n> -\n> -When a camera device supports multiple streams, the library shall allow both\n> -control of each stream independently, and control of multiple streams\n> -together. Streams that are controlled together shall be synchronized. No\n> -synchronization is required for streams controlled independently.\n> -\n> -Capability Enumeration\n> -----------------------\n> -\n> -The library shall expose capabilities of each camera device in a way that\n> -allows applications to discover those capabilities dynamically. Applications\n> -shall be allowed to cache capabilities for as long as they are using the\n> -library. If capabilities can change at runtime, the library shall offer a\n> -mechanism to notify applications of such changes. Applications shall not\n> -cache capabilities in long term storage between runs.\n> -\n> -Capabilities shall be discovered dynamically at runtime from the device when\n> -possible, and may come, in part or in full, from platform configuration\n> -data.\n> -\n> -Device Profiles\n> ----------------\n> -\n> -The library may define different camera device profiles, each with a minimum\n> -set of required capabilities. Applications may use those profiles to quickly\n> -determine the level of features exposed by a device without parsing the full\n> -list of capabilities. Camera devices may implement additional capabilities\n> -on top of the minimum required set for the profile they expose.\n> -\n> -3A and Image Enhancement Algorithms\n> ------------------------------------\n> -\n> -The camera devices shall implement auto exposure, auto gain and auto white\n> -balance. Camera devices that include a focus lens shall implement auto\n> -focus. Additional image enhancement algorithms, such as noise reduction or\n> -video stabilization, may be implemented.\n> -\n> -All algorithms may be implemented in hardware or firmware outside of the\n> -library, or in software in the library. They shall all be controllable by\n> -applications.\n> -\n> -The library shall be architectured to isolate the 3A and image enhancement\n> -algorithms in a component with a documented API, respectively called the 3A\n> -component and the 3A API. The 3A API shall be stable, and shall allow both\n> -open-source and closed-source implementations of the 3A component.\n> -\n> -The library may include statically-linked open-source 3A components, and\n> -shall support dynamically-linked open-source and closed-source 3A\n> -components.\n> -\n> -Closed-source 3A Component Sandboxing\n> --------------------------------------\n> -\n> -For security purposes, it may be desired to run closed-source 3A components\n> -in a separate process. The 3A API would in such a case be transported over\n> -IPC. The 3A API shall make it possible to use any IPC mechanism that\n> -supports passing file descriptors.\n> -\n> -The library may implement an IPC mechanism, and shall support third-party\n> -platform-specific IPC mechanisms through the implementation of a\n> -platform-specific 3A API wrapper. No modification to the library shall be\n> -needed to use such third-party IPC mechanisms.\n> -\n> -The 3A component shall not directly access any device node on the system.\n> -Such accesses shall instead be performed through the 3A API. The library\n> -shall validate all accesses and restrict them to what is absolutely required\n> -by 3A components.\n> -\n> -V4L2 Compatibility Layer\n> -------------------------\n> -\n> -The project shall support traditional V4L2 application through an additional\n> -libcamera wrapper library. The wrapper library shall trap all accesses to\n> -camera devices through `LD_PRELOAD`, and route them through libcamera to\n> -emulate a high-level V4L2 camera device. It shall expose camera device\n> -features on a best-effort basis, and aim for the level of features\n> -traditionally available from a UVC camera designed for video conferencing.\n> -\n> -Android Camera HAL v3 Compatibility\n> ------------------------------------\n> -\n> -The library API shall expose all the features required to implement an\n> -Android Camera HAL v3 on top of libcamera. Some features of the HAL may be\n> -omitted as long as they can be implemented separately in the HAL, such as\n> -JPEG encoding, or YUV reprocessing.\n> -\n> -\n> -Camera Stack\n> -============\n> -\n> -::\n> -\n> -    a c /    +-------------+  +-------------+  +-------------+  +-------------+\n> -    p a |    |   Native    |  |  Framework  |  |   Native    |  |   Android   |\n> -    p t |    |    V4L2     |  | Application |  |  libcamera  |  |   Camera    |\n> -    l i |    | Application |  | (gstreamer) |  | Application |  |  Framework  |\n> -    i o \\    +-------------+  +-------------+  +-------------+  +-------------+\n> -      n             ^                ^                ^                ^\n> -                    |                |                |                |\n> -    l a             |                |                |                |\n> -    i d             v                v                |                v\n> -    b a /    +-------------+  +-------------+         |         +-------------+\n> -    c p |    |    V4L2     |  |   Camera    |         |         |   Android   |\n> -    a t |    |   Compat.   |  |  Framework  |         |         |   Camera    |\n> -    m a |    |             |  | (gstreamer) |         |         |     HAL     |\n> -    e t \\    +-------------+  +-------------+         |         +-------------+\n> -    r i             ^                ^                |                ^\n> -    a o             |                |                |                |\n> -      n             |                |                |                |\n> -        /           |         ,................................................\n> -        |           |         !      :            Language             :      !\n> -    l f |           |         !      :            Bindings             :      !\n> -    i r |           |         !      :           (optional)            :      !\n> -    b a |           |         \\...............................................'\n> -    c m |           |                |                |                |\n> -    a e |           |                |                |                |\n> -    m w |           v                v                v                v\n> -    e o |    +----------------------------------------------------------------+\n> -    r r |    |                                                                |\n> -    a k |    |                           libcamera                            |\n> -        |    |                                                                |\n> -        \\    +----------------------------------------------------------------+\n> -                            ^                  ^                  ^\n> -    Userspace               |                  |                  |\n> -   ------------------------ | ---------------- | ---------------- | ---------------\n> -    Kernel                  |                  |                  |\n> -                            v                  v                  v\n> -                      +-----------+      +-----------+      +-----------+\n> -                      |   Media   | <--> |   Video   | <--> |   V4L2    |\n> -                      |  Device   |      |  Device   |      |  Subdev   |\n> -                      +-----------+      +-----------+      +-----------+\n> -\n> -The camera stack comprises four software layers. From bottom to top:\n> -\n> -* The kernel drivers control the camera hardware and expose a\n> -  low-level interface to userspace through the Linux kernel V4L2\n> -  family of APIs (Media Controller API, V4L2 Video Device API and\n> -  V4L2 Subdev API).\n> -\n> -* The libcamera framework is the core part of the stack. It\n> -  handles all control of the camera devices in its core component,\n> -  libcamera, and exposes a native C++ API to upper layers. Optional\n> -  language bindings allow interfacing to libcamera from other\n> -  programming languages.\n> -\n> -  Those components live in the same source code repository and\n> -  all together constitute the libcamera framework.\n> -\n> -* The libcamera adaptation is an umbrella term designating the\n> -  components that interface to libcamera in other frameworks.\n> -  Notable examples are a V4L2 compatibility layer, a gstreamer\n> -  libcamera element, and an Android camera HAL implementation based\n> -  on libcamera.\n> -\n> -  Those components can live in the libcamera project source code\n> -  in separate repositories, or move to their respective project's\n> -  repository (for instance the gstreamer libcamera element).\n> -\n> -* The applications and upper level frameworks are based on the\n> -  libcamera framework or libcamera adaptation, and are outside of\n> -  the scope of the libcamera project.\n> -\n> -\n>   libcamera Architecture\n>   ======================\n>   \n> diff --git a/Documentation/documentation-contents.rst b/Documentation/documentation-contents.rst\n> index a6915e05..613366d1 100644\n> --- a/Documentation/documentation-contents.rst\n> +++ b/Documentation/documentation-contents.rst\n> @@ -4,9 +4,11 @@\n>   \n>      * :doc:`/api-html/index`\n>      * :doc:`/camera-sensor-model`\n> +   * :doc:`/camera_stack`\n>      * :doc:`/code-of-conduct`\n>      * :doc:`/coding-style`\n>      * :doc:`/environment_variables`\n> +   * :doc:`/feature_requirements`\n>      * :doc:`/guides/application-developer`\n>      * :doc:`/guides/introduction`\n>      * :doc:`/guides/ipa`\n> diff --git a/Documentation/feature_requirements.rst b/Documentation/feature_requirements.rst\n> new file mode 100644\n> index 00000000..cae7e9ab\n> --- /dev/null\n> +++ b/Documentation/feature_requirements.rst\n> @@ -0,0 +1,145 @@\n> +.. SPDX-License-Identifier: CC-BY-SA-4.0\n> +\n> +.. include:: documentation-contents.rst\n> +\n> +Feature Requirements\n> +====================\n> +\n> +Device enumeration\n> +------------------\n> +\n> +The library shall support enumerating all camera devices available in the\n> +system, including both fixed cameras and hotpluggable cameras. It shall\n> +support cameras plugged and unplugged after the initialization of the\n> +library, and shall offer a mechanism to notify applications of camera plug\n> +and unplug.\n> +\n> +The following types of cameras shall be supported:\n> +\n> +* Internal cameras designed for point-and-shoot still image and video\n> +  capture usage, either controlled directly by the CPU, or exposed through\n> +  an internal USB bus as a UVC device.\n> +\n> +* External UVC cameras designed for video conferencing usage.\n> +\n> +Other types of camera, including analog cameras, depth cameras, thermal\n> +cameras, external digital picture or movie cameras, are out of scope for\n> +this project.\n> +\n> +A hardware device that includes independent camera sensors, such as front\n> +and back sensors in a phone, shall be considered as multiple camera devices\n> +for the purpose of this library.\n> +\n> +Independent Camera Devices\n> +--------------------------\n> +\n> +When multiple cameras are present in the system and are able to operate\n> +independently from each other, the library shall expose them as multiple\n> +camera devices and support parallel operation without any additional usage\n> +restriction apart from the limitations inherent to the hardware (such as\n> +memory bandwidth, CPU usage or number of CSI-2 receivers for instance).\n> +\n> +Independent processes shall be able to use independent cameras devices\n> +without interfering with each other. A single camera device shall be\n> +usable by a single process at a time.\n> +\n> +Multiple streams support\n> +------------------------\n> +\n> +The library shall support multiple video streams running in parallel\n> +for each camera device, within the limits imposed by the system.\n> +\n> +Per frame controls\n> +------------------\n> +\n> +The library shall support controlling capture parameters for each stream\n> +on a per-frame basis, on a best effort basis based on the capabilities of the\n> +hardware and underlying software stack (including kernel drivers and\n> +firmware). It shall apply capture parameters to the frame they target, and\n> +report the value of the parameters that have effectively been used for each\n> +captured frame.\n> +\n> +When a camera device supports multiple streams, the library shall allow both\n> +control of each stream independently, and control of multiple streams\n> +together. Streams that are controlled together shall be synchronized. No\n> +synchronization is required for streams controlled independently.\n> +\n> +Capability Enumeration\n> +----------------------\n> +\n> +The library shall expose capabilities of each camera device in a way that\n> +allows applications to discover those capabilities dynamically. Applications\n> +shall be allowed to cache capabilities for as long as they are using the\n> +library. If capabilities can change at runtime, the library shall offer a\n> +mechanism to notify applications of such changes. Applications shall not\n> +cache capabilities in long term storage between runs.\n> +\n> +Capabilities shall be discovered dynamically at runtime from the device when\n> +possible, and may come, in part or in full, from platform configuration\n> +data.\n> +\n> +Device Profiles\n> +---------------\n> +\n> +The library may define different camera device profiles, each with a minimum\n> +set of required capabilities. Applications may use those profiles to quickly\n> +determine the level of features exposed by a device without parsing the full\n> +list of capabilities. Camera devices may implement additional capabilities\n> +on top of the minimum required set for the profile they expose.\n> +\n> +3A and Image Enhancement Algorithms\n> +-----------------------------------\n> +\n> +The camera devices shall implement auto exposure, auto gain and auto white\n> +balance. Camera devices that include a focus lens shall implement auto\n> +focus. Additional image enhancement algorithms, such as noise reduction or\n> +video stabilization, may be implemented.\n> +\n> +All algorithms may be implemented in hardware or firmware outside of the\n> +library, or in software in the library. They shall all be controllable by\n> +applications.\n> +\n> +The library shall be architectured to isolate the 3A and image enhancement\n> +algorithms in a component with a documented API, respectively called the 3A\n> +component and the 3A API. The 3A API shall be stable, and shall allow both\n> +open-source and closed-source implementations of the 3A component.\n> +\n> +The library may include statically-linked open-source 3A components, and\n> +shall support dynamically-linked open-source and closed-source 3A\n> +components.\n> +\n> +Closed-source 3A Component Sandboxing\n> +-------------------------------------\n> +\n> +For security purposes, it may be desired to run closed-source 3A components\n> +in a separate process. The 3A API would in such a case be transported over\n> +IPC. The 3A API shall make it possible to use any IPC mechanism that\n> +supports passing file descriptors.\n> +\n> +The library may implement an IPC mechanism, and shall support third-party\n> +platform-specific IPC mechanisms through the implementation of a\n> +platform-specific 3A API wrapper. No modification to the library shall be\n> +needed to use such third-party IPC mechanisms.\n> +\n> +The 3A component shall not directly access any device node on the system.\n> +Such accesses shall instead be performed through the 3A API. The library\n> +shall validate all accesses and restrict them to what is absolutely required\n> +by 3A components.\n> +\n> +V4L2 Compatibility Layer\n> +------------------------\n> +\n> +The project shall support traditional V4L2 application through an additional\n> +libcamera wrapper library. The wrapper library shall trap all accesses to\n> +camera devices through `LD_PRELOAD`, and route them through libcamera to\n> +emulate a high-level V4L2 camera device. It shall expose camera device\n> +features on a best-effort basis, and aim for the level of features\n> +traditionally available from a UVC camera designed for video conferencing.\n> +\n> +Android Camera HAL v3 Compatibility\n> +-----------------------------------\n> +\n> +The library API shall expose all the features required to implement an\n> +Android Camera HAL v3 on top of libcamera. Some features of the HAL may be\n> +omitted as long as they can be implemented separately in the HAL, such as\n> +JPEG encoding, or YUV reprocessing.\n> diff --git a/Documentation/index.rst b/Documentation/index.rst\n> index 52ddc494..59416906 100644\n> --- a/Documentation/index.rst\n> +++ b/Documentation/index.rst\n> @@ -16,8 +16,10 @@\n>   \n>      Application Writer's Guide <guides/application-developer>\n>      Camera Sensor Model <camera-sensor-model>\n> +   Camera Stack <camera_stack>\n>      Developer Guide <guides/introduction>\n>      Environment variables <environment_variables>\n> +   Feature Requirements <feature_requirements>\n>      IPA Writer's guide <guides/ipa>\n>      Lens driver requirements <lens_driver_requirements>\n>      Pipeline Handler Writer's Guide <guides/pipeline-handler>\n> diff --git a/Documentation/meson.build b/Documentation/meson.build\n> index c5736991..74cffc11 100644\n> --- a/Documentation/meson.build\n> +++ b/Documentation/meson.build\n> @@ -124,6 +124,7 @@ endif\n>   if sphinx.found()\n>       docs_sources = [\n>           'camera-sensor-model.rst',\n> +\t'camera_stack.rst',\n>           'code-of-conduct.rst',\n>           'coding-style.rst',\n>           'conf.py',\n> @@ -131,6 +132,7 @@ if sphinx.found()\n>           'docs.rst',\n>   \t'documentation-contents.rst',\n>           'environment_variables.rst',\n> +\t'feature_requirements.rst','\nOops, a stray quotation mark there breaks the build with ninja -C build...but not with sphinx-build \nwhich is what I was testing; my bad. I'll send a new version of this patch.\n>           'guides/application-developer.rst',\n>           'guides/introduction.rst',\n>           'guides/ipa.rst',","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 CB6ABC323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 15 Aug 2024 09:55:53 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A8E39633BD;\n\tThu, 15 Aug 2024 11:55:52 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2E99663393\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 15 Aug 2024 11:55:51 +0200 (CEST)","from [192.168.0.43]\n\t(cpc141996-chfd3-2-0-cust928.12-3.cable.virginm.net [86.13.91.161])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 9A1F1A34\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 15 Aug 2024 11:54:52 +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=\"K3N3t4Ac\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1723715692;\n\tbh=27Tlu6hh+kg/Cv2BYYf4I3jysRQm0rpZj2ZDU7Gw1/8=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=K3N3t4AcDawXFIfLaH6vkFCp840zWBjzs8shnv8fUM/CPufN8gGEzTRu3ELEfZqyE\n\tyx3wcf1Wmsap+JahKq555JPSxG+Xl/Mt4JmsqDbF6/+odJxtMlj/MkXmi8YGjBJwdK\n\tAn1H8aVmMw2A4XZB+ydnEKXSthWxBVqimlpd8Qg0=","Message-ID":"<6bab021a-5c51-4f4a-8b5b-bb054a7d5212@ideasonboard.com>","Date":"Thu, 15 Aug 2024 10:55:48 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v2 4/7] Documentation: Breakout docs.rst","To":"libcamera-devel@lists.libcamera.org","References":"<20240815082944.170109-1-dan.scally@ideasonboard.com>\n\t<20240815082944.170109-5-dan.scally@ideasonboard.com>","Content-Language":"en-US","From":"Dan Scally <dan.scally@ideasonboard.com>","Autocrypt":"addr=dan.scally@ideasonboard.com; keydata=\n\t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","In-Reply-To":"<20240815082944.170109-5-dan.scally@ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","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>"}}]