summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMilan Zamazal <mzamazal@redhat.com>2025-04-14 19:32:44 +0200
committerKieran Bingham <kieran.bingham@ideasonboard.com>2025-04-15 18:47:17 +0100
commit026ed6273969d931d38876345e01de626def8b07 (patch)
tree54b8b51722c771fbeaba14d0bd2ac25093c0d33b /src
parent78d9f7bb75b3d900536a151b1b1a0a6e9ba84c29 (diff)
libcamera: software_isp: Fix CCM multiplication
A colour correction matrix (CCM) is applied like this to an RGB pixel vector P: CCM * P White balance must be applied before CCM. If CCM is used, software ISP makes a combined matrix by multiplying the CCM by a white balance gains CCM-like matrix (WBG). The multiplication should be as follows to do it in the correct order: CCM * (WBG * P) = (CCM * WBG) * P The multiplication order in Lut software ISP algorithm is reversed, resulting in colour casts. Let's fix the order. Signed-off-by: Milan Zamazal <mzamazal@redhat.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r--src/ipa/simple/algorithms/lut.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/ipa/simple/algorithms/lut.cpp b/src/ipa/simple/algorithms/lut.cpp
index e8638f27..d1d5f727 100644
--- a/src/ipa/simple/algorithms/lut.cpp
+++ b/src/ipa/simple/algorithms/lut.cpp
@@ -122,7 +122,7 @@ void Lut::prepare(IPAContext &context,
Matrix<float, 3, 3> gainCcm = { { gains.r(), 0, 0,
0, gains.g(), 0,
0, 0, gains.b() } };
- auto ccm = gainCcm * context.activeState.ccm.ccm;
+ auto ccm = context.activeState.ccm.ccm * gainCcm;
auto &red = params->redCcm;
auto &green = params->greenCcm;
auto &blue = params->blueCcm;