From patchwork Thu Sep 25 19:28:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Milan Zamazal X-Patchwork-Id: 24459 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 B3D44C3331 for ; Thu, 25 Sep 2025 19:29:27 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id D8ACE6B601; Thu, 25 Sep 2025 21:29:26 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="L7pQtkgy"; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 296206B611 for ; Thu, 25 Sep 2025 21:29:23 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1758828562; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LyZsWx5DwXfv2ZPUtHNL2o3r3JWEFuo++LnL2EVHaVQ=; b=L7pQtkgyHkUZ6ifdgL8zCbsBYflbSfn/On0xwoMPlY9geuoMjagCvNiOMXRBAj1Buqtf4c NRsrXjTY76BO9CKYphj390oT09RielF0tHFzuEFNo+Gy7xrbhNzKE1DyTj/tBo/KMvDUat EN16AOMMgydSPzFkb605ttYlXL6ROEk= Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-151-xEPBYVQ4Oe257GFlL1vL5w-1; Thu, 25 Sep 2025 15:29:16 -0400 X-MC-Unique: xEPBYVQ4Oe257GFlL1vL5w-1 X-Mimecast-MFC-AGG-ID: xEPBYVQ4Oe257GFlL1vL5w_1758828555 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id A17E1195609F; Thu, 25 Sep 2025 19:29:15 +0000 (UTC) Received: from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.44.32.62]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A01691956095; Thu, 25 Sep 2025 19:29:13 +0000 (UTC) From: Milan Zamazal To: libcamera-devel@lists.libcamera.org Cc: Milan Zamazal , pobrn@protonmail.com, mail@maciej.szmigiero.name Subject: [PATCH v4 5/7] libcamera: simple: Avoid incorrect arithmetic in AWB Date: Thu, 25 Sep 2025 21:28:54 +0200 Message-ID: <20250925192856.77881-6-mzamazal@redhat.com> In-Reply-To: <20250925192856.77881-1-mzamazal@redhat.com> References: <20250925192856.77881-1-mzamazal@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 7U7vob3z-JDAdOG3_vO7NpaWFkydLLG-4Ip04IcvNIU_1758828555 X-Mimecast-Originator: redhat.com content-type: text/plain; charset="US-ASCII"; x-default=true 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 R/G/B sums computed in AWB simple IPA may be zero or perhaps even negative. Let's make sure the sums are always positive, to prevent division by zero or completely nonsense results. Signed-off-by: Milan Zamazal --- src/ipa/simple/algorithms/awb.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/ipa/simple/algorithms/awb.cpp b/src/ipa/simple/algorithms/awb.cpp index cf567e894..8231a4968 100644 --- a/src/ipa/simple/algorithms/awb.cpp +++ b/src/ipa/simple/algorithms/awb.cpp @@ -7,6 +7,7 @@ #include "awb.h" +#include #include #include @@ -68,10 +69,11 @@ void Awb::process(IPAContext &context, */ const uint64_t nPixels = std::accumulate( histogram.begin(), histogram.end(), 0); - const uint64_t offset = blackLevel * nPixels; - const uint64_t sumR = stats->sumR_ - offset / 4; - const uint64_t sumG = stats->sumG_ - offset / 2; - const uint64_t sumB = stats->sumB_ - offset / 4; + const int64_t offset = blackLevel * nPixels; + const int64_t minValid = 1; + const uint64_t sumR = std::max(static_cast(stats->sumR_) - offset / 4, minValid); + const uint64_t sumG = std::max(static_cast(stats->sumG_) - offset / 2, minValid); + const uint64_t sumB = std::max(static_cast(stats->sumB_) - offset / 4, minValid); /* * Calculate red and blue gains for AWB.