LibGfx/ICC: Move MatrixMatrixConversion curve type check to ctor

A bit faster:

```
    N           Min           Max        Median         Avg       Stddev
x  50    0.97179127     1.0031381    0.98313618  0.98407591 0.0092019442
+  50    0.95996714    0.99507213    0.96965885  0.97242294 0.0095455053
Difference at 95.0% confidence
	-0.011653 +/- 0.00372012
	-1.18415% +/- 0.378032%
	(Student's t, pooled s = 0.0093753)
```
This commit is contained in:
Nico Weber 2024-01-08 22:09:48 -05:00 committed by Sam Atkins
parent 5f85aff036
commit 92852b8477
2 changed files with 9 additions and 2 deletions

View file

@ -1586,6 +1586,15 @@ MatrixMatrixConversion::MatrixMatrixConversion(LutCurveType source_red_TRC,
, m_destination_green_TRC(move(destination_green_TRC))
, m_destination_blue_TRC(move(destination_blue_TRC))
{
auto check = [](auto const& trc) {
VERIFY(trc->type() == CurveTagData::Type || trc->type() == ParametricCurveTagData::Type);
};
check(m_source_red_TRC);
check(m_source_green_TRC);
check(m_source_blue_TRC);
check(m_destination_red_TRC);
check(m_destination_green_TRC);
check(m_destination_blue_TRC);
}
Optional<MatrixMatrixConversion> Profile::matrix_matrix_conversion(Profile const& source_profile) const

View file

@ -175,14 +175,12 @@ private:
inline Color MatrixMatrixConversion::map(FloatVector3 in_rgb) const
{
auto evaluate_curve = [](TagData const& trc, float f) {
VERIFY(trc.type() == CurveTagData::Type || trc.type() == ParametricCurveTagData::Type);
if (trc.type() == CurveTagData::Type)
return static_cast<CurveTagData const&>(trc).evaluate(f);
return static_cast<ParametricCurveTagData const&>(trc).evaluate(f);
};
auto evaluate_curve_inverse = [](TagData const& trc, float f) {
VERIFY(trc.type() == CurveTagData::Type || trc.type() == ParametricCurveTagData::Type);
if (trc.type() == CurveTagData::Type)
return static_cast<CurveTagData const&>(trc).evaluate_inverse(f);
return static_cast<ParametricCurveTagData const&>(trc).evaluate_inverse(f);