diff options
Diffstat (limited to 'third_party/jpeg-xl/lib/jxl/opsin_params.cc')
-rw-r--r-- | third_party/jpeg-xl/lib/jxl/opsin_params.cc | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/third_party/jpeg-xl/lib/jxl/opsin_params.cc b/third_party/jpeg-xl/lib/jxl/opsin_params.cc index e1fdda5322..8aae4e3597 100644 --- a/third_party/jpeg-xl/lib/jxl/opsin_params.cc +++ b/third_party/jpeg-xl/lib/jxl/opsin_params.cc @@ -9,24 +9,19 @@ #define INVERSE_OPSIN_FROM_SPEC 1 -#if not(INVERSE_OPSIN_FROM_SPEC) #include "lib/jxl/base/matrix_ops.h" -#endif namespace jxl { -const float* GetOpsinAbsorbanceInverseMatrix() { +const Matrix3x3& GetOpsinAbsorbanceInverseMatrix() { #if INVERSE_OPSIN_FROM_SPEC return jxl::cms::DefaultInverseOpsinAbsorbanceMatrix(); #else // INVERSE_OPSIN_FROM_SPEC // Compute the inverse opsin matrix from the forward matrix. Less precise // than taking the values from the specification, but must be used if the // forward transform is changed and the spec will require updating. - static const float* const kInverse = [] { - static float inverse[9]; - for (int i = 0; i < 9; i++) { - inverse[i] = kOpsinAbsorbanceMatrix[i]; - } + static const Matrix3x3 const kInverse = [] { + static Matrix3x3 inverse = kOpsinAbsorbanceMatrix; Inv3x3Matrix(inverse); return inverse; }(); @@ -34,12 +29,15 @@ const float* GetOpsinAbsorbanceInverseMatrix() { #endif // INVERSE_OPSIN_FROM_SPEC } -void InitSIMDInverseMatrix(const float* JXL_RESTRICT inverse, +void InitSIMDInverseMatrix(const Matrix3x3& inverse, float* JXL_RESTRICT simd_inverse, float intensity_target) { - for (size_t i = 0; i < 9; ++i) { - simd_inverse[4 * i] = simd_inverse[4 * i + 1] = simd_inverse[4 * i + 2] = - simd_inverse[4 * i + 3] = inverse[i] * (255.0f / intensity_target); + for (size_t j = 0; j < 3; ++j) { + for (size_t i = 0; i < 3; ++i) { + size_t idx = (j * 3 + i) * 4; + simd_inverse[idx] = simd_inverse[idx + 1] = simd_inverse[idx + 2] = + simd_inverse[idx + 3] = inverse[j][i] * (255.0f / intensity_target); + } } } |