Show a cover letter.

GET /api/1.1/covers/13086/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 13086,
    "url": "https://patchwork.libcamera.org/api/1.1/covers/13086/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/13086/",
    "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": "<20210723040036.32346-1-laurent.pinchart@ideasonboard.com>",
    "date": "2021-07-23T04:00:19",
    "name": "[libcamera-devel,RFC,00/17] libcamera: Replace CameraData with Camera::Private",
    "submitter": {
        "id": 2,
        "url": "https://patchwork.libcamera.org/api/1.1/people/2/?format=api",
        "name": "Laurent Pinchart",
        "email": "laurent.pinchart@ideasonboard.com"
    },
    "mbox": "https://patchwork.libcamera.org/cover/13086/mbox/",
    "series": [
        {
            "id": 2270,
            "url": "https://patchwork.libcamera.org/api/1.1/series/2270/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2270",
            "date": "2021-07-23T04:00:19",
            "name": "libcamera: Replace CameraData with Camera::Private",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/2270/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/13086/comments/",
    "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 3E262C322B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 23 Jul 2021 04:00:46 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 60525687B0;\n\tFri, 23 Jul 2021 06:00:45 +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 2247760274\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 23 Jul 2021 06:00:43 +0200 (CEST)",
            "from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 965A6255\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 23 Jul 2021 06:00:42 +0200 (CEST)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"ktcd8NIK\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1627012842;\n\tbh=p+qnx+b+MhPlwCmqs1imM+b/SKD4/R2+Eh1A92rZkJQ=;\n\th=From:To:Subject:Date:From;\n\tb=ktcd8NIK4K684+tzpxfoiMRYMBJevlqki16oiJcGpKinuQ67jGDE+etPQlTx03lfD\n\tBejys0HelfLosVjnxfQpfO8AT3ZTBQdlnv37qPqcnYg7d0BVZJSkgqPI4HaGlfMihG\n\tcMi9MihyT6okSOp/g6Bv0pdymqpCLRl3mNDhdxrs=",
        "From": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Fri, 23 Jul 2021 07:00:19 +0300",
        "Message-Id": "<20210723040036.32346-1-laurent.pinchart@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.31.1",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [RFC PATCH 00/17] libcamera: Replace CameraData\n\twith Camera::Private",
        "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": "Hello,\n\nThis patch series reworks the libcamera core and pipeline handlers to\ndrop the CameraData class, replacing it with Camera::Private.\n\nThe Camera::Private class implements the d-pointer design pattern for\nthe Camera class, and stores internal camera data that shouldn't be\nvisible through the public API. The CameraData class is a container used\nby pipeline handlers to store per-camera private data. The two classes\nthus overlap in their purpose.\n\nThis series cleans up this situation by merging CameraData into\nCamera::Private. Pipeline handlers then subclass Camera::Private instead\nof CameraData, and pass the private data directly to the Camera\nconstructor.\n\nThe series starts with two documentation enhancements for the Extensible\nclass (01/17 and 02/17). Patch 03/17 then allows decoupling the\nconstruction of the public and private classes when using the Extensible\ninfrastructure. This is required to allow pipeline handlers to\ninstantiate their custom class derived from Camera::Extensible and pass\nit to the Camera constructor manually.\n\nPatches 04/17 and 05/17 are additional documentation improvements.\nPatches 06/17 to 08/17 make the Camera::Private class visible and usable\nto pipeline handlers, and patch 09/17 then moves the members of the\nexisting CameraData class to Camera::Private. Patches 10/17 to 15/17\nupdate pipeline handlers individual to migrate to Camera::Private. Patch\n16/17 then cleans up by dropping the CameraData class, and patch 17/17\nupdates the pipeline handler guide accordingly.\n\nPatch 03/17 is probably the biggest open question in this RFC. The\nalternative would be to force pipeline handlers to subclass the Camera\nclass, which I believe should be doable (I haven't tried it though) but\nwould be a more intrusive change in the pipeline handlers. Decoupling\nthe instantiation of the public and private classes doesn't seem to\nresult in awful code, but it requires the public class constructor to\nmanually initialize the private class instance (at least in some cases).\nI'm not entirely sure if this is a slipery slope or not.\n\nThe rest of the infrastructure, however, holds up pretty well I believe,\nespecially access control to the private classes that can use the usual\nC++ public/protected/private access specifiers to restrict some members\nto the corresponding public class only.\n\nAll pipeline handlers have been compile-tested, and I've runtime-tested\nuvcvideo and vimc. Once the approach gets approved (or rejected, and the\nseries rewritten :-)), I'll test the other pipeline handlers.\n\nLaurent Pinchart (17):\n  libcamera: base: class: Document Extensible::_d() functions\n  libcamera: base: class: Link LIBCAMERA_O_PTR to Extensible\n    documentation\n  libcamera: base: class: Don't pass Extensible pointer to Private\n    constructor\n  libcamera: frame_buffer: Document the FrameBuffer::Private class\n  Documentation: Doxygen: Don't exclude Private classes\n  libcamera: camera: Move Camera::Private to header file\n  libcamera: camera: Make Camera::Private members private\n  libcamera: camera: Pass Private pointer to Camera constructor\n  libcamera: pipeline_handler: Move CameraData members to\n    Camera::Private\n  libcamera: pipeline: simple: Migrate to Camera::Private\n  libcamera: pipeline: uvcvideo: Migrate to Camera::Private\n  libcamera: pipeline: vimc: Migrate to Camera::Private\n  libcamera: pipeline: rkisp1: Migrate to Camera::Private\n  libcamera: pipeline: raspberrypi: Migrate to Camera::Private\n  libcamera: pipeline: ipu3: Migrate to Camera::Private\n  libcamera: pipeline_handler: Drop CameraData class\n  Documentation: guides: pipeline-handler: Migrate to Camera::Private\n\n Documentation/Doxyfile.in                     |   2 +-\n Documentation/guides/pipeline-handler.rst     |  67 +++++-----\n include/libcamera/base/class.h                |   5 +-\n include/libcamera/camera.h                    |   5 +-\n include/libcamera/internal/camera.h           |  70 ++++++++++\n include/libcamera/internal/framebuffer.h      |   2 +-\n include/libcamera/internal/meson.build        |   1 +\n include/libcamera/internal/pipeline_handler.h |  29 +----\n src/android/camera_hal_config.cpp             |   7 +-\n src/android/mm/cros_camera_buffer.cpp         |   4 +-\n src/android/mm/generic_camera_buffer.cpp      |   3 +-\n src/libcamera/base/class.cpp                  |  30 ++++-\n src/libcamera/camera.cpp                      | 120 ++++++++++-------\n src/libcamera/camera_manager.cpp              |   8 +-\n src/libcamera/framebuffer.cpp                 |  16 ++-\n src/libcamera/pipeline/ipu3/ipu3.cpp          |  38 +++---\n .../pipeline/raspberrypi/raspberrypi.cpp      |  24 ++--\n src/libcamera/pipeline/rkisp1/rkisp1.cpp      |  26 ++--\n src/libcamera/pipeline/simple/simple.cpp      |  25 ++--\n src/libcamera/pipeline/uvcvideo/uvcvideo.cpp  |  19 +--\n src/libcamera/pipeline/vimc/vimc.cpp          |  19 +--\n src/libcamera/pipeline_handler.cpp            | 121 ++----------------\n 22 files changed, 321 insertions(+), 320 deletions(-)\n create mode 100644 include/libcamera/internal/camera.h"
}