From patchwork Fri Jun 26 13:05:57 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Scally X-Patchwork-Id: 27070 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 66926C3301 for ; Fri, 26 Jun 2026 13:06:24 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 7E3EC65F02; Fri, 26 Jun 2026 15:06:21 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Z03J81rj"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 9975265EF7 for ; Fri, 26 Jun 2026 15:06:07 +0200 (CEST) Received: from [127.0.1.1] (chfd-03-b2-v4wan-176392-cust229.vm15.cable.virginm.net [82.19.20.230]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id B9CB71CEF; Fri, 26 Jun 2026 15:05:26 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1782479126; bh=KI5tgliKnQMEXyv5fryXUaUERQlQN30zJEGI22nu0SQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Z03J81rjHO2kuoBVHEnj3aNwHEKLtS+QnIVFFPiLEk/Hj8D00SAvCSjFqy1nB3uGZ M91jfZYGjfiRQhgttT9uk+53b/3jNd5PK8SLWgLkmqZ4/QOdr1y3GboWumjso7qJG6 +/EJRqTUdbNWH/mx7AGMo39Uu5xVzLosykVVfppY= From: Daniel Scally Date: Fri, 26 Jun 2026 14:05:57 +0100 Subject: [PATCH v2 10/12] ipa: ipu3: Don't pass sensorInfo to updateControls() MIME-Version: 1.0 Message-Id: <20260626-ipu3-libipa-rework-v2-10-41546e23de3e@ideasonboard.com> References: <20260626-ipu3-libipa-rework-v2-0-41546e23de3e@ideasonboard.com> In-Reply-To: <20260626-ipu3-libipa-rework-v2-0-41546e23de3e@ideasonboard.com> To: libcamera-devel@lists.libcamera.org Cc: Daniel Scally X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3929; i=dan.scally@ideasonboard.com; h=from:subject:message-id; bh=KI5tgliKnQMEXyv5fryXUaUERQlQN30zJEGI22nu0SQ=; b=owEBbQKS/ZANAwAKAchJV3psRXUyAcsmYgBqPnk7kzJc6th1kwMjuPdUCnn3MiDgwrCNKggQv o0LDHeT1+WJAjMEAAEKAB0WIQQqyuwyDnZdb+mxmm/ISVd6bEV1MgUCaj55OwAKCRDISVd6bEV1 MixFD/4i+UbBsREcZXnseX5XOr6fgvEtbQ+Nfka93xeW+wx5yRg/ZrfcOrr7HxmlJb5PKh23AAt Pk9FDOvjmNK/qFYaIQp7ZuW/92HEzWxiuHYVk1WeTdtq+T+HJxiGXZ7BMzt0OrlW4oxmdK76322 YxylzLP1CiErzwarF52MoIpzymcI+/GdXPLh8Oj+kjOQG3EeO4/xGvinQIHdeMs8TeMR9rAuzaq r6iRk9EMB/4lEtHlzY840OEPPkNTNDdGx+5mslovq8zEoCAwq3VJpI6oPwVoVnaI9vMbJ35h/K+ iSmgSbOhtk5PnK7WLiseOoO9xqa1u3X8bW10TzcmT9JrbWW5yrF4rUDTU4QOvwKAfCG0Au3JieW ZcuH6tEuqQ/oZMrHUmlursnmeccj45X5FMlETKhRsoIWscbgC97T+WKpaCOPDBc5sZAREQPoBXa smQVv/Le0411pUw1ielxeoYveQaCBU2qza48p5eVgKDowMT/Ak0/Qq/HrdBuwqsw46NnYrdO8XE A9SyxdeBV1p4gkssPxoVlxGm0NOI5/W01vnrUJB4Hr4xe6QZnabpLd6YlPD/WNx8+RgbRSvCQoY xiGnvODfZclddtvdXdpXoCw4XkksFNj9yB7FUqpg7w02NYK8jaEzuYURbKm7ci2wHRnE5Tbw4YY WS7G1S6eLV+3glA== X-Developer-Key: i=dan.scally@ideasonboard.com; a=openpgp; fpr=EEC699ACA1B7CB5D31330C0BBD501C2A3546CCF6 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" The updateControls() function uses the configured output size of the sensor to set the ranges for vertical blanking and frame duration controls. We currently pass sensorInfo as a parameter, but it's also stored as a member of class IPAIPU3 and so doesn't need to be passed to updateControls at all(). Drop the parameter and just use the class member instead. Signed-off-by: Daniel Scally --- Changes in v2: - New patch --- src/ipa/ipu3/ipu3.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp index 4bdc4b7677fe9703fb968ca91967c68742454514..b1c176e68098b24d8fd37e7a0e278cabf0e1c3b2 100644 --- a/src/ipa/ipu3/ipu3.cpp +++ b/src/ipa/ipu3/ipu3.cpp @@ -165,8 +165,7 @@ protected: std::string logPrefix() const override; private: - void updateControls(const IPACameraSensorInfo &sensorInfo, - const ControlInfoMap &sensorControls, + void updateControls(const ControlInfoMap &sensorControls, ControlInfoMap *ipaControls); void updateSessionConfiguration(const ControlInfoMap &sensorControls); @@ -239,8 +238,7 @@ void IPAIPU3::updateSessionConfiguration(const ControlInfoMap &sensorControls) * - controls::ExposureTime * - controls::FrameDurationLimits */ -void IPAIPU3::updateControls(const IPACameraSensorInfo &sensorInfo, - const ControlInfoMap &sensorControls, +void IPAIPU3::updateControls(const ControlInfoMap &sensorControls, ControlInfoMap *ipaControls) { ControlInfoMap::Map controls{}; @@ -267,19 +265,19 @@ void IPAIPU3::updateControls(const IPACameraSensorInfo &sensorInfo, */ const ControlInfo &v4l2HBlank = sensorControls.find(V4L2_CID_HBLANK)->second; uint32_t hblank = v4l2HBlank.def().get(); - uint32_t lineLength = sensorInfo.outputSize.width + hblank; + uint32_t lineLength = sensorInfo_.outputSize.width + hblank; const ControlInfo &v4l2VBlank = sensorControls.find(V4L2_CID_VBLANK)->second; std::array frameHeights{ - v4l2VBlank.min().get() + sensorInfo.outputSize.height, - v4l2VBlank.max().get() + sensorInfo.outputSize.height, - v4l2VBlank.def().get() + sensorInfo.outputSize.height, + v4l2VBlank.min().get() + sensorInfo_.outputSize.height, + v4l2VBlank.max().get() + sensorInfo_.outputSize.height, + v4l2VBlank.def().get() + sensorInfo_.outputSize.height, }; std::array frameDurations; for (unsigned int i = 0; i < frameHeights.size(); ++i) { uint64_t frameSize = lineLength * frameHeights[i]; - frameDurations[i] = frameSize / (sensorInfo.pixelRate / 1000000U); + frameDurations[i] = frameSize / (sensorInfo_.pixelRate / 1000000U); } controls[&controls::FrameDurationLimits] = ControlInfo(frameDurations[0], frameDurations[1], @@ -313,6 +311,7 @@ int IPAIPU3::init(const IPASettings &settings, context_.configuration = {}; context_.configuration.sensor.lineDuration = sensorInfo.minLineLength * 1.0s / sensorInfo.pixelRate; + sensorInfo_ = sensorInfo; /* Load the tuning data file. */ File file(settings.configurationFile); @@ -346,7 +345,7 @@ int IPAIPU3::init(const IPASettings &settings, return ret; /* Initialize controls. */ - updateControls(sensorInfo, sensorControls, ipaControls); + updateControls(sensorControls, ipaControls); return 0; } @@ -488,7 +487,7 @@ int IPAIPU3::configure(const IPAConfigInfo &configInfo, calculateBdsGrid(configInfo.bdsOutputSize); /* Update the camera controls using the new sensor settings. */ - updateControls(sensorInfo_, sensorCtrls_, ipaControls); + updateControls(sensorCtrls_, ipaControls); /* Update the IPASessionConfiguration using the sensor settings. */ updateSessionConfiguration(sensorCtrls_);