Patch Detail
Show a patch.
GET /api/patches/22815/?format=api
{ "id": 22815, "url": "https://patchwork.libcamera.org/api/patches/22815/?format=api", "web_url": "https://patchwork.libcamera.org/patch/22815/", "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": "<20250221092045.3896021-2-paul.elder@ideasonboard.com>", "date": "2025-02-21T09:20:43", "name": "[v2,1/3] ipa: rkisp1: Initialise AGC from FrameDurationLimits controls", "commit_ref": "443ac36e12597bcb30b4ac706bce815afc294073", "pull_url": null, "state": "accepted", "archived": false, "hash": "a469ea63114818fec2ea9b4316831a5efd5849a0", "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/22815/mbox/", "series": [ { "id": 5009, "url": "https://patchwork.libcamera.org/api/series/5009/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5009", "date": "2025-02-21T09:20:42", "name": "ipa: rkisp1: Honor FrameDurationLimits", "version": 2, "mbox": "https://patchwork.libcamera.org/series/5009/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/22815/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/22815/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 EE9C2BDCC1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 21 Feb 2025 09:21:10 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 55374686A8;\n\tFri, 21 Feb 2025 10:21:10 +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 6FF4B6185B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 21 Feb 2025 10:21:07 +0100 (CET)", "from neptunite.hamster-moth.ts.net (unknown\n\t[IPv6:2404:7a81:160:2100:d97a:61eb:567:25d8])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E59F7E0D;\n\tFri, 21 Feb 2025 10:19:40 +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=\"lSdcB1sf\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1740129583;\n\tbh=9s6Qi9hDRORFEx1NEf4E9JAWGDlFOXxn1ZWVTj6Xz+Y=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=lSdcB1sfR9jSMKqmMQsi5h0Z59glIhtSMp9g4RMGz5OrSaJJLdGui6nxMGJh52sos\n\t+ubRGbmH2aDoPvbNrEY9nrjA72u2rnEDoNuVkCbpda82kVa3ndcTqU/6gAjNkGVbNw\n\tmatK783gfhSYC9ME12mgFdcY0QLacGHfohyaMKEk=", "From": "Paul Elder <paul.elder@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Kieran Bingham <kieran.bingham@ideasonboard.com>,\n\tisaac.scott@ideasonboard.com, Paul Elder <paul.elder@ideasonboard.com>,\n\tUmang Jain <umang.jain@ideasonboard.com>,\n\tDaniel Scally <dan.scally@ideasonboard.com>,\n\tJacopo Mondi <jacopo.mondi@ideasonboard.com>", "Subject": "[PATCH v2 1/3] ipa: rkisp1: Initialise AGC from FrameDurationLimits\n\tcontrols", "Date": "Fri, 21 Feb 2025 18:20:43 +0900", "Message-Id": "<20250221092045.3896021-2-paul.elder@ideasonboard.com>", "X-Mailer": "git-send-email 2.39.2", "In-Reply-To": "<20250221092045.3896021-1-paul.elder@ideasonboard.com>", "References": "<20250221092045.3896021-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": "From: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\nThe IPA calculates and reports the FrameDurationLimits to applications\nby configuring the ControlInfo accordingly during\nIPARkISP1::updateControls()\n\nWe later need to know these limits during Agc::configure() for\ninitialising the ActiveState of the AGC implementation with the limits.\n\nStore the FrameDurationLimits ControlInfo in the ControlInfoMap which is\nnow present in the IPAContext so that it is commonly available for the\nAGC algorithm, removing the 'todo' accordingly.\n\nSigned-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\nSigned-off-by: Paul Elder <paul.elder@ideasonboard.com>\nReviewed-by: Umang Jain <umang.jain@ideasonboard.com>\nReviewed-by: Daniel Scally <dan.scally@ideasonboard.com>\nReviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n---\nChanges in v2:\n- recover from bitrot\n- add a todo for moving handling control infos related to\n exposure/frame-duration from the IPA to the agc algo\n---\n src/ipa/rkisp1/algorithms/agc.cpp | 9 +++------\n src/ipa/rkisp1/rkisp1.cpp | 6 +++---\n 2 files changed, 6 insertions(+), 9 deletions(-)", "diff": "diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp\nindex 9a558a1ce29a..03dc56c96996 100644\n--- a/src/ipa/rkisp1/algorithms/agc.cpp\n+++ b/src/ipa/rkisp1/algorithms/agc.cpp\n@@ -188,12 +188,9 @@ int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)\n \tcontext.activeState.agc.meteringMode =\n \t\tstatic_cast<controls::AeMeteringModeEnum>(meteringModes_.begin()->first);\n \n-\t/*\n-\t * \\todo This should probably come from FrameDurationLimits instead,\n-\t * except it's computed in the IPA and not here so we'd have to\n-\t * recompute it.\n-\t */\n-\tcontext.activeState.agc.maxFrameDuration = context.configuration.sensor.maxExposureTime;\n+\t/* Limit the frame duration to match current initialisation */\n+\tControlInfo &frameDurationLimits = context.ctrlMap[&controls::FrameDurationLimits];\n+\tcontext.activeState.agc.maxFrameDuration = std::chrono::microseconds(frameDurationLimits.max().get<int64_t>());\n \n \t/*\n \t * Define the measurement window for AGC as a centered rectangle\ndiff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\nindex 2ffdd99b158a..0e761249d27c 100644\n--- a/src/ipa/rkisp1/rkisp1.cpp\n+++ b/src/ipa/rkisp1/rkisp1.cpp\n@@ -435,9 +435,9 @@ void IPARkISP1::updateControls(const IPACameraSensorInfo &sensorInfo,\n \t\tframeDurations[i] = frameSize / (sensorInfo.pixelRate / 1000000U);\n \t}\n \n-\tctrlMap[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0],\n-\t\t\t\t\t\t\t frameDurations[1],\n-\t\t\t\t\t\t\t frameDurations[2]);\n+\t/* \\todo Move this (and other agc-related controls) to agc */\n+\tcontext_.ctrlMap[&controls::FrameDurationLimits] =\n+\t\tControlInfo(frameDurations[0], frameDurations[1], frameDurations[2]);\n \n \tctrlMap.insert(context_.ctrlMap.begin(), context_.ctrlMap.end());\n \t*ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls);\n", "prefixes": [ "v2", "1/3" ] }