{"id":20937,"url":"https://patchwork.libcamera.org/api/1.1/patches/20937/?format=json","web_url":"https://patchwork.libcamera.org/patch/20937/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20240815082944.170109-6-dan.scally@ideasonboard.com>","date":"2024-08-15T08:29:42","name":"[v2,5/7] Documentation: Remove camera stack from introduction.rst","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"655de3bcb951020c98818f81bdfbc82baadd20e0","submitter":{"id":156,"url":"https://patchwork.libcamera.org/api/1.1/people/156/?format=json","name":"Dan Scally","email":"dan.scally@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/20937/mbox/","series":[{"id":4521,"url":"https://patchwork.libcamera.org/api/1.1/series/4521/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=4521","date":"2024-08-15T08:29:37","name":"Documentation improvements","version":2,"mbox":"https://patchwork.libcamera.org/series/4521/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/20937/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/20937/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 73658C32A9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 15 Aug 2024 08:30:16 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4EFD4633C9;\n\tThu, 15 Aug 2024 10:30:15 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C684C633C0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 15 Aug 2024 10:30:04 +0200 (CEST)","from mail.ideasonboard.com\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 78EC1AD8;\n\tThu, 15 Aug 2024 10:29:06 +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=\"WKZvUHD/\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1723710546;\n\tbh=zciuuDUELT9FEPe1x2lbqBc4TiibKBUSbZq882OyAlE=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=WKZvUHD/MPn0aCLxJ5OuzkU+UBxsBUtY02ji6zJKnXOP/aIwXX0lAxySnAh5A5fE5\n\t6VksIu2NUhTMnjNyEIUAXXmQu0+8uJ9shgwzTNsvWUC/wYhp+NZni5cKOEPpPjEbUU\n\t8jdjSncLQmjsIHcvZXtLXXWwGcn2U+Z3STj6qboQ=","From":"Daniel Scally <dan.scally@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Cc":"Daniel Scally <dan.scally@ideasonboard.com>","Subject":"[PATCH v2 5/7] Documentation: Remove camera stack from\n\tintroduction.rst","Date":"Thu, 15 Aug 2024 09:29:42 +0100","Message-Id":"<20240815082944.170109-6-dan.scally@ideasonboard.com>","X-Mailer":"git-send-email 2.34.1","In-Reply-To":"<20240815082944.170109-1-dan.scally@ideasonboard.com>","References":"<20240815082944.170109-1-dan.scally@ideasonboard.com>","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 Camera Stack section of the introduction is largely a duplicate\nof the section broken out from docs.rst. Remove it from the\nintroduction.rst file and consolidate anything that wasn't duplicated\ninto camera_stack.rst.\n\nSigned-off-by: Daniel Scally <dan.scally@ideasonboard.com>\n---\nChanges since v1:\n\n\t- None\n\n Documentation/camera_stack.rst        |  31 +++++++\n Documentation/guides/introduction.rst | 112 +-------------------------\n 2 files changed, 33 insertions(+), 110 deletions(-)","diff":"diff --git a/Documentation/camera_stack.rst b/Documentation/camera_stack.rst\nindex 381385cb..6045ed91 100644\n--- a/Documentation/camera_stack.rst\n+++ b/Documentation/camera_stack.rst\n@@ -76,3 +76,34 @@ The camera stack comprises four software layers. From bottom to top:\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+V4L2 Compatibility Layer\n+  V4L2 compatibility is achieved through a shared library that traps all\n+  accesses to camera devices and routes them to libcamera to emulate high-level\n+  V4L2 camera devices. It is injected in a process address space through\n+  ``LD_PRELOAD`` and is completely transparent for applications.\n+\n+  The compatibility layer exposes camera device features on a best-effort basis,\n+  and aims for the level of features traditionally available from a UVC camera\n+  designed for video conferencing.\n+\n+Android Camera HAL\n+  Camera support for Android is achieved through a generic Android camera HAL\n+  implementation on top of libcamera. The HAL implements features required by\n+  Android and out of scope from libcamera, such as JPEG encoding support.\n+\n+  This component is used to provide support for ChromeOS platforms\n+\n+GStreamer element (gstlibcamerasrc)\n+  A `GStreamer element`_ is provided to allow capture from libcamera supported\n+  devices through GStreamer pipelines, and connect to other elements for further\n+  processing.\n+\n+  Development of this element is ongoing and is limited to a single stream.\n+\n+Native libcamera API\n+  Applications can make use of the libcamera API directly using the C++\n+  API. An example application and walkthrough using the libcamera API can be\n+  followed in the :doc:`Application writer's guide </guides/application-developer>`\n+\n+.. _GStreamer element: https://gstreamer.freedesktop.org/documentation/application-development/basics/elements.html\ndiff --git a/Documentation/guides/introduction.rst b/Documentation/guides/introduction.rst\nindex 1898d5fe..e419eb9d 100644\n--- a/Documentation/guides/introduction.rst\n+++ b/Documentation/guides/introduction.rst\n@@ -26,10 +26,8 @@ desirable results from the camera.\n .. _Media Controller: https://www.linuxtv.org/downloads/v4l-dvb-apis-new/userspace-api/mediactl/media-controller.html\n \n \n-In this developers guide, we will explore the `Camera Stack`_ and how it is\n-can be visualised at a high level. The current `Platform Support`_ is\n-detailed, as well as an overview of the `Licensing`_ requirements of the\n-project.\n+In this developers guide the current `Platform Support`_ is detailed, as well as\n+an overview of the `Licensing`_ requirements of the project.\n \n This introduction is followed by a walkthrough tutorial to newcomers wishing to\n support a new platform with the `Pipeline Handler Writers Guide`_ and for those\n@@ -41,112 +39,6 @@ provides a tutorial of the key APIs exposed by libcamera.\n \n .. TODO: Correctly link to the other articles of the guide\n \n-Camera Stack\n-------------\n-\n-The libcamera library is implemented in userspace, and makes use of underlying\n-kernel drivers that directly interact with hardware.\n-\n-Applications can make use of libcamera through the native `libcamera API`_'s or\n-through an adaptation layer integrating libcamera into a larger framework.\n-\n-.. _libcamera API: https://www.libcamera.org/api-html/index.html\n-\n-::\n-\n-    Application Layer\n-     /    +--------------+  +--------------+  +--------------+  +--------------+\n-     |    |    Native    |  |   Framework  |  |    Native    |  |   Android    |\n-     |    |     V4L2     |  |  Application |  |   libcamera  |  |   Camera     |\n-     |    |  Application |  |  (gstreamer) |  |  Application |  |  Framework   |\n-     \\    +--------------+  +--------------+  +--------------+  +--------------+\n-\n-                 ^                 ^                 ^                 ^\n-                 |                 |                 |                 |\n-                 |                 |                 |                 |\n-                 v                 v                 |                 v\n-    Adaptation Layer                                 |\n-     /    +--------------+  +--------------+         |          +--------------+\n-     |    |    V4L2      |  |  gstreamer   |         |          |   Android    |\n-     |    | Compatibility|  |   element    |         |          |   Camera     |\n-     |    |  (preload)   |  |(libcamerasrc)|         |          |     HAL      |\n-     \\    +--------------+  +--------------+         |          +--------------+\n-                                                     |\n-                 ^                 ^                 |                 ^\n-                 |                 |                 |                 |\n-                 |                 |                 |                 |\n-                 v                 v                 v                 v\n-    libcamera Framework\n-     /    +--------------------------------------------------------------------+\n-     |    |                                                                    |\n-     |    |                             libcamera                              |\n-     |    |                                                                    |\n-     \\    +--------------------------------------------------------------------+\n-\n-                         ^                  ^                  ^\n-    Userspace            |                  |                  |\n-   --------------------- | ---------------- | ---------------- | ---------------\n-    Kernel               |                  |                  |\n-                         v                  v                  v\n-\n-                   +-----------+      +-----------+      +-----------+\n-                   |   Media   | <--> |   Video   | <--> |   V4L2    |\n-                   |  Device   |      |  Device   |      |  Subdev   |\n-                   +-----------+      +-----------+      +-----------+\n-\n-The camera stack comprises of four software layers. From bottom to top:\n-\n-* The kernel drivers control the camera hardware and expose a low-level\n-  interface to userspace through the Linux kernel V4L2 family of APIs\n-  (Media Controller API, V4L2 Video Device API and V4L2 Subdev API).\n-\n-* The libcamera framework is the core part of the stack. It handles all control\n-  of the camera devices in its core component, libcamera, and exposes a native\n-  C++ API to upper layers.\n-\n-* The libcamera adaptation layer is an umbrella term designating the components\n-  that interface to libcamera in other frameworks. Notable examples are the V4L2\n-  compatibility layer, the gstreamer libcamera element, and the Android camera\n-  HAL implementation based on libcamera which are provided as a part of the\n-  libcamera project.\n-\n-* The applications and upper level frameworks are based on the libcamera\n-  framework or libcamera adaptation, and are outside of the scope of the\n-  libcamera project, however example native applications (cam, qcam) are\n-  provided for testing.\n-\n-\n-V4L2 Compatibility Layer\n-  V4L2 compatibility is achieved through a shared library that traps all\n-  accesses to camera devices and routes them to libcamera to emulate high-level\n-  V4L2 camera devices. It is injected in a process address space through\n-  ``LD_PRELOAD`` and is completely transparent for applications.\n-\n-  The compatibility layer exposes camera device features on a best-effort basis,\n-  and aims for the level of features traditionally available from a UVC camera\n-  designed for video conferencing.\n-\n-Android Camera HAL\n-  Camera support for Android is achieved through a generic Android camera HAL\n-  implementation on top of libcamera. The HAL implements features required by\n-  Android and out of scope from libcamera, such as JPEG encoding support.\n-\n-  This component is used to provide support for ChromeOS platforms\n-\n-GStreamer element (gstlibcamerasrc)\n-  A `GStreamer element`_ is provided to allow capture from libcamera supported\n-  devices through GStreamer pipelines, and connect to other elements for further\n-  processing.\n-\n-  Development of this element is ongoing and is limited to a single stream.\n-\n-Native libcamera API\n-  Applications can make use of the libcamera API directly using the C++\n-  API. An example application and walkthrough using the libcamera API can be\n-  followed in the `Application Writers Guide`_\n-\n-.. _GStreamer element: https://gstreamer.freedesktop.org/documentation/application-development/basics/elements.html\n-\n Platform Support\n ----------------\n \n","prefixes":["v2","5/7"]}