summaryrefslogtreecommitdiffstats
path: root/third_party/jpeg-xl/lib/jxl/opsin_params.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/jpeg-xl/lib/jxl/opsin_params.cc')
-rw-r--r--third_party/jpeg-xl/lib/jxl/opsin_params.cc22
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);
+ }
}
}