summaryrefslogtreecommitdiffstats
path: root/third_party/jpeg-xl/lib/jxl/dec_xyb.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/jpeg-xl/lib/jxl/dec_xyb.cc')
-rw-r--r--third_party/jpeg-xl/lib/jxl/dec_xyb.cc43
1 files changed, 19 insertions, 24 deletions
diff --git a/third_party/jpeg-xl/lib/jxl/dec_xyb.cc b/third_party/jpeg-xl/lib/jxl/dec_xyb.cc
index 7010f0d813..a719b3eb8c 100644
--- a/third_party/jpeg-xl/lib/jxl/dec_xyb.cc
+++ b/third_party/jpeg-xl/lib/jxl/dec_xyb.cc
@@ -160,20 +160,19 @@ namespace jxl {
HWY_EXPORT(OpsinToLinearInplace);
void OpsinToLinearInplace(Image3F* JXL_RESTRICT inout, ThreadPool* pool,
const OpsinParams& opsin_params) {
- return HWY_DYNAMIC_DISPATCH(OpsinToLinearInplace)(inout, pool, opsin_params);
+ HWY_DYNAMIC_DISPATCH(OpsinToLinearInplace)(inout, pool, opsin_params);
}
HWY_EXPORT(OpsinToLinear);
void OpsinToLinear(const Image3F& opsin, const Rect& rect, ThreadPool* pool,
Image3F* JXL_RESTRICT linear,
const OpsinParams& opsin_params) {
- return HWY_DYNAMIC_DISPATCH(OpsinToLinear)(opsin, rect, pool, linear,
- opsin_params);
+ HWY_DYNAMIC_DISPATCH(OpsinToLinear)(opsin, rect, pool, linear, opsin_params);
}
HWY_EXPORT(YcbcrToRgb);
void YcbcrToRgb(const Image3F& ycbcr, Image3F* rgb, const Rect& rect) {
- return HWY_DYNAMIC_DISPATCH(YcbcrToRgb)(ycbcr, rgb, rect);
+ HWY_DYNAMIC_DISPATCH(YcbcrToRgb)(ycbcr, rgb, rect);
}
HWY_EXPORT(HasFastXYBTosRGB8);
@@ -182,7 +181,7 @@ bool HasFastXYBTosRGB8() { return HWY_DYNAMIC_DISPATCH(HasFastXYBTosRGB8)(); }
HWY_EXPORT(FastXYBTosRGB8);
void FastXYBTosRGB8(const float* input[4], uint8_t* output, bool is_rgba,
size_t xsize) {
- return HWY_DYNAMIC_DISPATCH(FastXYBTosRGB8)(input, output, is_rgba, xsize);
+ HWY_DYNAMIC_DISPATCH(FastXYBTosRGB8)(input, output, is_rgba, xsize);
}
void OpsinParams::Init(float intensity_target) {
@@ -218,7 +217,7 @@ Status OutputEncodingInfo::SetFromMetadata(const CodecMetadata& metadata) {
orig_intensity_target = metadata.m.IntensityTarget();
desired_intensity_target = orig_intensity_target;
const auto& im = metadata.transform_data.opsin_inverse_matrix;
- memcpy(orig_inverse_matrix, im.inverse_matrix, sizeof(orig_inverse_matrix));
+ orig_inverse_matrix = im.inverse_matrix;
default_transform = im.all_default;
xyb_encoded = metadata.m.xyb_encoded;
std::copy(std::begin(im.opsin_biases), std::end(im.opsin_biases),
@@ -258,38 +257,38 @@ Status OutputEncodingInfo::SetColorEncoding(const ColorEncoding& c_desired) {
// Compute the opsin inverse matrix and luminances based on primaries and
// white point.
- float inverse_matrix[9];
+ Matrix3x3 inverse_matrix;
bool inverse_matrix_is_default = default_transform;
- memcpy(inverse_matrix, orig_inverse_matrix, sizeof(inverse_matrix));
- constexpr float kSRGBLuminances[3] = {0.2126, 0.7152, 0.0722};
- memcpy(luminances, kSRGBLuminances, sizeof(luminances));
+ inverse_matrix = orig_inverse_matrix;
+ constexpr Vector3 kSRGBLuminances{0.2126, 0.7152, 0.0722};
+ luminances = kSRGBLuminances;
if ((c_desired.GetPrimariesType() != Primaries::kSRGB ||
c_desired.GetWhitePointType() != WhitePoint::kD65) &&
!c_desired.IsGray()) {
- float srgb_to_xyzd50[9];
+ Matrix3x3 srgb_to_xyzd50;
const auto& srgb = ColorEncoding::SRGB(/*is_gray=*/false);
PrimariesCIExy p = srgb.GetPrimaries();
CIExy w = srgb.GetWhitePoint();
JXL_CHECK(PrimariesToXYZD50(p.r.x, p.r.y, p.g.x, p.g.y, p.b.x, p.b.y, w.x,
w.y, srgb_to_xyzd50));
- float original_to_xyz[3][3];
+ Matrix3x3 original_to_xyz;
p = c_desired.GetPrimaries();
w = c_desired.GetWhitePoint();
if (!PrimariesToXYZ(p.r.x, p.r.y, p.g.x, p.g.y, p.b.x, p.b.y, w.x, w.y,
- &original_to_xyz[0][0])) {
+ original_to_xyz)) {
return JXL_FAILURE("PrimariesToXYZ failed");
}
- memcpy(luminances, original_to_xyz[1], sizeof luminances);
+ luminances = original_to_xyz[1];
if (xyb_encoded) {
- float adapt_to_d50[9];
+ Matrix3x3 adapt_to_d50;
if (!AdaptToXYZD50(c_desired.GetWhitePoint().x,
c_desired.GetWhitePoint().y, adapt_to_d50)) {
return JXL_FAILURE("AdaptToXYZD50 failed");
}
- float xyzd50_to_original[9];
- Mul3x3Matrix(adapt_to_d50, &original_to_xyz[0][0], xyzd50_to_original);
+ Matrix3x3 xyzd50_to_original;
+ Mul3x3Matrix(adapt_to_d50, original_to_xyz, xyzd50_to_original);
JXL_RETURN_IF_ERROR(Inv3x3Matrix(xyzd50_to_original));
- float srgb_to_original[9];
+ Matrix3x3 srgb_to_original;
Mul3x3Matrix(xyzd50_to_original, srgb_to_xyzd50, srgb_to_original);
Mul3x3Matrix(srgb_to_original, orig_inverse_matrix, inverse_matrix);
inverse_matrix_is_default = false;
@@ -297,12 +296,8 @@ Status OutputEncodingInfo::SetColorEncoding(const ColorEncoding& c_desired) {
}
if (c_desired.IsGray()) {
- float tmp_inv_matrix[9];
- memcpy(tmp_inv_matrix, inverse_matrix, sizeof(inverse_matrix));
- float srgb_to_luma[9];
- memcpy(&srgb_to_luma[0], luminances, sizeof(luminances));
- memcpy(&srgb_to_luma[3], luminances, sizeof(luminances));
- memcpy(&srgb_to_luma[6], luminances, sizeof(luminances));
+ Matrix3x3 tmp_inv_matrix = inverse_matrix;
+ Matrix3x3 srgb_to_luma{luminances, luminances, luminances};
Mul3x3Matrix(srgb_to_luma, tmp_inv_matrix, inverse_matrix);
}