diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2022-09-04 08:27:38 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2024-11-26 19:05:20 +0200 |
commit | be22d4aa77befb8b60ceb3607c2555959ac126ee (patch) | |
tree | ab5aa18a1d9352b81440aee93b63aac22c8f6ee7 | |
parent | 01919308e9cce3fb9c785fa6be7e5f37515ba94f (diff) |
ipa: rkisp1: awb: Use Vector and Matrix for linear algebra
Replace the manual vector and matrix calculations with usage of the
Vector and Matrix classes. This simplifies the code and improves
readability.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Milan Zamazal <mzamazal@redhat.com>
-rw-r--r-- | src/ipa/rkisp1/algorithms/awb.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp index c330feff..26d7b813 100644 --- a/src/ipa/rkisp1/algorithms/awb.cpp +++ b/src/ipa/rkisp1/algorithms/awb.cpp @@ -203,9 +203,11 @@ void Awb::process(IPAContext &context, }}; } else { /* Get the YCbCr mean values */ - double yMean = awb->awb_mean[0].mean_y_or_g; - double cbMean = awb->awb_mean[0].mean_cb_or_b; - double crMean = awb->awb_mean[0].mean_cr_or_r; + Vector<double, 3> yuvMeans({ + static_cast<double>(awb->awb_mean[0].mean_y_or_g), + static_cast<double>(awb->awb_mean[0].mean_cb_or_b), + static_cast<double>(awb->awb_mean[0].mean_cr_or_r) + }); /* * Convert from YCbCr to RGB. @@ -219,14 +221,16 @@ void Awb::process(IPAContext &context, * [1,1636, -0,4045, -0,7949] * [1,1636, 1,9912, -0,0250]] */ - yMean -= 16; - cbMean -= 128; - crMean -= 128; - rgbMeans = {{ - 1.1636 * yMean - 0.0623 * cbMean + 1.6008 * crMean, - 1.1636 * yMean - 0.4045 * cbMean - 0.7949 * crMean, - 1.1636 * yMean + 1.9912 * cbMean - 0.0250 * crMean - }}; + static const Matrix<double, 3, 3> yuv2rgbMatrix({ + 1.1636, -0.0623, 1.6008, + 1.1636, -0.4045, -0.7949, + 1.1636, 1.9912, -0.0250 + }); + static const Vector<double, 3> yuv2rgbOffset({ + 16, 128, 128 + }); + + rgbMeans = yuv2rgbMatrix * (yuvMeans - yuv2rgbOffset); /* * Due to hardware rounding errors in the YCbCr means, the |