Coverage Report

Created: 2025-09-08 07:52

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