Show a cover letter.

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

{
    "id": 1217,
    "url": "https://patchwork.libcamera.org/api/covers/1217/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/1217/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/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": "<20190517230621.24668-1-laurent.pinchart@ideasonboard.com>",
    "date": "2019-05-17T23:06:09",
    "name": "[libcamera-devel,PATCH/RFC,00/12] Rework camera configuration to introduce negotiation of parameters",
    "submitter": {
        "id": 2,
        "url": "https://patchwork.libcamera.org/api/people/2/?format=api",
        "name": "Laurent Pinchart",
        "email": "laurent.pinchart@ideasonboard.com"
    },
    "mbox": "https://patchwork.libcamera.org/cover/1217/mbox/",
    "series": [
        {
            "id": 307,
            "url": "https://patchwork.libcamera.org/api/series/307/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=307",
            "date": "2019-05-17T23:06:09",
            "name": "Rework camera configuration to introduce negotiation of parameters",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/307/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/1217/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 44B1E60DE9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 18 May 2019 01:06:43 +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 9F7BB2F3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 18 May 2019 01:06:42 +0200 (CEST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1558134402;\n\tbh=UT+n+IasifM33tl8A0ZU2dkEWVS4zFacccfQeI2TPfc=;\n\th=From:To:Subject:Date:From;\n\tb=DpPykDx99wazRwCVQDIG6KmtCLbDeZj3EeOdnwjvpA3XfbgsT8pA+5BFe0zI/ISDD\n\tIliaueJyceoMZZFTj9HCGeb0IjZ4kwbokN3HHoJOjL2i6IjujKG5kowlYExVJ3C3Qp\n\tjTH33RkLdNFy4FO5txIp9vZsomPFjvaoUY6GP8C4=",
        "From": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Sat, 18 May 2019 02:06:09 +0300",
        "Message-Id": "<20190517230621.24668-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/RFC 00/12] 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": "Fri, 17 May 2019 23:06:43 -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\nPatch 01/12 is an unrelated fix for an issue noticed during development.\nThe next 5 patches refactor the camera configuration API by renaming the\nconfusing streamConfiguration() and configureStreams() methods to\ngenerateConfiguration() and configure() (02/12), replacing stream usages\nwith plain stream roles (03/12, with a regression in the features\nexposed by libcamera, but this gets fixed in the same series), and\nfurther refactoring the APIs (04/12 and 05/12) and the pipeline handlers\n(06/12).\n\nPatch 07/12 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\nPatches 08/12 to 12/12 then add enumeration of supported stream formats.\nThis assists pipeline handlers for their implementation of the\nvalidate() method by enumerating supported formats and sizes from a V4L2\ndevice, and aims at eventually replacing the difficult to use FormatEnum\nclass. Patch 11/12 shows how StreamFormats can be used in the UVC\npipeline handler. As these patches have been developed by Niklas and not\nreviewed by me yet I will refrain from commenting further on them in\nthis cover letter, but will instead proceed to reviewing them.\n\nLaurent Pinchart (7):\n  libcamera: camera: Fix std::ostringstream initialisation\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\nNiklas Söderlund (5):\n  libcamera: stream: Add StreamFormats\n  test: stream: Add test for StreamFormat\n  libcamera: v4l2_device: Add method to enumerate all discrete frame\n    sizes\n  libcamera: pipeline: uvcvideo: Validate format in\n    UVCCameraConfiguration::validate()\n  cam: Validate camera configuration\n\n include/libcamera/camera.h               |  41 +--\n include/libcamera/stream.h               |  67 +++--\n src/cam/main.cpp                         |  86 +++---\n src/libcamera/camera.cpp                 | 299 +++++++++----------\n src/libcamera/include/pipeline_handler.h |  10 +-\n src/libcamera/include/v4l2_device.h      |   4 +\n src/libcamera/pipeline/ipu3/ipu3.cpp     | 351 ++++++++++++++++-------\n src/libcamera/pipeline/rkisp1/rkisp1.cpp | 210 ++++++++++----\n src/libcamera/pipeline/uvcvideo.cpp      | 161 ++++++++---\n src/libcamera/pipeline/vimc.cpp          | 147 +++++++---\n src/libcamera/pipeline_handler.cpp       |  50 ++--\n src/libcamera/stream.cpp                 | 281 +++++++++++++-----\n src/libcamera/v4l2_device.cpp            |  51 ++++\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 test/meson.build                         |   1 +\n test/stream/meson.build                  |  10 +\n test/stream/stream_formats.cpp           | 112 ++++++++\n 22 files changed, 1406 insertions(+), 623 deletions(-)\n create mode 100644 test/stream/meson.build\n create mode 100644 test/stream/stream_formats.cpp"
}