forked from jengelh/libcamera
44 lines
1.5 KiB
Diff
44 lines
1.5 KiB
Diff
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
|
|
|