Coverage Report

Created: 2026-02-14 07:09

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libjxl/lib/jxl/enc_transforms-inl.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
#include "lib/jxl/base/compiler_specific.h"
7
#include "lib/jxl/frame_dimensions.h"
8
9
#if defined(LIB_JXL_ENC_TRANSFORMS_INL_H_) == defined(HWY_TARGET_TOGGLE)
10
#ifdef LIB_JXL_ENC_TRANSFORMS_INL_H_
11
#undef LIB_JXL_ENC_TRANSFORMS_INL_H_
12
#else
13
#define LIB_JXL_ENC_TRANSFORMS_INL_H_
14
#endif
15
16
#include <cstddef>
17
#include <cstdint>
18
#include <hwy/highway.h>
19
20
#include "lib/jxl/ac_strategy.h"
21
#include "lib/jxl/dct-inl.h"
22
#include "lib/jxl/dct_scales.h"
23
24
HWY_BEFORE_NAMESPACE();
25
namespace jxl {
26
27
enum class AcStrategyType : uint32_t;
28
29
namespace HWY_NAMESPACE {
30
namespace {
31
32
constexpr size_t kMaxBlocks = 32;
33
34
// Inverse of ReinterpretingDCT.
35
template <size_t DCT_ROWS, size_t DCT_COLS, size_t LF_ROWS, size_t LF_COLS,
36
          size_t ROWS, size_t COLS>
37
HWY_INLINE void ReinterpretingIDCT(const float* input,
38
                                   const size_t input_stride, float* output,
39
0
                                   const size_t output_stride, float* scratch) {
40
0
  static_assert(ROWS <= kMaxBlocks, "Unsupported block size");
41
0
  static_assert(COLS <= kMaxBlocks, "Unsupported block size");
42
0
  float* block = scratch;
43
0
  if (ROWS < COLS) {
44
0
    for (size_t y = 0; y < LF_ROWS; y++) {
45
0
      for (size_t x = 0; x < LF_COLS; x++) {
46
0
        block[y * COLS + x] = input[y * input_stride + x] *
47
0
                              DCTTotalResampleScale<DCT_ROWS, ROWS>(y) *
48
0
                              DCTTotalResampleScale<DCT_COLS, COLS>(x);
49
0
      }
50
0
    }
51
0
  } else {
52
0
    for (size_t y = 0; y < LF_COLS; y++) {
53
0
      for (size_t x = 0; x < LF_ROWS; x++) {
54
0
        block[y * ROWS + x] = input[y * input_stride + x] *
55
0
                              DCTTotalResampleScale<DCT_COLS, COLS>(y) *
56
0
                              DCTTotalResampleScale<DCT_ROWS, ROWS>(x);
57
0
      }
58
0
    }
59
0
  }
60
61
0
  float* scratch_space = scratch + kMaxBlocks * kMaxBlocks;
62
0
  ComputeScaledIDCT<ROWS, COLS>()(block, DCTTo(output, output_stride),
63
0
                                  scratch_space);
64
0
}
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<16ul, 8ul, 2ul, 1ul, 2ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<8ul, 16ul, 1ul, 2ul, 1ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<16ul, 16ul, 2ul, 2ul, 2ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 8ul, 4ul, 1ul, 4ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<8ul, 32ul, 1ul, 4ul, 1ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 16ul, 4ul, 2ul, 4ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<16ul, 32ul, 2ul, 4ul, 2ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 32ul, 4ul, 4ul, 4ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<64ul, 32ul, 8ul, 4ul, 8ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 64ul, 4ul, 8ul, 4ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<64ul, 64ul, 8ul, 8ul, 8ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<128ul, 64ul, 16ul, 8ul, 16ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<64ul, 128ul, 8ul, 16ul, 8ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<128ul, 128ul, 16ul, 16ul, 16ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<256ul, 128ul, 32ul, 16ul, 32ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<128ul, 256ul, 16ul, 32ul, 16ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<256ul, 256ul, 32ul, 32ul, 32ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<16ul, 8ul, 2ul, 1ul, 2ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<8ul, 16ul, 1ul, 2ul, 1ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<16ul, 16ul, 2ul, 2ul, 2ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 8ul, 4ul, 1ul, 4ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<8ul, 32ul, 1ul, 4ul, 1ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 16ul, 4ul, 2ul, 4ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<16ul, 32ul, 2ul, 4ul, 2ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 32ul, 4ul, 4ul, 4ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<64ul, 32ul, 8ul, 4ul, 8ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 64ul, 4ul, 8ul, 4ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<64ul, 64ul, 8ul, 8ul, 8ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<128ul, 64ul, 16ul, 8ul, 16ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<64ul, 128ul, 8ul, 16ul, 8ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<128ul, 128ul, 16ul, 16ul, 16ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<256ul, 128ul, 32ul, 16ul, 32ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<128ul, 256ul, 16ul, 32ul, 16ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<256ul, 256ul, 32ul, 32ul, 32ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<16ul, 8ul, 2ul, 1ul, 2ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<8ul, 16ul, 1ul, 2ul, 1ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<16ul, 16ul, 2ul, 2ul, 2ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 8ul, 4ul, 1ul, 4ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<8ul, 32ul, 1ul, 4ul, 1ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 16ul, 4ul, 2ul, 4ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<16ul, 32ul, 2ul, 4ul, 2ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 32ul, 4ul, 4ul, 4ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<64ul, 32ul, 8ul, 4ul, 8ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 64ul, 4ul, 8ul, 4ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<64ul, 64ul, 8ul, 8ul, 8ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<128ul, 64ul, 16ul, 8ul, 16ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<64ul, 128ul, 8ul, 16ul, 8ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<128ul, 128ul, 16ul, 16ul, 16ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<256ul, 128ul, 32ul, 16ul, 32ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<128ul, 256ul, 16ul, 32ul, 16ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<256ul, 256ul, 32ul, 32ul, 32ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<16ul, 8ul, 2ul, 1ul, 2ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<8ul, 16ul, 1ul, 2ul, 1ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<16ul, 16ul, 2ul, 2ul, 2ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 8ul, 4ul, 1ul, 4ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<8ul, 32ul, 1ul, 4ul, 1ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 16ul, 4ul, 2ul, 4ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<16ul, 32ul, 2ul, 4ul, 2ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 32ul, 4ul, 4ul, 4ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<64ul, 32ul, 8ul, 4ul, 8ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<32ul, 64ul, 4ul, 8ul, 4ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<64ul, 64ul, 8ul, 8ul, 8ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<128ul, 64ul, 16ul, 8ul, 16ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<64ul, 128ul, 8ul, 16ul, 8ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<128ul, 128ul, 16ul, 16ul, 16ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<256ul, 128ul, 32ul, 16ul, 32ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<128ul, 256ul, 16ul, 32ul, 16ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingIDCT<256ul, 256ul, 32ul, 32ul, 32ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*)
65
66
template <size_t S>
67
0
void DCT2TopBlock(const float* block, size_t stride, float* out) {
68
0
  static_assert(kBlockDim % S == 0, "S should be a divisor of kBlockDim");
69
0
  static_assert(S % 2 == 0, "S should be even");
70
0
  float temp[kDCTBlockSize];
71
0
  constexpr size_t num_2x2 = S / 2;
72
0
  for (size_t y = 0; y < num_2x2; y++) {
73
0
    for (size_t x = 0; x < num_2x2; x++) {
74
0
      float c00 = block[y * 2 * stride + x * 2];
75
0
      float c01 = block[y * 2 * stride + x * 2 + 1];
76
0
      float c10 = block[(y * 2 + 1) * stride + x * 2];
77
0
      float c11 = block[(y * 2 + 1) * stride + x * 2 + 1];
78
0
      float r00 = c00 + c01 + c10 + c11;
79
0
      float r01 = c00 + c01 - c10 - c11;
80
0
      float r10 = c00 - c01 + c10 - c11;
81
0
      float r11 = c00 - c01 - c10 + c11;
82
0
      r00 *= 0.25f;
83
0
      r01 *= 0.25f;
84
0
      r10 *= 0.25f;
85
0
      r11 *= 0.25f;
86
0
      temp[y * kBlockDim + x] = r00;
87
0
      temp[y * kBlockDim + num_2x2 + x] = r01;
88
0
      temp[(y + num_2x2) * kBlockDim + x] = r10;
89
0
      temp[(y + num_2x2) * kBlockDim + num_2x2 + x] = r11;
90
0
    }
91
0
  }
92
0
  for (size_t y = 0; y < S; y++) {
93
0
    for (size_t x = 0; x < S; x++) {
94
0
      out[y * kBlockDim + x] = temp[y * kBlockDim + x];
95
0
    }
96
0
  }
97
0
}
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::DCT2TopBlock<8ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::DCT2TopBlock<4ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::DCT2TopBlock<2ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::DCT2TopBlock<8ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::DCT2TopBlock<4ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::DCT2TopBlock<2ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::DCT2TopBlock<8ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::DCT2TopBlock<4ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::DCT2TopBlock<2ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::DCT2TopBlock<8ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::DCT2TopBlock<4ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::DCT2TopBlock<2ul>(float const*, unsigned long, float*)
98
99
0
void AFVDCT4x4(const float* JXL_RESTRICT pixels, float* JXL_RESTRICT coeffs) {
100
0
  HWY_ALIGN static constexpr float k4x4AFVBasisTranspose[16][16] = {
101
0
      {
102
0
          0.2500000000000000,
103
0
          0.8769029297991420f,
104
0
          0.0000000000000000,
105
0
          0.0000000000000000,
106
0
          0.0000000000000000,
107
0
          -0.4105377591765233f,
108
0
          0.0000000000000000,
109
0
          0.0000000000000000,
110
0
          0.0000000000000000,
111
0
          0.0000000000000000,
112
0
          0.0000000000000000,
113
0
          0.0000000000000000,
114
0
          0.0000000000000000,
115
0
          0.0000000000000000,
116
0
          0.0000000000000000,
117
0
          0.0000000000000000,
118
0
      },
119
0
      {
120
0
          0.2500000000000000,
121
0
          0.2206518106944235f,
122
0
          0.0000000000000000,
123
0
          0.0000000000000000,
124
0
          -0.7071067811865474f,
125
0
          0.6235485373547691f,
126
0
          0.0000000000000000,
127
0
          0.0000000000000000,
128
0
          0.0000000000000000,
129
0
          0.0000000000000000,
130
0
          0.0000000000000000,
131
0
          0.0000000000000000,
132
0
          0.0000000000000000,
133
0
          0.0000000000000000,
134
0
          0.0000000000000000,
135
0
          0.0000000000000000,
136
0
      },
137
0
      {
138
0
          0.2500000000000000,
139
0
          -0.1014005039375376f,
140
0
          0.4067007583026075f,
141
0
          -0.2125574805828875f,
142
0
          0.0000000000000000,
143
0
          -0.0643507165794627f,
144
0
          -0.4517556589999482f,
145
0
          -0.3046847507248690f,
146
0
          0.3017929516615495f,
147
0
          0.4082482904638627f,
148
0
          0.1747866975480809f,
149
0
          -0.2110560104933578f,
150
0
          -0.1426608480880726f,
151
0
          -0.1381354035075859f,
152
0
          -0.1743760259965107f,
153
0
          0.1135498731499434f,
154
0
      },
155
0
      {
156
0
          0.2500000000000000,
157
0
          -0.1014005039375375f,
158
0
          0.4444481661973445f,
159
0
          0.3085497062849767f,
160
0
          0.0000000000000000f,
161
0
          -0.0643507165794627f,
162
0
          0.1585450355184006f,
163
0
          0.5112616136591823f,
164
0
          0.2579236279634118f,
165
0
          0.0000000000000000,
166
0
          0.0812611176717539f,
167
0
          0.1856718091610980f,
168
0
          -0.3416446842253372f,
169
0
          0.3302282550303788f,
170
0
          0.0702790691196284f,
171
0
          -0.0741750459581035f,
172
0
      },
173
0
      {
174
0
          0.2500000000000000,
175
0
          0.2206518106944236f,
176
0
          0.0000000000000000,
177
0
          0.0000000000000000,
178
0
          0.7071067811865476f,
179
0
          0.6235485373547694f,
180
0
          0.0000000000000000,
181
0
          0.0000000000000000,
182
0
          0.0000000000000000,
183
0
          0.0000000000000000,
184
0
          0.0000000000000000,
185
0
          0.0000000000000000,
186
0
          0.0000000000000000,
187
0
          0.0000000000000000,
188
0
          0.0000000000000000,
189
0
          0.0000000000000000,
190
0
      },
191
0
      {
192
0
          0.2500000000000000,
193
0
          -0.1014005039375378f,
194
0
          0.0000000000000000,
195
0
          0.4706702258572536f,
196
0
          0.0000000000000000,
197
0
          -0.0643507165794628f,
198
0
          -0.0403851516082220f,
199
0
          0.0000000000000000,
200
0
          0.1627234014286620f,
201
0
          0.0000000000000000,
202
0
          0.0000000000000000,
203
0
          0.0000000000000000,
204
0
          0.7367497537172237f,
205
0
          0.0875511500058708f,
206
0
          -0.2921026642334881f,
207
0
          0.1940289303259434f,
208
0
      },
209
0
      {
210
0
          0.2500000000000000,
211
0
          -0.1014005039375377f,
212
0
          0.1957439937204294f,
213
0
          -0.1621205195722993f,
214
0
          0.0000000000000000,
215
0
          -0.0643507165794628f,
216
0
          0.0074182263792424f,
217
0
          -0.2904801297289980f,
218
0
          0.0952002265347504f,
219
0
          0.0000000000000000,
220
0
          -0.3675398009862027f,
221
0
          0.4921585901373873f,
222
0
          0.2462710772207515f,
223
0
          -0.0794670660590957f,
224
0
          0.3623817333531167f,
225
0
          -0.4351904965232280f,
226
0
      },
227
0
      {
228
0
          0.2500000000000000,
229
0
          -0.1014005039375376f,
230
0
          0.2929100136981264f,
231
0
          0.0000000000000000,
232
0
          0.0000000000000000,
233
0
          -0.0643507165794627f,
234
0
          0.3935103426921017f,
235
0
          -0.0657870154914280f,
236
0
          0.0000000000000000,
237
0
          -0.4082482904638628f,
238
0
          -0.3078822139579090f,
239
0
          -0.3852501370925192f,
240
0
          -0.0857401903551931f,
241
0
          -0.4613374887461511f,
242
0
          0.0000000000000000,
243
0
          0.2191868483885747f,
244
0
      },
245
0
      {
246
0
          0.2500000000000000,
247
0
          -0.1014005039375376f,
248
0
          -0.4067007583026072f,
249
0
          -0.2125574805828705f,
250
0
          0.0000000000000000,
251
0
          -0.0643507165794627f,
252
0
          -0.4517556589999464f,
253
0
          0.3046847507248840f,
254
0
          0.3017929516615503f,
255
0
          -0.4082482904638635f,
256
0
          -0.1747866975480813f,
257
0
          0.2110560104933581f,
258
0
          -0.1426608480880734f,
259
0
          -0.1381354035075829f,
260
0
          -0.1743760259965108f,
261
0
          0.1135498731499426f,
262
0
      },
263
0
      {
264
0
          0.2500000000000000,
265
0
          -0.1014005039375377f,
266
0
          -0.1957439937204287f,
267
0
          -0.1621205195722833f,
268
0
          0.0000000000000000,
269
0
          -0.0643507165794628f,
270
0
          0.0074182263792444f,
271
0
          0.2904801297290076f,
272
0
          0.0952002265347505f,
273
0
          0.0000000000000000,
274
0
          0.3675398009862011f,
275
0
          -0.4921585901373891f,
276
0
          0.2462710772207514f,
277
0
          -0.0794670660591026f,
278
0
          0.3623817333531165f,
279
0
          -0.4351904965232251f,
280
0
      },
281
0
      {
282
0
          0.2500000000000000,
283
0
          -0.1014005039375375f,
284
0
          0.0000000000000000,
285
0
          -0.4706702258572528f,
286
0
          0.0000000000000000,
287
0
          -0.0643507165794627f,
288
0
          0.1107416575309343f,
289
0
          0.0000000000000000,
290
0
          -0.1627234014286617f,
291
0
          0.0000000000000000,
292
0
          0.0000000000000000,
293
0
          0.0000000000000000,
294
0
          0.1488339922711357f,
295
0
          0.4972464710953509f,
296
0
          0.2921026642334879f,
297
0
          0.5550443808910661f,
298
0
      },
299
0
      {
300
0
          0.2500000000000000,
301
0
          -0.1014005039375377f,
302
0
          0.1137907446044809f,
303
0
          -0.1464291867126764f,
304
0
          0.0000000000000000,
305
0
          -0.0643507165794628f,
306
0
          0.0829816309488205f,
307
0
          -0.2388977352334460f,
308
0
          -0.3531238544981630f,
309
0
          -0.4082482904638630f,
310
0
          0.4826689115059883f,
311
0
          0.1741941265991622f,
312
0
          -0.0476868035022925f,
313
0
          0.1253805944856366f,
314
0
          -0.4326608024727445f,
315
0
          -0.2546827712406646f,
316
0
      },
317
0
      {
318
0
          0.2500000000000000,
319
0
          -0.1014005039375377f,
320
0
          -0.4444481661973438f,
321
0
          0.3085497062849487f,
322
0
          0.0000000000000000,
323
0
          -0.0643507165794628f,
324
0
          0.1585450355183970f,
325
0
          -0.5112616136592012f,
326
0
          0.2579236279634129f,
327
0
          0.0000000000000000,
328
0
          -0.0812611176717504f,
329
0
          -0.1856718091610990f,
330
0
          -0.3416446842253373f,
331
0
          0.3302282550303805f,
332
0
          0.0702790691196282f,
333
0
          -0.0741750459581023f,
334
0
      },
335
0
      {
336
0
          0.2500000000000000,
337
0
          -0.1014005039375376f,
338
0
          -0.2929100136981264f,
339
0
          0.0000000000000000,
340
0
          0.0000000000000000,
341
0
          -0.0643507165794627f,
342
0
          0.3935103426921022f,
343
0
          0.0657870154914254f,
344
0
          0.0000000000000000,
345
0
          0.4082482904638634f,
346
0
          0.3078822139579031f,
347
0
          0.3852501370925211f,
348
0
          -0.0857401903551927f,
349
0
          -0.4613374887461554f,
350
0
          0.0000000000000000,
351
0
          0.2191868483885728f,
352
0
      },
353
0
      {
354
0
          0.2500000000000000,
355
0
          -0.1014005039375376f,
356
0
          -0.1137907446044814f,
357
0
          -0.1464291867126654f,
358
0
          0.0000000000000000,
359
0
          -0.0643507165794627f,
360
0
          0.0829816309488214f,
361
0
          0.2388977352334547f,
362
0
          -0.3531238544981624f,
363
0
          0.4082482904638630f,
364
0
          -0.4826689115059858f,
365
0
          -0.1741941265991621f,
366
0
          -0.0476868035022928f,
367
0
          0.1253805944856431f,
368
0
          -0.4326608024727457f,
369
0
          -0.2546827712406641f,
370
0
      },
371
0
      {
372
0
          0.2500000000000000,
373
0
          -0.1014005039375374f,
374
0
          0.0000000000000000,
375
0
          0.4251149611657548f,
376
0
          0.0000000000000000,
377
0
          -0.0643507165794626f,
378
0
          -0.4517556589999480f,
379
0
          0.0000000000000000,
380
0
          -0.6035859033230976f,
381
0
          0.0000000000000000,
382
0
          0.0000000000000000,
383
0
          0.0000000000000000,
384
0
          -0.1426608480880724f,
385
0
          -0.1381354035075845f,
386
0
          0.3487520519930227f,
387
0
          0.1135498731499429f,
388
0
      },
389
0
  };
390
391
0
  const HWY_CAPPED(float, 16) d;
392
0
  for (size_t i = 0; i < 16; i += Lanes(d)) {
393
0
    auto scalar = Zero(d);
394
0
    for (size_t j = 0; j < 16; j++) {
395
0
      auto px = Set(d, pixels[j]);
396
0
      auto basis = Load(d, k4x4AFVBasisTranspose[j] + i);
397
0
      scalar = MulAdd(px, basis, scalar);
398
0
    }
399
0
    Store(scalar, d, coeffs + i);
400
0
  }
401
0
}
Unexecuted instantiation: enc_group.cc:jxl::N_SCALAR::(anonymous namespace)::AFVDCT4x4(float const*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:jxl::N_SCALAR::(anonymous namespace)::AFVDCT4x4(float const*, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:jxl::N_SCALAR::(anonymous namespace)::AFVDCT4x4(float const*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:jxl::N_SCALAR::(anonymous namespace)::AFVDCT4x4(float const*, float*)
402
403
// Coefficient layout:
404
//  - (even, even) positions hold AFV coefficients
405
//  - (odd, even) positions hold DCT4x4 coefficients
406
//  - (any, odd) positions hold DCT4x8 coefficients
407
template <size_t afv_kind>
408
void AFVTransformFromPixels(const float* JXL_RESTRICT pixels,
409
                            size_t pixels_stride,
410
0
                            float* JXL_RESTRICT coefficients) {
411
0
  HWY_ALIGN float scratch_space[4 * 8 * 5];
412
0
  size_t afv_x = afv_kind & 1;
413
0
  size_t afv_y = afv_kind / 2;
414
0
  HWY_ALIGN float block[4 * 8] = {};
415
0
  for (size_t iy = 0; iy < 4; iy++) {
416
0
    for (size_t ix = 0; ix < 4; ix++) {
417
0
      block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)] =
418
0
          pixels[(iy + 4 * afv_y) * pixels_stride + ix + 4 * afv_x];
419
0
    }
420
0
  }
421
  // AFV coefficients in (even, even) positions.
422
0
  HWY_ALIGN float coeff[4 * 4];
423
0
  AFVDCT4x4(block, coeff);
424
0
  for (size_t iy = 0; iy < 4; iy++) {
425
0
    for (size_t ix = 0; ix < 4; ix++) {
426
0
      coefficients[iy * 2 * 8 + ix * 2] = coeff[iy * 4 + ix];
427
0
    }
428
0
  }
429
  // 4x4 DCT of the block with same y and different x.
430
0
  ComputeScaledDCT<4, 4>()(
431
0
      DCTFrom(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
432
0
              pixels_stride),
433
0
      block, scratch_space);
434
  // ... in (odd, even) positions.
435
0
  for (size_t iy = 0; iy < 4; iy++) {
436
0
    for (size_t ix = 0; ix < 8; ix++) {
437
0
      coefficients[iy * 2 * 8 + ix * 2 + 1] = block[iy * 4 + ix];
438
0
    }
439
0
  }
440
  // 4x8 DCT of the other half of the block.
441
0
  ComputeScaledDCT<4, 8>()(
442
0
      DCTFrom(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
443
0
      block, scratch_space);
444
0
  for (size_t iy = 0; iy < 4; iy++) {
445
0
    for (size_t ix = 0; ix < 8; ix++) {
446
0
      coefficients[(1 + iy * 2) * 8 + ix] = block[iy * 8 + ix];
447
0
    }
448
0
  }
449
0
  float block00 = coefficients[0] * 0.25f;
450
0
  float block01 = coefficients[1];
451
0
  float block10 = coefficients[8];
452
0
  coefficients[0] = (block00 + block01 + 2 * block10) * 0.25f;
453
0
  coefficients[1] = (block00 - block01) * 0.5f;
454
0
  coefficients[8] = (block00 + block01 - 2 * block10) * 0.25f;
455
0
}
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<0ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<1ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<2ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<3ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<0ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<1ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<2ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<3ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<0ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<1ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<2ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<3ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<0ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<1ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<2ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformFromPixels<3ul>(float const*, unsigned long, float*)
456
457
HWY_MAYBE_UNUSED void TransformFromPixels(const AcStrategyType strategy,
458
                                          const float* JXL_RESTRICT pixels,
459
                                          size_t pixels_stride,
460
                                          float* JXL_RESTRICT coefficients,
461
0
                                          float* JXL_RESTRICT scratch_space) {
462
0
  using Type = AcStrategyType;
463
0
  switch (strategy) {
464
0
    case Type::IDENTITY: {
465
0
      for (size_t y = 0; y < 2; y++) {
466
0
        for (size_t x = 0; x < 2; x++) {
467
0
          float block_dc = 0;
468
0
          for (size_t iy = 0; iy < 4; iy++) {
469
0
            for (size_t ix = 0; ix < 4; ix++) {
470
0
              block_dc += pixels[(y * 4 + iy) * pixels_stride + x * 4 + ix];
471
0
            }
472
0
          }
473
0
          block_dc *= 1.0f / 16;
474
0
          for (size_t iy = 0; iy < 4; iy++) {
475
0
            for (size_t ix = 0; ix < 4; ix++) {
476
0
              if (ix == 1 && iy == 1) continue;
477
0
              coefficients[(y + iy * 2) * 8 + x + ix * 2] =
478
0
                  pixels[(y * 4 + iy) * pixels_stride + x * 4 + ix] -
479
0
                  pixels[(y * 4 + 1) * pixels_stride + x * 4 + 1];
480
0
            }
481
0
          }
482
0
          coefficients[(y + 2) * 8 + x + 2] = coefficients[y * 8 + x];
483
0
          coefficients[y * 8 + x] = block_dc;
484
0
        }
485
0
      }
486
0
      float block00 = coefficients[0];
487
0
      float block01 = coefficients[1];
488
0
      float block10 = coefficients[8];
489
0
      float block11 = coefficients[9];
490
0
      coefficients[0] = (block00 + block01 + block10 + block11) * 0.25f;
491
0
      coefficients[1] = (block00 + block01 - block10 - block11) * 0.25f;
492
0
      coefficients[8] = (block00 - block01 + block10 - block11) * 0.25f;
493
0
      coefficients[9] = (block00 - block01 - block10 + block11) * 0.25f;
494
0
      break;
495
0
    }
496
0
    case Type::DCT8X4: {
497
0
      for (size_t x = 0; x < 2; x++) {
498
0
        HWY_ALIGN float block[4 * 8];
499
0
        ComputeScaledDCT<8, 4>()(DCTFrom(pixels + x * 4, pixels_stride), block,
500
0
                                 scratch_space);
501
0
        for (size_t iy = 0; iy < 4; iy++) {
502
0
          for (size_t ix = 0; ix < 8; ix++) {
503
            // Store transposed.
504
0
            coefficients[(x + iy * 2) * 8 + ix] = block[iy * 8 + ix];
505
0
          }
506
0
        }
507
0
      }
508
0
      float block0 = coefficients[0];
509
0
      float block1 = coefficients[8];
510
0
      coefficients[0] = (block0 + block1) * 0.5f;
511
0
      coefficients[8] = (block0 - block1) * 0.5f;
512
0
      break;
513
0
    }
514
0
    case Type::DCT4X8: {
515
0
      for (size_t y = 0; y < 2; y++) {
516
0
        HWY_ALIGN float block[4 * 8];
517
0
        ComputeScaledDCT<4, 8>()(
518
0
            DCTFrom(pixels + y * 4 * pixels_stride, pixels_stride), block,
519
0
            scratch_space);
520
0
        for (size_t iy = 0; iy < 4; iy++) {
521
0
          for (size_t ix = 0; ix < 8; ix++) {
522
0
            coefficients[(y + iy * 2) * 8 + ix] = block[iy * 8 + ix];
523
0
          }
524
0
        }
525
0
      }
526
0
      float block0 = coefficients[0];
527
0
      float block1 = coefficients[8];
528
0
      coefficients[0] = (block0 + block1) * 0.5f;
529
0
      coefficients[8] = (block0 - block1) * 0.5f;
530
0
      break;
531
0
    }
532
0
    case Type::DCT4X4: {
533
0
      for (size_t y = 0; y < 2; y++) {
534
0
        for (size_t x = 0; x < 2; x++) {
535
0
          HWY_ALIGN float block[4 * 4];
536
0
          ComputeScaledDCT<4, 4>()(
537
0
              DCTFrom(pixels + y * 4 * pixels_stride + x * 4, pixels_stride),
538
0
              block, scratch_space);
539
0
          for (size_t iy = 0; iy < 4; iy++) {
540
0
            for (size_t ix = 0; ix < 4; ix++) {
541
0
              coefficients[(y + iy * 2) * 8 + x + ix * 2] = block[iy * 4 + ix];
542
0
            }
543
0
          }
544
0
        }
545
0
      }
546
0
      float block00 = coefficients[0];
547
0
      float block01 = coefficients[1];
548
0
      float block10 = coefficients[8];
549
0
      float block11 = coefficients[9];
550
0
      coefficients[0] = (block00 + block01 + block10 + block11) * 0.25f;
551
0
      coefficients[1] = (block00 + block01 - block10 - block11) * 0.25f;
552
0
      coefficients[8] = (block00 - block01 + block10 - block11) * 0.25f;
553
0
      coefficients[9] = (block00 - block01 - block10 + block11) * 0.25f;
554
0
      break;
555
0
    }
556
0
    case Type::DCT2X2: {
557
0
      DCT2TopBlock<8>(pixels, pixels_stride, coefficients);
558
0
      DCT2TopBlock<4>(coefficients, kBlockDim, coefficients);
559
0
      DCT2TopBlock<2>(coefficients, kBlockDim, coefficients);
560
0
      break;
561
0
    }
562
0
    case Type::DCT16X16: {
563
0
      ComputeScaledDCT<16, 16>()(DCTFrom(pixels, pixels_stride), coefficients,
564
0
                                 scratch_space);
565
0
      break;
566
0
    }
567
0
    case Type::DCT16X8: {
568
0
      ComputeScaledDCT<16, 8>()(DCTFrom(pixels, pixels_stride), coefficients,
569
0
                                scratch_space);
570
0
      break;
571
0
    }
572
0
    case Type::DCT8X16: {
573
0
      ComputeScaledDCT<8, 16>()(DCTFrom(pixels, pixels_stride), coefficients,
574
0
                                scratch_space);
575
0
      break;
576
0
    }
577
0
    case Type::DCT32X8: {
578
0
      ComputeScaledDCT<32, 8>()(DCTFrom(pixels, pixels_stride), coefficients,
579
0
                                scratch_space);
580
0
      break;
581
0
    }
582
0
    case Type::DCT8X32: {
583
0
      ComputeScaledDCT<8, 32>()(DCTFrom(pixels, pixels_stride), coefficients,
584
0
                                scratch_space);
585
0
      break;
586
0
    }
587
0
    case Type::DCT32X16: {
588
0
      ComputeScaledDCT<32, 16>()(DCTFrom(pixels, pixels_stride), coefficients,
589
0
                                 scratch_space);
590
0
      break;
591
0
    }
592
0
    case Type::DCT16X32: {
593
0
      ComputeScaledDCT<16, 32>()(DCTFrom(pixels, pixels_stride), coefficients,
594
0
                                 scratch_space);
595
0
      break;
596
0
    }
597
0
    case Type::DCT32X32: {
598
0
      ComputeScaledDCT<32, 32>()(DCTFrom(pixels, pixels_stride), coefficients,
599
0
                                 scratch_space);
600
0
      break;
601
0
    }
602
0
    case Type::DCT: {
603
0
      ComputeScaledDCT<8, 8>()(DCTFrom(pixels, pixels_stride), coefficients,
604
0
                               scratch_space);
605
0
      break;
606
0
    }
607
0
    case Type::AFV0: {
608
0
      AFVTransformFromPixels<0>(pixels, pixels_stride, coefficients);
609
0
      break;
610
0
    }
611
0
    case Type::AFV1: {
612
0
      AFVTransformFromPixels<1>(pixels, pixels_stride, coefficients);
613
0
      break;
614
0
    }
615
0
    case Type::AFV2: {
616
0
      AFVTransformFromPixels<2>(pixels, pixels_stride, coefficients);
617
0
      break;
618
0
    }
619
0
    case Type::AFV3: {
620
0
      AFVTransformFromPixels<3>(pixels, pixels_stride, coefficients);
621
0
      break;
622
0
    }
623
0
    case Type::DCT64X64: {
624
0
      ComputeScaledDCT<64, 64>()(DCTFrom(pixels, pixels_stride), coefficients,
625
0
                                 scratch_space);
626
0
      break;
627
0
    }
628
0
    case Type::DCT64X32: {
629
0
      ComputeScaledDCT<64, 32>()(DCTFrom(pixels, pixels_stride), coefficients,
630
0
                                 scratch_space);
631
0
      break;
632
0
    }
633
0
    case Type::DCT32X64: {
634
0
      ComputeScaledDCT<32, 64>()(DCTFrom(pixels, pixels_stride), coefficients,
635
0
                                 scratch_space);
636
0
      break;
637
0
    }
638
0
    case Type::DCT128X128: {
639
0
      ComputeScaledDCT<128, 128>()(DCTFrom(pixels, pixels_stride), coefficients,
640
0
                                   scratch_space);
641
0
      break;
642
0
    }
643
0
    case Type::DCT128X64: {
644
0
      ComputeScaledDCT<128, 64>()(DCTFrom(pixels, pixels_stride), coefficients,
645
0
                                  scratch_space);
646
0
      break;
647
0
    }
648
0
    case Type::DCT64X128: {
649
0
      ComputeScaledDCT<64, 128>()(DCTFrom(pixels, pixels_stride), coefficients,
650
0
                                  scratch_space);
651
0
      break;
652
0
    }
653
0
    case Type::DCT256X256: {
654
0
      ComputeScaledDCT<256, 256>()(DCTFrom(pixels, pixels_stride), coefficients,
655
0
                                   scratch_space);
656
0
      break;
657
0
    }
658
0
    case Type::DCT256X128: {
659
0
      ComputeScaledDCT<256, 128>()(DCTFrom(pixels, pixels_stride), coefficients,
660
0
                                   scratch_space);
661
0
      break;
662
0
    }
663
0
    case Type::DCT128X256: {
664
0
      ComputeScaledDCT<128, 256>()(DCTFrom(pixels, pixels_stride), coefficients,
665
0
                                   scratch_space);
666
0
      break;
667
0
    }
668
0
  }
669
0
}
Unexecuted instantiation: enc_group.cc:jxl::N_SCALAR::(anonymous namespace)::TransformFromPixels(jxl::AcStrategyType, float const*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:jxl::N_SCALAR::(anonymous namespace)::TransformFromPixels(jxl::AcStrategyType, float const*, unsigned long, float*, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:jxl::N_SCALAR::(anonymous namespace)::TransformFromPixels(jxl::AcStrategyType, float const*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:jxl::N_SCALAR::(anonymous namespace)::TransformFromPixels(jxl::AcStrategyType, float const*, unsigned long, float*, float*)
670
671
// `scratch_space` should be at least 4 * kMaxBlocks * kMaxBlocks elements.
672
HWY_MAYBE_UNUSED void DCFromLowestFrequencies(const AcStrategyType strategy,
673
                                              const float* block, float* dc,
674
                                              size_t dc_stride,
675
0
                                              float* scratch_space) {
676
0
  using Type = AcStrategyType;
677
0
  switch (strategy) {
678
0
    case Type::DCT16X8: {
679
0
      ReinterpretingIDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/kBlockDim,
680
0
                         /*LF_ROWS=*/2, /*LF_COLS=*/1, /*ROWS=*/2, /*COLS=*/1>(
681
0
          block, 2 * kBlockDim, dc, dc_stride, scratch_space);
682
0
      break;
683
0
    }
684
0
    case Type::DCT8X16: {
685
0
      ReinterpretingIDCT</*DCT_ROWS=*/kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
686
0
                         /*LF_ROWS=*/1, /*LF_COLS=*/2, /*ROWS=*/1, /*COLS=*/2>(
687
0
          block, 2 * kBlockDim, dc, dc_stride, scratch_space);
688
0
      break;
689
0
    }
690
0
    case Type::DCT16X16: {
691
0
      ReinterpretingIDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
692
0
                         /*LF_ROWS=*/2, /*LF_COLS=*/2, /*ROWS=*/2, /*COLS=*/2>(
693
0
          block, 2 * kBlockDim, dc, dc_stride, scratch_space);
694
0
      break;
695
0
    }
696
0
    case Type::DCT32X8: {
697
0
      ReinterpretingIDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/kBlockDim,
698
0
                         /*LF_ROWS=*/4, /*LF_COLS=*/1, /*ROWS=*/4, /*COLS=*/1>(
699
0
          block, 4 * kBlockDim, dc, dc_stride, scratch_space);
700
0
      break;
701
0
    }
702
0
    case Type::DCT8X32: {
703
0
      ReinterpretingIDCT</*DCT_ROWS=*/kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
704
0
                         /*LF_ROWS=*/1, /*LF_COLS=*/4, /*ROWS=*/1, /*COLS=*/4>(
705
0
          block, 4 * kBlockDim, dc, dc_stride, scratch_space);
706
0
      break;
707
0
    }
708
0
    case Type::DCT32X16: {
709
0
      ReinterpretingIDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
710
0
                         /*LF_ROWS=*/4, /*LF_COLS=*/2, /*ROWS=*/4, /*COLS=*/2>(
711
0
          block, 4 * kBlockDim, dc, dc_stride, scratch_space);
712
0
      break;
713
0
    }
714
0
    case Type::DCT16X32: {
715
0
      ReinterpretingIDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
716
0
                         /*LF_ROWS=*/2, /*LF_COLS=*/4, /*ROWS=*/2, /*COLS=*/4>(
717
0
          block, 4 * kBlockDim, dc, dc_stride, scratch_space);
718
0
      break;
719
0
    }
720
0
    case Type::DCT32X32: {
721
0
      ReinterpretingIDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
722
0
                         /*LF_ROWS=*/4, /*LF_COLS=*/4, /*ROWS=*/4, /*COLS=*/4>(
723
0
          block, 4 * kBlockDim, dc, dc_stride, scratch_space);
724
0
      break;
725
0
    }
726
0
    case Type::DCT64X32: {
727
0
      ReinterpretingIDCT</*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
728
0
                         /*LF_ROWS=*/8, /*LF_COLS=*/4, /*ROWS=*/8, /*COLS=*/4>(
729
0
          block, 8 * kBlockDim, dc, dc_stride, scratch_space);
730
0
      break;
731
0
    }
732
0
    case Type::DCT32X64: {
733
0
      ReinterpretingIDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
734
0
                         /*LF_ROWS=*/4, /*LF_COLS=*/8, /*ROWS=*/4, /*COLS=*/8>(
735
0
          block, 8 * kBlockDim, dc, dc_stride, scratch_space);
736
0
      break;
737
0
    }
738
0
    case Type::DCT64X64: {
739
0
      ReinterpretingIDCT</*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
740
0
                         /*LF_ROWS=*/8, /*LF_COLS=*/8, /*ROWS=*/8, /*COLS=*/8>(
741
0
          block, 8 * kBlockDim, dc, dc_stride, scratch_space);
742
0
      break;
743
0
    }
744
0
    case Type::DCT128X64: {
745
0
      ReinterpretingIDCT<
746
0
          /*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
747
0
          /*LF_ROWS=*/16, /*LF_COLS=*/8, /*ROWS=*/16, /*COLS=*/8>(
748
0
          block, 16 * kBlockDim, dc, dc_stride, scratch_space);
749
0
      break;
750
0
    }
751
0
    case Type::DCT64X128: {
752
0
      ReinterpretingIDCT<
753
0
          /*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
754
0
          /*LF_ROWS=*/8, /*LF_COLS=*/16, /*ROWS=*/8, /*COLS=*/16>(
755
0
          block, 16 * kBlockDim, dc, dc_stride, scratch_space);
756
0
      break;
757
0
    }
758
0
    case Type::DCT128X128: {
759
0
      ReinterpretingIDCT<
760
0
          /*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
761
0
          /*LF_ROWS=*/16, /*LF_COLS=*/16, /*ROWS=*/16, /*COLS=*/16>(
762
0
          block, 16 * kBlockDim, dc, dc_stride, scratch_space);
763
0
      break;
764
0
    }
765
0
    case Type::DCT256X128: {
766
0
      ReinterpretingIDCT<
767
0
          /*DCT_ROWS=*/32 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
768
0
          /*LF_ROWS=*/32, /*LF_COLS=*/16, /*ROWS=*/32, /*COLS=*/16>(
769
0
          block, 32 * kBlockDim, dc, dc_stride, scratch_space);
770
0
      break;
771
0
    }
772
0
    case Type::DCT128X256: {
773
0
      ReinterpretingIDCT<
774
0
          /*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/32 * kBlockDim,
775
0
          /*LF_ROWS=*/16, /*LF_COLS=*/32, /*ROWS=*/16, /*COLS=*/32>(
776
0
          block, 32 * kBlockDim, dc, dc_stride, scratch_space);
777
0
      break;
778
0
    }
779
0
    case Type::DCT256X256: {
780
0
      ReinterpretingIDCT<
781
0
          /*DCT_ROWS=*/32 * kBlockDim, /*DCT_COLS=*/32 * kBlockDim,
782
0
          /*LF_ROWS=*/32, /*LF_COLS=*/32, /*ROWS=*/32, /*COLS=*/32>(
783
0
          block, 32 * kBlockDim, dc, dc_stride, scratch_space);
784
0
      break;
785
0
    }
786
0
    case Type::DCT:
787
0
    case Type::DCT2X2:
788
0
    case Type::DCT4X4:
789
0
    case Type::DCT4X8:
790
0
    case Type::DCT8X4:
791
0
    case Type::AFV0:
792
0
    case Type::AFV1:
793
0
    case Type::AFV2:
794
0
    case Type::AFV3:
795
0
    case Type::IDENTITY:
796
0
      dc[0] = block[0];
797
0
      break;
798
0
  }
799
0
}
Unexecuted instantiation: enc_group.cc:jxl::N_SCALAR::(anonymous namespace)::DCFromLowestFrequencies(jxl::AcStrategyType, float const*, float*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:jxl::N_SCALAR::(anonymous namespace)::DCFromLowestFrequencies(jxl::AcStrategyType, float const*, float*, unsigned long, float*)
Unexecuted instantiation: enc_adaptive_quantization.cc:jxl::N_SCALAR::(anonymous namespace)::DCFromLowestFrequencies(jxl::AcStrategyType, float const*, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:jxl::N_SCALAR::(anonymous namespace)::DCFromLowestFrequencies(jxl::AcStrategyType, float const*, float*, unsigned long, float*)
800
801
}  // namespace
802
// NOLINTNEXTLINE(google-readability-namespace-comments)
803
}  // namespace HWY_NAMESPACE
804
}  // namespace jxl
805
HWY_AFTER_NAMESPACE();
806
807
#endif  // LIB_JXL_ENC_TRANSFORMS_INL_H_