Show a cover letter.

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

{
    "id": 1231,
    "url": "https://patchwork.libcamera.org/api/1.1/covers/1231/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/1231/",
    "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": "<20190519150047.12444-1-laurent.pinchart@ideasonboard.com>",
    "date": "2019-05-19T15:00:41",
    "name": "[libcamera-devel,v2,0/6] Rework camera configuration to introduce negotiation of parameters",
    "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/1231/mbox/",
    "series": [
        {
            "id": 309,
            "url": "https://patchwork.libcamera.org/api/1.1/series/309/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=309",
            "date": "2019-05-19T15:00:41",
            "name": "Rework camera configuration to introduce negotiation of parameters",
            "version": 2,
            "mbox": "https://patchwork.libcamera.org/series/309/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/1231/comments/",
    "headers": {
        "Return-Path": "<laurent.pinchart@ideasonboard.com>",
        "Received": [
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7320260E4C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 19 May 2019 17:01:07 +0200 (CEST)",
            "from pendragon.bb.dnainternet.fi\n\t(dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi\n\t[IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E0C99443\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 19 May 2019 17:01:06 +0200 (CEST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1558278067;\n\tbh=7K9A1OogelmTi0nbw2s61KsA8JJ44XjFG43/soeeDls=;\n\th=From:To:Subject:Date:From;\n\tb=b8p9upkzyiAYr4Qdh2H+sS7l7HU8cET+0uuY/Hpx8/8c3GSN/qhmyioKcU7GUlNG0\n\ttxjA1IBEL3nHAt61j0IYj/PO+UmsS/tkU2whCypAbFrehjIGKt5+BaTxnSsbMgTki9\n\ta4BNV6vIOvkoXNWQjME72vjqmkI2R30ozskq30CI=",
        "From": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Sun, 19 May 2019 18:00:41 +0300",
        "Message-Id": "<20190519150047.12444-1-laurent.pinchart@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.21.0",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v2 0/6] Rework camera configuration to\n\tintroduce negotiation of parameters",
        "X-BeenThere": "libcamera-devel@lists.libcamera.org",
        "X-Mailman-Version": "2.1.23",
        "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>",
        "X-List-Received-Date": "Sun, 19 May 2019 15:01:07 -0000"
    },
    "content": "Hello,\n\nCamera are currently configured in two steps, first by retrieving a\nconfiguration for a set of stream usages with streamConfiguration(), and\nthen by configuring the camera with configureStreams(). The camera\nconfiguration can be changed by the application between those two steps,\nbut there is no way for applications to find out what changes are\ncompatible with the camera, as the configureStreams() method either\naccepts the configuration as-is, or rejects it completely without any\nadditional feedback. This leaves applications with no other option than\nshooting in the dark.\n\nThis patch series reworks the camera configuration API to fix this\nproblems, and introduces a new concept: configuration negotiation\nthrough validation.\n\nThe first 5 patches refactor the camera configuration API by renaming\nthe confusing streamConfiguration() and configureStreams() methods to\ngenerateConfiguration() and configure() (1/6), replacing stream usages\nwith plain stream roles (2/6, with a regression in the features exposed\nby libcamera, but this gets fixed in the same series), and further\nrefactoring the APIs (3/6 and 4/6) and the pipeline handlers (5/6).\n\nPatch 6/6 introduces configuration negotiation. The core idea is to\nintroduce a new validate() method for the CameraConfiguration class that\nvalidates and possibly updates the configuration to the closest\nsupported configuration. Applications can then create a configuration\n(possibly from scratch, or using Camera::generateConfiguration() with a\nset of stream roles), modify it, and then call validate() to request a\nconfiguration update from libcamera. If the configuration is updated,\nthe application can then inspect it, decide to use the updated version,\nor try again, until a configuration acceptable for both libcamera and\nthe application is found.\n\nThe validate() operation is implemented with the help of the pipeline\nhandlers that need to provide a subclass of CameraConfiguration. This\nputs more burden on the pipeline handlers, but is offset by the fact\nthat the pipeline handler configure() method doesn't need to perform\nvalidation anymore as the configuration is validated prior to\nconfigure().\n\nCompared to v1, the most notable changes are\n\n- Dropped patch 01/12 that has already been merged\n- Added a CameraConfiguration::at() method and use it on config pointers\n- Dropped patches 08/12 to 12/12, a new version will be posted by Niklas\n\nLaurent Pinchart (6):\n  libcamera: camera: Rename configureStreams() and streamConfiguration()\n  libcamera: Use stream roles directly instead of StreamUsage\n  libcamera: Refactor the camera configuration storage and API\n  libcamera: camera: Return a pointer from generateConfiguration()\n  libcamera: pipeline: Move camera data classes to the top level scope\n  libcamera: camera: Add a validation API to the CameraConfiguration\n    class\n\n include/libcamera/camera.h               |  55 ++--\n include/libcamera/stream.h               |  51 +---\n src/cam/main.cpp                         |  78 ++---\n src/libcamera/camera.cpp                 | 347 +++++++++++-----------\n src/libcamera/include/pipeline_handler.h |  10 +-\n src/libcamera/pipeline/ipu3/ipu3.cpp     | 351 ++++++++++++++++-------\n src/libcamera/pipeline/rkisp1/rkisp1.cpp | 210 ++++++++++----\n src/libcamera/pipeline/uvcvideo.cpp      | 131 ++++++---\n src/libcamera/pipeline/vimc.cpp          | 147 +++++++---\n src/libcamera/pipeline_handler.cpp       |  50 ++--\n src/libcamera/stream.cpp                 | 116 +++-----\n src/qcam/main_window.cpp                 |  11 +-\n src/qcam/main_window.h                   |   3 +-\n test/camera/capture.cpp                  |  35 ++-\n test/camera/configuration_default.cpp    |  20 +-\n test/camera/configuration_set.cpp        |  41 ++-\n test/camera/statemachine.cpp             |  38 ++-\n 17 files changed, 1034 insertions(+), 660 deletions(-)"
}