/src/libjxl/lib/jxl/cms/opsin_params.h
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) the JPEG XL Project Authors. All rights reserved. |
2 | | // |
3 | | // Use of this source code is governed by a BSD-style |
4 | | // license that can be found in the LICENSE file. |
5 | | |
6 | | #ifndef LIB_JXL_CMS_OPSIN_PARAMS_H_ |
7 | | #define LIB_JXL_CMS_OPSIN_PARAMS_H_ |
8 | | |
9 | | #include <array> |
10 | | #include <cstddef> |
11 | | |
12 | | #include "lib/jxl/base/matrix_ops.h" |
13 | | |
14 | | // Constants that define the XYB color space. |
15 | | |
16 | | namespace jxl { |
17 | | namespace cms { |
18 | | |
19 | | // Parameters for opsin absorbance. |
20 | | constexpr float kM02 = 0.078f; |
21 | | constexpr float kM00 = 0.30f; |
22 | | constexpr float kM01 = 1.0f - kM02 - kM00; |
23 | | |
24 | | constexpr float kM12 = 0.078f; |
25 | | constexpr float kM10 = 0.23f; |
26 | | constexpr float kM11 = 1.0f - kM12 - kM10; |
27 | | |
28 | | constexpr float kM20 = 0.24342268924547819f; |
29 | | constexpr float kM21 = 0.20476744424496821f; |
30 | | constexpr float kM22 = 1.0f - kM20 - kM21; |
31 | | |
32 | | constexpr float kBScale = 1.0f; |
33 | | constexpr float kYToBRatio = 1.0f; // works better with 0.50017729543783418 |
34 | | constexpr float kBToYRatio = 1.0f / kYToBRatio; |
35 | | |
36 | | constexpr float kOpsinAbsorbanceBias0 = 0.0037930732552754493f; |
37 | | constexpr float kOpsinAbsorbanceBias1 = kOpsinAbsorbanceBias0; |
38 | | constexpr float kOpsinAbsorbanceBias2 = kOpsinAbsorbanceBias0; |
39 | | |
40 | | // Opsin absorbance matrix is now frozen. |
41 | | constexpr Matrix3x3 kOpsinAbsorbanceMatrix{ |
42 | | {{kM00, kM01, kM02}, {kM10, kM11, kM12}, {kM20, kM21, kM22}}}; |
43 | | |
44 | | constexpr Matrix3x3 kDefaultInverseOpsinAbsorbanceMatrix{ |
45 | | {{11.031566901960783f, -9.866943921568629f, -0.16462299647058826f}, |
46 | | {-3.254147380392157f, 4.418770392156863f, -0.16462299647058826f}, |
47 | | {-3.6588512862745097f, 2.7129230470588235f, 1.9459282392156863f}}}; |
48 | | |
49 | | // Must be the inverse matrix of kOpsinAbsorbanceMatrix and match the spec. |
50 | 50.5k | static inline const Matrix3x3& DefaultInverseOpsinAbsorbanceMatrix() { |
51 | 50.5k | return kDefaultInverseOpsinAbsorbanceMatrix; |
52 | 50.5k | } Unexecuted instantiation: encode.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_fields.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_ans.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_lz77.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_fast_lossless.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_frame.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_modular.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_patch_dictionary.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_dot_dictionary.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_detect_dots.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_debug_image.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_quant_weights.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_xyb.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_image_bundle.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_external_image.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_photon_noise.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_heuristics.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_adaptive_quantization.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_butteraugli_comparator.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_cache.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_group.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_progressive_split.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_splines.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_chroma_from_luma.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_ac_strategy.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_entropy_coder.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: jxl_cms.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_jpeg_data.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: enc_encoding.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: chroma_from_luma.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: color_encoding_internal.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: compressed_dc.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: dec_cache.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: blending.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: dec_external_image.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: dec_frame.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: dec_group.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: dec_modular.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: dec_noise.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: dec_patch_dictionary.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: dec_xyb.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: decode.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: epf.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: frame_header.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: image_bundle.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() image_metadata.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Line | Count | Source | 50 | 50.5k | static inline const Matrix3x3& DefaultInverseOpsinAbsorbanceMatrix() { | 51 | 50.5k | return kDefaultInverseOpsinAbsorbanceMatrix; | 52 | 50.5k | } |
Unexecuted instantiation: luminance.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: opsin_params.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: passes_state.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: quant_weights.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: render_pipeline.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: low_memory_render_pipeline.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: simple_render_pipeline.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_blending.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: render_pipeline_stage.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_chroma_upsampling.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_cms.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_epf.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_from_linear.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_gaborish.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_noise.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_patches.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_splines.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_spot.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_to_linear.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_tone_mapping.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_upsampling.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_write.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_xyb.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: stage_ycbcr.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: splines.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() Unexecuted instantiation: decode_to_jpeg.cc:jxl::cms::DefaultInverseOpsinAbsorbanceMatrix() |
53 | | |
54 | | constexpr Vector3 kOpsinAbsorbanceBias = { |
55 | | kOpsinAbsorbanceBias0, |
56 | | kOpsinAbsorbanceBias1, |
57 | | kOpsinAbsorbanceBias2, |
58 | | }; |
59 | | |
60 | | constexpr std::array<float, 4> kNegOpsinAbsorbanceBiasRGB = { |
61 | | -kOpsinAbsorbanceBias0, -kOpsinAbsorbanceBias1, -kOpsinAbsorbanceBias2, |
62 | | 1.0f}; |
63 | | |
64 | | constexpr float kScaledXYBOffset0 = 0.015386134f; |
65 | | constexpr float kScaledXYBOffset1 = 0.0f; |
66 | | constexpr float kScaledXYBOffset2 = 0.27770459f; |
67 | | |
68 | | constexpr Vector3 kScaledXYBOffset = {kScaledXYBOffset0, kScaledXYBOffset1, |
69 | | kScaledXYBOffset2}; |
70 | | |
71 | | constexpr float kScaledXYBScale0 = 22.995788804f; |
72 | | constexpr float kScaledXYBScale1 = 1.183000077f; |
73 | | constexpr float kScaledXYBScale2 = 1.502141333f; |
74 | | |
75 | | constexpr Vector3 kScaledXYBScale = { |
76 | | kScaledXYBScale0, |
77 | | kScaledXYBScale1, |
78 | | kScaledXYBScale2, |
79 | | }; |
80 | | |
81 | | // NB(eustas): following function/variable names are just "namos". |
82 | | |
83 | | // More precise calculation of 1 / ((1 / r1) + (1 / r2)) |
84 | 0 | constexpr float ReciprocialSum(float r1, float r2) { |
85 | 0 | return (r1 * r2) / (r1 + r2); |
86 | 0 | } |
87 | | |
88 | | constexpr float kXYBOffset0 = kScaledXYBOffset0 + kScaledXYBOffset1; |
89 | | constexpr float kXYBOffset1 = |
90 | | kScaledXYBOffset1 - kScaledXYBOffset0 + (1.0f / kScaledXYBScale0); |
91 | | constexpr float kXYBOffset2 = kScaledXYBOffset1 + kScaledXYBOffset2; |
92 | | |
93 | | constexpr std::array<float, 3> kXYBOffset = {kXYBOffset0, kXYBOffset1, |
94 | | kXYBOffset2}; |
95 | | |
96 | | constexpr float kXYBScale0 = ReciprocialSum(kScaledXYBScale0, kScaledXYBScale1); |
97 | | constexpr float kXYBScale1 = ReciprocialSum(kScaledXYBScale0, kScaledXYBScale1); |
98 | | constexpr float kXYBScale2 = ReciprocialSum(kScaledXYBScale1, kScaledXYBScale2); |
99 | | |
100 | | constexpr std::array<float, 3> kXYBScale = {kXYBScale0, kXYBScale1, kXYBScale2}; |
101 | | |
102 | | template <size_t idx> |
103 | 0 | constexpr float ScaledXYBScale() { |
104 | 0 | return (idx == 0) ? kScaledXYBScale0 |
105 | 0 | : (idx == 1) ? kScaledXYBScale1 |
106 | 0 | : kScaledXYBScale2; |
107 | 0 | } Unexecuted instantiation: float jxl::cms::ScaledXYBScale<1ul>() Unexecuted instantiation: float jxl::cms::ScaledXYBScale<0ul>() Unexecuted instantiation: float jxl::cms::ScaledXYBScale<2ul>() |
108 | | |
109 | | template <size_t idx> |
110 | 0 | constexpr float ScaledXYBOffset() { |
111 | 0 | return (idx == 0) ? kScaledXYBOffset0 |
112 | 0 | : (idx == 1) ? kScaledXYBOffset1 |
113 | 0 | : kScaledXYBOffset2; |
114 | 0 | } Unexecuted instantiation: float jxl::cms::ScaledXYBOffset<1ul>() Unexecuted instantiation: float jxl::cms::ScaledXYBOffset<0ul>() Unexecuted instantiation: float jxl::cms::ScaledXYBOffset<2ul>() |
115 | | |
116 | | template <size_t x, size_t y, size_t b, size_t idx> |
117 | 0 | constexpr float XYBCorner() { |
118 | 0 | return (((idx == 0) ? x |
119 | 0 | : (idx == 1) ? y |
120 | 0 | : b) / |
121 | 0 | ScaledXYBScale<idx>()) - |
122 | 0 | ScaledXYBOffset<idx>(); |
123 | 0 | } Unexecuted instantiation: float jxl::cms::XYBCorner<0ul, 0ul, 0ul, 1ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<0ul, 0ul, 0ul, 0ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<0ul, 0ul, 0ul, 2ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<0ul, 0ul, 1ul, 1ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<0ul, 0ul, 1ul, 0ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<0ul, 0ul, 1ul, 2ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<0ul, 1ul, 0ul, 1ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<0ul, 1ul, 0ul, 0ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<0ul, 1ul, 0ul, 2ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<0ul, 1ul, 1ul, 1ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<0ul, 1ul, 1ul, 0ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<0ul, 1ul, 1ul, 2ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<1ul, 0ul, 0ul, 1ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<1ul, 0ul, 0ul, 0ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<1ul, 0ul, 0ul, 2ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<1ul, 0ul, 1ul, 1ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<1ul, 0ul, 1ul, 0ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<1ul, 0ul, 1ul, 2ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<1ul, 1ul, 0ul, 1ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<1ul, 1ul, 0ul, 0ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<1ul, 1ul, 0ul, 2ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<1ul, 1ul, 1ul, 1ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<1ul, 1ul, 1ul, 0ul>() Unexecuted instantiation: float jxl::cms::XYBCorner<1ul, 1ul, 1ul, 2ul>() |
124 | | |
125 | | template <size_t x, size_t y, size_t b, size_t idx> |
126 | 0 | constexpr float ScaledA2BCorner() { |
127 | 0 | return (idx == 0) ? (XYBCorner<x, y, b, 1>() + XYBCorner<x, y, b, 0>()) |
128 | 0 | : (idx == 1) ? (XYBCorner<x, y, b, 1>() - XYBCorner<x, y, b, 0>()) |
129 | 0 | : (XYBCorner<x, y, b, 2>() + XYBCorner<x, y, b, 1>()); |
130 | 0 | } Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<0ul, 0ul, 0ul, 0ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<0ul, 0ul, 0ul, 1ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<0ul, 0ul, 0ul, 2ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<0ul, 0ul, 1ul, 0ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<0ul, 0ul, 1ul, 1ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<0ul, 0ul, 1ul, 2ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<0ul, 1ul, 0ul, 0ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<0ul, 1ul, 0ul, 1ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<0ul, 1ul, 0ul, 2ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<0ul, 1ul, 1ul, 0ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<0ul, 1ul, 1ul, 1ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<0ul, 1ul, 1ul, 2ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<1ul, 0ul, 0ul, 0ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<1ul, 0ul, 0ul, 1ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<1ul, 0ul, 0ul, 2ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<1ul, 0ul, 1ul, 0ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<1ul, 0ul, 1ul, 1ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<1ul, 0ul, 1ul, 2ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<1ul, 1ul, 0ul, 0ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<1ul, 1ul, 0ul, 1ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<1ul, 1ul, 0ul, 2ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<1ul, 1ul, 1ul, 0ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<1ul, 1ul, 1ul, 1ul>() Unexecuted instantiation: float jxl::cms::ScaledA2BCorner<1ul, 1ul, 1ul, 2ul>() |
131 | | |
132 | | using ColorCube0D = std::array<float, 3>; |
133 | | template <size_t x, size_t y, size_t b> |
134 | 0 | constexpr ColorCube0D UnscaledA2BCorner() { |
135 | 0 | return {(ScaledA2BCorner<x, y, b, 0>() + kXYBOffset0) * kXYBScale0, |
136 | 0 | (ScaledA2BCorner<x, y, b, 1>() + kXYBOffset1) * kXYBScale1, |
137 | 0 | (ScaledA2BCorner<x, y, b, 2>() + kXYBOffset2) * kXYBScale2}; |
138 | 0 | } Unexecuted instantiation: std::__1::array<float, 3ul> jxl::cms::UnscaledA2BCorner<0ul, 0ul, 0ul>() Unexecuted instantiation: std::__1::array<float, 3ul> jxl::cms::UnscaledA2BCorner<0ul, 0ul, 1ul>() Unexecuted instantiation: std::__1::array<float, 3ul> jxl::cms::UnscaledA2BCorner<0ul, 1ul, 0ul>() Unexecuted instantiation: std::__1::array<float, 3ul> jxl::cms::UnscaledA2BCorner<0ul, 1ul, 1ul>() Unexecuted instantiation: std::__1::array<float, 3ul> jxl::cms::UnscaledA2BCorner<1ul, 0ul, 0ul>() Unexecuted instantiation: std::__1::array<float, 3ul> jxl::cms::UnscaledA2BCorner<1ul, 0ul, 1ul>() Unexecuted instantiation: std::__1::array<float, 3ul> jxl::cms::UnscaledA2BCorner<1ul, 1ul, 0ul>() Unexecuted instantiation: std::__1::array<float, 3ul> jxl::cms::UnscaledA2BCorner<1ul, 1ul, 1ul>() |
139 | | |
140 | | using ColorCube1D = std::array<ColorCube0D, 2>; |
141 | | template <size_t x, size_t y> |
142 | 0 | constexpr ColorCube1D UnscaledA2BCubeXY() { |
143 | 0 | return {UnscaledA2BCorner<x, y, 0>(), UnscaledA2BCorner<x, y, 1>()}; |
144 | 0 | } Unexecuted instantiation: std::__1::array<std::__1::array<float, 3ul>, 2ul> jxl::cms::UnscaledA2BCubeXY<0ul, 0ul>() Unexecuted instantiation: std::__1::array<std::__1::array<float, 3ul>, 2ul> jxl::cms::UnscaledA2BCubeXY<0ul, 1ul>() Unexecuted instantiation: std::__1::array<std::__1::array<float, 3ul>, 2ul> jxl::cms::UnscaledA2BCubeXY<1ul, 0ul>() Unexecuted instantiation: std::__1::array<std::__1::array<float, 3ul>, 2ul> jxl::cms::UnscaledA2BCubeXY<1ul, 1ul>() |
145 | | |
146 | | using ColorCube2D = std::array<ColorCube1D, 2>; |
147 | | template <size_t x> |
148 | 0 | constexpr ColorCube2D UnscaledA2BCubeX() { |
149 | 0 | return {UnscaledA2BCubeXY<x, 0>(), UnscaledA2BCubeXY<x, 1>()}; |
150 | 0 | } Unexecuted instantiation: std::__1::array<std::__1::array<std::__1::array<float, 3ul>, 2ul>, 2ul> jxl::cms::UnscaledA2BCubeX<0ul>() Unexecuted instantiation: std::__1::array<std::__1::array<std::__1::array<float, 3ul>, 2ul>, 2ul> jxl::cms::UnscaledA2BCubeX<1ul>() |
151 | | |
152 | | using ColorCube3D = std::array<ColorCube2D, 2>; |
153 | 104 | constexpr ColorCube3D UnscaledA2BCube() { |
154 | 104 | return {UnscaledA2BCubeX<0>(), UnscaledA2BCubeX<1>()}; |
155 | 104 | } |
156 | | |
157 | | constexpr ColorCube3D kUnscaledA2BCube = UnscaledA2BCube(); |
158 | | |
159 | | } // namespace cms |
160 | | } // namespace jxl |
161 | | |
162 | | #endif // LIB_JXL_CMS_OPSIN_PARAMS_H_ |