diff options
author | Milan Zamazal <mzamazal@redhat.com> | 2025-04-14 19:32:44 +0200 |
---|---|---|
committer | Kieran Bingham <kieran.bingham@ideasonboard.com> | 2025-04-15 18:47:17 +0100 |
commit | 026ed6273969d931d38876345e01de626def8b07 (patch) | |
tree | 54b8b51722c771fbeaba14d0bd2ac25093c0d33b /src | |
parent | 78d9f7bb75b3d900536a151b1b1a0a6e9ba84c29 (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.cpp | 2 |
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; |