Show a patch.

GET /api/patches/22597/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 22597,
    "url": "https://patchwork.libcamera.org/api/patches/22597/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/22597/",
    "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": "<20250120204515.24096-11-laurent.pinchart@ideasonboard.com>",
    "date": "2025-01-20T20:45:01",
    "name": "[v9,10/12] libcamera: camera: Pre-process AeEnable control",
    "commit_ref": "7abd4139051c9a53d5a9f17b7ac64d438b6172ad",
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "c7e351101d0896952935f7651ea91cebf5f196f7",
    "submitter": {
        "id": 2,
        "url": "https://patchwork.libcamera.org/api/people/2/?format=api",
        "name": "Laurent Pinchart",
        "email": "laurent.pinchart@ideasonboard.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/22597/mbox/",
    "series": [
        {
            "id": 4958,
            "url": "https://patchwork.libcamera.org/api/series/4958/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4958",
            "date": "2025-01-20T20:44:51",
            "name": "AEGC controls",
            "version": 9,
            "mbox": "https://patchwork.libcamera.org/series/4958/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/22597/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/22597/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 A411DC3314\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 20 Jan 2025 20:45:47 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F3C1268562;\n\tMon, 20 Jan 2025 21:45:46 +0100 (CET)",
            "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 589B768559\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 20 Jan 2025 21:45:36 +0100 (CET)",
            "from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id A9DE322A;\n\tMon, 20 Jan 2025 21:44:34 +0100 (CET)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"OC2aBssA\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1737405874;\n\tbh=xRrMZD29bSRBcrTDU9hl+T2Ml01UtuRm6NvCvRhbVrs=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=OC2aBssABkbaUjtxcTejiM/87j/G6aES9hJmhcSPFO1jG9PsjBY7GLCL2IH7uy8b6\n\tCn+EcPZeHMdjcKabn45Pn/eB31z/ZIhQtZolHysva/2f4IBu2Lk5Men7DcM6fh0Ye9\n\tSuoVSwdcyxGSGdkpsIAjRmjiFt/XVr6gURd/kX+E=",
        "From": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Naushir Patuck <naush@raspberrypi.com>,\n\tDavid Plowman <david.plowman@raspberrypi.com>,\n\tPaul Elder <paul.elder@ideasonboard.com>",
        "Subject": "[PATCH v9 10/12] libcamera: camera: Pre-process AeEnable control",
        "Date": "Mon, 20 Jan 2025 22:45:01 +0200",
        "Message-ID": "<20250120204515.24096-11-laurent.pinchart@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.45.2",
        "In-Reply-To": "<20250120204515.24096-1-laurent.pinchart@ideasonboard.com>",
        "References": "<20250120204515.24096-1-laurent.pinchart@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": "From: Paul Elder <paul.elder@ideasonboard.com>\n\nHandle the AeEnable under the hood in the Camera class, such that\nAeEnable activates ExposureTimeMode and AnalogueGain together. This\nallows applications the convenience of setting auto/manual mode of all\nof the AE-related controls, as well as protecting applications against a\nnasty behavior change if an aperture control is added in the future.\nThis also moves common handling code out of the IPA.\n\nWhile we also want to inject AeEnable in Camera::controls() so that IPAs\ndon't have to report it, it is technically difficult at the moment as\nControlInfoMaps are not easily modifiable.\n\nSigned-off-by: Paul Elder <paul.elder@ideasonboard.com>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\nReviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>\nSigned-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n src/libcamera/camera.cpp | 20 ++++++++++++++++++++\n 1 file changed, 20 insertions(+)",
    "diff": "diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex 69a7ee5353f1..56c5851993c9 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -19,6 +19,7 @@\n #include <libcamera/base/thread.h>\n \n #include <libcamera/color_space.h>\n+#include <libcamera/control_ids.h>\n #include <libcamera/framebuffer_allocator.h>\n #include <libcamera/request.h>\n #include <libcamera/stream.h>\n@@ -1325,6 +1326,25 @@ int Camera::queueRequest(Request *request)\n \t\t}\n \t}\n \n+\t/* Pre-process AeEnable. */\n+\tControlList &controls = request->controls();\n+\tconst auto &aeEnable = controls.get(controls::AeEnable);\n+\tif (aeEnable) {\n+\t\tif (_d()->controlInfo_.count(controls::AnalogueGainMode.id()) &&\n+\t\t    !controls.contains(controls::AnalogueGainMode.id())) {\n+\t\t\tcontrols.set(controls::AnalogueGainMode,\n+\t\t\t\t     *aeEnable ? controls::AnalogueGainModeAuto\n+\t\t\t\t\t       : controls::AnalogueGainModeManual);\n+\t\t}\n+\n+\t\tif (_d()->controlInfo_.count(controls::ExposureTimeMode.id()) &&\n+\t\t    !controls.contains(controls::ExposureTimeMode.id())) {\n+\t\t\tcontrols.set(controls::ExposureTimeMode,\n+\t\t\t\t     *aeEnable ? controls::ExposureTimeModeAuto\n+\t\t\t\t\t       : controls::ExposureTimeModeManual);\n+\t\t}\n+\t}\n+\n \td->pipe_->invokeMethod(&PipelineHandler::queueRequest,\n \t\t\t       ConnectionTypeQueued, request);\n \n",
    "prefixes": [
        "v9",
        "10/12"
    ]
}