Coverage Report

Created: 2026-07-25 07:03

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libjxl/lib/jxl/dec_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 <cstring>
7
8
#include "lib/jxl/base/compiler_specific.h"
9
#include "lib/jxl/frame_dimensions.h"
10
11
#if defined(LIB_JXL_DEC_TRANSFORMS_INL_H_) == defined(HWY_TARGET_TOGGLE)
12
#ifdef LIB_JXL_DEC_TRANSFORMS_INL_H_
13
#undef LIB_JXL_DEC_TRANSFORMS_INL_H_
14
#else
15
#define LIB_JXL_DEC_TRANSFORMS_INL_H_
16
#endif
17
18
#include <cstddef>
19
#include <hwy/highway.h>
20
21
#include "lib/jxl/ac_strategy.h"
22
#include "lib/jxl/dct-inl.h"
23
#include "lib/jxl/dct_scales.h"
24
HWY_BEFORE_NAMESPACE();
25
namespace jxl {
26
namespace HWY_NAMESPACE {
27
namespace {
28
29
// These templates are not found via ADL.
30
using hwy::HWY_NAMESPACE::MulAdd;
31
32
// Computes the lowest-frequency LF_ROWSxLF_COLS-sized square in output, which
33
// is a DCT_ROWS*DCT_COLS-sized DCT block, by doing a ROWS*COLS DCT on the
34
// input block.
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
JXL_INLINE void ReinterpretingDCT(const float* input, const size_t input_stride,
38
                                  float* output, const size_t output_stride,
39
                                  float* JXL_RESTRICT block,
40
56.3k
                                  float* JXL_RESTRICT scratch_space) {
41
56.3k
  static_assert(LF_ROWS == ROWS,
42
56.3k
                "ReinterpretingDCT should only be called with LF == N");
43
56.3k
  static_assert(LF_COLS == COLS,
44
56.3k
                "ReinterpretingDCT should only be called with LF == N");
45
56.3k
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
56.3k
                                 scratch_space);
47
56.3k
  if (ROWS < COLS) {
48
108k
    for (size_t y = 0; y < LF_ROWS; y++) {
49
163k
      for (size_t x = 0; x < LF_COLS; x++) {
50
109k
        output[y * output_stride + x] =
51
109k
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
109k
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
109k
      }
54
54.5k
    }
55
54.3k
  } else {
56
5.19k
    for (size_t y = 0; y < LF_COLS; y++) {
57
11.5k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
8.32k
        output[y * output_stride + x] =
59
8.32k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
8.32k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
8.32k
      }
62
3.23k
    }
63
1.95k
  }
64
56.3k
}
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<16ul, 8ul, 2ul, 1ul, 2ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<8ul, 16ul, 1ul, 2ul, 1ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<16ul, 16ul, 2ul, 2ul, 2ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 8ul, 4ul, 1ul, 4ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<8ul, 32ul, 1ul, 4ul, 1ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 16ul, 4ul, 2ul, 4ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<16ul, 32ul, 2ul, 4ul, 2ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 32ul, 4ul, 4ul, 4ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<64ul, 32ul, 8ul, 4ul, 8ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 64ul, 4ul, 8ul, 4ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<64ul, 64ul, 8ul, 8ul, 8ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<128ul, 64ul, 16ul, 8ul, 16ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<64ul, 128ul, 8ul, 16ul, 8ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<128ul, 128ul, 16ul, 16ul, 16ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<256ul, 128ul, 32ul, 16ul, 32ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<128ul, 256ul, 16ul, 32ul, 16ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<256ul, 256ul, 32ul, 32ul, 32ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<16ul, 8ul, 2ul, 1ul, 2ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
444
                                  float* JXL_RESTRICT scratch_space) {
41
444
  static_assert(LF_ROWS == ROWS,
42
444
                "ReinterpretingDCT should only be called with LF == N");
43
444
  static_assert(LF_COLS == COLS,
44
444
                "ReinterpretingDCT should only be called with LF == N");
45
444
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
444
                                 scratch_space);
47
444
  if (ROWS < COLS) {
48
0
    for (size_t y = 0; y < LF_ROWS; y++) {
49
0
      for (size_t x = 0; x < LF_COLS; x++) {
50
0
        output[y * output_stride + x] =
51
0
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
0
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
0
      }
54
0
    }
55
444
  } else {
56
888
    for (size_t y = 0; y < LF_COLS; y++) {
57
1.33k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
888
        output[y * output_stride + x] =
59
888
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
888
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
888
      }
62
444
    }
63
444
  }
64
444
}
dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<8ul, 16ul, 1ul, 2ul, 1ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
54.5k
                                  float* JXL_RESTRICT scratch_space) {
41
54.5k
  static_assert(LF_ROWS == ROWS,
42
54.5k
                "ReinterpretingDCT should only be called with LF == N");
43
54.5k
  static_assert(LF_COLS == COLS,
44
54.5k
                "ReinterpretingDCT should only be called with LF == N");
45
54.5k
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
54.5k
                                 scratch_space);
47
54.5k
  if (ROWS < COLS) {
48
108k
    for (size_t y = 0; y < LF_ROWS; y++) {
49
162k
      for (size_t x = 0; x < LF_COLS; x++) {
50
108k
        output[y * output_stride + x] =
51
108k
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
108k
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
108k
      }
54
54.2k
    }
55
54.2k
  } else {
56
233
    for (size_t y = 0; y < LF_COLS; y++) {
57
0
      for (size_t x = 0; x < LF_ROWS; x++) {
58
0
        output[y * output_stride + x] =
59
0
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
0
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
0
      }
62
0
    }
63
233
  }
64
54.5k
}
dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<16ul, 16ul, 2ul, 2ul, 2ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
930
                                  float* JXL_RESTRICT scratch_space) {
41
930
  static_assert(LF_ROWS == ROWS,
42
930
                "ReinterpretingDCT should only be called with LF == N");
43
930
  static_assert(LF_COLS == COLS,
44
930
                "ReinterpretingDCT should only be called with LF == N");
45
930
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
930
                                 scratch_space);
47
930
  if (ROWS < COLS) {
48
0
    for (size_t y = 0; y < LF_ROWS; y++) {
49
0
      for (size_t x = 0; x < LF_COLS; x++) {
50
0
        output[y * output_stride + x] =
51
0
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
0
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
0
      }
54
0
    }
55
930
  } else {
56
2.79k
    for (size_t y = 0; y < LF_COLS; y++) {
57
5.58k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
3.72k
        output[y * output_stride + x] =
59
3.72k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
3.72k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
3.72k
      }
62
1.86k
    }
63
930
  }
64
930
}
Unexecuted instantiation: dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 8ul, 4ul, 1ul, 4ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<8ul, 32ul, 1ul, 4ul, 1ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 16ul, 4ul, 2ul, 4ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
237
                                  float* JXL_RESTRICT scratch_space) {
41
237
  static_assert(LF_ROWS == ROWS,
42
237
                "ReinterpretingDCT should only be called with LF == N");
43
237
  static_assert(LF_COLS == COLS,
44
237
                "ReinterpretingDCT should only be called with LF == N");
45
237
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
237
                                 scratch_space);
47
237
  if (ROWS < COLS) {
48
0
    for (size_t y = 0; y < LF_ROWS; y++) {
49
0
      for (size_t x = 0; x < LF_COLS; x++) {
50
0
        output[y * output_stride + x] =
51
0
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
0
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
0
      }
54
0
    }
55
237
  } else {
56
711
    for (size_t y = 0; y < LF_COLS; y++) {
57
2.37k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
1.89k
        output[y * output_stride + x] =
59
1.89k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
1.89k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
1.89k
      }
62
474
    }
63
237
  }
64
237
}
dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<16ul, 32ul, 2ul, 4ul, 2ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
123
                                  float* JXL_RESTRICT scratch_space) {
41
123
  static_assert(LF_ROWS == ROWS,
42
123
                "ReinterpretingDCT should only be called with LF == N");
43
123
  static_assert(LF_COLS == COLS,
44
123
                "ReinterpretingDCT should only be called with LF == N");
45
123
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
123
                                 scratch_space);
47
123
  if (ROWS < COLS) {
48
369
    for (size_t y = 0; y < LF_ROWS; y++) {
49
1.23k
      for (size_t x = 0; x < LF_COLS; x++) {
50
984
        output[y * output_stride + x] =
51
984
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
984
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
984
      }
54
246
    }
55
123
  } else {
56
0
    for (size_t y = 0; y < LF_COLS; y++) {
57
0
      for (size_t x = 0; x < LF_ROWS; x++) {
58
0
        output[y * output_stride + x] =
59
0
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
0
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
0
      }
62
0
    }
63
0
  }
64
123
}
dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 32ul, 4ul, 4ul, 4ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Line
Count
Source
40
114
                                  float* JXL_RESTRICT scratch_space) {
41
114
  static_assert(LF_ROWS == ROWS,
42
114
                "ReinterpretingDCT should only be called with LF == N");
43
114
  static_assert(LF_COLS == COLS,
44
114
                "ReinterpretingDCT should only be called with LF == N");
45
114
  ComputeScaledDCT<ROWS, COLS>()(DCTFrom(input, input_stride), block,
46
114
                                 scratch_space);
47
114
  if (ROWS < COLS) {
48
0
    for (size_t y = 0; y < LF_ROWS; y++) {
49
0
      for (size_t x = 0; x < LF_COLS; x++) {
50
0
        output[y * output_stride + x] =
51
0
            block[y * COLS + x] * DCTTotalResampleScale<ROWS, DCT_ROWS>(y) *
52
0
            DCTTotalResampleScale<COLS, DCT_COLS>(x);
53
0
      }
54
0
    }
55
114
  } else {
56
570
    for (size_t y = 0; y < LF_COLS; y++) {
57
2.28k
      for (size_t x = 0; x < LF_ROWS; x++) {
58
1.82k
        output[y * output_stride + x] =
59
1.82k
            block[y * ROWS + x] * DCTTotalResampleScale<COLS, DCT_COLS>(y) *
60
1.82k
            DCTTotalResampleScale<ROWS, DCT_ROWS>(x);
61
1.82k
      }
62
456
    }
63
114
  }
64
114
}
Unexecuted instantiation: dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<64ul, 32ul, 8ul, 4ul, 8ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 64ul, 4ul, 8ul, 4ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<64ul, 64ul, 8ul, 8ul, 8ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<128ul, 64ul, 16ul, 8ul, 16ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<64ul, 128ul, 8ul, 16ul, 8ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<128ul, 128ul, 16ul, 16ul, 16ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<256ul, 128ul, 32ul, 16ul, 32ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<128ul, 256ul, 16ul, 32ul, 16ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<256ul, 256ul, 32ul, 32ul, 32ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<16ul, 8ul, 2ul, 1ul, 2ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<8ul, 16ul, 1ul, 2ul, 1ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<16ul, 16ul, 2ul, 2ul, 2ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 8ul, 4ul, 1ul, 4ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<8ul, 32ul, 1ul, 4ul, 1ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 16ul, 4ul, 2ul, 4ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<16ul, 32ul, 2ul, 4ul, 2ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 32ul, 4ul, 4ul, 4ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<64ul, 32ul, 8ul, 4ul, 8ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 64ul, 4ul, 8ul, 4ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<64ul, 64ul, 8ul, 8ul, 8ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<128ul, 64ul, 16ul, 8ul, 16ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<64ul, 128ul, 8ul, 16ul, 8ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<128ul, 128ul, 16ul, 16ul, 16ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<256ul, 128ul, 32ul, 16ul, 32ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<128ul, 256ul, 16ul, 32ul, 16ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<256ul, 256ul, 32ul, 32ul, 32ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<16ul, 8ul, 2ul, 1ul, 2ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<8ul, 16ul, 1ul, 2ul, 1ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<16ul, 16ul, 2ul, 2ul, 2ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 8ul, 4ul, 1ul, 4ul, 1ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<8ul, 32ul, 1ul, 4ul, 1ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 16ul, 4ul, 2ul, 4ul, 2ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<16ul, 32ul, 2ul, 4ul, 2ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 32ul, 4ul, 4ul, 4ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<64ul, 32ul, 8ul, 4ul, 8ul, 4ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<32ul, 64ul, 4ul, 8ul, 4ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<64ul, 64ul, 8ul, 8ul, 8ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<128ul, 64ul, 16ul, 8ul, 16ul, 8ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<64ul, 128ul, 8ul, 16ul, 8ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<128ul, 128ul, 16ul, 16ul, 16ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<256ul, 128ul, 32ul, 16ul, 32ul, 16ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<128ul, 256ul, 16ul, 32ul, 16ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::ReinterpretingDCT<256ul, 256ul, 32ul, 32ul, 32ul, 32ul>(float const*, unsigned long, float*, unsigned long, float*, float*)
65
66
template <size_t S>
67
3.43k
void IDCT2TopBlock(const float* block, size_t stride_out, float* out) {
68
3.43k
  static_assert(kBlockDim % S == 0, "S should be a divisor of kBlockDim");
69
3.43k
  static_assert(S % 2 == 0, "S should be even");
70
3.43k
  float temp[kDCTBlockSize];
71
3.43k
  constexpr size_t num_2x2 = S / 2;
72
11.4k
  for (size_t y = 0; y < num_2x2; y++) {
73
32.0k
    for (size_t x = 0; x < num_2x2; x++) {
74
24.0k
      float c00 = block[y * kBlockDim + x];
75
24.0k
      float c01 = block[y * kBlockDim + num_2x2 + x];
76
24.0k
      float c10 = block[(y + num_2x2) * kBlockDim + x];
77
24.0k
      float c11 = block[(y + num_2x2) * kBlockDim + num_2x2 + x];
78
24.0k
      float r00 = c00 + c01 + c10 + c11;
79
24.0k
      float r01 = c00 + c01 - c10 - c11;
80
24.0k
      float r10 = c00 - c01 + c10 - c11;
81
24.0k
      float r11 = c00 - c01 - c10 + c11;
82
24.0k
      temp[y * 2 * kBlockDim + x * 2] = r00;
83
24.0k
      temp[y * 2 * kBlockDim + x * 2 + 1] = r01;
84
24.0k
      temp[(y * 2 + 1) * kBlockDim + x * 2] = r10;
85
24.0k
      temp[(y * 2 + 1) * kBlockDim + x * 2 + 1] = r11;
86
24.0k
    }
87
8.02k
  }
88
19.4k
  for (size_t y = 0; y < S; y++) {
89
112k
    for (size_t x = 0; x < S; x++) {
90
96.2k
      out[y * stride_out + x] = temp[y * kBlockDim + x];
91
96.2k
    }
92
16.0k
  }
93
3.43k
}
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::IDCT2TopBlock<2ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::IDCT2TopBlock<4ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::IDCT2TopBlock<8ul>(float const*, unsigned long, float*)
dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::IDCT2TopBlock<2ul>(float const*, unsigned long, float*)
Line
Count
Source
67
1.14k
void IDCT2TopBlock(const float* block, size_t stride_out, float* out) {
68
1.14k
  static_assert(kBlockDim % S == 0, "S should be a divisor of kBlockDim");
69
1.14k
  static_assert(S % 2 == 0, "S should be even");
70
1.14k
  float temp[kDCTBlockSize];
71
1.14k
  constexpr size_t num_2x2 = S / 2;
72
2.29k
  for (size_t y = 0; y < num_2x2; y++) {
73
2.29k
    for (size_t x = 0; x < num_2x2; x++) {
74
1.14k
      float c00 = block[y * kBlockDim + x];
75
1.14k
      float c01 = block[y * kBlockDim + num_2x2 + x];
76
1.14k
      float c10 = block[(y + num_2x2) * kBlockDim + x];
77
1.14k
      float c11 = block[(y + num_2x2) * kBlockDim + num_2x2 + x];
78
1.14k
      float r00 = c00 + c01 + c10 + c11;
79
1.14k
      float r01 = c00 + c01 - c10 - c11;
80
1.14k
      float r10 = c00 - c01 + c10 - c11;
81
1.14k
      float r11 = c00 - c01 - c10 + c11;
82
1.14k
      temp[y * 2 * kBlockDim + x * 2] = r00;
83
1.14k
      temp[y * 2 * kBlockDim + x * 2 + 1] = r01;
84
1.14k
      temp[(y * 2 + 1) * kBlockDim + x * 2] = r10;
85
1.14k
      temp[(y * 2 + 1) * kBlockDim + x * 2 + 1] = r11;
86
1.14k
    }
87
1.14k
  }
88
3.43k
  for (size_t y = 0; y < S; y++) {
89
6.87k
    for (size_t x = 0; x < S; x++) {
90
4.58k
      out[y * stride_out + x] = temp[y * kBlockDim + x];
91
4.58k
    }
92
2.29k
  }
93
1.14k
}
dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::IDCT2TopBlock<4ul>(float const*, unsigned long, float*)
Line
Count
Source
67
1.14k
void IDCT2TopBlock(const float* block, size_t stride_out, float* out) {
68
1.14k
  static_assert(kBlockDim % S == 0, "S should be a divisor of kBlockDim");
69
1.14k
  static_assert(S % 2 == 0, "S should be even");
70
1.14k
  float temp[kDCTBlockSize];
71
1.14k
  constexpr size_t num_2x2 = S / 2;
72
3.43k
  for (size_t y = 0; y < num_2x2; y++) {
73
6.87k
    for (size_t x = 0; x < num_2x2; x++) {
74
4.58k
      float c00 = block[y * kBlockDim + x];
75
4.58k
      float c01 = block[y * kBlockDim + num_2x2 + x];
76
4.58k
      float c10 = block[(y + num_2x2) * kBlockDim + x];
77
4.58k
      float c11 = block[(y + num_2x2) * kBlockDim + num_2x2 + x];
78
4.58k
      float r00 = c00 + c01 + c10 + c11;
79
4.58k
      float r01 = c00 + c01 - c10 - c11;
80
4.58k
      float r10 = c00 - c01 + c10 - c11;
81
4.58k
      float r11 = c00 - c01 - c10 + c11;
82
4.58k
      temp[y * 2 * kBlockDim + x * 2] = r00;
83
4.58k
      temp[y * 2 * kBlockDim + x * 2 + 1] = r01;
84
4.58k
      temp[(y * 2 + 1) * kBlockDim + x * 2] = r10;
85
4.58k
      temp[(y * 2 + 1) * kBlockDim + x * 2 + 1] = r11;
86
4.58k
    }
87
2.29k
  }
88
5.73k
  for (size_t y = 0; y < S; y++) {
89
22.9k
    for (size_t x = 0; x < S; x++) {
90
18.3k
      out[y * stride_out + x] = temp[y * kBlockDim + x];
91
18.3k
    }
92
4.58k
  }
93
1.14k
}
dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::IDCT2TopBlock<8ul>(float const*, unsigned long, float*)
Line
Count
Source
67
1.14k
void IDCT2TopBlock(const float* block, size_t stride_out, float* out) {
68
1.14k
  static_assert(kBlockDim % S == 0, "S should be a divisor of kBlockDim");
69
1.14k
  static_assert(S % 2 == 0, "S should be even");
70
1.14k
  float temp[kDCTBlockSize];
71
1.14k
  constexpr size_t num_2x2 = S / 2;
72
5.73k
  for (size_t y = 0; y < num_2x2; y++) {
73
22.9k
    for (size_t x = 0; x < num_2x2; x++) {
74
18.3k
      float c00 = block[y * kBlockDim + x];
75
18.3k
      float c01 = block[y * kBlockDim + num_2x2 + x];
76
18.3k
      float c10 = block[(y + num_2x2) * kBlockDim + x];
77
18.3k
      float c11 = block[(y + num_2x2) * kBlockDim + num_2x2 + x];
78
18.3k
      float r00 = c00 + c01 + c10 + c11;
79
18.3k
      float r01 = c00 + c01 - c10 - c11;
80
18.3k
      float r10 = c00 - c01 + c10 - c11;
81
18.3k
      float r11 = c00 - c01 - c10 + c11;
82
18.3k
      temp[y * 2 * kBlockDim + x * 2] = r00;
83
18.3k
      temp[y * 2 * kBlockDim + x * 2 + 1] = r01;
84
18.3k
      temp[(y * 2 + 1) * kBlockDim + x * 2] = r10;
85
18.3k
      temp[(y * 2 + 1) * kBlockDim + x * 2 + 1] = r11;
86
18.3k
    }
87
4.58k
  }
88
10.3k
  for (size_t y = 0; y < S; y++) {
89
82.5k
    for (size_t x = 0; x < S; x++) {
90
73.3k
      out[y * stride_out + x] = temp[y * kBlockDim + x];
91
73.3k
    }
92
9.16k
  }
93
1.14k
}
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::IDCT2TopBlock<2ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::IDCT2TopBlock<4ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::IDCT2TopBlock<8ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::IDCT2TopBlock<2ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::IDCT2TopBlock<4ul>(float const*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::IDCT2TopBlock<8ul>(float const*, unsigned long, float*)
94
95
7.32k
void AFVIDCT4x4(const float* JXL_RESTRICT coeffs, float* JXL_RESTRICT pixels) {
96
7.32k
  HWY_ALIGN static constexpr float k4x4AFVBasis[16][16] = {
97
7.32k
      {
98
7.32k
          0.25,
99
7.32k
          0.25,
100
7.32k
          0.25,
101
7.32k
          0.25,
102
7.32k
          0.25,
103
7.32k
          0.25,
104
7.32k
          0.25,
105
7.32k
          0.25,
106
7.32k
          0.25,
107
7.32k
          0.25,
108
7.32k
          0.25,
109
7.32k
          0.25,
110
7.32k
          0.25,
111
7.32k
          0.25,
112
7.32k
          0.25,
113
7.32k
          0.25,
114
7.32k
      },
115
7.32k
      {
116
7.32k
          0.876902929799142f,
117
7.32k
          0.2206518106944235f,
118
7.32k
          -0.10140050393753763f,
119
7.32k
          -0.1014005039375375f,
120
7.32k
          0.2206518106944236f,
121
7.32k
          -0.10140050393753777f,
122
7.32k
          -0.10140050393753772f,
123
7.32k
          -0.10140050393753763f,
124
7.32k
          -0.10140050393753758f,
125
7.32k
          -0.10140050393753769f,
126
7.32k
          -0.1014005039375375f,
127
7.32k
          -0.10140050393753768f,
128
7.32k
          -0.10140050393753768f,
129
7.32k
          -0.10140050393753759f,
130
7.32k
          -0.10140050393753763f,
131
7.32k
          -0.10140050393753741f,
132
7.32k
      },
133
7.32k
      {
134
7.32k
          0.0,
135
7.32k
          0.0,
136
7.32k
          0.40670075830260755f,
137
7.32k
          0.44444816619734445f,
138
7.32k
          0.0,
139
7.32k
          0.0,
140
7.32k
          0.19574399372042936f,
141
7.32k
          0.2929100136981264f,
142
7.32k
          -0.40670075830260716f,
143
7.32k
          -0.19574399372042872f,
144
7.32k
          0.0,
145
7.32k
          0.11379074460448091f,
146
7.32k
          -0.44444816619734384f,
147
7.32k
          -0.29291001369812636f,
148
7.32k
          -0.1137907446044814f,
149
7.32k
          0.0,
150
7.32k
      },
151
7.32k
      {
152
7.32k
          0.0,
153
7.32k
          0.0,
154
7.32k
          -0.21255748058288748f,
155
7.32k
          0.3085497062849767f,
156
7.32k
          0.0,
157
7.32k
          0.4706702258572536f,
158
7.32k
          -0.1621205195722993f,
159
7.32k
          0.0,
160
7.32k
          -0.21255748058287047f,
161
7.32k
          -0.16212051957228327f,
162
7.32k
          -0.47067022585725277f,
163
7.32k
          -0.1464291867126764f,
164
7.32k
          0.3085497062849487f,
165
7.32k
          0.0,
166
7.32k
          -0.14642918671266536f,
167
7.32k
          0.4251149611657548f,
168
7.32k
      },
169
7.32k
      {
170
7.32k
          0.0,
171
7.32k
          -0.7071067811865474f,
172
7.32k
          0.0,
173
7.32k
          0.0,
174
7.32k
          0.7071067811865476f,
175
7.32k
          0.0,
176
7.32k
          0.0,
177
7.32k
          0.0,
178
7.32k
          0.0,
179
7.32k
          0.0,
180
7.32k
          0.0,
181
7.32k
          0.0,
182
7.32k
          0.0,
183
7.32k
          0.0,
184
7.32k
          0.0,
185
7.32k
          0.0,
186
7.32k
      },
187
7.32k
      {
188
7.32k
          -0.4105377591765233f,
189
7.32k
          0.6235485373547691f,
190
7.32k
          -0.06435071657946274f,
191
7.32k
          -0.06435071657946266f,
192
7.32k
          0.6235485373547694f,
193
7.32k
          -0.06435071657946284f,
194
7.32k
          -0.0643507165794628f,
195
7.32k
          -0.06435071657946274f,
196
7.32k
          -0.06435071657946272f,
197
7.32k
          -0.06435071657946279f,
198
7.32k
          -0.06435071657946266f,
199
7.32k
          -0.06435071657946277f,
200
7.32k
          -0.06435071657946277f,
201
7.32k
          -0.06435071657946273f,
202
7.32k
          -0.06435071657946274f,
203
7.32k
          -0.0643507165794626f,
204
7.32k
      },
205
7.32k
      {
206
7.32k
          0.0,
207
7.32k
          0.0,
208
7.32k
          -0.4517556589999482f,
209
7.32k
          0.15854503551840063f,
210
7.32k
          0.0,
211
7.32k
          -0.04038515160822202f,
212
7.32k
          0.0074182263792423875f,
213
7.32k
          0.39351034269210167f,
214
7.32k
          -0.45175565899994635f,
215
7.32k
          0.007418226379244351f,
216
7.32k
          0.1107416575309343f,
217
7.32k
          0.08298163094882051f,
218
7.32k
          0.15854503551839705f,
219
7.32k
          0.3935103426921022f,
220
7.32k
          0.0829816309488214f,
221
7.32k
          -0.45175565899994796f,
222
7.32k
      },
223
7.32k
      {
224
7.32k
          0.0,
225
7.32k
          0.0,
226
7.32k
          -0.304684750724869f,
227
7.32k
          0.5112616136591823f,
228
7.32k
          0.0,
229
7.32k
          0.0,
230
7.32k
          -0.290480129728998f,
231
7.32k
          -0.06578701549142804f,
232
7.32k
          0.304684750724884f,
233
7.32k
          0.2904801297290076f,
234
7.32k
          0.0,
235
7.32k
          -0.23889773523344604f,
236
7.32k
          -0.5112616136592012f,
237
7.32k
          0.06578701549142545f,
238
7.32k
          0.23889773523345467f,
239
7.32k
          0.0,
240
7.32k
      },
241
7.32k
      {
242
7.32k
          0.0,
243
7.32k
          0.0,
244
7.32k
          0.3017929516615495f,
245
7.32k
          0.25792362796341184f,
246
7.32k
          0.0,
247
7.32k
          0.16272340142866204f,
248
7.32k
          0.09520022653475037f,
249
7.32k
          0.0,
250
7.32k
          0.3017929516615503f,
251
7.32k
          0.09520022653475055f,
252
7.32k
          -0.16272340142866173f,
253
7.32k
          -0.35312385449816297f,
254
7.32k
          0.25792362796341295f,
255
7.32k
          0.0,
256
7.32k
          -0.3531238544981624f,
257
7.32k
          -0.6035859033230976f,
258
7.32k
      },
259
7.32k
      {
260
7.32k
          0.0,
261
7.32k
          0.0,
262
7.32k
          0.40824829046386274f,
263
7.32k
          0.0,
264
7.32k
          0.0,
265
7.32k
          0.0,
266
7.32k
          0.0,
267
7.32k
          -0.4082482904638628f,
268
7.32k
          -0.4082482904638635f,
269
7.32k
          0.0,
270
7.32k
          0.0,
271
7.32k
          -0.40824829046386296f,
272
7.32k
          0.0,
273
7.32k
          0.4082482904638634f,
274
7.32k
          0.408248290463863f,
275
7.32k
          0.0,
276
7.32k
      },
277
7.32k
      {
278
7.32k
          0.0,
279
7.32k
          0.0,
280
7.32k
          0.1747866975480809f,
281
7.32k
          0.0812611176717539f,
282
7.32k
          0.0,
283
7.32k
          0.0,
284
7.32k
          -0.3675398009862027f,
285
7.32k
          -0.307882213957909f,
286
7.32k
          -0.17478669754808135f,
287
7.32k
          0.3675398009862011f,
288
7.32k
          0.0,
289
7.32k
          0.4826689115059883f,
290
7.32k
          -0.08126111767175039f,
291
7.32k
          0.30788221395790305f,
292
7.32k
          -0.48266891150598584f,
293
7.32k
          0.0,
294
7.32k
      },
295
7.32k
      {
296
7.32k
          0.0,
297
7.32k
          0.0,
298
7.32k
          -0.21105601049335784f,
299
7.32k
          0.18567180916109802f,
300
7.32k
          0.0,
301
7.32k
          0.0,
302
7.32k
          0.49215859013738733f,
303
7.32k
          -0.38525013709251915f,
304
7.32k
          0.21105601049335806f,
305
7.32k
          -0.49215859013738905f,
306
7.32k
          0.0,
307
7.32k
          0.17419412659916217f,
308
7.32k
          -0.18567180916109904f,
309
7.32k
          0.3852501370925211f,
310
7.32k
          -0.1741941265991621f,
311
7.32k
          0.0,
312
7.32k
      },
313
7.32k
      {
314
7.32k
          0.0,
315
7.32k
          0.0,
316
7.32k
          -0.14266084808807264f,
317
7.32k
          -0.3416446842253372f,
318
7.32k
          0.0,
319
7.32k
          0.7367497537172237f,
320
7.32k
          0.24627107722075148f,
321
7.32k
          -0.08574019035519306f,
322
7.32k
          -0.14266084808807344f,
323
7.32k
          0.24627107722075137f,
324
7.32k
          0.14883399227113567f,
325
7.32k
          -0.04768680350229251f,
326
7.32k
          -0.3416446842253373f,
327
7.32k
          -0.08574019035519267f,
328
7.32k
          -0.047686803502292804f,
329
7.32k
          -0.14266084808807242f,
330
7.32k
      },
331
7.32k
      {
332
7.32k
          0.0,
333
7.32k
          0.0,
334
7.32k
          -0.13813540350758585f,
335
7.32k
          0.3302282550303788f,
336
7.32k
          0.0,
337
7.32k
          0.08755115000587084f,
338
7.32k
          -0.07946706605909573f,
339
7.32k
          -0.4613374887461511f,
340
7.32k
          -0.13813540350758294f,
341
7.32k
          -0.07946706605910261f,
342
7.32k
          0.49724647109535086f,
343
7.32k
          0.12538059448563663f,
344
7.32k
          0.3302282550303805f,
345
7.32k
          -0.4613374887461554f,
346
7.32k
          0.12538059448564315f,
347
7.32k
          -0.13813540350758452f,
348
7.32k
      },
349
7.32k
      {
350
7.32k
          0.0,
351
7.32k
          0.0,
352
7.32k
          -0.17437602599651067f,
353
7.32k
          0.0702790691196284f,
354
7.32k
          0.0,
355
7.32k
          -0.2921026642334881f,
356
7.32k
          0.3623817333531167f,
357
7.32k
          0.0,
358
7.32k
          -0.1743760259965108f,
359
7.32k
          0.36238173335311646f,
360
7.32k
          0.29210266423348785f,
361
7.32k
          -0.4326608024727445f,
362
7.32k
          0.07027906911962818f,
363
7.32k
          0.0,
364
7.32k
          -0.4326608024727457f,
365
7.32k
          0.34875205199302267f,
366
7.32k
      },
367
7.32k
      {
368
7.32k
          0.0,
369
7.32k
          0.0,
370
7.32k
          0.11354987314994337f,
371
7.32k
          -0.07417504595810355f,
372
7.32k
          0.0,
373
7.32k
          0.19402893032594343f,
374
7.32k
          -0.435190496523228f,
375
7.32k
          0.21918684838857466f,
376
7.32k
          0.11354987314994257f,
377
7.32k
          -0.4351904965232251f,
378
7.32k
          0.5550443808910661f,
379
7.32k
          -0.25468277124066463f,
380
7.32k
          -0.07417504595810233f,
381
7.32k
          0.2191868483885728f,
382
7.32k
          -0.25468277124066413f,
383
7.32k
          0.1135498731499429f,
384
7.32k
      },
385
7.32k
  };
386
387
7.32k
  const HWY_CAPPED(float, 16) d;
388
124k
  for (size_t i = 0; i < 16; i += Lanes(d)) {
389
117k
    auto pixel = Zero(d);
390
1.99M
    for (size_t j = 0; j < 16; j++) {
391
1.87M
      auto cf = Set(d, coeffs[j]);
392
1.87M
      auto basis = Load(d, k4x4AFVBasis[j] + i);
393
1.87M
      pixel = MulAdd(cf, basis, pixel);
394
1.87M
    }
395
117k
    Store(pixel, d, pixels + i);
396
117k
  }
397
7.32k
}
Unexecuted instantiation: enc_group.cc:jxl::N_SCALAR::(anonymous namespace)::AFVIDCT4x4(float const*, float*)
dec_group.cc:jxl::N_SCALAR::(anonymous namespace)::AFVIDCT4x4(float const*, float*)
Line
Count
Source
95
7.32k
void AFVIDCT4x4(const float* JXL_RESTRICT coeffs, float* JXL_RESTRICT pixels) {
96
7.32k
  HWY_ALIGN static constexpr float k4x4AFVBasis[16][16] = {
97
7.32k
      {
98
7.32k
          0.25,
99
7.32k
          0.25,
100
7.32k
          0.25,
101
7.32k
          0.25,
102
7.32k
          0.25,
103
7.32k
          0.25,
104
7.32k
          0.25,
105
7.32k
          0.25,
106
7.32k
          0.25,
107
7.32k
          0.25,
108
7.32k
          0.25,
109
7.32k
          0.25,
110
7.32k
          0.25,
111
7.32k
          0.25,
112
7.32k
          0.25,
113
7.32k
          0.25,
114
7.32k
      },
115
7.32k
      {
116
7.32k
          0.876902929799142f,
117
7.32k
          0.2206518106944235f,
118
7.32k
          -0.10140050393753763f,
119
7.32k
          -0.1014005039375375f,
120
7.32k
          0.2206518106944236f,
121
7.32k
          -0.10140050393753777f,
122
7.32k
          -0.10140050393753772f,
123
7.32k
          -0.10140050393753763f,
124
7.32k
          -0.10140050393753758f,
125
7.32k
          -0.10140050393753769f,
126
7.32k
          -0.1014005039375375f,
127
7.32k
          -0.10140050393753768f,
128
7.32k
          -0.10140050393753768f,
129
7.32k
          -0.10140050393753759f,
130
7.32k
          -0.10140050393753763f,
131
7.32k
          -0.10140050393753741f,
132
7.32k
      },
133
7.32k
      {
134
7.32k
          0.0,
135
7.32k
          0.0,
136
7.32k
          0.40670075830260755f,
137
7.32k
          0.44444816619734445f,
138
7.32k
          0.0,
139
7.32k
          0.0,
140
7.32k
          0.19574399372042936f,
141
7.32k
          0.2929100136981264f,
142
7.32k
          -0.40670075830260716f,
143
7.32k
          -0.19574399372042872f,
144
7.32k
          0.0,
145
7.32k
          0.11379074460448091f,
146
7.32k
          -0.44444816619734384f,
147
7.32k
          -0.29291001369812636f,
148
7.32k
          -0.1137907446044814f,
149
7.32k
          0.0,
150
7.32k
      },
151
7.32k
      {
152
7.32k
          0.0,
153
7.32k
          0.0,
154
7.32k
          -0.21255748058288748f,
155
7.32k
          0.3085497062849767f,
156
7.32k
          0.0,
157
7.32k
          0.4706702258572536f,
158
7.32k
          -0.1621205195722993f,
159
7.32k
          0.0,
160
7.32k
          -0.21255748058287047f,
161
7.32k
          -0.16212051957228327f,
162
7.32k
          -0.47067022585725277f,
163
7.32k
          -0.1464291867126764f,
164
7.32k
          0.3085497062849487f,
165
7.32k
          0.0,
166
7.32k
          -0.14642918671266536f,
167
7.32k
          0.4251149611657548f,
168
7.32k
      },
169
7.32k
      {
170
7.32k
          0.0,
171
7.32k
          -0.7071067811865474f,
172
7.32k
          0.0,
173
7.32k
          0.0,
174
7.32k
          0.7071067811865476f,
175
7.32k
          0.0,
176
7.32k
          0.0,
177
7.32k
          0.0,
178
7.32k
          0.0,
179
7.32k
          0.0,
180
7.32k
          0.0,
181
7.32k
          0.0,
182
7.32k
          0.0,
183
7.32k
          0.0,
184
7.32k
          0.0,
185
7.32k
          0.0,
186
7.32k
      },
187
7.32k
      {
188
7.32k
          -0.4105377591765233f,
189
7.32k
          0.6235485373547691f,
190
7.32k
          -0.06435071657946274f,
191
7.32k
          -0.06435071657946266f,
192
7.32k
          0.6235485373547694f,
193
7.32k
          -0.06435071657946284f,
194
7.32k
          -0.0643507165794628f,
195
7.32k
          -0.06435071657946274f,
196
7.32k
          -0.06435071657946272f,
197
7.32k
          -0.06435071657946279f,
198
7.32k
          -0.06435071657946266f,
199
7.32k
          -0.06435071657946277f,
200
7.32k
          -0.06435071657946277f,
201
7.32k
          -0.06435071657946273f,
202
7.32k
          -0.06435071657946274f,
203
7.32k
          -0.0643507165794626f,
204
7.32k
      },
205
7.32k
      {
206
7.32k
          0.0,
207
7.32k
          0.0,
208
7.32k
          -0.4517556589999482f,
209
7.32k
          0.15854503551840063f,
210
7.32k
          0.0,
211
7.32k
          -0.04038515160822202f,
212
7.32k
          0.0074182263792423875f,
213
7.32k
          0.39351034269210167f,
214
7.32k
          -0.45175565899994635f,
215
7.32k
          0.007418226379244351f,
216
7.32k
          0.1107416575309343f,
217
7.32k
          0.08298163094882051f,
218
7.32k
          0.15854503551839705f,
219
7.32k
          0.3935103426921022f,
220
7.32k
          0.0829816309488214f,
221
7.32k
          -0.45175565899994796f,
222
7.32k
      },
223
7.32k
      {
224
7.32k
          0.0,
225
7.32k
          0.0,
226
7.32k
          -0.304684750724869f,
227
7.32k
          0.5112616136591823f,
228
7.32k
          0.0,
229
7.32k
          0.0,
230
7.32k
          -0.290480129728998f,
231
7.32k
          -0.06578701549142804f,
232
7.32k
          0.304684750724884f,
233
7.32k
          0.2904801297290076f,
234
7.32k
          0.0,
235
7.32k
          -0.23889773523344604f,
236
7.32k
          -0.5112616136592012f,
237
7.32k
          0.06578701549142545f,
238
7.32k
          0.23889773523345467f,
239
7.32k
          0.0,
240
7.32k
      },
241
7.32k
      {
242
7.32k
          0.0,
243
7.32k
          0.0,
244
7.32k
          0.3017929516615495f,
245
7.32k
          0.25792362796341184f,
246
7.32k
          0.0,
247
7.32k
          0.16272340142866204f,
248
7.32k
          0.09520022653475037f,
249
7.32k
          0.0,
250
7.32k
          0.3017929516615503f,
251
7.32k
          0.09520022653475055f,
252
7.32k
          -0.16272340142866173f,
253
7.32k
          -0.35312385449816297f,
254
7.32k
          0.25792362796341295f,
255
7.32k
          0.0,
256
7.32k
          -0.3531238544981624f,
257
7.32k
          -0.6035859033230976f,
258
7.32k
      },
259
7.32k
      {
260
7.32k
          0.0,
261
7.32k
          0.0,
262
7.32k
          0.40824829046386274f,
263
7.32k
          0.0,
264
7.32k
          0.0,
265
7.32k
          0.0,
266
7.32k
          0.0,
267
7.32k
          -0.4082482904638628f,
268
7.32k
          -0.4082482904638635f,
269
7.32k
          0.0,
270
7.32k
          0.0,
271
7.32k
          -0.40824829046386296f,
272
7.32k
          0.0,
273
7.32k
          0.4082482904638634f,
274
7.32k
          0.408248290463863f,
275
7.32k
          0.0,
276
7.32k
      },
277
7.32k
      {
278
7.32k
          0.0,
279
7.32k
          0.0,
280
7.32k
          0.1747866975480809f,
281
7.32k
          0.0812611176717539f,
282
7.32k
          0.0,
283
7.32k
          0.0,
284
7.32k
          -0.3675398009862027f,
285
7.32k
          -0.307882213957909f,
286
7.32k
          -0.17478669754808135f,
287
7.32k
          0.3675398009862011f,
288
7.32k
          0.0,
289
7.32k
          0.4826689115059883f,
290
7.32k
          -0.08126111767175039f,
291
7.32k
          0.30788221395790305f,
292
7.32k
          -0.48266891150598584f,
293
7.32k
          0.0,
294
7.32k
      },
295
7.32k
      {
296
7.32k
          0.0,
297
7.32k
          0.0,
298
7.32k
          -0.21105601049335784f,
299
7.32k
          0.18567180916109802f,
300
7.32k
          0.0,
301
7.32k
          0.0,
302
7.32k
          0.49215859013738733f,
303
7.32k
          -0.38525013709251915f,
304
7.32k
          0.21105601049335806f,
305
7.32k
          -0.49215859013738905f,
306
7.32k
          0.0,
307
7.32k
          0.17419412659916217f,
308
7.32k
          -0.18567180916109904f,
309
7.32k
          0.3852501370925211f,
310
7.32k
          -0.1741941265991621f,
311
7.32k
          0.0,
312
7.32k
      },
313
7.32k
      {
314
7.32k
          0.0,
315
7.32k
          0.0,
316
7.32k
          -0.14266084808807264f,
317
7.32k
          -0.3416446842253372f,
318
7.32k
          0.0,
319
7.32k
          0.7367497537172237f,
320
7.32k
          0.24627107722075148f,
321
7.32k
          -0.08574019035519306f,
322
7.32k
          -0.14266084808807344f,
323
7.32k
          0.24627107722075137f,
324
7.32k
          0.14883399227113567f,
325
7.32k
          -0.04768680350229251f,
326
7.32k
          -0.3416446842253373f,
327
7.32k
          -0.08574019035519267f,
328
7.32k
          -0.047686803502292804f,
329
7.32k
          -0.14266084808807242f,
330
7.32k
      },
331
7.32k
      {
332
7.32k
          0.0,
333
7.32k
          0.0,
334
7.32k
          -0.13813540350758585f,
335
7.32k
          0.3302282550303788f,
336
7.32k
          0.0,
337
7.32k
          0.08755115000587084f,
338
7.32k
          -0.07946706605909573f,
339
7.32k
          -0.4613374887461511f,
340
7.32k
          -0.13813540350758294f,
341
7.32k
          -0.07946706605910261f,
342
7.32k
          0.49724647109535086f,
343
7.32k
          0.12538059448563663f,
344
7.32k
          0.3302282550303805f,
345
7.32k
          -0.4613374887461554f,
346
7.32k
          0.12538059448564315f,
347
7.32k
          -0.13813540350758452f,
348
7.32k
      },
349
7.32k
      {
350
7.32k
          0.0,
351
7.32k
          0.0,
352
7.32k
          -0.17437602599651067f,
353
7.32k
          0.0702790691196284f,
354
7.32k
          0.0,
355
7.32k
          -0.2921026642334881f,
356
7.32k
          0.3623817333531167f,
357
7.32k
          0.0,
358
7.32k
          -0.1743760259965108f,
359
7.32k
          0.36238173335311646f,
360
7.32k
          0.29210266423348785f,
361
7.32k
          -0.4326608024727445f,
362
7.32k
          0.07027906911962818f,
363
7.32k
          0.0,
364
7.32k
          -0.4326608024727457f,
365
7.32k
          0.34875205199302267f,
366
7.32k
      },
367
7.32k
      {
368
7.32k
          0.0,
369
7.32k
          0.0,
370
7.32k
          0.11354987314994337f,
371
7.32k
          -0.07417504595810355f,
372
7.32k
          0.0,
373
7.32k
          0.19402893032594343f,
374
7.32k
          -0.435190496523228f,
375
7.32k
          0.21918684838857466f,
376
7.32k
          0.11354987314994257f,
377
7.32k
          -0.4351904965232251f,
378
7.32k
          0.5550443808910661f,
379
7.32k
          -0.25468277124066463f,
380
7.32k
          -0.07417504595810233f,
381
7.32k
          0.2191868483885728f,
382
7.32k
          -0.25468277124066413f,
383
7.32k
          0.1135498731499429f,
384
7.32k
      },
385
7.32k
  };
386
387
7.32k
  const HWY_CAPPED(float, 16) d;
388
124k
  for (size_t i = 0; i < 16; i += Lanes(d)) {
389
117k
    auto pixel = Zero(d);
390
1.99M
    for (size_t j = 0; j < 16; j++) {
391
1.87M
      auto cf = Set(d, coeffs[j]);
392
1.87M
      auto basis = Load(d, k4x4AFVBasis[j] + i);
393
1.87M
      pixel = MulAdd(cf, basis, pixel);
394
1.87M
    }
395
117k
    Store(pixel, d, pixels + i);
396
117k
  }
397
7.32k
}
Unexecuted instantiation: enc_ac_strategy.cc:jxl::N_SCALAR::(anonymous namespace)::AFVIDCT4x4(float const*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:jxl::N_SCALAR::(anonymous namespace)::AFVIDCT4x4(float const*, float*)
398
399
template <size_t afv_kind>
400
void AFVTransformToPixels(const float* JXL_RESTRICT coefficients,
401
7.32k
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
7.32k
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
7.32k
  size_t afv_x = afv_kind & 1;
404
7.32k
  size_t afv_y = afv_kind / 2;
405
7.32k
  float dcs[3] = {};
406
7.32k
  float block00 = coefficients[0];
407
7.32k
  float block01 = coefficients[1];
408
7.32k
  float block10 = coefficients[8];
409
7.32k
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
7.32k
  dcs[1] = (block00 + block10 - block01);
411
7.32k
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
7.32k
  HWY_ALIGN float coeff[4 * 4];
414
7.32k
  coeff[0] = dcs[0];
415
36.6k
  for (size_t iy = 0; iy < 4; iy++) {
416
146k
    for (size_t ix = 0; ix < 4; ix++) {
417
117k
      if (ix == 0 && iy == 0) continue;
418
109k
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
109k
    }
420
29.2k
  }
421
7.32k
  HWY_ALIGN float block[4 * 8];
422
7.32k
  AFVIDCT4x4(coeff, block);
423
36.6k
  for (size_t iy = 0; iy < 4; iy++) {
424
146k
    for (size_t ix = 0; ix < 4; ix++) {
425
117k
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
117k
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
117k
    }
428
29.2k
  }
429
  // IDCT4x4 in (odd, even) positions.
430
7.32k
  block[0] = dcs[1];
431
36.6k
  for (size_t iy = 0; iy < 4; iy++) {
432
146k
    for (size_t ix = 0; ix < 4; ix++) {
433
117k
      if (ix == 0 && iy == 0) continue;
434
109k
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
109k
    }
436
29.2k
  }
437
7.32k
  ComputeScaledIDCT<4, 4>()(
438
7.32k
      block,
439
7.32k
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
7.32k
            pixels_stride),
441
7.32k
      scratch_space);
442
  // IDCT4x8.
443
7.32k
  block[0] = dcs[2];
444
36.6k
  for (size_t iy = 0; iy < 4; iy++) {
445
263k
    for (size_t ix = 0; ix < 8; ix++) {
446
234k
      if (ix == 0 && iy == 0) continue;
447
227k
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
227k
    }
449
29.2k
  }
450
7.32k
  ComputeScaledIDCT<4, 8>()(
451
7.32k
      block,
452
7.32k
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
7.32k
      scratch_space);
454
7.32k
}
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<0ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<1ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<2ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_group.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<3ul>(float const*, float*, unsigned long)
dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<0ul>(float const*, float*, unsigned long)
Line
Count
Source
401
66
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
66
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
66
  size_t afv_x = afv_kind & 1;
404
66
  size_t afv_y = afv_kind / 2;
405
66
  float dcs[3] = {};
406
66
  float block00 = coefficients[0];
407
66
  float block01 = coefficients[1];
408
66
  float block10 = coefficients[8];
409
66
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
66
  dcs[1] = (block00 + block10 - block01);
411
66
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
66
  HWY_ALIGN float coeff[4 * 4];
414
66
  coeff[0] = dcs[0];
415
330
  for (size_t iy = 0; iy < 4; iy++) {
416
1.32k
    for (size_t ix = 0; ix < 4; ix++) {
417
1.05k
      if (ix == 0 && iy == 0) continue;
418
990
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
990
    }
420
264
  }
421
66
  HWY_ALIGN float block[4 * 8];
422
66
  AFVIDCT4x4(coeff, block);
423
330
  for (size_t iy = 0; iy < 4; iy++) {
424
1.32k
    for (size_t ix = 0; ix < 4; ix++) {
425
1.05k
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
1.05k
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
1.05k
    }
428
264
  }
429
  // IDCT4x4 in (odd, even) positions.
430
66
  block[0] = dcs[1];
431
330
  for (size_t iy = 0; iy < 4; iy++) {
432
1.32k
    for (size_t ix = 0; ix < 4; ix++) {
433
1.05k
      if (ix == 0 && iy == 0) continue;
434
990
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
990
    }
436
264
  }
437
66
  ComputeScaledIDCT<4, 4>()(
438
66
      block,
439
66
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
66
            pixels_stride),
441
66
      scratch_space);
442
  // IDCT4x8.
443
66
  block[0] = dcs[2];
444
330
  for (size_t iy = 0; iy < 4; iy++) {
445
2.37k
    for (size_t ix = 0; ix < 8; ix++) {
446
2.11k
      if (ix == 0 && iy == 0) continue;
447
2.04k
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
2.04k
    }
449
264
  }
450
66
  ComputeScaledIDCT<4, 8>()(
451
66
      block,
452
66
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
66
      scratch_space);
454
66
}
dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<1ul>(float const*, float*, unsigned long)
Line
Count
Source
401
36
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
36
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
36
  size_t afv_x = afv_kind & 1;
404
36
  size_t afv_y = afv_kind / 2;
405
36
  float dcs[3] = {};
406
36
  float block00 = coefficients[0];
407
36
  float block01 = coefficients[1];
408
36
  float block10 = coefficients[8];
409
36
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
36
  dcs[1] = (block00 + block10 - block01);
411
36
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
36
  HWY_ALIGN float coeff[4 * 4];
414
36
  coeff[0] = dcs[0];
415
180
  for (size_t iy = 0; iy < 4; iy++) {
416
720
    for (size_t ix = 0; ix < 4; ix++) {
417
576
      if (ix == 0 && iy == 0) continue;
418
540
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
540
    }
420
144
  }
421
36
  HWY_ALIGN float block[4 * 8];
422
36
  AFVIDCT4x4(coeff, block);
423
180
  for (size_t iy = 0; iy < 4; iy++) {
424
720
    for (size_t ix = 0; ix < 4; ix++) {
425
576
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
576
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
576
    }
428
144
  }
429
  // IDCT4x4 in (odd, even) positions.
430
36
  block[0] = dcs[1];
431
180
  for (size_t iy = 0; iy < 4; iy++) {
432
720
    for (size_t ix = 0; ix < 4; ix++) {
433
576
      if (ix == 0 && iy == 0) continue;
434
540
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
540
    }
436
144
  }
437
36
  ComputeScaledIDCT<4, 4>()(
438
36
      block,
439
36
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
36
            pixels_stride),
441
36
      scratch_space);
442
  // IDCT4x8.
443
36
  block[0] = dcs[2];
444
180
  for (size_t iy = 0; iy < 4; iy++) {
445
1.29k
    for (size_t ix = 0; ix < 8; ix++) {
446
1.15k
      if (ix == 0 && iy == 0) continue;
447
1.11k
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
1.11k
    }
449
144
  }
450
36
  ComputeScaledIDCT<4, 8>()(
451
36
      block,
452
36
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
36
      scratch_space);
454
36
}
dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<2ul>(float const*, float*, unsigned long)
Line
Count
Source
401
432
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
432
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
432
  size_t afv_x = afv_kind & 1;
404
432
  size_t afv_y = afv_kind / 2;
405
432
  float dcs[3] = {};
406
432
  float block00 = coefficients[0];
407
432
  float block01 = coefficients[1];
408
432
  float block10 = coefficients[8];
409
432
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
432
  dcs[1] = (block00 + block10 - block01);
411
432
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
432
  HWY_ALIGN float coeff[4 * 4];
414
432
  coeff[0] = dcs[0];
415
2.16k
  for (size_t iy = 0; iy < 4; iy++) {
416
8.64k
    for (size_t ix = 0; ix < 4; ix++) {
417
6.91k
      if (ix == 0 && iy == 0) continue;
418
6.48k
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
6.48k
    }
420
1.72k
  }
421
432
  HWY_ALIGN float block[4 * 8];
422
432
  AFVIDCT4x4(coeff, block);
423
2.16k
  for (size_t iy = 0; iy < 4; iy++) {
424
8.64k
    for (size_t ix = 0; ix < 4; ix++) {
425
6.91k
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
6.91k
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
6.91k
    }
428
1.72k
  }
429
  // IDCT4x4 in (odd, even) positions.
430
432
  block[0] = dcs[1];
431
2.16k
  for (size_t iy = 0; iy < 4; iy++) {
432
8.64k
    for (size_t ix = 0; ix < 4; ix++) {
433
6.91k
      if (ix == 0 && iy == 0) continue;
434
6.48k
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
6.48k
    }
436
1.72k
  }
437
432
  ComputeScaledIDCT<4, 4>()(
438
432
      block,
439
432
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
432
            pixels_stride),
441
432
      scratch_space);
442
  // IDCT4x8.
443
432
  block[0] = dcs[2];
444
2.16k
  for (size_t iy = 0; iy < 4; iy++) {
445
15.5k
    for (size_t ix = 0; ix < 8; ix++) {
446
13.8k
      if (ix == 0 && iy == 0) continue;
447
13.3k
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
13.3k
    }
449
1.72k
  }
450
432
  ComputeScaledIDCT<4, 8>()(
451
432
      block,
452
432
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
432
      scratch_space);
454
432
}
dec_group.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<3ul>(float const*, float*, unsigned long)
Line
Count
Source
401
6.78k
                          float* JXL_RESTRICT pixels, size_t pixels_stride) {
402
6.78k
  HWY_ALIGN float scratch_space[4 * 8 * 4];
403
6.78k
  size_t afv_x = afv_kind & 1;
404
6.78k
  size_t afv_y = afv_kind / 2;
405
6.78k
  float dcs[3] = {};
406
6.78k
  float block00 = coefficients[0];
407
6.78k
  float block01 = coefficients[1];
408
6.78k
  float block10 = coefficients[8];
409
6.78k
  dcs[0] = (block00 + block10 + block01) * 4.0f;
410
6.78k
  dcs[1] = (block00 + block10 - block01);
411
6.78k
  dcs[2] = block00 - block10;
412
  // IAFV: (even, even) positions.
413
6.78k
  HWY_ALIGN float coeff[4 * 4];
414
6.78k
  coeff[0] = dcs[0];
415
33.9k
  for (size_t iy = 0; iy < 4; iy++) {
416
135k
    for (size_t ix = 0; ix < 4; ix++) {
417
108k
      if (ix == 0 && iy == 0) continue;
418
101k
      coeff[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2];
419
101k
    }
420
27.1k
  }
421
6.78k
  HWY_ALIGN float block[4 * 8];
422
6.78k
  AFVIDCT4x4(coeff, block);
423
33.9k
  for (size_t iy = 0; iy < 4; iy++) {
424
135k
    for (size_t ix = 0; ix < 4; ix++) {
425
108k
      pixels[(iy + afv_y * 4) * pixels_stride + afv_x * 4 + ix] =
426
108k
          block[(afv_y == 1 ? 3 - iy : iy) * 4 + (afv_x == 1 ? 3 - ix : ix)];
427
108k
    }
428
27.1k
  }
429
  // IDCT4x4 in (odd, even) positions.
430
6.78k
  block[0] = dcs[1];
431
33.9k
  for (size_t iy = 0; iy < 4; iy++) {
432
135k
    for (size_t ix = 0; ix < 4; ix++) {
433
108k
      if (ix == 0 && iy == 0) continue;
434
101k
      block[iy * 4 + ix] = coefficients[iy * 2 * 8 + ix * 2 + 1];
435
101k
    }
436
27.1k
  }
437
6.78k
  ComputeScaledIDCT<4, 4>()(
438
6.78k
      block,
439
6.78k
      DCTTo(pixels + afv_y * 4 * pixels_stride + (afv_x == 1 ? 0 : 4),
440
6.78k
            pixels_stride),
441
6.78k
      scratch_space);
442
  // IDCT4x8.
443
6.78k
  block[0] = dcs[2];
444
33.9k
  for (size_t iy = 0; iy < 4; iy++) {
445
244k
    for (size_t ix = 0; ix < 8; ix++) {
446
217k
      if (ix == 0 && iy == 0) continue;
447
210k
      block[iy * 8 + ix] = coefficients[(1 + iy * 2) * 8 + ix];
448
210k
    }
449
27.1k
  }
450
6.78k
  ComputeScaledIDCT<4, 8>()(
451
6.78k
      block,
452
6.78k
      DCTTo(pixels + (afv_y == 1 ? 0 : 4) * pixels_stride, pixels_stride),
453
6.78k
      scratch_space);
454
6.78k
}
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<0ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<1ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<2ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_ac_strategy.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<3ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<0ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<1ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<2ul>(float const*, float*, unsigned long)
Unexecuted instantiation: enc_chroma_from_luma.cc:void jxl::N_SCALAR::(anonymous namespace)::AFVTransformToPixels<3ul>(float const*, float*, unsigned long)
455
456
HWY_MAYBE_UNUSED void TransformToPixels(const AcStrategyType strategy,
457
                                        float* JXL_RESTRICT coefficients,
458
                                        float* JXL_RESTRICT pixels,
459
                                        size_t pixels_stride,
460
101k
                                        float* scratch_space) {
461
101k
  using Type = AcStrategyType;
462
101k
  switch (strategy) {
463
18.7k
    case Type::IDENTITY: {
464
18.7k
      float dcs[4] = {};
465
18.7k
      float block00 = coefficients[0];
466
18.7k
      float block01 = coefficients[1];
467
18.7k
      float block10 = coefficients[8];
468
18.7k
      float block11 = coefficients[9];
469
18.7k
      dcs[0] = block00 + block01 + block10 + block11;
470
18.7k
      dcs[1] = block00 + block01 - block10 - block11;
471
18.7k
      dcs[2] = block00 - block01 + block10 - block11;
472
18.7k
      dcs[3] = block00 - block01 - block10 + block11;
473
56.2k
      for (size_t y = 0; y < 2; y++) {
474
112k
        for (size_t x = 0; x < 2; x++) {
475
74.9k
          float block_dc = dcs[y * 2 + x];
476
74.9k
          float residual_sum = 0;
477
374k
          for (size_t iy = 0; iy < 4; iy++) {
478
1.49M
            for (size_t ix = 0; ix < 4; ix++) {
479
1.19M
              if (ix == 0 && iy == 0) continue;
480
1.12M
              residual_sum += coefficients[(y + iy * 2) * 8 + x + ix * 2];
481
1.12M
            }
482
299k
          }
483
74.9k
          pixels[(4 * y + 1) * pixels_stride + 4 * x + 1] =
484
74.9k
              block_dc - residual_sum * (1.0f / 16);
485
374k
          for (size_t iy = 0; iy < 4; iy++) {
486
1.49M
            for (size_t ix = 0; ix < 4; ix++) {
487
1.19M
              if (ix == 1 && iy == 1) continue;
488
1.12M
              pixels[(y * 4 + iy) * pixels_stride + x * 4 + ix] =
489
1.12M
                  coefficients[(y + iy * 2) * 8 + x + ix * 2] +
490
1.12M
                  pixels[(4 * y + 1) * pixels_stride + 4 * x + 1];
491
1.12M
            }
492
299k
          }
493
74.9k
          pixels[y * 4 * pixels_stride + x * 4] =
494
74.9k
              coefficients[(y + 2) * 8 + x + 2] +
495
74.9k
              pixels[(4 * y + 1) * pixels_stride + 4 * x + 1];
496
74.9k
        }
497
37.4k
      }
498
18.7k
      break;
499
0
    }
500
1.02k
    case Type::DCT8X4: {
501
1.02k
      float dcs[2] = {};
502
1.02k
      float block0 = coefficients[0];
503
1.02k
      float block1 = coefficients[8];
504
1.02k
      dcs[0] = block0 + block1;
505
1.02k
      dcs[1] = block0 - block1;
506
3.08k
      for (size_t x = 0; x < 2; x++) {
507
2.05k
        HWY_ALIGN float block[4 * 8];
508
2.05k
        block[0] = dcs[x];
509
10.2k
        for (size_t iy = 0; iy < 4; iy++) {
510
74.0k
          for (size_t ix = 0; ix < 8; ix++) {
511
65.8k
            if (ix == 0 && iy == 0) continue;
512
63.7k
            block[iy * 8 + ix] = coefficients[(x + iy * 2) * 8 + ix];
513
63.7k
          }
514
8.23k
        }
515
2.05k
        ComputeScaledIDCT<8, 4>()(block, DCTTo(pixels + x * 4, pixels_stride),
516
2.05k
                                  scratch_space);
517
2.05k
      }
518
1.02k
      break;
519
0
    }
520
783
    case Type::DCT4X8: {
521
783
      float dcs[2] = {};
522
783
      float block0 = coefficients[0];
523
783
      float block1 = coefficients[8];
524
783
      dcs[0] = block0 + block1;
525
783
      dcs[1] = block0 - block1;
526
2.34k
      for (size_t y = 0; y < 2; y++) {
527
1.56k
        HWY_ALIGN float block[4 * 8];
528
1.56k
        block[0] = dcs[y];
529
7.83k
        for (size_t iy = 0; iy < 4; iy++) {
530
56.3k
          for (size_t ix = 0; ix < 8; ix++) {
531
50.1k
            if (ix == 0 && iy == 0) continue;
532
48.5k
            block[iy * 8 + ix] = coefficients[(y + iy * 2) * 8 + ix];
533
48.5k
          }
534
6.26k
        }
535
1.56k
        ComputeScaledIDCT<4, 8>()(
536
1.56k
            block, DCTTo(pixels + y * 4 * pixels_stride, pixels_stride),
537
1.56k
            scratch_space);
538
1.56k
      }
539
783
      break;
540
0
    }
541
0
    case Type::DCT4X4: {
542
0
      float dcs[4] = {};
543
0
      float block00 = coefficients[0];
544
0
      float block01 = coefficients[1];
545
0
      float block10 = coefficients[8];
546
0
      float block11 = coefficients[9];
547
0
      dcs[0] = block00 + block01 + block10 + block11;
548
0
      dcs[1] = block00 + block01 - block10 - block11;
549
0
      dcs[2] = block00 - block01 + block10 - block11;
550
0
      dcs[3] = block00 - block01 - block10 + block11;
551
0
      for (size_t y = 0; y < 2; y++) {
552
0
        for (size_t x = 0; x < 2; x++) {
553
0
          HWY_ALIGN float block[4 * 4];
554
0
          block[0] = dcs[y * 2 + x];
555
0
          for (size_t iy = 0; iy < 4; iy++) {
556
0
            for (size_t ix = 0; ix < 4; ix++) {
557
0
              if (ix == 0 && iy == 0) continue;
558
0
              block[iy * 4 + ix] = coefficients[(y + iy * 2) * 8 + x + ix * 2];
559
0
            }
560
0
          }
561
0
          ComputeScaledIDCT<4, 4>()(
562
0
              block,
563
0
              DCTTo(pixels + y * 4 * pixels_stride + x * 4, pixels_stride),
564
0
              scratch_space);
565
0
        }
566
0
      }
567
0
      break;
568
0
    }
569
1.14k
    case Type::DCT2X2: {
570
1.14k
      HWY_ALIGN float coeffs[kDCTBlockSize];
571
1.14k
      memcpy(coeffs, coefficients, sizeof(float) * kDCTBlockSize);
572
1.14k
      IDCT2TopBlock<2>(coeffs, kBlockDim, coeffs);
573
1.14k
      IDCT2TopBlock<4>(coeffs, kBlockDim, coeffs);
574
1.14k
      IDCT2TopBlock<8>(coeffs, kBlockDim, coeffs);
575
10.3k
      for (size_t y = 0; y < kBlockDim; y++) {
576
82.5k
        for (size_t x = 0; x < kBlockDim; x++) {
577
73.3k
          pixels[y * pixels_stride + x] = coeffs[y * kBlockDim + x];
578
73.3k
        }
579
9.16k
      }
580
1.14k
      break;
581
0
    }
582
930
    case Type::DCT16X16: {
583
930
      ComputeScaledIDCT<16, 16>()(coefficients, DCTTo(pixels, pixels_stride),
584
930
                                  scratch_space);
585
930
      break;
586
0
    }
587
444
    case Type::DCT16X8: {
588
444
      ComputeScaledIDCT<16, 8>()(coefficients, DCTTo(pixels, pixels_stride),
589
444
                                 scratch_space);
590
444
      break;
591
0
    }
592
54.8k
    case Type::DCT8X16: {
593
54.8k
      ComputeScaledIDCT<8, 16>()(coefficients, DCTTo(pixels, pixels_stride),
594
54.8k
                                 scratch_space);
595
54.8k
      break;
596
0
    }
597
0
    case Type::DCT32X8: {
598
0
      ComputeScaledIDCT<32, 8>()(coefficients, DCTTo(pixels, pixels_stride),
599
0
                                 scratch_space);
600
0
      break;
601
0
    }
602
0
    case Type::DCT8X32: {
603
0
      ComputeScaledIDCT<8, 32>()(coefficients, DCTTo(pixels, pixels_stride),
604
0
                                 scratch_space);
605
0
      break;
606
0
    }
607
237
    case Type::DCT32X16: {
608
237
      ComputeScaledIDCT<32, 16>()(coefficients, DCTTo(pixels, pixels_stride),
609
237
                                  scratch_space);
610
237
      break;
611
0
    }
612
123
    case Type::DCT16X32: {
613
123
      ComputeScaledIDCT<16, 32>()(coefficients, DCTTo(pixels, pixels_stride),
614
123
                                  scratch_space);
615
123
      break;
616
0
    }
617
114
    case Type::DCT32X32: {
618
114
      ComputeScaledIDCT<32, 32>()(coefficients, DCTTo(pixels, pixels_stride),
619
114
                                  scratch_space);
620
114
      break;
621
0
    }
622
16.2k
    case Type::DCT: {
623
16.2k
      ComputeScaledIDCT<8, 8>()(coefficients, DCTTo(pixels, pixels_stride),
624
16.2k
                                scratch_space);
625
16.2k
      break;
626
0
    }
627
66
    case Type::AFV0: {
628
66
      AFVTransformToPixels<0>(coefficients, pixels, pixels_stride);
629
66
      break;
630
0
    }
631
36
    case Type::AFV1: {
632
36
      AFVTransformToPixels<1>(coefficients, pixels, pixels_stride);
633
36
      break;
634
0
    }
635
432
    case Type::AFV2: {
636
432
      AFVTransformToPixels<2>(coefficients, pixels, pixels_stride);
637
432
      break;
638
0
    }
639
6.78k
    case Type::AFV3: {
640
6.78k
      AFVTransformToPixels<3>(coefficients, pixels, pixels_stride);
641
6.78k
      break;
642
0
    }
643
0
    case Type::DCT64X32: {
644
0
      ComputeScaledIDCT<64, 32>()(coefficients, DCTTo(pixels, pixels_stride),
645
0
                                  scratch_space);
646
0
      break;
647
0
    }
648
0
    case Type::DCT32X64: {
649
0
      ComputeScaledIDCT<32, 64>()(coefficients, DCTTo(pixels, pixels_stride),
650
0
                                  scratch_space);
651
0
      break;
652
0
    }
653
0
    case Type::DCT64X64: {
654
0
      ComputeScaledIDCT<64, 64>()(coefficients, DCTTo(pixels, pixels_stride),
655
0
                                  scratch_space);
656
0
      break;
657
0
    }
658
0
    case Type::DCT128X64: {
659
0
      ComputeScaledIDCT<128, 64>()(coefficients, DCTTo(pixels, pixels_stride),
660
0
                                   scratch_space);
661
0
      break;
662
0
    }
663
0
    case Type::DCT64X128: {
664
0
      ComputeScaledIDCT<64, 128>()(coefficients, DCTTo(pixels, pixels_stride),
665
0
                                   scratch_space);
666
0
      break;
667
0
    }
668
0
    case Type::DCT128X128: {
669
0
      ComputeScaledIDCT<128, 128>()(coefficients, DCTTo(pixels, pixels_stride),
670
0
                                    scratch_space);
671
0
      break;
672
0
    }
673
0
    case Type::DCT256X128: {
674
0
      ComputeScaledIDCT<256, 128>()(coefficients, DCTTo(pixels, pixels_stride),
675
0
                                    scratch_space);
676
0
      break;
677
0
    }
678
0
    case Type::DCT128X256: {
679
0
      ComputeScaledIDCT<128, 256>()(coefficients, DCTTo(pixels, pixels_stride),
680
0
                                    scratch_space);
681
0
      break;
682
0
    }
683
0
    case Type::DCT256X256: {
684
0
      ComputeScaledIDCT<256, 256>()(coefficients, DCTTo(pixels, pixels_stride),
685
0
                                    scratch_space);
686
0
      break;
687
0
    }
688
101k
  }
689
101k
}
Unexecuted instantiation: enc_group.cc:jxl::N_SCALAR::(anonymous namespace)::TransformToPixels(jxl::AcStrategyType, float*, float*, unsigned long, float*)
dec_group.cc:jxl::N_SCALAR::(anonymous namespace)::TransformToPixels(jxl::AcStrategyType, float*, float*, unsigned long, float*)
Line
Count
Source
460
101k
                                        float* scratch_space) {
461
101k
  using Type = AcStrategyType;
462
101k
  switch (strategy) {
463
18.7k
    case Type::IDENTITY: {
464
18.7k
      float dcs[4] = {};
465
18.7k
      float block00 = coefficients[0];
466
18.7k
      float block01 = coefficients[1];
467
18.7k
      float block10 = coefficients[8];
468
18.7k
      float block11 = coefficients[9];
469
18.7k
      dcs[0] = block00 + block01 + block10 + block11;
470
18.7k
      dcs[1] = block00 + block01 - block10 - block11;
471
18.7k
      dcs[2] = block00 - block01 + block10 - block11;
472
18.7k
      dcs[3] = block00 - block01 - block10 + block11;
473
56.2k
      for (size_t y = 0; y < 2; y++) {
474
112k
        for (size_t x = 0; x < 2; x++) {
475
74.9k
          float block_dc = dcs[y * 2 + x];
476
74.9k
          float residual_sum = 0;
477
374k
          for (size_t iy = 0; iy < 4; iy++) {
478
1.49M
            for (size_t ix = 0; ix < 4; ix++) {
479
1.19M
              if (ix == 0 && iy == 0) continue;
480
1.12M
              residual_sum += coefficients[(y + iy * 2) * 8 + x + ix * 2];
481
1.12M
            }
482
299k
          }
483
74.9k
          pixels[(4 * y + 1) * pixels_stride + 4 * x + 1] =
484
74.9k
              block_dc - residual_sum * (1.0f / 16);
485
374k
          for (size_t iy = 0; iy < 4; iy++) {
486
1.49M
            for (size_t ix = 0; ix < 4; ix++) {
487
1.19M
              if (ix == 1 && iy == 1) continue;
488
1.12M
              pixels[(y * 4 + iy) * pixels_stride + x * 4 + ix] =
489
1.12M
                  coefficients[(y + iy * 2) * 8 + x + ix * 2] +
490
1.12M
                  pixels[(4 * y + 1) * pixels_stride + 4 * x + 1];
491
1.12M
            }
492
299k
          }
493
74.9k
          pixels[y * 4 * pixels_stride + x * 4] =
494
74.9k
              coefficients[(y + 2) * 8 + x + 2] +
495
74.9k
              pixels[(4 * y + 1) * pixels_stride + 4 * x + 1];
496
74.9k
        }
497
37.4k
      }
498
18.7k
      break;
499
0
    }
500
1.02k
    case Type::DCT8X4: {
501
1.02k
      float dcs[2] = {};
502
1.02k
      float block0 = coefficients[0];
503
1.02k
      float block1 = coefficients[8];
504
1.02k
      dcs[0] = block0 + block1;
505
1.02k
      dcs[1] = block0 - block1;
506
3.08k
      for (size_t x = 0; x < 2; x++) {
507
2.05k
        HWY_ALIGN float block[4 * 8];
508
2.05k
        block[0] = dcs[x];
509
10.2k
        for (size_t iy = 0; iy < 4; iy++) {
510
74.0k
          for (size_t ix = 0; ix < 8; ix++) {
511
65.8k
            if (ix == 0 && iy == 0) continue;
512
63.7k
            block[iy * 8 + ix] = coefficients[(x + iy * 2) * 8 + ix];
513
63.7k
          }
514
8.23k
        }
515
2.05k
        ComputeScaledIDCT<8, 4>()(block, DCTTo(pixels + x * 4, pixels_stride),
516
2.05k
                                  scratch_space);
517
2.05k
      }
518
1.02k
      break;
519
0
    }
520
783
    case Type::DCT4X8: {
521
783
      float dcs[2] = {};
522
783
      float block0 = coefficients[0];
523
783
      float block1 = coefficients[8];
524
783
      dcs[0] = block0 + block1;
525
783
      dcs[1] = block0 - block1;
526
2.34k
      for (size_t y = 0; y < 2; y++) {
527
1.56k
        HWY_ALIGN float block[4 * 8];
528
1.56k
        block[0] = dcs[y];
529
7.83k
        for (size_t iy = 0; iy < 4; iy++) {
530
56.3k
          for (size_t ix = 0; ix < 8; ix++) {
531
50.1k
            if (ix == 0 && iy == 0) continue;
532
48.5k
            block[iy * 8 + ix] = coefficients[(y + iy * 2) * 8 + ix];
533
48.5k
          }
534
6.26k
        }
535
1.56k
        ComputeScaledIDCT<4, 8>()(
536
1.56k
            block, DCTTo(pixels + y * 4 * pixels_stride, pixels_stride),
537
1.56k
            scratch_space);
538
1.56k
      }
539
783
      break;
540
0
    }
541
0
    case Type::DCT4X4: {
542
0
      float dcs[4] = {};
543
0
      float block00 = coefficients[0];
544
0
      float block01 = coefficients[1];
545
0
      float block10 = coefficients[8];
546
0
      float block11 = coefficients[9];
547
0
      dcs[0] = block00 + block01 + block10 + block11;
548
0
      dcs[1] = block00 + block01 - block10 - block11;
549
0
      dcs[2] = block00 - block01 + block10 - block11;
550
0
      dcs[3] = block00 - block01 - block10 + block11;
551
0
      for (size_t y = 0; y < 2; y++) {
552
0
        for (size_t x = 0; x < 2; x++) {
553
0
          HWY_ALIGN float block[4 * 4];
554
0
          block[0] = dcs[y * 2 + x];
555
0
          for (size_t iy = 0; iy < 4; iy++) {
556
0
            for (size_t ix = 0; ix < 4; ix++) {
557
0
              if (ix == 0 && iy == 0) continue;
558
0
              block[iy * 4 + ix] = coefficients[(y + iy * 2) * 8 + x + ix * 2];
559
0
            }
560
0
          }
561
0
          ComputeScaledIDCT<4, 4>()(
562
0
              block,
563
0
              DCTTo(pixels + y * 4 * pixels_stride + x * 4, pixels_stride),
564
0
              scratch_space);
565
0
        }
566
0
      }
567
0
      break;
568
0
    }
569
1.14k
    case Type::DCT2X2: {
570
1.14k
      HWY_ALIGN float coeffs[kDCTBlockSize];
571
1.14k
      memcpy(coeffs, coefficients, sizeof(float) * kDCTBlockSize);
572
1.14k
      IDCT2TopBlock<2>(coeffs, kBlockDim, coeffs);
573
1.14k
      IDCT2TopBlock<4>(coeffs, kBlockDim, coeffs);
574
1.14k
      IDCT2TopBlock<8>(coeffs, kBlockDim, coeffs);
575
10.3k
      for (size_t y = 0; y < kBlockDim; y++) {
576
82.5k
        for (size_t x = 0; x < kBlockDim; x++) {
577
73.3k
          pixels[y * pixels_stride + x] = coeffs[y * kBlockDim + x];
578
73.3k
        }
579
9.16k
      }
580
1.14k
      break;
581
0
    }
582
930
    case Type::DCT16X16: {
583
930
      ComputeScaledIDCT<16, 16>()(coefficients, DCTTo(pixels, pixels_stride),
584
930
                                  scratch_space);
585
930
      break;
586
0
    }
587
444
    case Type::DCT16X8: {
588
444
      ComputeScaledIDCT<16, 8>()(coefficients, DCTTo(pixels, pixels_stride),
589
444
                                 scratch_space);
590
444
      break;
591
0
    }
592
54.8k
    case Type::DCT8X16: {
593
54.8k
      ComputeScaledIDCT<8, 16>()(coefficients, DCTTo(pixels, pixels_stride),
594
54.8k
                                 scratch_space);
595
54.8k
      break;
596
0
    }
597
0
    case Type::DCT32X8: {
598
0
      ComputeScaledIDCT<32, 8>()(coefficients, DCTTo(pixels, pixels_stride),
599
0
                                 scratch_space);
600
0
      break;
601
0
    }
602
0
    case Type::DCT8X32: {
603
0
      ComputeScaledIDCT<8, 32>()(coefficients, DCTTo(pixels, pixels_stride),
604
0
                                 scratch_space);
605
0
      break;
606
0
    }
607
237
    case Type::DCT32X16: {
608
237
      ComputeScaledIDCT<32, 16>()(coefficients, DCTTo(pixels, pixels_stride),
609
237
                                  scratch_space);
610
237
      break;
611
0
    }
612
123
    case Type::DCT16X32: {
613
123
      ComputeScaledIDCT<16, 32>()(coefficients, DCTTo(pixels, pixels_stride),
614
123
                                  scratch_space);
615
123
      break;
616
0
    }
617
114
    case Type::DCT32X32: {
618
114
      ComputeScaledIDCT<32, 32>()(coefficients, DCTTo(pixels, pixels_stride),
619
114
                                  scratch_space);
620
114
      break;
621
0
    }
622
16.2k
    case Type::DCT: {
623
16.2k
      ComputeScaledIDCT<8, 8>()(coefficients, DCTTo(pixels, pixels_stride),
624
16.2k
                                scratch_space);
625
16.2k
      break;
626
0
    }
627
66
    case Type::AFV0: {
628
66
      AFVTransformToPixels<0>(coefficients, pixels, pixels_stride);
629
66
      break;
630
0
    }
631
36
    case Type::AFV1: {
632
36
      AFVTransformToPixels<1>(coefficients, pixels, pixels_stride);
633
36
      break;
634
0
    }
635
432
    case Type::AFV2: {
636
432
      AFVTransformToPixels<2>(coefficients, pixels, pixels_stride);
637
432
      break;
638
0
    }
639
6.78k
    case Type::AFV3: {
640
6.78k
      AFVTransformToPixels<3>(coefficients, pixels, pixels_stride);
641
6.78k
      break;
642
0
    }
643
0
    case Type::DCT64X32: {
644
0
      ComputeScaledIDCT<64, 32>()(coefficients, DCTTo(pixels, pixels_stride),
645
0
                                  scratch_space);
646
0
      break;
647
0
    }
648
0
    case Type::DCT32X64: {
649
0
      ComputeScaledIDCT<32, 64>()(coefficients, DCTTo(pixels, pixels_stride),
650
0
                                  scratch_space);
651
0
      break;
652
0
    }
653
0
    case Type::DCT64X64: {
654
0
      ComputeScaledIDCT<64, 64>()(coefficients, DCTTo(pixels, pixels_stride),
655
0
                                  scratch_space);
656
0
      break;
657
0
    }
658
0
    case Type::DCT128X64: {
659
0
      ComputeScaledIDCT<128, 64>()(coefficients, DCTTo(pixels, pixels_stride),
660
0
                                   scratch_space);
661
0
      break;
662
0
    }
663
0
    case Type::DCT64X128: {
664
0
      ComputeScaledIDCT<64, 128>()(coefficients, DCTTo(pixels, pixels_stride),
665
0
                                   scratch_space);
666
0
      break;
667
0
    }
668
0
    case Type::DCT128X128: {
669
0
      ComputeScaledIDCT<128, 128>()(coefficients, DCTTo(pixels, pixels_stride),
670
0
                                    scratch_space);
671
0
      break;
672
0
    }
673
0
    case Type::DCT256X128: {
674
0
      ComputeScaledIDCT<256, 128>()(coefficients, DCTTo(pixels, pixels_stride),
675
0
                                    scratch_space);
676
0
      break;
677
0
    }
678
0
    case Type::DCT128X256: {
679
0
      ComputeScaledIDCT<128, 256>()(coefficients, DCTTo(pixels, pixels_stride),
680
0
                                    scratch_space);
681
0
      break;
682
0
    }
683
0
    case Type::DCT256X256: {
684
0
      ComputeScaledIDCT<256, 256>()(coefficients, DCTTo(pixels, pixels_stride),
685
0
                                    scratch_space);
686
0
      break;
687
0
    }
688
101k
  }
689
101k
}
Unexecuted instantiation: enc_ac_strategy.cc:jxl::N_SCALAR::(anonymous namespace)::TransformToPixels(jxl::AcStrategyType, float*, float*, unsigned long, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:jxl::N_SCALAR::(anonymous namespace)::TransformToPixels(jxl::AcStrategyType, float*, float*, unsigned long, float*)
690
691
HWY_MAYBE_UNUSED void LowestFrequenciesFromDC(const AcStrategyType strategy,
692
                                              const float* dc, size_t dc_stride,
693
                                              float* llf,
694
101k
                                              float* JXL_RESTRICT scratch) {
695
101k
  using Type = AcStrategyType;
696
101k
  HWY_ALIGN float warm_block[4 * 4];
697
101k
  HWY_ALIGN float warm_scratch_space[4 * 4 * 4];
698
101k
  switch (strategy) {
699
444
    case Type::DCT16X8: {
700
444
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/kBlockDim,
701
444
                        /*LF_ROWS=*/2, /*LF_COLS=*/1, /*ROWS=*/2, /*COLS=*/1>(
702
444
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
703
444
      break;
704
0
    }
705
54.5k
    case Type::DCT8X16: {
706
54.5k
      ReinterpretingDCT</*DCT_ROWS=*/kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
707
54.5k
                        /*LF_ROWS=*/1, /*LF_COLS=*/2, /*ROWS=*/1, /*COLS=*/2>(
708
54.5k
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
709
54.5k
      break;
710
0
    }
711
930
    case Type::DCT16X16: {
712
930
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
713
930
                        /*LF_ROWS=*/2, /*LF_COLS=*/2, /*ROWS=*/2, /*COLS=*/2>(
714
930
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
715
930
      break;
716
0
    }
717
0
    case Type::DCT32X8: {
718
0
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/kBlockDim,
719
0
                        /*LF_ROWS=*/4, /*LF_COLS=*/1, /*ROWS=*/4, /*COLS=*/1>(
720
0
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
721
0
      break;
722
0
    }
723
0
    case Type::DCT8X32: {
724
0
      ReinterpretingDCT</*DCT_ROWS=*/kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
725
0
                        /*LF_ROWS=*/1, /*LF_COLS=*/4, /*ROWS=*/1, /*COLS=*/4>(
726
0
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
727
0
      break;
728
0
    }
729
237
    case Type::DCT32X16: {
730
237
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
731
237
                        /*LF_ROWS=*/4, /*LF_COLS=*/2, /*ROWS=*/4, /*COLS=*/2>(
732
237
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
733
237
      break;
734
0
    }
735
123
    case Type::DCT16X32: {
736
123
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
737
123
                        /*LF_ROWS=*/2, /*LF_COLS=*/4, /*ROWS=*/2, /*COLS=*/4>(
738
123
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
739
123
      break;
740
0
    }
741
114
    case Type::DCT32X32: {
742
114
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
743
114
                        /*LF_ROWS=*/4, /*LF_COLS=*/4, /*ROWS=*/4, /*COLS=*/4>(
744
114
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
745
114
      break;
746
0
    }
747
0
    case Type::DCT64X32: {
748
0
      ReinterpretingDCT</*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
749
0
                        /*LF_ROWS=*/8, /*LF_COLS=*/4, /*ROWS=*/8, /*COLS=*/4>(
750
0
          dc, dc_stride, llf, 8 * kBlockDim, scratch, scratch + 8 * 4);
751
0
      break;
752
0
    }
753
0
    case Type::DCT32X64: {
754
0
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
755
0
                        /*LF_ROWS=*/4, /*LF_COLS=*/8, /*ROWS=*/4, /*COLS=*/8>(
756
0
          dc, dc_stride, llf, 8 * kBlockDim, scratch, scratch + 4 * 8);
757
0
      break;
758
0
    }
759
0
    case Type::DCT64X64: {
760
0
      ReinterpretingDCT</*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
761
0
                        /*LF_ROWS=*/8, /*LF_COLS=*/8, /*ROWS=*/8, /*COLS=*/8>(
762
0
          dc, dc_stride, llf, 8 * kBlockDim, scratch, scratch + 8 * 8);
763
0
      break;
764
0
    }
765
0
    case Type::DCT128X64: {
766
0
      ReinterpretingDCT</*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
767
0
                        /*LF_ROWS=*/16, /*LF_COLS=*/8, /*ROWS=*/16, /*COLS=*/8>(
768
0
          dc, dc_stride, llf, 16 * kBlockDim, scratch, scratch + 16 * 8);
769
0
      break;
770
0
    }
771
0
    case Type::DCT64X128: {
772
0
      ReinterpretingDCT</*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
773
0
                        /*LF_ROWS=*/8, /*LF_COLS=*/16, /*ROWS=*/8, /*COLS=*/16>(
774
0
          dc, dc_stride, llf, 16 * kBlockDim, scratch, scratch + 8 * 16);
775
0
      break;
776
0
    }
777
0
    case Type::DCT128X128: {
778
0
      ReinterpretingDCT<
779
0
          /*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
780
0
          /*LF_ROWS=*/16, /*LF_COLS=*/16, /*ROWS=*/16, /*COLS=*/16>(
781
0
          dc, dc_stride, llf, 16 * kBlockDim, scratch, scratch + 16 * 16);
782
0
      break;
783
0
    }
784
0
    case Type::DCT256X128: {
785
0
      ReinterpretingDCT<
786
0
          /*DCT_ROWS=*/32 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
787
0
          /*LF_ROWS=*/32, /*LF_COLS=*/16, /*ROWS=*/32, /*COLS=*/16>(
788
0
          dc, dc_stride, llf, 32 * kBlockDim, scratch, scratch + 32 * 16);
789
0
      break;
790
0
    }
791
0
    case Type::DCT128X256: {
792
0
      ReinterpretingDCT<
793
0
          /*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/32 * kBlockDim,
794
0
          /*LF_ROWS=*/16, /*LF_COLS=*/32, /*ROWS=*/16, /*COLS=*/32>(
795
0
          dc, dc_stride, llf, 32 * kBlockDim, scratch, scratch + 16 * 32);
796
0
      break;
797
0
    }
798
0
    case Type::DCT256X256: {
799
0
      ReinterpretingDCT<
800
0
          /*DCT_ROWS=*/32 * kBlockDim, /*DCT_COLS=*/32 * kBlockDim,
801
0
          /*LF_ROWS=*/32, /*LF_COLS=*/32, /*ROWS=*/32, /*COLS=*/32>(
802
0
          dc, dc_stride, llf, 32 * kBlockDim, scratch, scratch + 32 * 32);
803
0
      break;
804
0
    }
805
16.2k
    case Type::DCT:
806
17.4k
    case Type::DCT2X2:
807
17.4k
    case Type::DCT4X4:
808
18.2k
    case Type::DCT4X8:
809
19.2k
    case Type::DCT8X4:
810
19.3k
    case Type::AFV0:
811
19.3k
    case Type::AFV1:
812
19.7k
    case Type::AFV2:
813
26.5k
    case Type::AFV3:
814
45.3k
    case Type::IDENTITY:
815
45.3k
      llf[0] = dc[0];
816
45.3k
      break;
817
101k
  };
818
101k
}
Unexecuted instantiation: enc_group.cc:jxl::N_SCALAR::(anonymous namespace)::LowestFrequenciesFromDC(jxl::AcStrategyType, float const*, unsigned long, float*, float*)
dec_group.cc:jxl::N_SCALAR::(anonymous namespace)::LowestFrequenciesFromDC(jxl::AcStrategyType, float const*, unsigned long, float*, float*)
Line
Count
Source
694
101k
                                              float* JXL_RESTRICT scratch) {
695
101k
  using Type = AcStrategyType;
696
101k
  HWY_ALIGN float warm_block[4 * 4];
697
101k
  HWY_ALIGN float warm_scratch_space[4 * 4 * 4];
698
101k
  switch (strategy) {
699
444
    case Type::DCT16X8: {
700
444
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/kBlockDim,
701
444
                        /*LF_ROWS=*/2, /*LF_COLS=*/1, /*ROWS=*/2, /*COLS=*/1>(
702
444
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
703
444
      break;
704
0
    }
705
54.5k
    case Type::DCT8X16: {
706
54.5k
      ReinterpretingDCT</*DCT_ROWS=*/kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
707
54.5k
                        /*LF_ROWS=*/1, /*LF_COLS=*/2, /*ROWS=*/1, /*COLS=*/2>(
708
54.5k
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
709
54.5k
      break;
710
0
    }
711
930
    case Type::DCT16X16: {
712
930
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
713
930
                        /*LF_ROWS=*/2, /*LF_COLS=*/2, /*ROWS=*/2, /*COLS=*/2>(
714
930
          dc, dc_stride, llf, 2 * kBlockDim, warm_block, warm_scratch_space);
715
930
      break;
716
0
    }
717
0
    case Type::DCT32X8: {
718
0
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/kBlockDim,
719
0
                        /*LF_ROWS=*/4, /*LF_COLS=*/1, /*ROWS=*/4, /*COLS=*/1>(
720
0
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
721
0
      break;
722
0
    }
723
0
    case Type::DCT8X32: {
724
0
      ReinterpretingDCT</*DCT_ROWS=*/kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
725
0
                        /*LF_ROWS=*/1, /*LF_COLS=*/4, /*ROWS=*/1, /*COLS=*/4>(
726
0
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
727
0
      break;
728
0
    }
729
237
    case Type::DCT32X16: {
730
237
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/2 * kBlockDim,
731
237
                        /*LF_ROWS=*/4, /*LF_COLS=*/2, /*ROWS=*/4, /*COLS=*/2>(
732
237
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
733
237
      break;
734
0
    }
735
123
    case Type::DCT16X32: {
736
123
      ReinterpretingDCT</*DCT_ROWS=*/2 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
737
123
                        /*LF_ROWS=*/2, /*LF_COLS=*/4, /*ROWS=*/2, /*COLS=*/4>(
738
123
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
739
123
      break;
740
0
    }
741
114
    case Type::DCT32X32: {
742
114
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
743
114
                        /*LF_ROWS=*/4, /*LF_COLS=*/4, /*ROWS=*/4, /*COLS=*/4>(
744
114
          dc, dc_stride, llf, 4 * kBlockDim, warm_block, warm_scratch_space);
745
114
      break;
746
0
    }
747
0
    case Type::DCT64X32: {
748
0
      ReinterpretingDCT</*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/4 * kBlockDim,
749
0
                        /*LF_ROWS=*/8, /*LF_COLS=*/4, /*ROWS=*/8, /*COLS=*/4>(
750
0
          dc, dc_stride, llf, 8 * kBlockDim, scratch, scratch + 8 * 4);
751
0
      break;
752
0
    }
753
0
    case Type::DCT32X64: {
754
0
      ReinterpretingDCT</*DCT_ROWS=*/4 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
755
0
                        /*LF_ROWS=*/4, /*LF_COLS=*/8, /*ROWS=*/4, /*COLS=*/8>(
756
0
          dc, dc_stride, llf, 8 * kBlockDim, scratch, scratch + 4 * 8);
757
0
      break;
758
0
    }
759
0
    case Type::DCT64X64: {
760
0
      ReinterpretingDCT</*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
761
0
                        /*LF_ROWS=*/8, /*LF_COLS=*/8, /*ROWS=*/8, /*COLS=*/8>(
762
0
          dc, dc_stride, llf, 8 * kBlockDim, scratch, scratch + 8 * 8);
763
0
      break;
764
0
    }
765
0
    case Type::DCT128X64: {
766
0
      ReinterpretingDCT</*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/8 * kBlockDim,
767
0
                        /*LF_ROWS=*/16, /*LF_COLS=*/8, /*ROWS=*/16, /*COLS=*/8>(
768
0
          dc, dc_stride, llf, 16 * kBlockDim, scratch, scratch + 16 * 8);
769
0
      break;
770
0
    }
771
0
    case Type::DCT64X128: {
772
0
      ReinterpretingDCT</*DCT_ROWS=*/8 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
773
0
                        /*LF_ROWS=*/8, /*LF_COLS=*/16, /*ROWS=*/8, /*COLS=*/16>(
774
0
          dc, dc_stride, llf, 16 * kBlockDim, scratch, scratch + 8 * 16);
775
0
      break;
776
0
    }
777
0
    case Type::DCT128X128: {
778
0
      ReinterpretingDCT<
779
0
          /*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
780
0
          /*LF_ROWS=*/16, /*LF_COLS=*/16, /*ROWS=*/16, /*COLS=*/16>(
781
0
          dc, dc_stride, llf, 16 * kBlockDim, scratch, scratch + 16 * 16);
782
0
      break;
783
0
    }
784
0
    case Type::DCT256X128: {
785
0
      ReinterpretingDCT<
786
0
          /*DCT_ROWS=*/32 * kBlockDim, /*DCT_COLS=*/16 * kBlockDim,
787
0
          /*LF_ROWS=*/32, /*LF_COLS=*/16, /*ROWS=*/32, /*COLS=*/16>(
788
0
          dc, dc_stride, llf, 32 * kBlockDim, scratch, scratch + 32 * 16);
789
0
      break;
790
0
    }
791
0
    case Type::DCT128X256: {
792
0
      ReinterpretingDCT<
793
0
          /*DCT_ROWS=*/16 * kBlockDim, /*DCT_COLS=*/32 * kBlockDim,
794
0
          /*LF_ROWS=*/16, /*LF_COLS=*/32, /*ROWS=*/16, /*COLS=*/32>(
795
0
          dc, dc_stride, llf, 32 * kBlockDim, scratch, scratch + 16 * 32);
796
0
      break;
797
0
    }
798
0
    case Type::DCT256X256: {
799
0
      ReinterpretingDCT<
800
0
          /*DCT_ROWS=*/32 * kBlockDim, /*DCT_COLS=*/32 * kBlockDim,
801
0
          /*LF_ROWS=*/32, /*LF_COLS=*/32, /*ROWS=*/32, /*COLS=*/32>(
802
0
          dc, dc_stride, llf, 32 * kBlockDim, scratch, scratch + 32 * 32);
803
0
      break;
804
0
    }
805
16.2k
    case Type::DCT:
806
17.4k
    case Type::DCT2X2:
807
17.4k
    case Type::DCT4X4:
808
18.2k
    case Type::DCT4X8:
809
19.2k
    case Type::DCT8X4:
810
19.3k
    case Type::AFV0:
811
19.3k
    case Type::AFV1:
812
19.7k
    case Type::AFV2:
813
26.5k
    case Type::AFV3:
814
45.3k
    case Type::IDENTITY:
815
45.3k
      llf[0] = dc[0];
816
45.3k
      break;
817
101k
  };
818
101k
}
Unexecuted instantiation: enc_ac_strategy.cc:jxl::N_SCALAR::(anonymous namespace)::LowestFrequenciesFromDC(jxl::AcStrategyType, float const*, unsigned long, float*, float*)
Unexecuted instantiation: enc_chroma_from_luma.cc:jxl::N_SCALAR::(anonymous namespace)::LowestFrequenciesFromDC(jxl::AcStrategyType, float const*, unsigned long, float*, float*)
819
820
}  // namespace
821
// NOLINTNEXTLINE(google-readability-namespace-comments)
822
}  // namespace HWY_NAMESPACE
823
}  // namespace jxl
824
HWY_AFTER_NAMESPACE();
825
826
#endif  // LIB_JXL_DEC_TRANSFORMS_INL_H_