178 | 18.2k | } encode.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Line | Count | Source | 134 | 18.2k | float preserve_saturation = 0.1f) { | 135 | 18.2k | const float luminance = primaries_luminances[0] * rgb[0] + | 136 | 18.2k | primaries_luminances[1] * rgb[1] + | 137 | 18.2k | primaries_luminances[2] * rgb[2]; | 138 | | | 139 | | // Desaturate out-of-gamut pixels. This is done by mixing each pixel | 140 | | // with just enough gray of the target luminance to make all | 141 | | // components non-negative. | 142 | | // - For saturation preservation, if a component is still larger than | 143 | | // 1 then the pixel is normalized to have a maximum component of 1. | 144 | | // That will reduce its luminance. | 145 | | // - For luminance preservation, getting all components below 1 is | 146 | | // done by mixing in yet more gray. That will desaturate it further. | 147 | 18.2k | float gray_mix_saturation = 0.0f; | 148 | 18.2k | float gray_mix_luminance = 0.0f; | 149 | 54.6k | for (size_t idx : {0, 1, 2}) { | 150 | 54.6k | const float& val = rgb[idx]; | 151 | 54.6k | const float val_minus_gray = val - luminance; | 152 | 54.6k | const float inv_val_minus_gray = | 153 | 54.6k | 1.0f / ((val_minus_gray == 0.0f) ? 1.0f : val_minus_gray); | 154 | 54.6k | const float val_over_val_minus_gray = val * inv_val_minus_gray; | 155 | 54.6k | gray_mix_saturation = | 156 | 54.6k | (val_minus_gray >= 0.0f) | 157 | 54.6k | ? gray_mix_saturation | 158 | 54.6k | : std::max(gray_mix_saturation, val_over_val_minus_gray); | 159 | 54.6k | gray_mix_luminance = | 160 | 54.6k | std::max(gray_mix_luminance, | 161 | 54.6k | (val_minus_gray <= 0.0f) | 162 | 54.6k | ? gray_mix_saturation | 163 | 54.6k | : (val_over_val_minus_gray - inv_val_minus_gray)); | 164 | 54.6k | } | 165 | 18.2k | const float gray_mix = | 166 | 18.2k | Clamp1((preserve_saturation * (gray_mix_saturation - gray_mix_luminance) + | 167 | 18.2k | gray_mix_luminance), | 168 | 18.2k | 0.0f, 1.0f); | 169 | 54.6k | for (size_t idx : {0, 1, 2}) { | 170 | 54.6k | float& val = rgb[idx]; | 171 | 54.6k | val = gray_mix * (luminance - val) + val; | 172 | 54.6k | } | 173 | 18.2k | const float max_clr = std::max({1.0f, rgb[0], rgb[1], rgb[2]}); | 174 | 18.2k | const float normalizer = 1.0f / max_clr; | 175 | 54.6k | for (size_t idx : {0, 1, 2}) { | 176 | 54.6k | rgb[idx] *= normalizer; | 177 | 54.6k | } | 178 | 18.2k | } |
Unexecuted instantiation: enc_fields.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_ans.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_lz77.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_fast_lossless.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_frame.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_modular.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_patch_dictionary.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_dot_dictionary.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_detect_dots.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_debug_image.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_quant_weights.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_xyb.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_image_bundle.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_external_image.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_heuristics.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_adaptive_quantization.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_butteraugli_comparator.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_cache.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_group.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_progressive_split.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_chroma_from_luma.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_ac_strategy.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_entropy_coder.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: jxl_cms.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_jpeg_data.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: enc_encoding.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: color_encoding_internal.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: compressed_dc.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: dec_cache.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: blending.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: dec_external_image.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: dec_frame.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: dec_group.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: dec_modular.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: dec_noise.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: dec_patch_dictionary.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: dec_xyb.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: decode.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: epf.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: frame_header.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: image_bundle.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: image_metadata.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: luminance.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: passes_state.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: quant_weights.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: render_pipeline.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: low_memory_render_pipeline.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: simple_render_pipeline.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_blending.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: render_pipeline_stage.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_chroma_upsampling.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_cms.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_epf.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_from_linear.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_gaborish.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_noise.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_patches.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_splines.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_spot.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_to_linear.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_tone_mapping.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_upsampling.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_write.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_xyb.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: stage_ycbcr.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) Unexecuted instantiation: decode_to_jpeg.cc:jxl::GamutMapScalar(std::__1::array<float, 3ul>&, std::__1::array<float, 3ul> const&, float) |