Patch Detail
Show a patch.
GET /api/patches/22519/?format=api
{ "id": 22519, "url": "https://patchwork.libcamera.org/api/patches/22519/?format=api", "web_url": "https://patchwork.libcamera.org/patch/22519/", "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": "<20250110235737.1524733-11-paul.elder@ideasonboard.com>", "date": "2025-01-10T23:57:35", "name": "[v7,10/12] libcamera: camera: Pre-process AeEnable control", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "c7e351101d0896952935f7651ea91cebf5f196f7", "submitter": { "id": 17, "url": "https://patchwork.libcamera.org/api/people/17/?format=api", "name": "Paul Elder", "email": "paul.elder@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/22519/mbox/", "series": [ { "id": 4941, "url": "https://patchwork.libcamera.org/api/series/4941/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4941", "date": "2025-01-10T23:57:25", "name": "AEGC controls", "version": 7, "mbox": "https://patchwork.libcamera.org/series/4941/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/22519/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/22519/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 77284C32FB\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 10 Jan 2025 23:58:21 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F0BF768557;\n\tSat, 11 Jan 2025 00:58:20 +0100 (CET)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 793F868549\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 11 Jan 2025 00:58:11 +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 2ACB8166C;\n\tSat, 11 Jan 2025 00:57:16 +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=\"bbt/+/Z1\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1736553436;\n\tbh=Meh6ICwMrOG2ZLDUDJiPzmPzZux1JSzdWHkmA7+xJOU=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=bbt/+/Z1jMLLM9+Pmy6L4E1quDhG20AkrCA9pyKqCilG8cwNZtl0FT0smP8DjHO/w\n\tIAe92MBbM2V4EN6thIDJ4x601UKBj7w+62vqLjAHspwtr4y1ljBSWwh5Ir1mszRkFT\n\tNs2FlWnkY65sbqTo0FbEzUKdv1cL07Di9YbvsgDE=", "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 v7 10/12] libcamera: camera: Pre-process AeEnable control", "Date": "Fri, 10 Jan 2025 17:57:35 -0600", "Message-Id": "<20250110235737.1524733-11-paul.elder@ideasonboard.com>", "X-Mailer": "git-send-email 2.39.2", "In-Reply-To": "<20250110235737.1524733-1-paul.elder@ideasonboard.com>", "References": "<20250110235737.1524733-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---\nChanges in v7:\n- check that the camera supports the ae sub-controls before setting them\n when handling AeEnable\n\nNew in v6\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 69a7ee535..56c585199 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": [ "v7", "10/12" ] }