Show a cover letter.

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

{
    "id": 24446,
    "url": "https://patchwork.libcamera.org/api/covers/24446/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/24446/",
    "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": "<20250924124713.3361707-1-barnabas.pocze@ideasonboard.com>",
    "date": "2025-09-24T12:47:05",
    "name": "[RFC,v1,0/7] libcamera: camera: Add `applyControls()`",
    "submitter": {
        "id": 216,
        "url": "https://patchwork.libcamera.org/api/people/216/?format=api",
        "name": "Barnabás Pőcze",
        "email": "barnabas.pocze@ideasonboard.com"
    },
    "mbox": "https://patchwork.libcamera.org/cover/24446/mbox/",
    "series": [
        {
            "id": 5457,
            "url": "https://patchwork.libcamera.org/api/series/5457/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5457",
            "date": "2025-09-24T12:47:05",
            "name": "libcamera: camera: Add `applyControls()`",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/5457/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/24446/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 507C1BDB1C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 24 Sep 2025 12:47:23 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4C9B66B5F8;\n\tWed, 24 Sep 2025 14:47:21 +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 802B769367\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 24 Sep 2025 14:47:16 +0200 (CEST)",
            "from pb-laptop.local (185.221.140.70.nat.pool.zt.hu\n\t[185.221.140.70])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 67F8CAD0;\n\tWed, 24 Sep 2025 14:45: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=\"FsBgHmfT\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1758717952;\n\tbh=Ld1/w6ot7hwv/3EkFFHHw0X9yxcIk8dFexT+4J0GOs4=;\n\th=From:To:Subject:Date:From;\n\tb=FsBgHmfT4jZiYXd2uCr++54LPC2HZBOIHUTAbcfCwYy/uV9fJpBcOOdLT3+3P8JRM\n\tPcn9IF96fZyptwoU+9vaY7bjHHykekOSxLnz5INMqROphIkdh+HxxU0VWuIPLmfVzY\n\toUa2Fws3XJNCkV8yo2CG/9wsQH94GzW21JUD+WaE=",
        "From": "=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>",
        "Subject": "[RFC PATCH v1 0/7] libcamera: camera: Add `applyControls()`",
        "Date": "Wed, 24 Sep 2025 14:47:05 +0200",
        "Message-ID": "<20250924124713.3361707-1-barnabas.pocze@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.51.0",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "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": "This is a proof-of-concept implementation of the `Camera::applyControls()`\nmechanism for fast(er) control application.\n\nAt the moment controls can be set at two specific points:\n  * when the camera is started,\n  * for a given request.\n\nHowever, sometimes it is desirable to apply controls \"as fast as possible\"\nregardless of how many requests are queued. This could be implemented by\nmaking available the minimum number of requests that need to be queued at\nany given time, and letting the application implement its own queue.\nSuch a queue, however, is essentially already implemented in libcamera:\n`Camera::Private::waitingRequests_`, so this patch set makes use of that.\n\nThe implementation is in the second to last patch. It adds a new virtual function\nfor pipeline handlers to implement, this function should apply the given controls\n\"immediately\". If that is not implemented, then a fallback mechanism is used, which\nmerges the control list into the control list of the request that is submitted to\nthe pipeline handler next. There are a number of questions regarding the exact\nimplementation, marked as TODO items in the code, please check those as well.\nIn addition, there is also the question of (async) success/failure reporting.\n\nThe last change implements it for the UVC pipeline handler.\n\nBarnabás Pőcze (7):\n  libcamera: base: bound_method: Strip qualifiers in argument pack\n  libcamera: base: bound_method: Forward when invoking\n  libcamera: controls: Add rvalue `ControlList::merge()`\n  libcamera: controls: ControlList: Add `erase()`\n  libcamera: camera: Make `waitingRequests_` an `std::deque`\n  libcamera: camera: Add `applyControls()`\n  libcamera: pipeline: uvcvideo: Implement `applyControlsDevice()`\n\n include/libcamera/base/bound_method.h         |   8 +-\n include/libcamera/camera.h                    |   1 +\n include/libcamera/controls.h                  |   4 +\n include/libcamera/internal/camera.h           |   3 +-\n include/libcamera/internal/pipeline_handler.h |   7 ++\n src/libcamera/camera.cpp                      |  53 ++++++++\n src/libcamera/controls.cpp                    |  59 ++++++++-\n src/libcamera/pipeline/uvcvideo/uvcvideo.cpp  |   5 +\n src/libcamera/pipeline_handler.cpp            | 118 +++++++++++++++++-\n 9 files changed, 245 insertions(+), 13 deletions(-)\n\n--\n2.51.0"
}