From patchwork Wed Mar 19 16:11:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Klug X-Patchwork-Id: 22987 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 AC2ECC32FE for ; Wed, 19 Mar 2025 16:12:24 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 6519968967; Wed, 19 Mar 2025 17:12:24 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="CRU7mRDz"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 6D0BE68962 for ; Wed, 19 Mar 2025 17:12:23 +0100 (CET) Received: from ideasonboard.com (unknown [IPv6:2a00:6020:448c:6c00:760:e5ca:4814:99c7]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 8758C8FA; Wed, 19 Mar 2025 17:10:40 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1742400640; bh=wLcGUSOBZBOfcfD9gdaPSiufSRlJxTeXCp+gmRkIErE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CRU7mRDzqulBnp+sUQzmYVFSGctyvfdIF2YyABitGi8Ic8LSRYqvqA0iGlhnOw2M1 mv9tB6bWMveyLZvbcDUlh3BmDUVYb9hexvLVezPzhS2958wIIzsRcEnLa0sOO7VLhP tHh7tyntGe/5pUTmD2XA2eX2gInOSC/uQZPrNRdo= From: Stefan Klug To: libcamera-devel@lists.libcamera.org Cc: Stefan Klug Subject: [PATCH v2 09/17] ipa: rkisp1: Refactor automatic/manual structure in IPAActiveState Date: Wed, 19 Mar 2025 17:11:14 +0100 Message-ID: <20250319161152.63625-10-stefan.klug@ideasonboard.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250319161152.63625-1-stefan.klug@ideasonboard.com> References: <20250319161152.63625-1-stefan.klug@ideasonboard.com> MIME-Version: 1.0 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" Swap gains and automatic/manual in the IPAActiveState structure. This is in preparation to adding another member, which is easier in the new structure. The patch contains no functional changes. Signed-off-by: Stefan Klug --- Changes in v2: - Use one named struct instead of two anonymous ones --- src/ipa/rkisp1/algorithms/awb.cpp | 24 ++++++++++++------------ src/ipa/rkisp1/ipa_context.h | 10 ++++++---- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp index eafe93081bb1..a9759e53f593 100644 --- a/src/ipa/rkisp1/algorithms/awb.cpp +++ b/src/ipa/rkisp1/algorithms/awb.cpp @@ -124,8 +124,8 @@ int Awb::init(IPAContext &context, const YamlObject &tuningData) int Awb::configure(IPAContext &context, const IPACameraSensorInfo &configInfo) { - context.activeState.awb.gains.manual = RGB{ 1.0 }; - context.activeState.awb.gains.automatic = + context.activeState.awb.manual.gains = RGB{ 1.0 }; + context.activeState.awb.automatic.gains = awbAlgo_->gainsFromColourTemperature(kDefaultColourTemperature); context.activeState.awb.autoEnabled = true; context.activeState.awb.temperatureK = kDefaultColourTemperature; @@ -173,8 +173,8 @@ void Awb::queueRequest(IPAContext &context, const auto &colourTemperature = controls.get(controls::ColourTemperature); bool update = false; if (colourGains) { - awb.gains.manual.r() = (*colourGains)[0]; - awb.gains.manual.b() = (*colourGains)[1]; + awb.manual.gains.r() = (*colourGains)[0]; + awb.manual.gains.b() = (*colourGains)[1]; /* * \todo Colour temperature reported in metadata is now * incorrect, as we can't deduce the temperature from the gains. @@ -183,17 +183,17 @@ void Awb::queueRequest(IPAContext &context, update = true; } else if (colourTemperature) { const auto &gains = awbAlgo_->gainsFromColourTemperature(*colourTemperature); - awb.gains.manual.r() = gains.r(); - awb.gains.manual.b() = gains.b(); + awb.manual.gains.r() = gains.r(); + awb.manual.gains.b() = gains.b(); awb.temperatureK = *colourTemperature; update = true; } if (update) LOG(RkISP1Awb, Debug) - << "Set colour gains to " << awb.gains.manual; + << "Set colour gains to " << awb.manual.gains; - frameContext.awb.gains = awb.gains.manual; + frameContext.awb.gains = awb.manual.gains; frameContext.awb.temperatureK = awb.temperatureK; } @@ -208,7 +208,7 @@ void Awb::prepare(IPAContext &context, const uint32_t frame, * most up-to-date automatic values we can read. */ if (frameContext.awb.autoEnabled) { - frameContext.awb.gains = context.activeState.awb.gains.automatic; + frameContext.awb.gains = context.activeState.awb.automatic.gains; frameContext.awb.temperatureK = context.activeState.awb.temperatureK; } @@ -325,14 +325,14 @@ void Awb::process(IPAContext &context, /* Filter the values to avoid oscillations. */ double speed = 0.2; awbResult.gains = awbResult.gains * speed + - activeState.awb.gains.automatic * (1 - speed); + activeState.awb.automatic.gains * (1 - speed); - activeState.awb.gains.automatic = awbResult.gains; + activeState.awb.automatic.gains = awbResult.gains; LOG(RkISP1Awb, Debug) << std::showpoint << "Means " << rgbMeans << ", gains " - << activeState.awb.gains.automatic << ", temp " + << activeState.awb.automatic.gains << ", temp " << activeState.awb.temperatureK << "K"; } diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h index 474f7036f003..6bc922a82971 100644 --- a/src/ipa/rkisp1/ipa_context.h +++ b/src/ipa/rkisp1/ipa_context.h @@ -89,10 +89,12 @@ struct IPAActiveState { } agc; struct { - struct { - RGB manual; - RGB automatic; - } gains; + struct AwbState { + RGB gains; + }; + + AwbState manual; + AwbState automatic; unsigned int temperatureK; bool autoEnabled;