summaryrefslogtreecommitdiff
path: root/src/ipa/libipa
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-11-18 21:07:01 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-11-26 19:05:20 +0200
commit29892f1c56c6657a9d650aff203912212c295bd0 (patch)
tree287034218ce0a0593fe1429f2dc0f8a99dcd8b7c /src/ipa/libipa
parentcb3e3095d611462d839d6aec29d8a39cd38abf7c (diff)
ipa: libipa: colour: Use the RGB class to model RGB values
The rec601LuminanceFromRGB() and estimateCCT() functions take RGB triplets as three variables. Replace them with instances of the RGB class and adapt the users accordingly. Only variables passed directly to these functions are converted to RGB instances, further conversion of IPA modules to the RGB class will be performed separately. While at it, fix a typo in the documentation of the estimateCCT() function. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Milan Zamazal <mzamazal@redhat.com>
Diffstat (limited to 'src/ipa/libipa')
-rw-r--r--src/ipa/libipa/colours.cpp22
-rw-r--r--src/ipa/libipa/colours.h6
2 files changed, 13 insertions, 15 deletions
diff --git a/src/ipa/libipa/colours.cpp b/src/ipa/libipa/colours.cpp
index 9fcb53b0..6c597093 100644
--- a/src/ipa/libipa/colours.cpp
+++ b/src/ipa/libipa/colours.cpp
@@ -21,9 +21,7 @@ namespace ipa {
/**
* \brief Estimate luminance from RGB values following ITU-R BT.601
- * \param[in] r The red value
- * \param[in] g The green value
- * \param[in] b The blue value
+ * \param[in] rgb The RGB value
*
* This function estimates a luminance value from a triplet of Red, Green and
* Blue values, following the formula defined by ITU-R Recommendation BT.601-7
@@ -31,21 +29,19 @@ namespace ipa {
*
* \return The estimated luminance value
*/
-double rec601LuminanceFromRGB(double r, double g, double b)
+double rec601LuminanceFromRGB(const RGB<double> &rgb)
{
- return (r * .299) + (g * .587) + (b * .114);
+ return (rgb.r() * .299) + (rgb.g() * .587) + (rgb.b() * .114);
}
/**
* \brief Estimate correlated colour temperature from RGB color space input
- * \param[in] red The input red value
- * \param[in] green The input green value
- * \param[in] blue The input blue value
+ * \param[in] rgb The RGB value
*
* This function estimates the correlated color temperature RGB color space
* input. In physics and color science, the Planckian locus or black body locus
* is the path or locus that the color of an incandescent black body would take
- * in a particular chromaticity space as the blackbody temperature changes.
+ * in a particular chromaticity space as the black body temperature changes.
*
* If a narrow range of color temperatures is considered (those encapsulating
* daylight being the most practical case) one can approximate the Planckian
@@ -56,12 +52,12 @@ double rec601LuminanceFromRGB(double r, double g, double b)
*
* \return The estimated color temperature
*/
-uint32_t estimateCCT(double red, double green, double blue)
+uint32_t estimateCCT(const RGB<double> &rgb)
{
/* Convert the RGB values to CIE tristimulus values (XYZ) */
- double X = (-0.14282) * (red) + (1.54924) * (green) + (-0.95641) * (blue);
- double Y = (-0.32466) * (red) + (1.57837) * (green) + (-0.73191) * (blue);
- double Z = (-0.68202) * (red) + (0.77073) * (green) + (0.56332) * (blue);
+ double X = (-0.14282) * rgb.r() + (1.54924) * rgb.g() + (-0.95641) * rgb.b();
+ double Y = (-0.32466) * rgb.r() + (1.57837) * rgb.g() + (-0.73191) * rgb.b();
+ double Z = (-0.68202) * rgb.r() + (0.77073) * rgb.g() + (0.56332) * rgb.b();
/* Calculate the normalized chromaticity values */
double x = X / (X + Y + Z);
diff --git a/src/ipa/libipa/colours.h b/src/ipa/libipa/colours.h
index b42ed0ac..fa6a8b57 100644
--- a/src/ipa/libipa/colours.h
+++ b/src/ipa/libipa/colours.h
@@ -9,12 +9,14 @@
#include <stdint.h>
+#include "vector.h"
+
namespace libcamera {
namespace ipa {
-double rec601LuminanceFromRGB(double r, double g, double b);
-uint32_t estimateCCT(double red, double green, double blue);
+double rec601LuminanceFromRGB(const RGB<double> &rgb);
+uint32_t estimateCCT(const RGB<double> &rgb);
} /* namespace ipa */