Coverage Report

Created: 2026-09-14 07:15

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