/src/vlc/contrib/contrib-build/dav1d/src/itx_tmpl.c
Line | Count | Source |
1 | | /* |
2 | | * Copyright © 2018-2019, VideoLAN and dav1d authors |
3 | | * Copyright © 2018-2019, Two Orioles, LLC |
4 | | * All rights reserved. |
5 | | * |
6 | | * Redistribution and use in source and binary forms, with or without |
7 | | * modification, are permitted provided that the following conditions are met: |
8 | | * |
9 | | * 1. Redistributions of source code must retain the above copyright notice, this |
10 | | * list of conditions and the following disclaimer. |
11 | | * |
12 | | * 2. Redistributions in binary form must reproduce the above copyright notice, |
13 | | * this list of conditions and the following disclaimer in the documentation |
14 | | * and/or other materials provided with the distribution. |
15 | | * |
16 | | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
17 | | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
18 | | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
19 | | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR |
20 | | * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
21 | | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
22 | | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
23 | | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
25 | | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | | */ |
27 | | |
28 | | #include "config.h" |
29 | | |
30 | | #include <stddef.h> |
31 | | #include <stdint.h> |
32 | | #include <stdlib.h> |
33 | | #include <string.h> |
34 | | |
35 | | #include "common/attributes.h" |
36 | | #include "common/intops.h" |
37 | | |
38 | | #include "src/itx.h" |
39 | | #include "src/itx_1d.h" |
40 | | #include "src/scan.h" |
41 | | #include "src/tables.h" |
42 | | |
43 | | static NOINLINE void |
44 | | inv_txfm_add_c(pixel *dst, const ptrdiff_t stride, coef *const coeff, |
45 | | const int eob, const /*enum RectTxfmSize*/ int tx, const int shift, |
46 | | const enum TxfmType txtp HIGHBD_DECL_SUFFIX) |
47 | 10.6k | { |
48 | 10.6k | const TxfmInfo *const t_dim = &dav1d_txfm_dimensions[tx]; |
49 | 10.6k | const int w = 4 * t_dim->w, h = 4 * t_dim->h; |
50 | 10.6k | const int has_dconly = txtp == DCT_DCT; |
51 | 10.6k | assert(w >= 4 && w <= 64); |
52 | 10.6k | assert(h >= 4 && h <= 64); |
53 | 10.6k | assert(eob >= 0); |
54 | | |
55 | 10.6k | const int is_rect2 = w * 2 == h || h * 2 == w; |
56 | 10.6k | const int rnd = (1 << shift) >> 1; |
57 | | |
58 | 10.6k | if (eob < has_dconly) { |
59 | 8.20k | int dc = coeff[0]; |
60 | 8.20k | coeff[0] = 0; |
61 | 8.20k | if (is_rect2) |
62 | 319 | dc = (dc * 181 + 128) >> 8; |
63 | 8.20k | dc = (dc * 181 + 128) >> 8; |
64 | 8.20k | dc = (dc + rnd) >> shift; |
65 | 8.20k | dc = (dc * 181 + 128 + 2048) >> 12; |
66 | 295k | for (int y = 0; y < h; y++, dst += PXSTRIDE(stride)) |
67 | 11.1M | for (int x = 0; x < w; x++) |
68 | 10.8M | dst[x] = iclip_pixel(dst[x] + dc); |
69 | 8.20k | return; |
70 | 8.20k | } |
71 | | |
72 | 2.46k | const uint8_t *const txtps = dav1d_tx1d_types[txtp]; |
73 | 2.46k | const itx_1d_fn first_1d_fn = dav1d_tx1d_fns[t_dim->lw][txtps[0]]; |
74 | 2.46k | const itx_1d_fn second_1d_fn = dav1d_tx1d_fns[t_dim->lh][txtps[1]]; |
75 | 2.46k | const int sh = imin(h, 32), sw = imin(w, 32); |
76 | 2.46k | #if BITDEPTH == 8 |
77 | 2.46k | const int row_clip_min = INT16_MIN; |
78 | 2.46k | const int col_clip_min = INT16_MIN; |
79 | | #else |
80 | | const int row_clip_min = (int) ((unsigned) ~bitdepth_max << 7); |
81 | | const int col_clip_min = (int) ((unsigned) ~bitdepth_max << 5); |
82 | | #endif |
83 | 2.46k | const int row_clip_max = ~row_clip_min; |
84 | 2.46k | const int col_clip_max = ~col_clip_min; |
85 | | |
86 | 2.46k | int32_t tmp[64 * 64], *c = tmp; |
87 | 2.46k | int last_nonzero_col; // in first 1d itx |
88 | 2.46k | if (txtps[1] == IDENTITY && txtps[0] != IDENTITY) { |
89 | 0 | last_nonzero_col = imin(sh - 1, eob); |
90 | 2.46k | } else if (txtps[0] == IDENTITY && txtps[1] != IDENTITY) { |
91 | 0 | last_nonzero_col = eob >> (t_dim->lw + 2); |
92 | 2.46k | } else { |
93 | 2.46k | last_nonzero_col = dav1d_last_nonzero_col_from_eob[tx][eob]; |
94 | 2.46k | } |
95 | 2.46k | assert(last_nonzero_col < sh); |
96 | 20.9k | for (int y = 0; y <= last_nonzero_col; y++, c += w) { |
97 | 18.5k | if (is_rect2) |
98 | 178k | for (int x = 0; x < sw; x++) |
99 | 172k | c[x] = (coeff[y + x * sh] * 181 + 128) >> 8; |
100 | 11.6k | else |
101 | 381k | for (int x = 0; x < sw; x++) |
102 | 369k | c[x] = coeff[y + x * sh]; |
103 | 18.5k | first_1d_fn(c, 1, row_clip_min, row_clip_max); |
104 | 18.5k | } |
105 | 2.46k | if (last_nonzero_col + 1 < sh) |
106 | 2.33k | memset(c, 0, sizeof(*c) * (sh - last_nonzero_col - 1) * w); |
107 | | |
108 | 2.46k | memset(coeff, 0, sizeof(*coeff) * sw * sh); |
109 | 2.38M | for (int i = 0; i < w * sh; i++) |
110 | 2.38M | tmp[i] = iclip((tmp[i] + rnd) >> shift, col_clip_min, col_clip_max); |
111 | | |
112 | 83.9k | for (int x = 0; x < w; x++) |
113 | 81.4k | second_1d_fn(&tmp[x], w, col_clip_min, col_clip_max); |
114 | | |
115 | 2.46k | c = tmp; |
116 | 81.0k | for (int y = 0; y < h; y++, dst += PXSTRIDE(stride)) |
117 | 2.79M | for (int x = 0; x < w; x++) |
118 | 2.71M | dst[x] = iclip_pixel(dst[x] + ((*c++ + 8) >> 4)); |
119 | 2.46k | } |
120 | | |
121 | | #define inv_txfm_fn(type1, type2, type, pfx, w, h, shift) \ |
122 | | static void \ |
123 | | inv_txfm_add_##type1##_##type2##_##w##x##h##_c(pixel *dst, \ |
124 | | const ptrdiff_t stride, \ |
125 | | coef *const coeff, \ |
126 | | const int eob \ |
127 | 10.6k | HIGHBD_DECL_SUFFIX) \ |
128 | 10.6k | { \ |
129 | 10.6k | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ |
130 | 10.6k | HIGHBD_TAIL_SUFFIX); \ |
131 | 10.6k | } Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_dct_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_identity_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_dct_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_adst_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_adst_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_adst_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_flipadst_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_dct_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_flipadst_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_flipadst_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_identity_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_dct_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_identity_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_flipadst_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_identity_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_adst_4x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_dct_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_identity_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_dct_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_adst_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_adst_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_adst_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_flipadst_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_dct_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_flipadst_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_flipadst_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_identity_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_dct_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_identity_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_flipadst_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_identity_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_adst_4x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_dct_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_identity_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_dct_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_adst_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_adst_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_adst_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_flipadst_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_dct_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_flipadst_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_flipadst_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_identity_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_dct_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_identity_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_flipadst_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_identity_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_adst_4x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_dct_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_identity_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_dct_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_adst_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_adst_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_adst_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_flipadst_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_dct_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_flipadst_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_flipadst_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_identity_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_dct_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_identity_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_flipadst_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_identity_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_adst_8x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_dct_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_identity_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_dct_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_adst_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_adst_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_adst_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_flipadst_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_dct_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_flipadst_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_flipadst_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_identity_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_dct_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_identity_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_flipadst_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_identity_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_adst_8x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_dct_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_identity_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_dct_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_adst_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_adst_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_adst_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_flipadst_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_dct_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_flipadst_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_flipadst_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_identity_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_dct_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_identity_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_flipadst_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_identity_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_adst_8x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_dct_8x32_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_identity_8x32_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_dct_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_identity_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_dct_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_adst_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_adst_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_adst_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_flipadst_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_dct_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_flipadst_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_flipadst_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_identity_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_dct_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_identity_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_flipadst_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_identity_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_adst_16x4_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_dct_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_identity_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_dct_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_adst_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_adst_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_adst_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_flipadst_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_dct_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_flipadst_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_flipadst_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_identity_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_dct_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_identity_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_flipadst_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_identity_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_adst_16x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_dct_16x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_identity_16x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_dct_16x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_adst_16x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_adst_16x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_adst_16x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_adst_flipadst_16x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_dct_16x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_flipadst_16x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_flipadst_flipadst_16x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_identity_16x16_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_dct_16x16_c itx_tmpl.c:inv_txfm_add_dct_dct_16x32_c Line | Count | Source | 127 | 436 | HIGHBD_DECL_SUFFIX) \ | 128 | 436 | { \ | 129 | 436 | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 436 | HIGHBD_TAIL_SUFFIX); \ | 131 | 436 | } |
Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_identity_16x32_c itx_tmpl.c:inv_txfm_add_dct_dct_16x64_c Line | Count | Source | 127 | 39 | HIGHBD_DECL_SUFFIX) \ | 128 | 39 | { \ | 129 | 39 | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 39 | HIGHBD_TAIL_SUFFIX); \ | 131 | 39 | } |
Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_dct_dct_32x8_c Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_identity_32x8_c itx_tmpl.c:inv_txfm_add_dct_dct_32x16_c Line | Count | Source | 127 | 531 | HIGHBD_DECL_SUFFIX) \ | 128 | 531 | { \ | 129 | 531 | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 531 | HIGHBD_TAIL_SUFFIX); \ | 131 | 531 | } |
Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_identity_32x16_c itx_tmpl.c:inv_txfm_add_dct_dct_32x32_c Line | Count | Source | 127 | 8.56k | HIGHBD_DECL_SUFFIX) \ | 128 | 8.56k | { \ | 129 | 8.56k | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 8.56k | HIGHBD_TAIL_SUFFIX); \ | 131 | 8.56k | } |
Unexecuted instantiation: itx_tmpl.c:inv_txfm_add_identity_identity_32x32_c itx_tmpl.c:inv_txfm_add_dct_dct_32x64_c Line | Count | Source | 127 | 14 | HIGHBD_DECL_SUFFIX) \ | 128 | 14 | { \ | 129 | 14 | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 14 | HIGHBD_TAIL_SUFFIX); \ | 131 | 14 | } |
itx_tmpl.c:inv_txfm_add_dct_dct_64x16_c Line | Count | Source | 127 | 44 | HIGHBD_DECL_SUFFIX) \ | 128 | 44 | { \ | 129 | 44 | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 44 | HIGHBD_TAIL_SUFFIX); \ | 131 | 44 | } |
itx_tmpl.c:inv_txfm_add_dct_dct_64x32_c Line | Count | Source | 127 | 59 | HIGHBD_DECL_SUFFIX) \ | 128 | 59 | { \ | 129 | 59 | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 59 | HIGHBD_TAIL_SUFFIX); \ | 131 | 59 | } |
itx_tmpl.c:inv_txfm_add_dct_dct_64x64_c Line | Count | Source | 127 | 990 | HIGHBD_DECL_SUFFIX) \ | 128 | 990 | { \ | 129 | 990 | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 990 | HIGHBD_TAIL_SUFFIX); \ | 131 | 990 | } |
|
132 | | |
133 | | #define inv_txfm_fn64(pfx, w, h, shift) \ |
134 | | inv_txfm_fn(dct, dct, DCT_DCT, pfx, w, h, shift) |
135 | | |
136 | | #define inv_txfm_fn32(pfx, w, h, shift) \ |
137 | | inv_txfm_fn64(pfx, w, h, shift) \ |
138 | | inv_txfm_fn(identity, identity, IDTX, pfx, w, h, shift) |
139 | | |
140 | | #define inv_txfm_fn16(pfx, w, h, shift) \ |
141 | | inv_txfm_fn32(pfx, w, h, shift) \ |
142 | | inv_txfm_fn(adst, dct, ADST_DCT, pfx, w, h, shift) \ |
143 | | inv_txfm_fn(dct, adst, DCT_ADST, pfx, w, h, shift) \ |
144 | | inv_txfm_fn(adst, adst, ADST_ADST, pfx, w, h, shift) \ |
145 | | inv_txfm_fn(dct, flipadst, DCT_FLIPADST, pfx, w, h, shift) \ |
146 | | inv_txfm_fn(flipadst, dct, FLIPADST_DCT, pfx, w, h, shift) \ |
147 | | inv_txfm_fn(adst, flipadst, ADST_FLIPADST, pfx, w, h, shift) \ |
148 | | inv_txfm_fn(flipadst, adst, FLIPADST_ADST, pfx, w, h, shift) \ |
149 | | inv_txfm_fn(flipadst, flipadst, FLIPADST_FLIPADST, pfx, w, h, shift) \ |
150 | | inv_txfm_fn(identity, dct, H_DCT, pfx, w, h, shift) \ |
151 | | inv_txfm_fn(dct, identity, V_DCT, pfx, w, h, shift) \ |
152 | | |
153 | | #define inv_txfm_fn84(pfx, w, h, shift) \ |
154 | | inv_txfm_fn16(pfx, w, h, shift) \ |
155 | | inv_txfm_fn(identity, flipadst, H_FLIPADST, pfx, w, h, shift) \ |
156 | | inv_txfm_fn(flipadst, identity, V_FLIPADST, pfx, w, h, shift) \ |
157 | | inv_txfm_fn(identity, adst, H_ADST, pfx, w, h, shift) \ |
158 | | inv_txfm_fn(adst, identity, V_ADST, pfx, w, h, shift) \ |
159 | | |
160 | | inv_txfm_fn84( , 4, 4, 0) |
161 | | inv_txfm_fn84(R, 4, 8, 0) |
162 | | inv_txfm_fn84(R, 4, 16, 1) |
163 | | inv_txfm_fn84(R, 8, 4, 0) |
164 | | inv_txfm_fn84( , 8, 8, 1) |
165 | | inv_txfm_fn84(R, 8, 16, 1) |
166 | | inv_txfm_fn32(R, 8, 32, 2) |
167 | | inv_txfm_fn84(R, 16, 4, 1) |
168 | | inv_txfm_fn84(R, 16, 8, 1) |
169 | | inv_txfm_fn16( , 16, 16, 2) |
170 | | inv_txfm_fn32(R, 16, 32, 1) |
171 | | inv_txfm_fn64(R, 16, 64, 2) |
172 | | inv_txfm_fn32(R, 32, 8, 2) |
173 | | inv_txfm_fn32(R, 32, 16, 1) |
174 | | inv_txfm_fn32( , 32, 32, 2) |
175 | | inv_txfm_fn64(R, 32, 64, 1) |
176 | | inv_txfm_fn64(R, 64, 16, 2) |
177 | | inv_txfm_fn64(R, 64, 32, 1) |
178 | | inv_txfm_fn64( , 64, 64, 2) |
179 | | |
180 | | #if !(HAVE_ASM && TRIM_DSP_FUNCTIONS && ( \ |
181 | | ARCH_AARCH64 || \ |
182 | | (ARCH_ARM && (defined(__ARM_NEON) || defined(__APPLE__) || defined(_WIN32))) \ |
183 | | )) |
184 | | static void inv_txfm_add_wht_wht_4x4_c(pixel *dst, const ptrdiff_t stride, |
185 | | coef *const coeff, const int eob |
186 | | HIGHBD_DECL_SUFFIX) |
187 | 0 | { |
188 | 0 | int32_t tmp[4 * 4], *c = tmp; |
189 | 0 | for (int y = 0; y < 4; y++, c += 4) { |
190 | 0 | for (int x = 0; x < 4; x++) |
191 | 0 | c[x] = coeff[y + x * 4] >> 2; |
192 | 0 | dav1d_inv_wht4_1d_c(c, 1); |
193 | 0 | } |
194 | 0 | memset(coeff, 0, sizeof(*coeff) * 4 * 4); |
195 | |
|
196 | 0 | for (int x = 0; x < 4; x++) |
197 | 0 | dav1d_inv_wht4_1d_c(&tmp[x], 4); |
198 | |
|
199 | 0 | c = tmp; |
200 | 0 | for (int y = 0; y < 4; y++, dst += PXSTRIDE(stride)) |
201 | 0 | for (int x = 0; x < 4; x++) |
202 | 0 | dst[x] = iclip_pixel(dst[x] + *c++); |
203 | 0 | } |
204 | | #endif |
205 | | |
206 | | #if HAVE_ASM |
207 | | #if ARCH_AARCH64 || ARCH_ARM |
208 | | #include "src/arm/itx.h" |
209 | | #elif ARCH_LOONGARCH64 |
210 | | #include "src/loongarch/itx.h" |
211 | | #elif ARCH_PPC64LE |
212 | | #include "src/ppc/itx.h" |
213 | | #elif ARCH_RISCV |
214 | | #include "src/riscv/itx.h" |
215 | | #elif ARCH_X86 |
216 | | #include "src/x86/itx.h" |
217 | | #endif |
218 | | #endif |
219 | | |
220 | 1.43k | COLD void bitfn(dav1d_itx_dsp_init)(Dav1dInvTxfmDSPContext *const c, int bpc) { |
221 | 1.43k | #define assign_itx_all_fn64(w, h, pfx) \ |
222 | 27.1k | c->itxfm_add[pfx##TX_##w##X##h][DCT_DCT ] = \ |
223 | 27.1k | inv_txfm_add_dct_dct_##w##x##h##_c |
224 | | |
225 | 1.43k | #define assign_itx_all_fn32(w, h, pfx) \ |
226 | 20.0k | assign_itx_all_fn64(w, h, pfx); \ |
227 | 20.0k | c->itxfm_add[pfx##TX_##w##X##h][IDTX] = \ |
228 | 20.0k | inv_txfm_add_identity_identity_##w##x##h##_c |
229 | | |
230 | 1.43k | #define assign_itx_all_fn16(w, h, pfx) \ |
231 | 12.8k | assign_itx_all_fn32(w, h, pfx); \ |
232 | 12.8k | c->itxfm_add[pfx##TX_##w##X##h][DCT_ADST ] = \ |
233 | 12.8k | inv_txfm_add_adst_dct_##w##x##h##_c; \ |
234 | 12.8k | c->itxfm_add[pfx##TX_##w##X##h][ADST_DCT ] = \ |
235 | 12.8k | inv_txfm_add_dct_adst_##w##x##h##_c; \ |
236 | 12.8k | c->itxfm_add[pfx##TX_##w##X##h][ADST_ADST] = \ |
237 | 12.8k | inv_txfm_add_adst_adst_##w##x##h##_c; \ |
238 | 12.8k | c->itxfm_add[pfx##TX_##w##X##h][ADST_FLIPADST] = \ |
239 | 12.8k | inv_txfm_add_flipadst_adst_##w##x##h##_c; \ |
240 | 12.8k | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_ADST] = \ |
241 | 12.8k | inv_txfm_add_adst_flipadst_##w##x##h##_c; \ |
242 | 12.8k | c->itxfm_add[pfx##TX_##w##X##h][DCT_FLIPADST] = \ |
243 | 12.8k | inv_txfm_add_flipadst_dct_##w##x##h##_c; \ |
244 | 12.8k | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_DCT] = \ |
245 | 12.8k | inv_txfm_add_dct_flipadst_##w##x##h##_c; \ |
246 | 12.8k | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_FLIPADST] = \ |
247 | 12.8k | inv_txfm_add_flipadst_flipadst_##w##x##h##_c; \ |
248 | 12.8k | c->itxfm_add[pfx##TX_##w##X##h][H_DCT] = \ |
249 | 12.8k | inv_txfm_add_dct_identity_##w##x##h##_c; \ |
250 | 12.8k | c->itxfm_add[pfx##TX_##w##X##h][V_DCT] = \ |
251 | 12.8k | inv_txfm_add_identity_dct_##w##x##h##_c |
252 | | |
253 | 1.43k | #define assign_itx_all_fn84(w, h, pfx) \ |
254 | 11.4k | assign_itx_all_fn16(w, h, pfx); \ |
255 | 11.4k | c->itxfm_add[pfx##TX_##w##X##h][H_FLIPADST] = \ |
256 | 11.4k | inv_txfm_add_flipadst_identity_##w##x##h##_c; \ |
257 | 11.4k | c->itxfm_add[pfx##TX_##w##X##h][V_FLIPADST] = \ |
258 | 11.4k | inv_txfm_add_identity_flipadst_##w##x##h##_c; \ |
259 | 11.4k | c->itxfm_add[pfx##TX_##w##X##h][H_ADST] = \ |
260 | 11.4k | inv_txfm_add_adst_identity_##w##x##h##_c; \ |
261 | 11.4k | c->itxfm_add[pfx##TX_##w##X##h][V_ADST] = \ |
262 | 11.4k | inv_txfm_add_identity_adst_##w##x##h##_c; \ |
263 | 1.43k | |
264 | 1.43k | #if !(HAVE_ASM && TRIM_DSP_FUNCTIONS && ( \ |
265 | 1.43k | ARCH_AARCH64 || \ |
266 | 1.43k | (ARCH_ARM && (defined(__ARM_NEON) || defined(__APPLE__) || defined(_WIN32))) \ |
267 | 1.43k | )) |
268 | 1.43k | c->itxfm_add[TX_4X4][WHT_WHT] = inv_txfm_add_wht_wht_4x4_c; |
269 | 1.43k | #endif |
270 | 1.43k | assign_itx_all_fn84( 4, 4, ); |
271 | 1.43k | assign_itx_all_fn84( 4, 8, R); |
272 | 1.43k | assign_itx_all_fn84( 4, 16, R); |
273 | 1.43k | assign_itx_all_fn84( 8, 4, R); |
274 | 1.43k | assign_itx_all_fn84( 8, 8, ); |
275 | 1.43k | assign_itx_all_fn84( 8, 16, R); |
276 | 1.43k | assign_itx_all_fn32( 8, 32, R); |
277 | 1.43k | assign_itx_all_fn84(16, 4, R); |
278 | 1.43k | assign_itx_all_fn84(16, 8, R); |
279 | 1.43k | assign_itx_all_fn16(16, 16, ); |
280 | 1.43k | assign_itx_all_fn32(16, 32, R); |
281 | 1.43k | assign_itx_all_fn64(16, 64, R); |
282 | 1.43k | assign_itx_all_fn32(32, 8, R); |
283 | 1.43k | assign_itx_all_fn32(32, 16, R); |
284 | 1.43k | assign_itx_all_fn32(32, 32, ); |
285 | 1.43k | assign_itx_all_fn64(32, 64, R); |
286 | 1.43k | assign_itx_all_fn64(64, 16, R); |
287 | 1.43k | assign_itx_all_fn64(64, 32, R); |
288 | 1.43k | assign_itx_all_fn64(64, 64, ); |
289 | | |
290 | 1.43k | int all_simd = 0; |
291 | 1.43k | #if HAVE_ASM |
292 | | #if ARCH_AARCH64 || ARCH_ARM |
293 | | itx_dsp_init_arm(c, bpc, &all_simd); |
294 | | #endif |
295 | | #if ARCH_LOONGARCH64 |
296 | | itx_dsp_init_loongarch(c, bpc); |
297 | | #endif |
298 | | #if ARCH_PPC64LE |
299 | | itx_dsp_init_ppc(c, bpc); |
300 | | #endif |
301 | | #if ARCH_RISCV |
302 | | itx_dsp_init_riscv(c, bpc); |
303 | | #endif |
304 | 1.43k | #if ARCH_X86 |
305 | 1.43k | itx_dsp_init_x86(c, bpc, &all_simd); |
306 | 1.43k | #endif |
307 | 1.43k | #endif |
308 | | |
309 | 1.43k | if (!all_simd) |
310 | 145 | dav1d_init_last_nonzero_col_from_eob_tables(); |
311 | 1.43k | } Line | Count | Source | 220 | 699 | COLD void bitfn(dav1d_itx_dsp_init)(Dav1dInvTxfmDSPContext *const c, int bpc) { | 221 | 699 | #define assign_itx_all_fn64(w, h, pfx) \ | 222 | 699 | c->itxfm_add[pfx##TX_##w##X##h][DCT_DCT ] = \ | 223 | 699 | inv_txfm_add_dct_dct_##w##x##h##_c | 224 | | | 225 | 699 | #define assign_itx_all_fn32(w, h, pfx) \ | 226 | 699 | assign_itx_all_fn64(w, h, pfx); \ | 227 | 699 | c->itxfm_add[pfx##TX_##w##X##h][IDTX] = \ | 228 | 699 | inv_txfm_add_identity_identity_##w##x##h##_c | 229 | | | 230 | 699 | #define assign_itx_all_fn16(w, h, pfx) \ | 231 | 699 | assign_itx_all_fn32(w, h, pfx); \ | 232 | 699 | c->itxfm_add[pfx##TX_##w##X##h][DCT_ADST ] = \ | 233 | 699 | inv_txfm_add_adst_dct_##w##x##h##_c; \ | 234 | 699 | c->itxfm_add[pfx##TX_##w##X##h][ADST_DCT ] = \ | 235 | 699 | inv_txfm_add_dct_adst_##w##x##h##_c; \ | 236 | 699 | c->itxfm_add[pfx##TX_##w##X##h][ADST_ADST] = \ | 237 | 699 | inv_txfm_add_adst_adst_##w##x##h##_c; \ | 238 | 699 | c->itxfm_add[pfx##TX_##w##X##h][ADST_FLIPADST] = \ | 239 | 699 | inv_txfm_add_flipadst_adst_##w##x##h##_c; \ | 240 | 699 | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_ADST] = \ | 241 | 699 | inv_txfm_add_adst_flipadst_##w##x##h##_c; \ | 242 | 699 | c->itxfm_add[pfx##TX_##w##X##h][DCT_FLIPADST] = \ | 243 | 699 | inv_txfm_add_flipadst_dct_##w##x##h##_c; \ | 244 | 699 | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_DCT] = \ | 245 | 699 | inv_txfm_add_dct_flipadst_##w##x##h##_c; \ | 246 | 699 | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_FLIPADST] = \ | 247 | 699 | inv_txfm_add_flipadst_flipadst_##w##x##h##_c; \ | 248 | 699 | c->itxfm_add[pfx##TX_##w##X##h][H_DCT] = \ | 249 | 699 | inv_txfm_add_dct_identity_##w##x##h##_c; \ | 250 | 699 | c->itxfm_add[pfx##TX_##w##X##h][V_DCT] = \ | 251 | 699 | inv_txfm_add_identity_dct_##w##x##h##_c | 252 | | | 253 | 699 | #define assign_itx_all_fn84(w, h, pfx) \ | 254 | 699 | assign_itx_all_fn16(w, h, pfx); \ | 255 | 699 | c->itxfm_add[pfx##TX_##w##X##h][H_FLIPADST] = \ | 256 | 699 | inv_txfm_add_flipadst_identity_##w##x##h##_c; \ | 257 | 699 | c->itxfm_add[pfx##TX_##w##X##h][V_FLIPADST] = \ | 258 | 699 | inv_txfm_add_identity_flipadst_##w##x##h##_c; \ | 259 | 699 | c->itxfm_add[pfx##TX_##w##X##h][H_ADST] = \ | 260 | 699 | inv_txfm_add_adst_identity_##w##x##h##_c; \ | 261 | 699 | c->itxfm_add[pfx##TX_##w##X##h][V_ADST] = \ | 262 | 699 | inv_txfm_add_identity_adst_##w##x##h##_c; \ | 263 | 699 | | 264 | 699 | #if !(HAVE_ASM && TRIM_DSP_FUNCTIONS && ( \ | 265 | 699 | ARCH_AARCH64 || \ | 266 | 699 | (ARCH_ARM && (defined(__ARM_NEON) || defined(__APPLE__) || defined(_WIN32))) \ | 267 | 699 | )) | 268 | 699 | c->itxfm_add[TX_4X4][WHT_WHT] = inv_txfm_add_wht_wht_4x4_c; | 269 | 699 | #endif | 270 | 699 | assign_itx_all_fn84( 4, 4, ); | 271 | 699 | assign_itx_all_fn84( 4, 8, R); | 272 | 699 | assign_itx_all_fn84( 4, 16, R); | 273 | 699 | assign_itx_all_fn84( 8, 4, R); | 274 | 699 | assign_itx_all_fn84( 8, 8, ); | 275 | 699 | assign_itx_all_fn84( 8, 16, R); | 276 | 699 | assign_itx_all_fn32( 8, 32, R); | 277 | 699 | assign_itx_all_fn84(16, 4, R); | 278 | 699 | assign_itx_all_fn84(16, 8, R); | 279 | 699 | assign_itx_all_fn16(16, 16, ); | 280 | 699 | assign_itx_all_fn32(16, 32, R); | 281 | 699 | assign_itx_all_fn64(16, 64, R); | 282 | 699 | assign_itx_all_fn32(32, 8, R); | 283 | 699 | assign_itx_all_fn32(32, 16, R); | 284 | 699 | assign_itx_all_fn32(32, 32, ); | 285 | 699 | assign_itx_all_fn64(32, 64, R); | 286 | 699 | assign_itx_all_fn64(64, 16, R); | 287 | 699 | assign_itx_all_fn64(64, 32, R); | 288 | 699 | assign_itx_all_fn64(64, 64, ); | 289 | | | 290 | 699 | int all_simd = 0; | 291 | 699 | #if HAVE_ASM | 292 | | #if ARCH_AARCH64 || ARCH_ARM | 293 | | itx_dsp_init_arm(c, bpc, &all_simd); | 294 | | #endif | 295 | | #if ARCH_LOONGARCH64 | 296 | | itx_dsp_init_loongarch(c, bpc); | 297 | | #endif | 298 | | #if ARCH_PPC64LE | 299 | | itx_dsp_init_ppc(c, bpc); | 300 | | #endif | 301 | | #if ARCH_RISCV | 302 | | itx_dsp_init_riscv(c, bpc); | 303 | | #endif | 304 | 699 | #if ARCH_X86 | 305 | 699 | itx_dsp_init_x86(c, bpc, &all_simd); | 306 | 699 | #endif | 307 | 699 | #endif | 308 | | | 309 | 699 | if (!all_simd) | 310 | 0 | dav1d_init_last_nonzero_col_from_eob_tables(); | 311 | 699 | } |
Line | Count | Source | 220 | 732 | COLD void bitfn(dav1d_itx_dsp_init)(Dav1dInvTxfmDSPContext *const c, int bpc) { | 221 | 732 | #define assign_itx_all_fn64(w, h, pfx) \ | 222 | 732 | c->itxfm_add[pfx##TX_##w##X##h][DCT_DCT ] = \ | 223 | 732 | inv_txfm_add_dct_dct_##w##x##h##_c | 224 | | | 225 | 732 | #define assign_itx_all_fn32(w, h, pfx) \ | 226 | 732 | assign_itx_all_fn64(w, h, pfx); \ | 227 | 732 | c->itxfm_add[pfx##TX_##w##X##h][IDTX] = \ | 228 | 732 | inv_txfm_add_identity_identity_##w##x##h##_c | 229 | | | 230 | 732 | #define assign_itx_all_fn16(w, h, pfx) \ | 231 | 732 | assign_itx_all_fn32(w, h, pfx); \ | 232 | 732 | c->itxfm_add[pfx##TX_##w##X##h][DCT_ADST ] = \ | 233 | 732 | inv_txfm_add_adst_dct_##w##x##h##_c; \ | 234 | 732 | c->itxfm_add[pfx##TX_##w##X##h][ADST_DCT ] = \ | 235 | 732 | inv_txfm_add_dct_adst_##w##x##h##_c; \ | 236 | 732 | c->itxfm_add[pfx##TX_##w##X##h][ADST_ADST] = \ | 237 | 732 | inv_txfm_add_adst_adst_##w##x##h##_c; \ | 238 | 732 | c->itxfm_add[pfx##TX_##w##X##h][ADST_FLIPADST] = \ | 239 | 732 | inv_txfm_add_flipadst_adst_##w##x##h##_c; \ | 240 | 732 | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_ADST] = \ | 241 | 732 | inv_txfm_add_adst_flipadst_##w##x##h##_c; \ | 242 | 732 | c->itxfm_add[pfx##TX_##w##X##h][DCT_FLIPADST] = \ | 243 | 732 | inv_txfm_add_flipadst_dct_##w##x##h##_c; \ | 244 | 732 | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_DCT] = \ | 245 | 732 | inv_txfm_add_dct_flipadst_##w##x##h##_c; \ | 246 | 732 | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_FLIPADST] = \ | 247 | 732 | inv_txfm_add_flipadst_flipadst_##w##x##h##_c; \ | 248 | 732 | c->itxfm_add[pfx##TX_##w##X##h][H_DCT] = \ | 249 | 732 | inv_txfm_add_dct_identity_##w##x##h##_c; \ | 250 | 732 | c->itxfm_add[pfx##TX_##w##X##h][V_DCT] = \ | 251 | 732 | inv_txfm_add_identity_dct_##w##x##h##_c | 252 | | | 253 | 732 | #define assign_itx_all_fn84(w, h, pfx) \ | 254 | 732 | assign_itx_all_fn16(w, h, pfx); \ | 255 | 732 | c->itxfm_add[pfx##TX_##w##X##h][H_FLIPADST] = \ | 256 | 732 | inv_txfm_add_flipadst_identity_##w##x##h##_c; \ | 257 | 732 | c->itxfm_add[pfx##TX_##w##X##h][V_FLIPADST] = \ | 258 | 732 | inv_txfm_add_identity_flipadst_##w##x##h##_c; \ | 259 | 732 | c->itxfm_add[pfx##TX_##w##X##h][H_ADST] = \ | 260 | 732 | inv_txfm_add_adst_identity_##w##x##h##_c; \ | 261 | 732 | c->itxfm_add[pfx##TX_##w##X##h][V_ADST] = \ | 262 | 732 | inv_txfm_add_identity_adst_##w##x##h##_c; \ | 263 | 732 | | 264 | 732 | #if !(HAVE_ASM && TRIM_DSP_FUNCTIONS && ( \ | 265 | 732 | ARCH_AARCH64 || \ | 266 | 732 | (ARCH_ARM && (defined(__ARM_NEON) || defined(__APPLE__) || defined(_WIN32))) \ | 267 | 732 | )) | 268 | 732 | c->itxfm_add[TX_4X4][WHT_WHT] = inv_txfm_add_wht_wht_4x4_c; | 269 | 732 | #endif | 270 | 732 | assign_itx_all_fn84( 4, 4, ); | 271 | 732 | assign_itx_all_fn84( 4, 8, R); | 272 | 732 | assign_itx_all_fn84( 4, 16, R); | 273 | 732 | assign_itx_all_fn84( 8, 4, R); | 274 | 732 | assign_itx_all_fn84( 8, 8, ); | 275 | 732 | assign_itx_all_fn84( 8, 16, R); | 276 | 732 | assign_itx_all_fn32( 8, 32, R); | 277 | 732 | assign_itx_all_fn84(16, 4, R); | 278 | 732 | assign_itx_all_fn84(16, 8, R); | 279 | 732 | assign_itx_all_fn16(16, 16, ); | 280 | 732 | assign_itx_all_fn32(16, 32, R); | 281 | 732 | assign_itx_all_fn64(16, 64, R); | 282 | 732 | assign_itx_all_fn32(32, 8, R); | 283 | 732 | assign_itx_all_fn32(32, 16, R); | 284 | 732 | assign_itx_all_fn32(32, 32, ); | 285 | 732 | assign_itx_all_fn64(32, 64, R); | 286 | 732 | assign_itx_all_fn64(64, 16, R); | 287 | 732 | assign_itx_all_fn64(64, 32, R); | 288 | 732 | assign_itx_all_fn64(64, 64, ); | 289 | | | 290 | 732 | int all_simd = 0; | 291 | 732 | #if HAVE_ASM | 292 | | #if ARCH_AARCH64 || ARCH_ARM | 293 | | itx_dsp_init_arm(c, bpc, &all_simd); | 294 | | #endif | 295 | | #if ARCH_LOONGARCH64 | 296 | | itx_dsp_init_loongarch(c, bpc); | 297 | | #endif | 298 | | #if ARCH_PPC64LE | 299 | | itx_dsp_init_ppc(c, bpc); | 300 | | #endif | 301 | | #if ARCH_RISCV | 302 | | itx_dsp_init_riscv(c, bpc); | 303 | | #endif | 304 | 732 | #if ARCH_X86 | 305 | 732 | itx_dsp_init_x86(c, bpc, &all_simd); | 306 | 732 | #endif | 307 | 732 | #endif | 308 | | | 309 | 732 | if (!all_simd) | 310 | 145 | dav1d_init_last_nonzero_col_from_eob_tables(); | 311 | 732 | } |
|