File 0004-libcamera-simple-Avoid-incorrect-arithmetic-in-AWB.patch of Package libcamera
From 242ae30056eb3d4964b518cb902d2dfef6c69de5 Mon Sep 17 00:00:00 2001 From: Milan Zamazal <mzamazal@redhat.com> Date: Thu, 21 Aug 2025 15:41:40 +0200 Subject: [PATCH 04/17] libcamera: simple: Avoid incorrect arithmetic in AWB 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 <mzamazal@redhat.com> --- src/ipa/simple/algorithms/awb.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ipa/simple/algorithms/awb.cpp b/src/ipa/simple/algorithms/awb.cpp index cf567e894..9509129e9 100644 --- a/src/ipa/simple/algorithms/awb.cpp +++ b/src/ipa/simple/algorithms/awb.cpp @@ -7,6 +7,7 @@ #include "awb.h" +#include <algorithm> #include <numeric> #include <stdint.h> @@ -69,9 +70,10 @@ 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 uint64_t minValid = 1; + const uint64_t sumR = std::max(stats->sumR_ - offset / 4, minValid); + const uint64_t sumG = std::max(stats->sumG_ - offset / 2, minValid); + const uint64_t sumB = std::max(stats->sumB_ - offset / 4, minValid); /* * Calculate red and blue gains for AWB. -- 2.50.1