From patchwork Tue Nov 16 16:26:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 14619 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 63EABC324E for ; Tue, 16 Nov 2021 16:26:50 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 8A35E603F9; Tue, 16 Nov 2021 17:26:48 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Te5nJLfC"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 2D06360376 for ; Tue, 16 Nov 2021 17:26:43 +0100 (CET) Received: from localhost.localdomain (117.145-247-81.adsl-dyn.isp.belgacom.be [81.247.145.117]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id DEA4DE7 for ; Tue, 16 Nov 2021 17:26:42 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1637080002; bh=CAvTCZMzSAt/NgQqUvP7TCITy9Za6FjWuWY9gVMHEjU=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Te5nJLfCQEBpedYPaeBZZHft2A0UfwCXzPomFHppdkdH8+7I78fcTcFk2yMf3jxzt IHrDKqM7Ah91gN6RQ+rzPnD877Y65eUtg8Al0bh99Q2Ovgn7quuWar5wuE5vmwOBSz HTeOXd1nXOtQMLsQpq3QryBKOEcHN+k1XzIkcVZY= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Tue, 16 Nov 2021 18:26:13 +0200 Message-Id: <20211116162615.27777-4-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211116162615.27777-1-laurent.pinchart@ideasonboard.com> References: <20211116162615.27777-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 3/5] ipa: ipu3: agc: Rename currentYGain 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 "current" prefix in the currentYGain variable name is confusing: - In Agc::estimateLuminance(), the variable contains the gain to be applied to the image, which is neither a "current" gain nor a "Y" gain. Rename it to "gain". - In Agc::computeExposure(), the variable contains the gain computed by the relative luminance method, so rename it to "yGain". While at it, rename variables to match the libcamera coding style. Signed-off-by: Laurent Pinchart --- src/ipa/ipu3/algorithms/agc.cpp | 32 ++++++++++++++++---------------- src/ipa/ipu3/algorithms/agc.h | 4 ++-- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp index d5840fb0aa97..6aab9fd5ebb5 100644 --- a/src/ipa/ipu3/algorithms/agc.cpp +++ b/src/ipa/ipu3/algorithms/agc.cpp @@ -173,9 +173,9 @@ void Agc::filterExposure() /** * \brief Estimate the new exposure and gain values * \param[inout] frameContext The shared IPA frame Context - * \param[in] currentYGain The gain calculated on the current brightness level + * \param[in] yGain The gain calculated based on the relative luminance target */ -void Agc::computeExposure(IPAFrameContext &frameContext, double currentYGain) +void Agc::computeExposure(IPAFrameContext &frameContext, double yGain) { /* Get the effective exposure and gain applied on the sensor. */ uint32_t exposure = frameContext.sensor.exposure; @@ -189,8 +189,8 @@ void Agc::computeExposure(IPAFrameContext &frameContext, double currentYGain) */ double evGain = kEvGainTarget * knumHistogramBins / iqMean_; - if (evGain < currentYGain) - evGain = currentYGain; + if (evGain < yGain) + evGain = yGain; /* Consider within 1% of the target as correctly exposed */ if (std::abs(evGain - 1.0) < 0.01) @@ -254,7 +254,7 @@ void Agc::computeExposure(IPAFrameContext &frameContext, double currentYGain) * \param[in] frameContext The shared IPA frame context * \param[in] grid The grid used to store the statistics in the IPU3 * \param[in] stats The IPU3 statistics and ISP results - * \param[in] currentYGain The gain calculated on the current brightness level + * \param[in] gain The analogue gain to apply to the frame * \return The relative luminance * * Luma is the weighted sum of gamma-compressed R′G′B′ components of a color @@ -268,7 +268,7 @@ void Agc::computeExposure(IPAFrameContext &frameContext, double currentYGain) double Agc::estimateLuminance(IPAFrameContext &frameContext, const ipu3_uapi_grid_config &grid, const ipu3_uapi_stats_3a *stats, - double currentYGain) + double gain) { double redSum = 0, greenSum = 0, blueSum = 0; @@ -281,9 +281,9 @@ double Agc::estimateLuminance(IPAFrameContext &frameContext, &stats->awb_raw_buffer.meta_data[cellPosition] ); - redSum += cell->R_avg * currentYGain; - greenSum += (cell->Gr_avg + cell->Gb_avg) / 2 * currentYGain; - blueSum += cell->B_avg * currentYGain; + redSum += cell->R_avg * gain; + greenSum += (cell->Gr_avg + cell->Gb_avg) / 2 * gain; + blueSum += cell->B_avg * gain; } } @@ -310,7 +310,7 @@ void Agc::process(IPAContext &context, const ipu3_uapi_stats_3a *stats) { measureBrightness(stats, context.configuration.grid.bdsGrid); - double currentYGain = 1.0; + double yGain = 1.0; double yTarget = kRelativeLuminanceTarget; /* @@ -320,18 +320,18 @@ void Agc::process(IPAContext &context, const ipu3_uapi_stats_3a *stats) for (unsigned int i = 0; i < 8; i++) { double yValue = estimateLuminance(context.frameContext, context.configuration.grid.bdsGrid, - stats, currentYGain); - double extra_gain = std::min(10.0, yTarget / (yValue + .001)); + stats, yGain); + double extraGain = std::min(10.0, yTarget / (yValue + .001)); - currentYGain *= extra_gain; + yGain *= extraGain; LOG(IPU3Agc, Debug) << "Y value: " << yValue << ", Y target: " << yTarget - << ", gives gain " << currentYGain; - if (extra_gain < 1.01) + << ", gives gain " << yGain; + if (extraGain < 1.01) break; } - computeExposure(context.frameContext, currentYGain); + computeExposure(context.frameContext, yGain); frameCount_++; } diff --git a/src/ipa/ipu3/algorithms/agc.h b/src/ipa/ipu3/algorithms/agc.h index 943c354a820e..0c868d6737f1 100644 --- a/src/ipa/ipu3/algorithms/agc.h +++ b/src/ipa/ipu3/algorithms/agc.h @@ -34,11 +34,11 @@ private: void measureBrightness(const ipu3_uapi_stats_3a *stats, const ipu3_uapi_grid_config &grid); void filterExposure(); - void computeExposure(IPAFrameContext &frameContext, double currentYGain); + void computeExposure(IPAFrameContext &frameContext, double yGain); double estimateLuminance(IPAFrameContext &frameContext, const ipu3_uapi_grid_config &grid, const ipu3_uapi_stats_3a *stats, - double currentYGain); + double gain); uint64_t frameCount_;