/src/libjxl/lib/jxl/chroma_from_luma.cc
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 | | #include "lib/jxl/chroma_from_luma.h" |
7 | | |
8 | | #include <jxl/memory_manager.h> |
9 | | |
10 | | #include <cstddef> |
11 | | #include <cstdint> |
12 | | #include <cstdlib> // abs |
13 | | #include <limits> |
14 | | |
15 | | #include "lib/jxl/base/common.h" |
16 | | #include "lib/jxl/base/status.h" |
17 | | #include "lib/jxl/dec_bit_reader.h" |
18 | | #include "lib/jxl/fields.h" |
19 | | #include "lib/jxl/image.h" |
20 | | #include "lib/jxl/image_ops.h" |
21 | | |
22 | | namespace jxl { |
23 | | |
24 | 9.01k | Status ColorCorrelation::DecodeDC(BitReader* br) { |
25 | 9.01k | if (br->ReadFixedBits<1>() == 1) { |
26 | | // All default. |
27 | 7.97k | return true; |
28 | 7.97k | } |
29 | 1.04k | SetColorFactor(U32Coder::Read(kColorFactorDist, br)); |
30 | 1.04k | JXL_RETURN_IF_ERROR(F16Coder::Read(br, &base_correlation_x_)); |
31 | 1.03k | if (std::abs(base_correlation_x_) > 4.0f) { |
32 | 59 | return JXL_FAILURE("Base X correlation is out of range"); |
33 | 59 | } |
34 | 980 | JXL_RETURN_IF_ERROR(F16Coder::Read(br, &base_correlation_b_)); |
35 | 978 | if (std::abs(base_correlation_b_) > 4.0f) { |
36 | 45 | return JXL_FAILURE("Base B correlation is out of range"); |
37 | 45 | } |
38 | 933 | ytox_dc_ = static_cast<int>(br->ReadFixedBits<kBitsPerByte>()) + |
39 | 933 | std::numeric_limits<int8_t>::min(); |
40 | 933 | ytob_dc_ = static_cast<int>(br->ReadFixedBits<kBitsPerByte>()) + |
41 | 933 | std::numeric_limits<int8_t>::min(); |
42 | 933 | RecomputeDCFactors(); |
43 | 933 | return true; |
44 | 978 | } |
45 | | |
46 | | StatusOr<ColorCorrelationMap> ColorCorrelationMap::Create( |
47 | 57.3k | JxlMemoryManager* memory_manager, size_t xsize, size_t ysize, bool XYB) { |
48 | 57.3k | ColorCorrelationMap result; |
49 | 57.3k | size_t xblocks = DivCeil(xsize, kColorTileDim); |
50 | 57.3k | size_t yblocks = DivCeil(ysize, kColorTileDim); |
51 | 57.3k | JXL_ASSIGN_OR_RETURN(result.ytox_map, |
52 | 57.3k | ImageSB::Create(memory_manager, xblocks, yblocks)); |
53 | 57.3k | JXL_ASSIGN_OR_RETURN(result.ytob_map, |
54 | 57.3k | ImageSB::Create(memory_manager, xblocks, yblocks)); |
55 | 57.3k | ZeroFillImage(&result.ytox_map); |
56 | 57.3k | ZeroFillImage(&result.ytob_map); |
57 | 57.3k | if (!XYB) { |
58 | 0 | result.base_.base_correlation_b_ = 0; |
59 | 0 | } |
60 | 57.3k | result.base_.RecomputeDCFactors(); |
61 | 57.3k | return result; |
62 | 57.3k | } |
63 | | |
64 | | } // namespace jxl |