From patchwork Fri Nov 14 14:16:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 25056 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id CDDD8C3241 for ; Fri, 14 Nov 2025 14:17:31 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 38287609DE; Fri, 14 Nov 2025 15:17:24 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="SgaPUwr9"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 3558C60AA1 for ; Fri, 14 Nov 2025 15:17:19 +0100 (CET) Received: from [192.168.1.101] (93-61-96-190.ip145.fastwebnet.it [93.61.96.190]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 386861440; Fri, 14 Nov 2025 15:15:18 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1763129718; bh=WoJb4kUq4QiCHvYm/XK3vK7Tsp/phnx111acAD/Xlk0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=SgaPUwr9TEQc6sFFN240GiZpfrDbK6sYc0Iky8wVeZOCbOa5pbLQ4O/EBQQx++vEa FPol98hhMnrBuLVmNUzAn8soq/joC96P4E9A/ovQf/3PJez/oOqyBDBWAsEf+oedQR zQmgu/FQ2GjKtvWf/tAeGY37FXdWS9zVA/Z9bDY0= From: Jacopo Mondi Date: Fri, 14 Nov 2025 15:16:59 +0100 Subject: [PATCH v3 04/19] ipa: mali: Move exposure limits to sensor config MIME-Version: 1.0 Message-Id: <20251114-exposure-limits-v3-4-b7c07feba026@ideasonboard.com> References: <20251114-exposure-limits-v3-0-b7c07feba026@ideasonboard.com> In-Reply-To: <20251114-exposure-limits-v3-0-b7c07feba026@ideasonboard.com> To: =?utf-8?q?Niklas_S=C3=B6derlund?= , Robert Mader , libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4541; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=WoJb4kUq4QiCHvYm/XK3vK7Tsp/phnx111acAD/Xlk0=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpFznq4AMiYpe5zsAfK19P/qWt1crR53e12Bgor TAKivVaak2JAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCaRc56gAKCRByNAaPFqFW PPzzEACrAzGUnYjH4XKFC7aKxtVRJHOBDyn1YdLgXxCkIeEkTtbQ5FwfxcF6v4vxpjkmLkv2YLn oFZuFgNsqFht6W7kqFvBNxl0FTeBV61dV4Bgof4Dl07v0tq9P4K4OO+b/NaScJuzxdRpTMNGzVq M35ZnSDCgTim0fP7I6Oqne2o+8+DeS+94DvNlglt+PDNr6IYhKyyxd3OdNP5LzwpCeeI4XbBo77 mRjQMf0wJUYVF5YkXyqW+fyR8NtPJCizbbJYf0JqvZVat7BrBVtlpjXwinNXzC9SS/dJGsRTLvo whxzUudTnDqTKktJyZCFocBPA4dHSdf4CEd1rOVSqYDMvHY0l5cAmUCkOFJnzXw0gWk7pSxjHlB 06mi4m8lbHOle2ufZ8zwf/plqCX/4V8PqysvwSCYIol2sS89NN7YBpS9qZizJatfAdNvFgbqE79 NUse3dijYAvBtdMwj5wx1lIT8koVYy7+BDMneD47daXGOow2k/b/PUoMupB/eMQMXpRyXMIG45o DVsc0Nk3aW5jOT3YReWPCthQwPWosU/Hv77Os7WkU8oEJ6iYo1WgGc9ZT8IOXpxgOOTCx1kT16w 4B25t6GzfJCV9ZBsg06IJQTLONb3QDz2ZWT4UbxnoCkWIYVL/4JXKQFAwQH8zfFD7N0PELKP1rc BbLUdiwsDGAWcmw== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Move the exposure limits (shutter time and gains) in the IPAContext sensor configuration and not in the 'agc' member. This aligns the Mali IPA with the RkISP1 and will help unifying the handling of sensor configuration data through a common type. Signed-off-by: Jacopo Mondi --- src/ipa/mali-c55/algorithms/agc.cpp | 12 ++++++------ src/ipa/mali-c55/ipa_context.h | 8 ++++---- src/ipa/mali-c55/mali-c55.cpp | 9 +++++---- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/ipa/mali-c55/algorithms/agc.cpp b/src/ipa/mali-c55/algorithms/agc.cpp index f60fddac3f04fd6f09dc782e929ff1593758c29b..4fa00769d201d906be357809f5af02c71201a4f1 100644 --- a/src/ipa/mali-c55/algorithms/agc.cpp +++ b/src/ipa/mali-c55/algorithms/agc.cpp @@ -160,20 +160,20 @@ int Agc::configure(IPAContext &context, * minimum analogue gain. AEGC is _active_ by default. */ context.activeState.agc.autoEnabled = true; - context.activeState.agc.automatic.sensorGain = context.configuration.agc.minAnalogueGain; + context.activeState.agc.automatic.sensorGain = context.configuration.sensor.minAnalogueGain; context.activeState.agc.automatic.exposure = context.configuration.agc.defaultExposure; context.activeState.agc.automatic.ispGain = kMinDigitalGain; - context.activeState.agc.manual.sensorGain = context.configuration.agc.minAnalogueGain; + context.activeState.agc.manual.sensorGain = context.configuration.sensor.minAnalogueGain; context.activeState.agc.manual.exposure = context.configuration.agc.defaultExposure; context.activeState.agc.manual.ispGain = kMinDigitalGain; context.activeState.agc.constraintMode = constraintModes().begin()->first; context.activeState.agc.exposureMode = exposureModeHelpers().begin()->first; /* \todo Run this again when FrameDurationLimits is passed in */ - setLimits(context.configuration.agc.minShutterSpeed, - context.configuration.agc.maxShutterSpeed, - context.configuration.agc.minAnalogueGain, - context.configuration.agc.maxAnalogueGain, + setLimits(context.configuration.sensor.minShutterSpeed, + context.configuration.sensor.maxShutterSpeed, + context.configuration.sensor.minAnalogueGain, + context.configuration.sensor.maxAnalogueGain, {}); resetFrameCount(); diff --git a/src/ipa/mali-c55/ipa_context.h b/src/ipa/mali-c55/ipa_context.h index bfa805c7b93f313dda2497365e83542bbc39e291..fe75590ec93302e61a31e4832f5c497aab80cf4d 100644 --- a/src/ipa/mali-c55/ipa_context.h +++ b/src/ipa/mali-c55/ipa_context.h @@ -21,17 +21,17 @@ namespace ipa::mali_c55 { struct IPASessionConfiguration { struct { - utils::Duration minShutterSpeed; - utils::Duration maxShutterSpeed; uint32_t defaultExposure; - double minAnalogueGain; - double maxAnalogueGain; } agc; struct { BayerFormat::Order bayerOrder; utils::Duration lineDuration; uint32_t blackLevel; + utils::Duration minShutterSpeed; + utils::Duration maxShutterSpeed; + double minAnalogueGain; + double maxAnalogueGain; } sensor; }; diff --git a/src/ipa/mali-c55/mali-c55.cpp b/src/ipa/mali-c55/mali-c55.cpp index 0751513dc584ca84dd212bf8c1469dd4b40c053d..9375facf7ab559853986f66634d4e36b896361c8 100644 --- a/src/ipa/mali-c55/mali-c55.cpp +++ b/src/ipa/mali-c55/mali-c55.cpp @@ -185,11 +185,12 @@ void IPAMaliC55::updateSessionConfiguration(const IPACameraSensorInfo &info, * \todo take VBLANK into account for maximum shutter speed */ context_.configuration.sensor.lineDuration = info.minLineLength * 1.0s / info.pixelRate; - context_.configuration.agc.minShutterSpeed = minExposure * context_.configuration.sensor.lineDuration; - context_.configuration.agc.maxShutterSpeed = maxExposure * context_.configuration.sensor.lineDuration; + context_.configuration.sensor.minShutterSpeed = minExposure * context_.configuration.sensor.lineDuration; + context_.configuration.sensor.maxShutterSpeed = maxExposure * context_.configuration.sensor.lineDuration; + context_.configuration.sensor.minAnalogueGain = context_.camHelper->gain(minGain); + context_.configuration.sensor.maxAnalogueGain = context_.camHelper->gain(maxGain); + context_.configuration.agc.defaultExposure = defExposure; - context_.configuration.agc.minAnalogueGain = context_.camHelper->gain(minGain); - context_.configuration.agc.maxAnalogueGain = context_.camHelper->gain(maxGain); if (context_.camHelper->blackLevel().has_value()) { /*