/src/libavif/ext/dav1d/src/itx_tmpl.c
Line | Count | Source (jump to first uncovered line) |
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 | 274k | { |
48 | 274k | const TxfmInfo *const t_dim = &dav1d_txfm_dimensions[tx]; |
49 | 274k | const int w = 4 * t_dim->w, h = 4 * t_dim->h; |
50 | 274k | const int has_dconly = txtp == DCT_DCT; |
51 | 274k | assert(w >= 4 && w <= 64); |
52 | 274k | assert(h >= 4 && h <= 64); |
53 | 274k | assert(eob >= 0); |
54 | | |
55 | 274k | const int is_rect2 = w * 2 == h || h * 2 == w; |
56 | 274k | const int rnd = (1 << shift) >> 1; |
57 | | |
58 | 274k | if (eob < has_dconly) { |
59 | 79.8k | int dc = coeff[0]; |
60 | 79.8k | coeff[0] = 0; |
61 | 79.8k | if (is_rect2) |
62 | 37.0k | dc = (dc * 181 + 128) >> 8; |
63 | 79.8k | dc = (dc * 181 + 128) >> 8; |
64 | 79.8k | dc = (dc + rnd) >> shift; |
65 | 79.8k | dc = (dc * 181 + 128 + 2048) >> 12; |
66 | 2.48M | for (int y = 0; y < h; y++, dst += PXSTRIDE(stride)) |
67 | 100M | for (int x = 0; x < w; x++) |
68 | 98.0M | dst[x] = iclip_pixel(dst[x] + dc); |
69 | 79.8k | return; |
70 | 79.8k | } |
71 | | |
72 | 194k | const uint8_t *const txtps = dav1d_tx1d_types[txtp]; |
73 | 194k | const itx_1d_fn first_1d_fn = dav1d_tx1d_fns[t_dim->lw][txtps[0]]; |
74 | 194k | const itx_1d_fn second_1d_fn = dav1d_tx1d_fns[t_dim->lh][txtps[1]]; |
75 | 194k | const int sh = imin(h, 32), sw = imin(w, 32); |
76 | 194k | #if BITDEPTH == 8 |
77 | 194k | const int row_clip_min = INT16_MIN; |
78 | 194k | 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 | 194k | const int row_clip_max = ~row_clip_min; |
84 | 194k | const int col_clip_max = ~col_clip_min; |
85 | | |
86 | 194k | int32_t tmp[64 * 64], *c = tmp; |
87 | 194k | int last_nonzero_col; // in first 1d itx |
88 | 194k | if (txtps[1] == IDENTITY && txtps[0] != IDENTITY) { |
89 | 0 | last_nonzero_col = imin(sh - 1, eob); |
90 | 194k | } else if (txtps[0] == IDENTITY && txtps[1] != IDENTITY) { |
91 | 0 | last_nonzero_col = eob >> (t_dim->lw + 2); |
92 | 194k | } else { |
93 | 194k | last_nonzero_col = dav1d_last_nonzero_col_from_eob[tx][eob]; |
94 | 194k | } |
95 | 194k | assert(last_nonzero_col < sh); |
96 | 2.19M | for (int y = 0; y <= last_nonzero_col; y++, c += w) { |
97 | 2.00M | if (is_rect2) |
98 | 30.6M | for (int x = 0; x < sw; x++) |
99 | 29.6M | c[x] = (coeff[y + x * sh] * 181 + 128) >> 8; |
100 | 973k | else |
101 | 31.6M | for (int x = 0; x < sw; x++) |
102 | 30.7M | c[x] = coeff[y + x * sh]; |
103 | 2.00M | first_1d_fn(c, 1, row_clip_min, row_clip_max); |
104 | 2.00M | } |
105 | 194k | if (last_nonzero_col + 1 < sh) |
106 | 164k | memset(c, 0, sizeof(*c) * (sh - last_nonzero_col - 1) * w); |
107 | | |
108 | 194k | memset(coeff, 0, sizeof(*coeff) * sw * sh); |
109 | 218M | for (int i = 0; i < w * sh; i++) |
110 | 218M | tmp[i] = iclip((tmp[i] + rnd) >> shift, col_clip_min, col_clip_max); |
111 | | |
112 | 8.30M | for (int x = 0; x < w; x++) |
113 | 8.11M | second_1d_fn(&tmp[x], w, col_clip_min, col_clip_max); |
114 | | |
115 | 194k | c = tmp; |
116 | 6.43M | for (int y = 0; y < h; y++, dst += PXSTRIDE(stride)) |
117 | 296M | for (int x = 0; x < w; x++) |
118 | 290M | dst[x] = iclip_pixel(dst[x] + ((*c++ + 8) >> 4)); |
119 | 194k | } |
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 | 274k | HIGHBD_DECL_SUFFIX) \ |
128 | 274k | { \ |
129 | 274k | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ |
130 | 274k | HIGHBD_TAIL_SUFFIX); \ |
131 | 274k | } 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 | 13.0k | HIGHBD_DECL_SUFFIX) \ | 128 | 13.0k | { \ | 129 | 13.0k | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 13.0k | HIGHBD_TAIL_SUFFIX); \ | 131 | 13.0k | } |
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 | 1.98k | HIGHBD_DECL_SUFFIX) \ | 128 | 1.98k | { \ | 129 | 1.98k | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 1.98k | HIGHBD_TAIL_SUFFIX); \ | 131 | 1.98k | } |
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 | 99.3k | HIGHBD_DECL_SUFFIX) \ | 128 | 99.3k | { \ | 129 | 99.3k | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 99.3k | HIGHBD_TAIL_SUFFIX); \ | 131 | 99.3k | } |
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 | 75.7k | HIGHBD_DECL_SUFFIX) \ | 128 | 75.7k | { \ | 129 | 75.7k | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 75.7k | HIGHBD_TAIL_SUFFIX); \ | 131 | 75.7k | } |
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 | 2.53k | HIGHBD_DECL_SUFFIX) \ | 128 | 2.53k | { \ | 129 | 2.53k | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 2.53k | HIGHBD_TAIL_SUFFIX); \ | 131 | 2.53k | } |
itx_tmpl.c:inv_txfm_add_dct_dct_64x16_c Line | Count | Source | 127 | 2.47k | HIGHBD_DECL_SUFFIX) \ | 128 | 2.47k | { \ | 129 | 2.47k | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 2.47k | HIGHBD_TAIL_SUFFIX); \ | 131 | 2.47k | } |
itx_tmpl.c:inv_txfm_add_dct_dct_64x32_c Line | Count | Source | 127 | 36.3k | HIGHBD_DECL_SUFFIX) \ | 128 | 36.3k | { \ | 129 | 36.3k | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 36.3k | HIGHBD_TAIL_SUFFIX); \ | 131 | 36.3k | } |
itx_tmpl.c:inv_txfm_add_dct_dct_64x64_c Line | Count | Source | 127 | 42.9k | HIGHBD_DECL_SUFFIX) \ | 128 | 42.9k | { \ | 129 | 42.9k | inv_txfm_add_c(dst, stride, coeff, eob, pfx##TX_##w##X##h, shift, type \ | 130 | 42.9k | HIGHBD_TAIL_SUFFIX); \ | 131 | 42.9k | } |
|
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 | 64.4k | COLD void bitfn(dav1d_itx_dsp_init)(Dav1dInvTxfmDSPContext *const c, int bpc) { |
221 | 64.4k | #define assign_itx_all_fn64(w, h, pfx) \ |
222 | 1.22M | c->itxfm_add[pfx##TX_##w##X##h][DCT_DCT ] = \ |
223 | 1.22M | inv_txfm_add_dct_dct_##w##x##h##_c |
224 | | |
225 | 64.4k | #define assign_itx_all_fn32(w, h, pfx) \ |
226 | 902k | assign_itx_all_fn64(w, h, pfx); \ |
227 | 902k | c->itxfm_add[pfx##TX_##w##X##h][IDTX] = \ |
228 | 902k | inv_txfm_add_identity_identity_##w##x##h##_c |
229 | | |
230 | 64.4k | #define assign_itx_all_fn16(w, h, pfx) \ |
231 | 579k | assign_itx_all_fn32(w, h, pfx); \ |
232 | 579k | c->itxfm_add[pfx##TX_##w##X##h][DCT_ADST ] = \ |
233 | 579k | inv_txfm_add_adst_dct_##w##x##h##_c; \ |
234 | 579k | c->itxfm_add[pfx##TX_##w##X##h][ADST_DCT ] = \ |
235 | 579k | inv_txfm_add_dct_adst_##w##x##h##_c; \ |
236 | 579k | c->itxfm_add[pfx##TX_##w##X##h][ADST_ADST] = \ |
237 | 579k | inv_txfm_add_adst_adst_##w##x##h##_c; \ |
238 | 579k | c->itxfm_add[pfx##TX_##w##X##h][ADST_FLIPADST] = \ |
239 | 579k | inv_txfm_add_flipadst_adst_##w##x##h##_c; \ |
240 | 579k | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_ADST] = \ |
241 | 579k | inv_txfm_add_adst_flipadst_##w##x##h##_c; \ |
242 | 579k | c->itxfm_add[pfx##TX_##w##X##h][DCT_FLIPADST] = \ |
243 | 579k | inv_txfm_add_flipadst_dct_##w##x##h##_c; \ |
244 | 579k | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_DCT] = \ |
245 | 579k | inv_txfm_add_dct_flipadst_##w##x##h##_c; \ |
246 | 579k | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_FLIPADST] = \ |
247 | 579k | inv_txfm_add_flipadst_flipadst_##w##x##h##_c; \ |
248 | 579k | c->itxfm_add[pfx##TX_##w##X##h][H_DCT] = \ |
249 | 579k | inv_txfm_add_dct_identity_##w##x##h##_c; \ |
250 | 579k | c->itxfm_add[pfx##TX_##w##X##h][V_DCT] = \ |
251 | 579k | inv_txfm_add_identity_dct_##w##x##h##_c |
252 | | |
253 | 64.4k | #define assign_itx_all_fn84(w, h, pfx) \ |
254 | 515k | assign_itx_all_fn16(w, h, pfx); \ |
255 | 515k | c->itxfm_add[pfx##TX_##w##X##h][H_FLIPADST] = \ |
256 | 515k | inv_txfm_add_flipadst_identity_##w##x##h##_c; \ |
257 | 515k | c->itxfm_add[pfx##TX_##w##X##h][V_FLIPADST] = \ |
258 | 515k | inv_txfm_add_identity_flipadst_##w##x##h##_c; \ |
259 | 515k | c->itxfm_add[pfx##TX_##w##X##h][H_ADST] = \ |
260 | 515k | inv_txfm_add_adst_identity_##w##x##h##_c; \ |
261 | 515k | c->itxfm_add[pfx##TX_##w##X##h][V_ADST] = \ |
262 | 515k | inv_txfm_add_identity_adst_##w##x##h##_c; \ |
263 | 64.4k | |
264 | 64.4k | #if !(HAVE_ASM && TRIM_DSP_FUNCTIONS && ( \ |
265 | 64.4k | ARCH_AARCH64 || \ |
266 | 64.4k | (ARCH_ARM && (defined(__ARM_NEON) || defined(__APPLE__) || defined(_WIN32))) \ |
267 | 64.4k | )) |
268 | 64.4k | c->itxfm_add[TX_4X4][WHT_WHT] = inv_txfm_add_wht_wht_4x4_c; |
269 | 64.4k | #endif |
270 | 64.4k | assign_itx_all_fn84( 4, 4, ); |
271 | 64.4k | assign_itx_all_fn84( 4, 8, R); |
272 | 64.4k | assign_itx_all_fn84( 4, 16, R); |
273 | 64.4k | assign_itx_all_fn84( 8, 4, R); |
274 | 64.4k | assign_itx_all_fn84( 8, 8, ); |
275 | 64.4k | assign_itx_all_fn84( 8, 16, R); |
276 | 64.4k | assign_itx_all_fn32( 8, 32, R); |
277 | 64.4k | assign_itx_all_fn84(16, 4, R); |
278 | 64.4k | assign_itx_all_fn84(16, 8, R); |
279 | 64.4k | assign_itx_all_fn16(16, 16, ); |
280 | 64.4k | assign_itx_all_fn32(16, 32, R); |
281 | 64.4k | assign_itx_all_fn64(16, 64, R); |
282 | 64.4k | assign_itx_all_fn32(32, 8, R); |
283 | 64.4k | assign_itx_all_fn32(32, 16, R); |
284 | 64.4k | assign_itx_all_fn32(32, 32, ); |
285 | 64.4k | assign_itx_all_fn64(32, 64, R); |
286 | 64.4k | assign_itx_all_fn64(64, 16, R); |
287 | 64.4k | assign_itx_all_fn64(64, 32, R); |
288 | 64.4k | assign_itx_all_fn64(64, 64, ); |
289 | | |
290 | 64.4k | int all_simd = 0; |
291 | 64.4k | #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 | 64.4k | #if ARCH_X86 |
305 | 64.4k | itx_dsp_init_x86(c, bpc, &all_simd); |
306 | 64.4k | #endif |
307 | 64.4k | #endif |
308 | | |
309 | 64.4k | if (!all_simd) |
310 | 14.6k | dav1d_init_last_nonzero_col_from_eob_tables(); |
311 | 64.4k | } Line | Count | Source | 220 | 36.3k | COLD void bitfn(dav1d_itx_dsp_init)(Dav1dInvTxfmDSPContext *const c, int bpc) { | 221 | 36.3k | #define assign_itx_all_fn64(w, h, pfx) \ | 222 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][DCT_DCT ] = \ | 223 | 36.3k | inv_txfm_add_dct_dct_##w##x##h##_c | 224 | | | 225 | 36.3k | #define assign_itx_all_fn32(w, h, pfx) \ | 226 | 36.3k | assign_itx_all_fn64(w, h, pfx); \ | 227 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][IDTX] = \ | 228 | 36.3k | inv_txfm_add_identity_identity_##w##x##h##_c | 229 | | | 230 | 36.3k | #define assign_itx_all_fn16(w, h, pfx) \ | 231 | 36.3k | assign_itx_all_fn32(w, h, pfx); \ | 232 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][DCT_ADST ] = \ | 233 | 36.3k | inv_txfm_add_adst_dct_##w##x##h##_c; \ | 234 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][ADST_DCT ] = \ | 235 | 36.3k | inv_txfm_add_dct_adst_##w##x##h##_c; \ | 236 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][ADST_ADST] = \ | 237 | 36.3k | inv_txfm_add_adst_adst_##w##x##h##_c; \ | 238 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][ADST_FLIPADST] = \ | 239 | 36.3k | inv_txfm_add_flipadst_adst_##w##x##h##_c; \ | 240 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_ADST] = \ | 241 | 36.3k | inv_txfm_add_adst_flipadst_##w##x##h##_c; \ | 242 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][DCT_FLIPADST] = \ | 243 | 36.3k | inv_txfm_add_flipadst_dct_##w##x##h##_c; \ | 244 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_DCT] = \ | 245 | 36.3k | inv_txfm_add_dct_flipadst_##w##x##h##_c; \ | 246 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_FLIPADST] = \ | 247 | 36.3k | inv_txfm_add_flipadst_flipadst_##w##x##h##_c; \ | 248 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][H_DCT] = \ | 249 | 36.3k | inv_txfm_add_dct_identity_##w##x##h##_c; \ | 250 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][V_DCT] = \ | 251 | 36.3k | inv_txfm_add_identity_dct_##w##x##h##_c | 252 | | | 253 | 36.3k | #define assign_itx_all_fn84(w, h, pfx) \ | 254 | 36.3k | assign_itx_all_fn16(w, h, pfx); \ | 255 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][H_FLIPADST] = \ | 256 | 36.3k | inv_txfm_add_flipadst_identity_##w##x##h##_c; \ | 257 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][V_FLIPADST] = \ | 258 | 36.3k | inv_txfm_add_identity_flipadst_##w##x##h##_c; \ | 259 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][H_ADST] = \ | 260 | 36.3k | inv_txfm_add_adst_identity_##w##x##h##_c; \ | 261 | 36.3k | c->itxfm_add[pfx##TX_##w##X##h][V_ADST] = \ | 262 | 36.3k | inv_txfm_add_identity_adst_##w##x##h##_c; \ | 263 | 36.3k | | 264 | 36.3k | #if !(HAVE_ASM && TRIM_DSP_FUNCTIONS && ( \ | 265 | 36.3k | ARCH_AARCH64 || \ | 266 | 36.3k | (ARCH_ARM && (defined(__ARM_NEON) || defined(__APPLE__) || defined(_WIN32))) \ | 267 | 36.3k | )) | 268 | 36.3k | c->itxfm_add[TX_4X4][WHT_WHT] = inv_txfm_add_wht_wht_4x4_c; | 269 | 36.3k | #endif | 270 | 36.3k | assign_itx_all_fn84( 4, 4, ); | 271 | 36.3k | assign_itx_all_fn84( 4, 8, R); | 272 | 36.3k | assign_itx_all_fn84( 4, 16, R); | 273 | 36.3k | assign_itx_all_fn84( 8, 4, R); | 274 | 36.3k | assign_itx_all_fn84( 8, 8, ); | 275 | 36.3k | assign_itx_all_fn84( 8, 16, R); | 276 | 36.3k | assign_itx_all_fn32( 8, 32, R); | 277 | 36.3k | assign_itx_all_fn84(16, 4, R); | 278 | 36.3k | assign_itx_all_fn84(16, 8, R); | 279 | 36.3k | assign_itx_all_fn16(16, 16, ); | 280 | 36.3k | assign_itx_all_fn32(16, 32, R); | 281 | 36.3k | assign_itx_all_fn64(16, 64, R); | 282 | 36.3k | assign_itx_all_fn32(32, 8, R); | 283 | 36.3k | assign_itx_all_fn32(32, 16, R); | 284 | 36.3k | assign_itx_all_fn32(32, 32, ); | 285 | 36.3k | assign_itx_all_fn64(32, 64, R); | 286 | 36.3k | assign_itx_all_fn64(64, 16, R); | 287 | 36.3k | assign_itx_all_fn64(64, 32, R); | 288 | 36.3k | assign_itx_all_fn64(64, 64, ); | 289 | | | 290 | 36.3k | int all_simd = 0; | 291 | 36.3k | #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 | 36.3k | #if ARCH_X86 | 305 | 36.3k | itx_dsp_init_x86(c, bpc, &all_simd); | 306 | 36.3k | #endif | 307 | 36.3k | #endif | 308 | | | 309 | 36.3k | if (!all_simd) | 310 | 0 | dav1d_init_last_nonzero_col_from_eob_tables(); | 311 | 36.3k | } |
Line | Count | Source | 220 | 28.0k | COLD void bitfn(dav1d_itx_dsp_init)(Dav1dInvTxfmDSPContext *const c, int bpc) { | 221 | 28.0k | #define assign_itx_all_fn64(w, h, pfx) \ | 222 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][DCT_DCT ] = \ | 223 | 28.0k | inv_txfm_add_dct_dct_##w##x##h##_c | 224 | | | 225 | 28.0k | #define assign_itx_all_fn32(w, h, pfx) \ | 226 | 28.0k | assign_itx_all_fn64(w, h, pfx); \ | 227 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][IDTX] = \ | 228 | 28.0k | inv_txfm_add_identity_identity_##w##x##h##_c | 229 | | | 230 | 28.0k | #define assign_itx_all_fn16(w, h, pfx) \ | 231 | 28.0k | assign_itx_all_fn32(w, h, pfx); \ | 232 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][DCT_ADST ] = \ | 233 | 28.0k | inv_txfm_add_adst_dct_##w##x##h##_c; \ | 234 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][ADST_DCT ] = \ | 235 | 28.0k | inv_txfm_add_dct_adst_##w##x##h##_c; \ | 236 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][ADST_ADST] = \ | 237 | 28.0k | inv_txfm_add_adst_adst_##w##x##h##_c; \ | 238 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][ADST_FLIPADST] = \ | 239 | 28.0k | inv_txfm_add_flipadst_adst_##w##x##h##_c; \ | 240 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_ADST] = \ | 241 | 28.0k | inv_txfm_add_adst_flipadst_##w##x##h##_c; \ | 242 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][DCT_FLIPADST] = \ | 243 | 28.0k | inv_txfm_add_flipadst_dct_##w##x##h##_c; \ | 244 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_DCT] = \ | 245 | 28.0k | inv_txfm_add_dct_flipadst_##w##x##h##_c; \ | 246 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][FLIPADST_FLIPADST] = \ | 247 | 28.0k | inv_txfm_add_flipadst_flipadst_##w##x##h##_c; \ | 248 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][H_DCT] = \ | 249 | 28.0k | inv_txfm_add_dct_identity_##w##x##h##_c; \ | 250 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][V_DCT] = \ | 251 | 28.0k | inv_txfm_add_identity_dct_##w##x##h##_c | 252 | | | 253 | 28.0k | #define assign_itx_all_fn84(w, h, pfx) \ | 254 | 28.0k | assign_itx_all_fn16(w, h, pfx); \ | 255 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][H_FLIPADST] = \ | 256 | 28.0k | inv_txfm_add_flipadst_identity_##w##x##h##_c; \ | 257 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][V_FLIPADST] = \ | 258 | 28.0k | inv_txfm_add_identity_flipadst_##w##x##h##_c; \ | 259 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][H_ADST] = \ | 260 | 28.0k | inv_txfm_add_adst_identity_##w##x##h##_c; \ | 261 | 28.0k | c->itxfm_add[pfx##TX_##w##X##h][V_ADST] = \ | 262 | 28.0k | inv_txfm_add_identity_adst_##w##x##h##_c; \ | 263 | 28.0k | | 264 | 28.0k | #if !(HAVE_ASM && TRIM_DSP_FUNCTIONS && ( \ | 265 | 28.0k | ARCH_AARCH64 || \ | 266 | 28.0k | (ARCH_ARM && (defined(__ARM_NEON) || defined(__APPLE__) || defined(_WIN32))) \ | 267 | 28.0k | )) | 268 | 28.0k | c->itxfm_add[TX_4X4][WHT_WHT] = inv_txfm_add_wht_wht_4x4_c; | 269 | 28.0k | #endif | 270 | 28.0k | assign_itx_all_fn84( 4, 4, ); | 271 | 28.0k | assign_itx_all_fn84( 4, 8, R); | 272 | 28.0k | assign_itx_all_fn84( 4, 16, R); | 273 | 28.0k | assign_itx_all_fn84( 8, 4, R); | 274 | 28.0k | assign_itx_all_fn84( 8, 8, ); | 275 | 28.0k | assign_itx_all_fn84( 8, 16, R); | 276 | 28.0k | assign_itx_all_fn32( 8, 32, R); | 277 | 28.0k | assign_itx_all_fn84(16, 4, R); | 278 | 28.0k | assign_itx_all_fn84(16, 8, R); | 279 | 28.0k | assign_itx_all_fn16(16, 16, ); | 280 | 28.0k | assign_itx_all_fn32(16, 32, R); | 281 | 28.0k | assign_itx_all_fn64(16, 64, R); | 282 | 28.0k | assign_itx_all_fn32(32, 8, R); | 283 | 28.0k | assign_itx_all_fn32(32, 16, R); | 284 | 28.0k | assign_itx_all_fn32(32, 32, ); | 285 | 28.0k | assign_itx_all_fn64(32, 64, R); | 286 | 28.0k | assign_itx_all_fn64(64, 16, R); | 287 | 28.0k | assign_itx_all_fn64(64, 32, R); | 288 | 28.0k | assign_itx_all_fn64(64, 64, ); | 289 | | | 290 | 28.0k | int all_simd = 0; | 291 | 28.0k | #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 | 28.0k | #if ARCH_X86 | 305 | 28.0k | itx_dsp_init_x86(c, bpc, &all_simd); | 306 | 28.0k | #endif | 307 | 28.0k | #endif | 308 | | | 309 | 28.0k | if (!all_simd) | 310 | 14.6k | dav1d_init_last_nonzero_col_from_eob_tables(); | 311 | 28.0k | } |
|