Coverage Report

Created: 2025-06-22 08:04

/src/libjxl/lib/jxl/passes_state.h
Line
Count
Source
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_PASSES_STATE_H_
7
#define LIB_JXL_PASSES_STATE_H_
8
9
#include <jxl/memory_manager.h>
10
11
#include <array>
12
#include <cstddef>
13
#include <vector>
14
15
#include "lib/jxl/ac_context.h"
16
#include "lib/jxl/ac_strategy.h"
17
#include "lib/jxl/base/common.h"
18
#include "lib/jxl/base/compiler_specific.h"
19
#include "lib/jxl/base/status.h"
20
#include "lib/jxl/chroma_from_luma.h"
21
#include "lib/jxl/coeff_order_fwd.h"
22
#include "lib/jxl/dec_patch_dictionary.h"
23
#include "lib/jxl/frame_dimensions.h"
24
#include "lib/jxl/frame_header.h"
25
#include "lib/jxl/image.h"
26
#include "lib/jxl/image_bundle.h"
27
#include "lib/jxl/image_metadata.h"
28
#include "lib/jxl/noise.h"
29
#include "lib/jxl/quant_weights.h"
30
#include "lib/jxl/quantizer.h"
31
#include "lib/jxl/splines.h"
32
33
// Structures that hold the (en/de)coder state for a JPEG XL kVarDCT
34
// (en/de)coder.
35
36
namespace jxl {
37
38
struct ImageFeatures {
39
  explicit ImageFeatures(JxlMemoryManager* memory_manager_)
40
33.6k
      : patches(memory_manager_) {}
41
  NoiseParams noise_params;
42
  PatchDictionary patches;
43
  Splines splines;
44
};
45
46
// State common to both encoder and decoder.
47
// NOLINTNEXTLINE(clang-analyzer-optin.performance.Padding)
48
struct PassesSharedState {
49
  explicit PassesSharedState(JxlMemoryManager* memory_manager_)
50
33.6k
      : memory_manager(memory_manager_), image_features(memory_manager_) {
51
134k
    for (auto& reference_frame : reference_frames) {
52
134k
      reference_frame.frame = jxl::make_unique<ImageBundle>(memory_manager_);
53
134k
    }
54
33.6k
  }
55
56
  JxlMemoryManager* memory_manager;
57
  const CodecMetadata* metadata;
58
59
  FrameDimensions frame_dim;
60
61
  // Control fields and parameters.
62
  AcStrategyImage ac_strategy;
63
64
  // Dequant matrices + quantizer.
65
  DequantMatrices matrices;
66
  Quantizer quantizer{matrices};
67
  ImageI raw_quant_field;
68
69
  // Per-block side information for EPF detail preservation.
70
  ImageB epf_sharpness;
71
72
  ColorCorrelationMap cmap;
73
74
  ImageFeatures image_features;
75
76
  // Memory area for storing coefficient orders.
77
  // `coeff_order_size` is the size used by *one* set of coefficient orders (at
78
  // most kMaxCoeffOrderSize). A set of coefficient orders is present for each
79
  // pass.
80
  size_t coeff_order_size = 0;
81
  std::vector<coeff_order_t> coeff_orders;
82
83
  // Decoder-side DC and quantized DC.
84
  ImageB quant_dc;
85
  Image3F dc_storage;
86
  const Image3F* JXL_RESTRICT dc = &dc_storage;
87
88
  BlockCtxMap block_ctx_map;
89
90
  Image3F dc_frames[4];
91
92
  std::array<ReferceFrame, 4> reference_frames;
93
94
  // Number of pre-clustered set of histograms (with the same ctx map), per
95
  // pass. Encoded as num_histograms_ - 1.
96
  size_t num_histograms = 0;
97
};
98
99
// Initialized the state information that is shared between encoder and decoder.
100
Status InitializePassesSharedState(const FrameHeader& frame_header,
101
                                   PassesSharedState* JXL_RESTRICT shared,
102
                                   bool encoder = false);
103
104
}  // namespace jxl
105
106
#endif  // LIB_JXL_PASSES_STATE_H_