From patchwork Fri Sep 19 17:37:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Milan Zamazal X-Patchwork-Id: 24433 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 A0C7DBE173 for ; Fri, 19 Sep 2025 17:37:40 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 33CBE6B5AA; Fri, 19 Sep 2025 19:37:40 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="OMy7hT1f"; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 327EF6B59C for ; Fri, 19 Sep 2025 19:37:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1758303455; 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=OMy7hT1fOWio6FYRxXrci44HKs6XJaVtTyzSePux3pzcpicq7UssK/Tyn4FwuhUIhI46S2 enENzBok0f0H53codC/DQadwJxXmg8DyNznbJiFS1cYKLbmAfIkKXq0iyzL8JUXDoZ1lIa gSgR3IJ7zTVT4dkFIPbP2oMkJeAnJfY= Received: from mx-prod-mc-05.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-370-5ukR9rScNAS5tHuLfGzMqw-1; Fri, 19 Sep 2025 13:37:34 -0400 X-MC-Unique: 5ukR9rScNAS5tHuLfGzMqw-1 X-Mimecast-MFC-AGG-ID: 5ukR9rScNAS5tHuLfGzMqw_1758303453 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 222FA19560B2; Fri, 19 Sep 2025 17:37:33 +0000 (UTC) Received: from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.44.32.9]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 8B9FF1800451; Fri, 19 Sep 2025 17:37:31 +0000 (UTC) From: Milan Zamazal To: libcamera-devel@lists.libcamera.org Cc: Milan Zamazal , pobrn@protonmail.com, mail@maciej.szmigiero.name Subject: [PATCH v3 4/6] libcamera: simple: Avoid incorrect arithmetic in AWB Date: Fri, 19 Sep 2025 19:37:07 +0200 Message-ID: <20250919173709.220881-5-mzamazal@redhat.com> In-Reply-To: <20250919173709.220881-1-mzamazal@redhat.com> References: <20250919173709.220881-1-mzamazal@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: SZlnbpFWRDemdq9yL2c5LrMIBuG3vliXMTbReW9a0aA_1758303453 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 Reviewed-by: Maciej S. Szmigiero --- 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.