Patch Detail
Show a patch.
GET /api/1.1/patches/22483/?format=api
{ "id": 22483, "url": "https://patchwork.libcamera.org/api/1.1/patches/22483/?format=api", "web_url": "https://patchwork.libcamera.org/patch/22483/", "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": "<20250109000942.1616565-11-paul.elder@ideasonboard.com>", "date": "2025-01-09T00:09:40", "name": "[v6,10/12] libcamera: camera: Pre-process AeEnable control", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "8ad4eb45305f8592577cad36f8faac493b8066da", "submitter": { "id": 17, "url": "https://patchwork.libcamera.org/api/1.1/people/17/?format=api", "name": "Paul Elder", "email": "paul.elder@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/22483/mbox/", "series": [ { "id": 4936, "url": "https://patchwork.libcamera.org/api/1.1/series/4936/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4936", "date": "2025-01-09T00:09:30", "name": "AEGC controls", "version": 6, "mbox": "https://patchwork.libcamera.org/series/4936/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/22483/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/22483/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 A2E2BC3317\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 9 Jan 2025 00:10:19 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id BFA8468553;\n\tThu, 9 Jan 2025 01:10:18 +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 15D116854C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 9 Jan 2025 01:10:10 +0100 (CET)", "from pyrite.hamster-moth.ts.net (unknown\n\t[IPv6:2604:2d80:9e93:ad00:3d82:7e4f:ab9b:8a])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E43B4B63;\n\tThu, 9 Jan 2025 01:09:15 +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=\"aMRxt3nX\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1736381356;\n\tbh=jIa2rAbmyuIgxc74fBa49JmlbK4WRFcdmwsSokhGg6s=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=aMRxt3nXnn/KjJcQQncbTPTAuKeSGujZyzsg7r5HbaR50Iq4s+qvAF5O7UBUJRFvo\n\tgDycpfhGbFlb3SN4lGd3zKCV8eFBMYFwTRoWOP3E4A8LtwQmQRwZAKkNK+SqaOkRdx\n\tUbHHymI/HWQP2pbPz41ItDnchRx90sXP6QrYn63w=", "From": "Paul Elder <paul.elder@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Paul Elder <paul.elder@ideasonboard.com>,\n\tlaurent.pinchart@ideasonboard.com, stefan.klug@ideasonboard.com", "Subject": "[PATCH v6 10/12] libcamera: camera: Pre-process AeEnable control", "Date": "Wed, 8 Jan 2025 18:09:40 -0600", "Message-Id": "<20250109000942.1616565-11-paul.elder@ideasonboard.com>", "X-Mailer": "git-send-email 2.39.2", "In-Reply-To": "<20250109000942.1616565-1-paul.elder@ideasonboard.com>", "References": "<20250109000942.1616565-1-paul.elder@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": "Handle 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>\n\n---\nNew in v6\n---\n src/libcamera/camera.cpp | 18 ++++++++++++++++++\n 1 file changed, 18 insertions(+)", "diff": "diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex 69a7ee535..4e0f63930 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,23 @@ 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 (!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 (!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": [ "v6", "10/12" ] }