Coverage Report

Created: 2026-05-16 06:41

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/svt-av1/Source/Lib/Codec/intra_prediction.c
Line
Count
Source
1
/*
2
* Copyright(c) 2019 Intel Corporation
3
* Copyright (c) 2016, Alliance for Open Media. All rights reserved
4
*
5
* This source code is subject to the terms of the BSD 2 Clause License and
6
* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
7
* was not distributed with this source code in the LICENSE file, you can
8
* obtain it at https://www.aomedia.org/license/software-license. If the Alliance for Open
9
* Media Patent License 1.0 was not distributed with this source code in the
10
* PATENTS file, you can obtain it at https://www.aomedia.org/license/patent-license.
11
*/
12
13
#include <stdlib.h>
14
#include <string.h>
15
16
#include "definitions.h"
17
#include "intra_prediction.h"
18
#include "md_process.h"
19
#include "common_dsp_rtcd.h"
20
21
// clang-format off
22
// Weights are quadratic from '1' to '1 / BlockSize', scaled by
23
// 2^sm_weight_log2_scale.
24
const int32_t sm_weight_log2_scale = 8;
25
const uint8_t sm_weight_arrays[2 * MAX_BLOCK_DIM] = {
26
    // Unused, because we always offset by bs, which is at least 2.
27
    0, 0,
28
    // bs = 2
29
    255, 128,
30
    // bs = 4
31
    255, 149, 85, 64,
32
    // bs = 8
33
    255, 197, 146, 105, 73, 50, 37, 32,
34
    // bs = 16
35
    255, 225, 196, 170, 145, 123, 102, 84, 68, 54, 43, 33, 26, 20, 17, 16,
36
    // bs = 32
37
    255, 240, 225, 210, 196, 182, 169, 157, 145, 133, 122, 111, 101, 92, 83, 74,
38
    66, 59, 52, 45, 39, 34, 29, 25, 21, 17, 14, 12, 10, 9, 8, 8,
39
    // bs = 64
40
    255, 248, 240, 233, 225, 218, 210, 203, 196, 189, 182, 176, 169, 163, 156,
41
    150, 144, 138, 133, 127, 121, 116, 111, 106, 101, 96, 91, 86, 82, 77, 73, 69,
42
    65, 61, 57, 54, 50, 47, 44, 41, 38, 35, 32, 29, 27, 25, 22, 20, 18, 16, 15,
43
    13, 12, 10, 9, 8, 7, 6, 6, 5, 5, 4, 4, 4,
44
};
45
46
DECLARE_ALIGNED(32, uint8_t, base_mask[33][32]) = {
47
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
48
    {0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
49
    {0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
50
    {0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
51
    {0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
52
    {0xff, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
53
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
54
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0,
55
     0,    0,    0,    0,    0,    0,    0,    0, 0, 0, 0, 0, 0, 0, 0, 0},
56
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, 0,
57
     0,    0,    0,    0,    0,    0,    0,    0,    0, 0, 0, 0, 0, 0, 0, 0},
58
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0,
59
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 0, 0, 0, 0, 0, 0},
60
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0, 0,
61
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 0, 0, 0, 0, 0},
62
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0, 0,
63
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 0, 0, 0, 0},
64
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0, 0, 0,
65
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 0, 0, 0},
66
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0, 0,
67
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 0, 0},
68
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0,
69
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 0},
70
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,
71
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0},
72
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
73
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0},
74
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
75
     0xff, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0},
76
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
77
     0xff, 0xff, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0},
78
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
79
     0xff, 0xff, 0xff, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0},
80
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
81
     0xff, 0xff, 0xff, 0xff, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0},
82
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
83
     0xff, 0xff, 0xff, 0xff, 0xff, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0},
84
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
85
     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,    0,    0,    0,    0,    0,    0,    0,    0,    0},
86
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
87
     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,    0,    0,    0,    0,    0,    0,    0,    0},
88
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
89
     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,    0,    0,    0,    0,    0,    0,    0},
90
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
91
     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,    0,    0,    0,    0,    0,    0},
92
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
93
     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,    0,    0,    0,    0,    0},
94
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
95
     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,    0,    0,    0,    0},
96
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
97
     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,    0,    0,    0},
98
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
99
     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,    0,    0},
100
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
101
     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,    0},
102
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
103
     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0},
104
    {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
105
     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
106
};
107
108
DECLARE_ALIGNED(16, uint8_t, even_odd_mask_x[8][16]) = {{0, 2, 4, 6, 8, 10, 12, 14, 1, 3, 5, 7, 9, 11, 13, 15},
109
                                                        {0, 1, 3, 5, 7, 9, 11, 13, 0, 2, 4, 6, 8, 10, 12, 14},
110
                                                        {0, 0, 2, 4, 6, 8, 10, 12, 0, 0, 3, 5, 7, 9, 11, 13},
111
                                                        {0, 0, 0, 3, 5, 7, 9, 11, 0, 0, 0, 4, 6, 8, 10, 12},
112
                                                        {0, 0, 0, 0, 4, 6, 8, 10, 0, 0, 0, 0, 5, 7, 9, 11},
113
                                                        {0, 0, 0, 0, 0, 5, 7, 9, 0, 0, 0, 0, 0, 6, 8, 10},
114
                                                        {0, 0, 0, 0, 0, 0, 6, 8, 0, 0, 0, 0, 0, 0, 7, 9},
115
                                                        {0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8}};
116
// clang-format on
117
118
// Some basic checks on weights for smooth predictor.
119
#define sm_weights_sanity_checks(weights_w, weights_h, weights_scale, pred_scale) \
120
0
    do {                                                                          \
121
0
        assert(weights_w[0] < weights_scale);                                     \
122
0
        assert(weights_h[0] < weights_scale);                                     \
123
0
        assert(weights_scale - weights_w[bw - 1] < weights_scale);                \
124
0
        assert(weights_scale - weights_h[bh - 1] < weights_scale);                \
125
0
        assert(pred_scale < 31);                                                  \
126
0
    } while (0) // ensures no overflow when calculating predictor.
127
128
0
int svt_aom_is_smooth(const BlockModeInfo* block_mi, int plane) {
129
0
    if (plane == 0) {
130
0
        const PredictionMode mode = block_mi->mode;
131
0
        return (mode == SMOOTH_PRED || mode == SMOOTH_V_PRED || mode == SMOOTH_H_PRED);
132
0
    } else {
133
        // uv_mode is not set for inter blocks, so need to explicitly
134
        // detect that case.
135
0
        if (is_inter_block(block_mi)) {
136
0
            return 0;
137
0
        }
138
139
0
        const UvPredictionMode uv_mode = block_mi->uv_mode;
140
0
        return (uv_mode == UV_SMOOTH_PRED || uv_mode == UV_SMOOTH_V_PRED || uv_mode == UV_SMOOTH_H_PRED);
141
0
    }
142
0
}
143
144
0
int32_t svt_aom_use_intra_edge_upsample(int32_t bs0, int32_t bs1, int32_t delta, int32_t type) {
145
0
    const int32_t d      = abs(delta);
146
0
    const int32_t blk_wh = bs0 + bs1;
147
0
    if (d <= 0 || d >= 40) {
148
0
        return 0;
149
0
    }
150
0
    return type ? (blk_wh <= 8) : (blk_wh <= 16);
151
0
}
152
153
#define INTRA_EDGE_FILT 3
154
0
#define INTRA_EDGE_TAPS 5
155
156
0
void svt_av1_filter_intra_edge_c(uint8_t* p, int32_t sz, int32_t strength) {
157
0
    if (!strength) {
158
0
        return;
159
0
    }
160
161
0
    static const int32_t kernel[INTRA_EDGE_FILT][INTRA_EDGE_TAPS] = {{0, 4, 8, 4, 0}, {0, 5, 6, 5, 0}, {2, 4, 4, 4, 2}};
162
163
0
    const int32_t filt = strength - 1;
164
0
    uint8_t       edge[129];
165
166
0
    svt_memcpy(edge, p, sz * sizeof(*p));
167
0
    for (int32_t i = 1; i < sz; i++) {
168
0
        int32_t s = 0;
169
0
        for (int32_t j = 0; j < INTRA_EDGE_TAPS; j++) {
170
0
            int32_t k = i - 2 + j;
171
0
            k         = (k < 0) ? 0 : k;
172
0
            k         = (k > sz - 1) ? sz - 1 : k;
173
0
            s += edge[k] * kernel[filt][j];
174
0
        }
175
0
        s    = (s + 8) >> 4;
176
0
        p[i] = (uint8_t)s;
177
0
    }
178
0
}
179
180
0
int32_t svt_aom_intra_edge_filter_strength(int32_t bs0, int32_t bs1, int32_t delta, int32_t type) {
181
0
    const int32_t d        = abs(delta);
182
0
    int32_t       strength = 0;
183
184
0
    const int32_t blk_wh = bs0 + bs1;
185
0
    if (type == 0) {
186
0
        if (blk_wh <= 8) {
187
0
            if (d >= 56) {
188
0
                strength = 1;
189
0
            }
190
0
        } else if (blk_wh <= 12) {
191
0
            if (d >= 40) {
192
0
                strength = 1;
193
0
            }
194
0
        } else if (blk_wh <= 16) {
195
0
            if (d >= 40) {
196
0
                strength = 1;
197
0
            }
198
0
        } else if (blk_wh <= 24) {
199
0
            if (d >= 8) {
200
0
                strength = 1;
201
0
            }
202
0
            if (d >= 16) {
203
0
                strength = 2;
204
0
            }
205
0
            if (d >= 32) {
206
0
                strength = 3;
207
0
            }
208
0
        } else if (blk_wh <= 32) {
209
0
            if (d >= 1) {
210
0
                strength = 1;
211
0
            }
212
0
            if (d >= 4) {
213
0
                strength = 2;
214
0
            }
215
0
            if (d >= 32) {
216
0
                strength = 3;
217
0
            }
218
0
        } else {
219
0
            if (d >= 1) {
220
0
                strength = 3;
221
0
            }
222
0
        }
223
0
    } else {
224
0
        if (blk_wh <= 8) {
225
0
            if (d >= 40) {
226
0
                strength = 1;
227
0
            }
228
0
            if (d >= 64) {
229
0
                strength = 2;
230
0
            }
231
0
        } else if (blk_wh <= 16) {
232
0
            if (d >= 20) {
233
0
                strength = 1;
234
0
            }
235
0
            if (d >= 48) {
236
0
                strength = 2;
237
0
            }
238
0
        } else if (blk_wh <= 24) {
239
0
            if (d >= 4) {
240
0
                strength = 3;
241
0
            }
242
0
        } else {
243
0
            if (d >= 1) {
244
0
                strength = 3;
245
0
            }
246
0
        }
247
0
    }
248
0
    return strength;
249
0
}
250
251
// clang-format off
252
static const uint16_t eb_dr_intra_derivative[90] = {
253
    // More evenly spread out angles and limited to 10-bit
254
    // Values that are 0 will never be used
255
    //                    Approx angle
256
    0,    0, 0,        //
257
    1023, 0, 0,        // 3, ...
258
    547,  0, 0,        // 6, ...
259
    372,  0, 0, 0, 0,  // 9, ...
260
    273,  0, 0,        // 14, ...
261
    215,  0, 0,        // 17, ...
262
    178,  0, 0,        // 20, ...
263
    151,  0, 0,        // 23, ... (113 & 203 are base angles)
264
    132,  0, 0,        // 26, ...
265
    116,  0, 0,        // 29, ...
266
    102,  0, 0, 0,     // 32, ...
267
    90,   0, 0,        // 36, ...
268
    80,   0, 0,        // 39, ...
269
    71,   0, 0,        // 42, ...
270
    64,   0, 0,        // 45, ... (45 & 135 are base angles)
271
    57,   0, 0,        // 48, ...
272
    51,   0, 0,        // 51, ...
273
    45,   0, 0, 0,     // 54, ...
274
    40,   0, 0,        // 58, ...
275
    35,   0, 0,        // 61, ...
276
    31,   0, 0,        // 64, ...
277
    27,   0, 0,        // 67, ... (67 & 157 are base angles)
278
    23,   0, 0,        // 70, ...
279
    19,   0, 0,        // 73, ...
280
    15,   0, 0, 0, 0,  // 76, ...
281
    11,   0, 0,        // 81, ...
282
    7,    0, 0,        // 84, ...
283
    3,    0, 0,        // 87, ...
284
};
285
// clang-format on
286
287
// Get the shift (up-scaled by 256) in Y w.r.t a unit change in X.
288
// If angle > 0 && angle < 90, dy = 1;
289
// If angle > 90 && angle < 180, dy = (int32_t)(256 * t);
290
// If angle > 180 && angle < 270, dy = -((int32_t)(256 * t));
291
292
0
#define divide_round(value, bits) (((value) + (1 << ((bits) - 1))) >> (bits))
293
294
0
static INLINE uint16_t get_dy(int32_t angle) {
295
0
    if (angle > 90 && angle < 180) {
296
0
        return eb_dr_intra_derivative[angle - 90];
297
0
    } else if (angle > 180 && angle < 270) {
298
0
        return eb_dr_intra_derivative[270 - angle];
299
0
    } else {
300
        // In this case, we are not really going to use dy. We may return any value.
301
0
        return 1;
302
0
    }
303
0
}
304
305
// Get the shift (up-scaled by 256) in X w.r.t a unit change in Y.
306
// If angle > 0 && angle < 90, dx = -((int32_t)(256 / t));
307
// If angle > 90 && angle < 180, dx = (int32_t)(256 / t);
308
// If angle > 180 && angle < 270, dx = 1;
309
0
static INLINE uint16_t get_dx(int32_t angle) {
310
0
    if (angle > 0 && angle < 90) {
311
0
        return eb_dr_intra_derivative[angle];
312
0
    } else if (angle > 90 && angle < 180) {
313
0
        return eb_dr_intra_derivative[180 - angle];
314
0
    } else {
315
        // In this case, we are not really going to use dx. We may return any value.
316
0
        return 1;
317
0
    }
318
0
}
319
320
// Directional prediction, zone 3: 180 < angle < 270
321
void svt_av1_dr_prediction_z3_c(uint8_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint8_t* above,
322
0
                                const uint8_t* left, int32_t upsample_left, int32_t dx, int32_t dy) {
323
0
    (void)above;
324
0
    (void)dx;
325
326
0
    assert(dx == 1);
327
0
    assert(dy > 0);
328
329
0
    const int32_t max_base_y = (bw + bh - 1) << upsample_left;
330
0
    const int32_t frac_bits  = 6 - upsample_left;
331
0
    const int32_t base_inc   = 1 << upsample_left;
332
0
    for (int32_t c = 0, y = dy; c < bw; ++c, y += dy) {
333
0
        int32_t base = y >> frac_bits, shift = ((y << upsample_left) & 0x3F) >> 1;
334
335
0
        for (int32_t r = 0; r < bh; ++r, base += base_inc) {
336
0
            if (base < max_base_y) {
337
0
                int32_t val;
338
0
                val                 = left[base] * (32 - shift) + left[base + 1] * shift;
339
0
                val                 = ROUND_POWER_OF_TWO(val, 5);
340
0
                dst[r * stride + c] = (uint8_t)clip_pixel_highbd(val, 8);
341
0
            } else {
342
0
                for (; r < bh; ++r) {
343
0
                    dst[r * stride + c] = left[max_base_y];
344
0
                }
345
0
                break;
346
0
            }
347
0
        }
348
0
    }
349
0
}
350
351
void svt_av1_dr_prediction_z1_c(uint8_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint8_t* above,
352
0
                                const uint8_t* left, int32_t upsample_above, int32_t dx, int32_t dy) {
353
0
    (void)left;
354
0
    (void)dy;
355
0
    assert(dy == 1);
356
0
    assert(dx > 0);
357
358
0
    const int32_t max_base_x = ((bw + bh) - 1) << upsample_above;
359
0
    const int32_t frac_bits  = 6 - upsample_above;
360
0
    const int32_t base_inc   = 1 << upsample_above;
361
0
    for (int32_t r = 0, x = dx; r < bh; ++r, dst += stride, x += dx) {
362
0
        int32_t base = x >> frac_bits, shift = ((x << upsample_above) & 0x3F) >> 1;
363
364
0
        if (base >= max_base_x) {
365
0
            for (int32_t i = r; i < bh; ++i) {
366
0
                memset(dst, above[max_base_x], bw * sizeof(dst[0]));
367
0
                dst += stride;
368
0
            }
369
0
            return;
370
0
        }
371
372
0
        for (int32_t c = 0; c < bw; ++c, base += base_inc) {
373
0
            if (base < max_base_x) {
374
0
                int32_t val;
375
0
                val    = above[base] * (32 - shift) + above[base + 1] * shift;
376
0
                val    = ROUND_POWER_OF_TWO(val, 5);
377
0
                dst[c] = (uint8_t)clip_pixel_highbd(val, 8);
378
0
            } else {
379
0
                dst[c] = above[max_base_x];
380
0
            }
381
0
        }
382
0
    }
383
0
}
384
385
// Directional prediction, zone 2: 90 < angle < 180
386
void svt_av1_dr_prediction_z2_c(uint8_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint8_t* above,
387
                                const uint8_t* left, int32_t upsample_above, int32_t upsample_left, int32_t dx,
388
0
                                int32_t dy) {
389
0
    assert(dx > 0);
390
0
    assert(dy > 0);
391
392
0
    const int32_t min_base_x  = -(1 << upsample_above);
393
0
    const int32_t frac_bits_x = 6 - upsample_above;
394
0
    const int32_t frac_bits_y = 6 - upsample_left;
395
0
    const int32_t base_inc_x  = 1 << upsample_above;
396
0
    for (int32_t r = 0, x = -dx; r < bh; ++r, x -= dx, dst += stride) {
397
0
        int32_t val;
398
0
        int32_t base1 = x >> frac_bits_x;
399
0
        int32_t y     = (r << 6) - dy;
400
0
        for (int32_t c = 0; c < bw; ++c, base1 += base_inc_x, y -= dy) {
401
0
            if (base1 >= min_base_x) {
402
0
                int32_t shift1 = ((x * (1 << upsample_above)) & 0x3F) >> 1;
403
0
                val            = above[base1] * (32 - shift1) + above[base1 + 1] * shift1;
404
0
                val            = ROUND_POWER_OF_TWO(val, 5);
405
0
            } else {
406
0
                int32_t base2 = y >> frac_bits_y;
407
0
                assert(base2 >= -(1 << upsample_left));
408
0
                int32_t shift2 = ((y * (1 << upsample_left)) & 0x3F) >> 1;
409
0
                val            = left[base2] * (32 - shift2) + left[base2 + 1] * shift2;
410
0
                val            = ROUND_POWER_OF_TWO(val, 5);
411
0
            }
412
0
            dst[c] = (uint8_t)clip_pixel_highbd(val, 8);
413
0
        }
414
0
    }
415
0
}
416
417
/************************************************************************************************
418
* svt_cfl_luma_subsampling_420_lbd_c
419
* Subsample luma samples to match chroma size. Low bit depth and C
420
************************************************************************************************/
421
void svt_cfl_luma_subsampling_420_lbd_c(const uint8_t* input, int32_t input_stride, int16_t* output_q3, int32_t width,
422
0
                                        int32_t height) {
423
0
    for (int32_t j = 0; j < height; j += 2) {
424
0
        for (int32_t i = 0; i < width; i += 2) {
425
0
            const int32_t bot = i + input_stride;
426
0
            output_q3[i >> 1] = (input[i] + input[i + 1] + input[bot] + input[bot + 1]) << 1;
427
0
        }
428
0
        input += input_stride << 1;
429
0
        output_q3 += CFL_BUF_LINE;
430
0
    }
431
0
}
432
433
/************************************************************************************************
434
* svt_cfl_luma_subsampling_420_hbd_c
435
* Subsample luma samples to match chroma size. High bit depth and C
436
************************************************************************************************/
437
void svt_cfl_luma_subsampling_420_hbd_c(const uint16_t* input, int32_t input_stride, int16_t* output_q3, int32_t width,
438
0
                                        int32_t height) {
439
0
    for (int32_t j = 0; j < height; j += 2, input += input_stride << 1, output_q3 += CFL_BUF_LINE) {
440
0
        for (int32_t i = 0; i < width; i += 2) {
441
0
            const int32_t bot = i + input_stride;
442
0
            output_q3[i >> 1] = (input[i] + input[i + 1] + input[bot] + input[bot + 1]) << 1;
443
0
        }
444
0
    }
445
0
}
446
447
/************************************************************************************************
448
* svt_subtract_average_c
449
* Calculate the DC value by averaging over all sample. Subtract DC value to get AC values In C
450
************************************************************************************************/
451
void svt_subtract_average_c(int16_t* pred_buf_q3, int32_t width, int32_t height, int32_t round_offset,
452
0
                            int32_t num_pel_log2) {
453
0
    int32_t  sum_q3   = 0;
454
0
    int16_t* pred_buf = pred_buf_q3;
455
0
    for (int32_t j = 0; j < height; j++) {
456
        // assert(pred_buf_q3 + tx_width <= cfl->pred_buf_q3 + CFL_BUF_SQUARE);
457
0
        for (int32_t i = 0; i < width; i++) {
458
0
            sum_q3 += pred_buf[i];
459
0
        }
460
0
        pred_buf += CFL_BUF_LINE;
461
0
    }
462
0
    const int32_t avg_q3 = (sum_q3 + round_offset) >> num_pel_log2;
463
    // Loss is never more than 1/2 (in Q3)
464
    // assert(abs((avg_q3 * (1 << num_pel_log2)) - sum_q3) <= 1 << num_pel_log2 >>
465
    //       1);
466
0
    for (int32_t j = 0; j < height; j++) {
467
0
        for (int32_t i = 0; i < width; i++) {
468
0
            pred_buf_q3[i] -= (int16_t)(avg_q3);
469
0
        }
470
0
        pred_buf_q3 += CFL_BUF_LINE;
471
0
    }
472
0
}
473
474
0
CFL_SUB_AVG_FN(c)
475
476
// clang-format off
477
const uint8_t extend_modes[INTRA_MODES] = {
478
    NEED_ABOVE | NEED_LEFT, // DC
479
    NEED_ABOVE, // V
480
    NEED_LEFT, // H
481
    NEED_ABOVE | NEED_ABOVERIGHT, // D45
482
    NEED_LEFT | NEED_ABOVE | NEED_ABOVELEFT, // D135
483
    NEED_LEFT | NEED_ABOVE | NEED_ABOVELEFT, // D113
484
    NEED_LEFT | NEED_ABOVE | NEED_ABOVELEFT, // D157
485
    NEED_LEFT | NEED_BOTTOMLEFT, // D203
486
    NEED_ABOVE | NEED_ABOVERIGHT, // D67
487
    NEED_LEFT | NEED_ABOVE, // SMOOTH
488
    NEED_LEFT | NEED_ABOVE, // SMOOTH_V
489
    NEED_LEFT | NEED_ABOVE, // SMOOTH_H
490
    NEED_LEFT | NEED_ABOVE | NEED_ABOVELEFT, // PAETH
491
};
492
493
// Tables to store if the top-right reference pixels are available. The flags
494
// are represented with bits, packed into 8-bit integers. E.g., for the 32x32
495
// blocks in a 128x128 superblock, the index of the "o" block is 10 (in raster
496
// order), so its flag is stored at the 3rd bit of the 2nd entry in the table,
497
// i.e. (table[10 / 8] >> (10 % 8)) & 1.
498
//       . . . .
499
//       . . . .
500
//       . . o .
501
//       . . . .
502
static uint8_t has_tr_4x4[128] = {
503
    255, 255, 255, 255, 85,  85,  85,  85,  119, 119, 119, 119, 85,  85,  85,  85,  127, 127, 127, 127, 85,  85,
504
    85,  85,  119, 119, 119, 119, 85,  85,  85,  85,  255, 127, 255, 127, 85,  85,  85,  85,  119, 119, 119, 119,
505
    85,  85,  85,  85,  127, 127, 127, 127, 85,  85,  85,  85,  119, 119, 119, 119, 85,  85,  85,  85,  255, 255,
506
    255, 127, 85,  85,  85,  85,  119, 119, 119, 119, 85,  85,  85,  85,  127, 127, 127, 127, 85,  85,  85,  85,
507
    119, 119, 119, 119, 85,  85,  85,  85,  255, 127, 255, 127, 85,  85,  85,  85,  119, 119, 119, 119, 85,  85,
508
    85,  85,  127, 127, 127, 127, 85,  85,  85,  85,  119, 119, 119, 119, 85,  85,  85,  85,
509
};
510
static uint8_t has_tr_4x8[64] = {
511
    255, 255, 255, 255, 119, 119, 119, 119, 127, 127, 127, 127, 119, 119, 119, 119, 255, 127, 255, 127, 119, 119,
512
    119, 119, 127, 127, 127, 127, 119, 119, 119, 119, 255, 255, 255, 127, 119, 119, 119, 119, 127, 127, 127, 127,
513
    119, 119, 119, 119, 255, 127, 255, 127, 119, 119, 119, 119, 127, 127, 127, 127, 119, 119, 119, 119,
514
};
515
static uint8_t has_tr_8x4[64] = {
516
    255, 255, 0,   0,   85,  85,  0,  0,  119, 119, 0,   0,   85,  85,  0,  0,  127, 127, 0,   0,   85, 85,
517
    0,   0,   119, 119, 0,   0,   85, 85, 0,   0,   255, 127, 0,   0,   85, 85, 0,   0,   119, 119, 0,  0,
518
    85,  85,  0,   0,   127, 127, 0,  0,  85,  85,  0,   0,   119, 119, 0,  0,  85,  85,  0,   0,
519
};
520
static uint8_t has_tr_8x8[32] = {
521
    255, 255, 85, 85, 119, 119, 85, 85, 127, 127, 85, 85, 119, 119, 85, 85,
522
    255, 127, 85, 85, 119, 119, 85, 85, 127, 127, 85, 85, 119, 119, 85, 85,
523
};
524
static uint8_t has_tr_8x16[16] = {
525
    255,
526
    255,
527
    119,
528
    119,
529
    127,
530
    127,
531
    119,
532
    119,
533
    255,
534
    127,
535
    119,
536
    119,
537
    127,
538
    127,
539
    119,
540
    119,
541
};
542
static uint8_t has_tr_16x8[16] = {
543
    255,
544
    0,
545
    85,
546
    0,
547
    119,
548
    0,
549
    85,
550
    0,
551
    127,
552
    0,
553
    85,
554
    0,
555
    119,
556
    0,
557
    85,
558
    0,
559
};
560
static uint8_t has_tr_16x16[8] = {
561
    255,
562
    85,
563
    119,
564
    85,
565
    127,
566
    85,
567
    119,
568
    85,
569
};
570
static uint8_t has_tr_16x32[4]   = {255, 119, 127, 119};
571
static uint8_t has_tr_32x16[4]   = {15, 5, 7, 5};
572
static uint8_t has_tr_32x32[2]   = {95, 87};
573
static uint8_t has_tr_32x64[1]   = {127};
574
static uint8_t has_tr_64x32[1]   = {19};
575
static uint8_t has_tr_64x64[1]   = {7};
576
static uint8_t has_tr_64x128[1]  = {3};
577
static uint8_t has_tr_128x64[1]  = {1};
578
static uint8_t has_tr_128x128[1] = {1};
579
static uint8_t has_tr_4x16[32]   = {
580
    255, 255, 255, 255, 127, 127, 127, 127, 255, 127, 255, 127, 127, 127, 127, 127,
581
    255, 255, 255, 127, 127, 127, 127, 127, 255, 127, 255, 127, 127, 127, 127, 127,
582
};
583
static uint8_t has_tr_16x4[32] = {
584
    255, 0, 0, 0, 85, 0, 0, 0, 119, 0, 0, 0, 85, 0, 0, 0, 127, 0, 0, 0, 85, 0, 0, 0, 119, 0, 0, 0, 85, 0, 0, 0,
585
};
586
static uint8_t has_tr_8x32[8] = {
587
    255,
588
    255,
589
    127,
590
    127,
591
    255,
592
    127,
593
    127,
594
    127,
595
};
596
static uint8_t has_tr_32x8[8] = {
597
    15,
598
    0,
599
    5,
600
    0,
601
    7,
602
    0,
603
    5,
604
    0,
605
};
606
static uint8_t has_tr_16x64[2] = {255, 127};
607
static uint8_t has_tr_64x16[2] = {3, 1};
608
609
static const uint8_t* const has_tr_tables[BLOCK_SIZES_ALL] = {
610
    // 4X4
611
    has_tr_4x4,
612
    // 4X8,       8X4,            8X8
613
    has_tr_4x8,
614
    has_tr_8x4,
615
    has_tr_8x8,
616
    // 8X16,      16X8,           16X16
617
    has_tr_8x16,
618
    has_tr_16x8,
619
    has_tr_16x16,
620
    // 16X32,     32X16,          32X32
621
    has_tr_16x32,
622
    has_tr_32x16,
623
    has_tr_32x32,
624
    // 32X64,     64X32,          64X64
625
    has_tr_32x64,
626
    has_tr_64x32,
627
    has_tr_64x64,
628
    // 64x128,    128x64,         128x128
629
    has_tr_64x128,
630
    has_tr_128x64,
631
    has_tr_128x128,
632
    // 4x16,      16x4,            8x32
633
    has_tr_4x16,
634
    has_tr_16x4,
635
    has_tr_8x32,
636
    // 32x8,      16x64,           64x16
637
    has_tr_32x8,
638
    has_tr_16x64,
639
    has_tr_64x16};
640
641
static uint8_t has_tr_vert_8x8[32] = {
642
    255, 255, 0, 0, 119, 119, 0, 0, 127, 127, 0, 0, 119, 119, 0, 0,
643
    255, 127, 0, 0, 119, 119, 0, 0, 127, 127, 0, 0, 119, 119, 0, 0,
644
};
645
static uint8_t has_tr_vert_16x16[8] = {
646
    255,
647
    0,
648
    119,
649
    0,
650
    127,
651
    0,
652
    119,
653
    0,
654
};
655
static uint8_t has_tr_vert_32x32[2] = {15, 7};
656
static uint8_t has_tr_vert_64x64[1] = {3};
657
658
// The _vert_* tables are like the ordinary tables above, but describe the
659
// order we visit square blocks when doing a PARTITION_VERT_A or
660
// PARTITION_VERT_B. This is the same order as normal except for on the last
661
// split where we go vertically (TL, BL, TR, BR). We treat the rectangular block
662
// as a pair of squares, which means that these tables work correctly for both
663
// mixed vertical partition types.
664
//
665
// There are tables for each of the square sizes. Vertical rectangles (like
666
// BLOCK_16X32) use their respective "non-vert" table
667
static const uint8_t* const has_tr_vert_tables[BLOCK_SIZES] = {
668
    // 4X4
669
    NULL,
670
    // 4X8,      8X4,         8X8
671
    has_tr_4x8,
672
    NULL,
673
    has_tr_vert_8x8,
674
    // 8X16,     16X8,        16X16
675
    has_tr_8x16,
676
    NULL,
677
    has_tr_vert_16x16,
678
    // 16X32,    32X16,       32X32
679
    has_tr_16x32,
680
    NULL,
681
    has_tr_vert_32x32,
682
    // 32X64,    64X32,       64X64
683
    has_tr_32x64,
684
    NULL,
685
    has_tr_vert_64x64,
686
    // 64x128,   128x64,      128x128
687
    has_tr_64x128,
688
    NULL,
689
    has_tr_128x128};
690
// clang-format on
691
692
531k
static const uint8_t* get_has_tr_table(PartitionType partition, BlockSize bsize) {
693
531k
    const uint8_t* ret = NULL;
694
    // If this is a mixed vertical partition, look up bsize in orders_vert.
695
531k
    if (partition == PARTITION_VERT_A || partition == PARTITION_VERT_B) {
696
0
        assert(bsize < BLOCK_SIZES);
697
0
        ret = has_tr_vert_tables[bsize];
698
531k
    } else {
699
531k
        ret = has_tr_tables[bsize];
700
531k
    }
701
531k
    assert(ret);
702
531k
    return ret;
703
531k
}
704
705
int32_t svt_aom_intra_has_top_right(BlockSize sb_size, BlockSize bsize, int32_t mi_row, int32_t mi_col,
706
                                    int32_t top_available, int32_t right_available, PartitionType partition,
707
1.46M
                                    TxSize txsz, int32_t row_off, int32_t col_off, int32_t ss_x, int32_t ss_y) {
708
1.46M
    if (!top_available || !right_available) {
709
269k
        return 0;
710
269k
    }
711
712
1.20M
    const int32_t bw_unit              = block_size_wide[bsize] >> tx_size_wide_log2[0];
713
1.20M
    const int32_t plane_bw_unit        = AOMMAX(bw_unit >> ss_x, 1);
714
1.20M
    const int32_t top_right_count_unit = eb_tx_size_wide_unit[txsz];
715
716
1.20M
    if (row_off > 0) { // Just need to check if enough pixels on the right.
717
451k
        if (block_size_wide[bsize] > block_size_wide[BLOCK_64X64]) {
718
            // Special case: For 128x128 blocks, the transform unit whose
719
            // top-right corner is at the center of the block does in fact have
720
            // pixels available at its top-right corner.
721
0
            if (row_off == mi_size_high[BLOCK_64X64] >> ss_y &&
722
0
                col_off + top_right_count_unit == mi_size_wide[BLOCK_64X64] >> ss_x) {
723
0
                return 1;
724
0
            }
725
0
            const int32_t plane_bw_unit_64 = mi_size_wide[BLOCK_64X64] >> ss_x;
726
0
            const int32_t col_off_64       = col_off % plane_bw_unit_64;
727
0
            return col_off_64 + top_right_count_unit < plane_bw_unit_64;
728
0
        }
729
451k
        return col_off + top_right_count_unit < plane_bw_unit;
730
748k
    } else {
731
        // All top-right pixels are in the block above, which is already available.
732
748k
        if (col_off + top_right_count_unit < plane_bw_unit) {
733
207k
            return 1;
734
207k
        }
735
736
541k
        const int32_t bw_in_mi_log2 = mi_size_wide_log2[bsize];
737
541k
        const int32_t bh_in_mi_log2 = mi_size_high_log2[bsize];
738
541k
        const int32_t sb_mi_size    = mi_size_high[sb_size];
739
541k
        const int32_t blk_row_in_sb = (mi_row & (sb_mi_size - 1)) >> bh_in_mi_log2;
740
541k
        const int32_t blk_col_in_sb = (mi_col & (sb_mi_size - 1)) >> bw_in_mi_log2;
741
742
        // Top row of superblock: so top-right pixels are in the top and/or
743
        // top-right superblocks, both of which are already available.
744
541k
        if (blk_row_in_sb == 0) {
745
4.39k
            return 1;
746
4.39k
        }
747
748
        // Rightmost column of superblock (and not the top row): so top-right pixels
749
        // fall in the right superblock, which is not available yet.
750
536k
        if (((blk_col_in_sb + 1) << bw_in_mi_log2) >= sb_mi_size) {
751
8.61k
            return 0;
752
8.61k
        }
753
        // General case (neither top row nor rightmost column): check if the
754
        // top-right block is coded before the current block.
755
528k
        const int32_t this_blk_index = ((blk_row_in_sb + 0) << (MAX_MIB_SIZE_LOG2 - bw_in_mi_log2)) + blk_col_in_sb + 0;
756
528k
        const int32_t idx1           = this_blk_index / 8;
757
528k
        const int32_t idx2           = this_blk_index % 8;
758
528k
        const uint8_t* has_tr_table  = get_has_tr_table(partition, bsize);
759
528k
        return (has_tr_table[idx1] >> idx2) & 1;
760
536k
    }
761
1.20M
}
762
763
// clang-format off
764
// Similar to the has_tr_* tables, but store if the bottom-left reference
765
// pixels are available.
766
static uint8_t has_bl_4x4[128] = {
767
    84, 85, 85, 85, 16, 17, 17, 17, 84, 85, 85, 85, 0,  1,  1,  1,  84, 85, 85, 85, 16, 17, 17, 17, 84, 85,
768
    85, 85, 0,  0,  1,  0,  84, 85, 85, 85, 16, 17, 17, 17, 84, 85, 85, 85, 0,  1,  1,  1,  84, 85, 85, 85,
769
    16, 17, 17, 17, 84, 85, 85, 85, 0,  0,  0,  0,  84, 85, 85, 85, 16, 17, 17, 17, 84, 85, 85, 85, 0,  1,
770
    1,  1,  84, 85, 85, 85, 16, 17, 17, 17, 84, 85, 85, 85, 0,  0,  1,  0,  84, 85, 85, 85, 16, 17, 17, 17,
771
    84, 85, 85, 85, 0,  1,  1,  1,  84, 85, 85, 85, 16, 17, 17, 17, 84, 85, 85, 85, 0,  0,  0,  0,
772
};
773
static uint8_t has_bl_4x8[64] = {
774
    16, 17, 17, 17, 0, 1, 1, 1, 16, 17, 17, 17, 0, 0, 1, 0, 16, 17, 17, 17, 0, 1, 1, 1, 16, 17, 17, 17, 0, 0, 0, 0,
775
    16, 17, 17, 17, 0, 1, 1, 1, 16, 17, 17, 17, 0, 0, 1, 0, 16, 17, 17, 17, 0, 1, 1, 1, 16, 17, 17, 17, 0, 0, 0, 0,
776
};
777
static uint8_t has_bl_8x4[64] = {
778
    254, 255, 84,  85,  254, 255, 16,  17,  254, 255, 84,  85,  254, 255, 0,   1,   254, 255, 84,  85,  254, 255,
779
    16,  17,  254, 255, 84,  85,  254, 255, 0,   0,   254, 255, 84,  85,  254, 255, 16,  17,  254, 255, 84,  85,
780
    254, 255, 0,   1,   254, 255, 84,  85,  254, 255, 16,  17,  254, 255, 84,  85,  254, 255, 0,   0,
781
};
782
static uint8_t has_bl_8x8[32] = {
783
    84, 85, 16, 17, 84, 85, 0, 1, 84, 85, 16, 17, 84, 85, 0, 0,
784
    84, 85, 16, 17, 84, 85, 0, 1, 84, 85, 16, 17, 84, 85, 0, 0,
785
};
786
static uint8_t has_bl_8x16[16] = {
787
    16,
788
    17,
789
    0,
790
    1,
791
    16,
792
    17,
793
    0,
794
    0,
795
    16,
796
    17,
797
    0,
798
    1,
799
    16,
800
    17,
801
    0,
802
    0,
803
};
804
static uint8_t has_bl_16x8[16] = {
805
    254,
806
    84,
807
    254,
808
    16,
809
    254,
810
    84,
811
    254,
812
    0,
813
    254,
814
    84,
815
    254,
816
    16,
817
    254,
818
    84,
819
    254,
820
    0,
821
};
822
static uint8_t has_bl_16x16[8] = {
823
    84,
824
    16,
825
    84,
826
    0,
827
    84,
828
    16,
829
    84,
830
    0,
831
};
832
static uint8_t has_bl_16x32[4]   = {16, 0, 16, 0};
833
static uint8_t has_bl_32x16[4]   = {78, 14, 78, 14};
834
static uint8_t has_bl_32x32[2]   = {4, 4};
835
static uint8_t has_bl_32x64[1]   = {0};
836
static uint8_t has_bl_64x32[1]   = {34};
837
static uint8_t has_bl_64x64[1]   = {0};
838
static uint8_t has_bl_64x128[1]  = {0};
839
static uint8_t has_bl_128x64[1]  = {0};
840
static uint8_t has_bl_128x128[1] = {0};
841
static uint8_t has_bl_4x16[32]   = {
842
    0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0,
843
};
844
static uint8_t has_bl_16x4[32] = {
845
    254, 254, 254, 84, 254, 254, 254, 16, 254, 254, 254, 84, 254, 254, 254, 0,
846
    254, 254, 254, 84, 254, 254, 254, 16, 254, 254, 254, 84, 254, 254, 254, 0,
847
};
848
static uint8_t has_bl_8x32[8] = {
849
    0,
850
    1,
851
    0,
852
    0,
853
    0,
854
    1,
855
    0,
856
    0,
857
};
858
static uint8_t has_bl_32x8[8] = {
859
    238,
860
    78,
861
    238,
862
    14,
863
    238,
864
    78,
865
    238,
866
    14,
867
};
868
static uint8_t has_bl_16x64[2] = {0, 0};
869
static uint8_t has_bl_64x16[2] = {42, 42};
870
871
static const uint8_t* const has_bl_tables[BLOCK_SIZES_ALL] = {
872
    // 4X4
873
    has_bl_4x4,
874
    // 4X8,         8X4,         8X8
875
    has_bl_4x8,
876
    has_bl_8x4,
877
    has_bl_8x8,
878
    // 8X16,        16X8,        16X16
879
    has_bl_8x16,
880
    has_bl_16x8,
881
    has_bl_16x16,
882
    // 16X32,       32X16,       32X32
883
    has_bl_16x32,
884
    has_bl_32x16,
885
    has_bl_32x32,
886
    // 32X64,       64X32,       64X64
887
    has_bl_32x64,
888
    has_bl_64x32,
889
    has_bl_64x64,
890
    // 64x128,      128x64,      128x128
891
    has_bl_64x128,
892
    has_bl_128x64,
893
    has_bl_128x128,
894
    // 4x16,        16x4,        8x32
895
    has_bl_4x16,
896
    has_bl_16x4,
897
    has_bl_8x32,
898
    // 32x8,        16x64,       64x16
899
    has_bl_32x8,
900
    has_bl_16x64,
901
    has_bl_64x16};
902
903
static uint8_t has_bl_vert_8x8[32] = {
904
    254, 255, 16, 17, 254, 255, 0, 1, 254, 255, 16, 17, 254, 255, 0, 0,
905
    254, 255, 16, 17, 254, 255, 0, 1, 254, 255, 16, 17, 254, 255, 0, 0,
906
};
907
static uint8_t has_bl_vert_16x16[8] = {
908
    254,
909
    16,
910
    254,
911
    0,
912
    254,
913
    16,
914
    254,
915
    0,
916
};
917
static uint8_t has_bl_vert_32x32[2] = {14, 14};
918
static uint8_t has_bl_vert_64x64[1] = {2};
919
920
// The _vert_* tables are like the ordinary tables above, but describe the
921
// order we visit square blocks when doing a PARTITION_VERT_A or
922
// PARTITION_VERT_B. This is the same order as normal except for on the last
923
// split where we go vertically (TL, BL, TR, BR). We treat the rectangular block
924
// as a pair of squares, which means that these tables work correctly for both
925
// mixed vertical partition types.
926
//
927
// There are tables for each of the square sizes. Vertical rectangles (like
928
// BLOCK_16X32) use their respective "non-vert" table
929
static const uint8_t* const has_bl_vert_tables[BLOCK_SIZES] = {
930
    // 4X4
931
    NULL,
932
    // 4X8,     8X4,         8X8
933
    has_bl_4x8,
934
    NULL,
935
    has_bl_vert_8x8,
936
    // 8X16,    16X8,        16X16
937
    has_bl_8x16,
938
    NULL,
939
    has_bl_vert_16x16,
940
    // 16X32,   32X16,       32X32
941
    has_bl_16x32,
942
    NULL,
943
    has_bl_vert_32x32,
944
    // 32X64,   64X32,       64X64
945
    has_bl_32x64,
946
    NULL,
947
    has_bl_vert_64x64,
948
    // 64x128,  128x64,      128x128
949
    has_bl_64x128,
950
    NULL,
951
    has_bl_128x128};
952
// clang-format on
953
954
532k
static const uint8_t* get_has_bl_table(PartitionType partition, BlockSize bsize) {
955
532k
    const uint8_t* ret = NULL;
956
    // If this is a mixed vertical partition, look up bsize in orders_vert.
957
532k
    if (partition == PARTITION_VERT_A || partition == PARTITION_VERT_B) {
958
0
        assert(bsize < BLOCK_SIZES);
959
0
        ret = has_bl_vert_tables[bsize];
960
532k
    } else {
961
532k
        ret = has_bl_tables[bsize];
962
532k
    }
963
532k
    assert(ret);
964
532k
    return ret;
965
532k
}
966
967
int32_t svt_aom_intra_has_bottom_left(BlockSize sb_size, BlockSize bsize, int32_t mi_row, int32_t mi_col,
968
                                      int32_t bottom_available, int32_t left_available, PartitionType partition,
969
1.46M
                                      TxSize txsz, int32_t row_off, int32_t col_off, int32_t ss_x, int32_t ss_y) {
970
1.46M
    if (!bottom_available || !left_available) {
971
269k
        return 0;
972
269k
    }
973
974
    // Special case for 128x* blocks, when col_off is half the block width.
975
    // This is needed because 128x* superblocks are divided into 64x* blocks in
976
    // raster order
977
1.19M
    if (block_size_wide[bsize] > block_size_wide[BLOCK_64X64] && col_off > 0) {
978
0
        const int32_t plane_bw_unit_64 = mi_size_wide[BLOCK_64X64] >> ss_x;
979
0
        const int32_t col_off_64       = col_off % plane_bw_unit_64;
980
0
        if (col_off_64 == 0) {
981
            // We are at the left edge of top-right or bottom-right 64x* block.
982
0
            const int32_t plane_bh_unit_64 = mi_size_high[BLOCK_64X64] >> ss_y;
983
0
            const int32_t row_off_64       = row_off % plane_bh_unit_64;
984
0
            const int32_t plane_bh_unit    = AOMMIN(mi_size_high[bsize] >> ss_y, plane_bh_unit_64);
985
            // Check if all bottom-left pixels are in the left 64x* block (which is
986
            // already coded).
987
0
            return row_off_64 + eb_tx_size_high_unit[txsz] < plane_bh_unit;
988
0
        }
989
0
    }
990
991
1.19M
    if (col_off > 0) {
992
        // Bottom-left pixels are in the bottom-left block, which is not available.
993
448k
        return 0;
994
750k
    } else {
995
750k
        const int32_t bh_unit                = block_size_high[bsize] >> tx_size_high_log2[0];
996
750k
        const int32_t plane_bh_unit          = AOMMAX(bh_unit >> ss_y, 1);
997
750k
        const int32_t bottom_left_count_unit = eb_tx_size_high_unit[txsz];
998
999
        // All bottom-left pixels are in the left block, which is already available.
1000
750k
        if (row_off + bottom_left_count_unit < plane_bh_unit) {
1001
209k
            return 1;
1002
209k
        }
1003
1004
541k
        const int32_t bw_in_mi_log2 = mi_size_wide_log2[bsize];
1005
541k
        const int32_t bh_in_mi_log2 = mi_size_high_log2[bsize];
1006
541k
        const int32_t sb_mi_size    = mi_size_high[sb_size];
1007
541k
        const int32_t blk_row_in_sb = (mi_row & (sb_mi_size - 1)) >> bh_in_mi_log2;
1008
541k
        const int32_t blk_col_in_sb = (mi_col & (sb_mi_size - 1)) >> bw_in_mi_log2;
1009
1010
        // Leftmost column of superblock: so bottom-left pixels maybe in the left
1011
        // and/or bottom-left superblocks. But only the left superblock is
1012
        // available, so check if all required pixels fall in that superblock.
1013
541k
        if (blk_col_in_sb == 0) {
1014
9.07k
            const int32_t blk_start_row_off = blk_row_in_sb << (bh_in_mi_log2 + MI_SIZE_LOG2 - tx_size_wide_log2[0]) >>
1015
9.07k
                ss_y;
1016
9.07k
            const int32_t row_off_in_sb  = blk_start_row_off + row_off;
1017
9.07k
            const int32_t sb_height_unit = sb_mi_size >> ss_y;
1018
9.07k
            return row_off_in_sb + bottom_left_count_unit < sb_height_unit;
1019
9.07k
        }
1020
1021
        // Bottom row of superblock (and not the leftmost column): so bottom-left
1022
        // pixels fall in the bottom superblock, which is not available yet.
1023
532k
        if (((blk_row_in_sb + 1) << bh_in_mi_log2) >= sb_mi_size) {
1024
3.93k
            return 0;
1025
3.93k
        }
1026
1027
        // General case (neither leftmost column nor bottom row): check if the
1028
        // bottom-left block is coded before the current block.
1029
528k
        const int32_t this_blk_index = ((blk_row_in_sb + 0) << (MAX_MIB_SIZE_LOG2 - bw_in_mi_log2)) + blk_col_in_sb + 0;
1030
528k
        const int32_t idx1           = this_blk_index / 8;
1031
528k
        const int32_t idx2           = this_blk_index % 8;
1032
528k
        const uint8_t* has_bl_table  = get_has_bl_table(partition, bsize);
1033
528k
        return (has_bl_table[idx1] >> idx2) & 1;
1034
532k
    }
1035
1.19M
}
1036
1037
IntraPredFn svt_aom_eb_pred[INTRA_MODES][TX_SIZES_ALL];
1038
IntraPredFn svt_aom_dc_pred[2][2][TX_SIZES_ALL];
1039
1040
IntraHighPredFn svt_aom_pred_high[INTRA_MODES][TX_SIZES_ALL];
1041
IntraHighPredFn svt_aom_dc_pred_high[2][2][TX_SIZES_ALL];
1042
1043
static INLINE void dc_128_predictor(uint8_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint8_t* above,
1044
24.1k
                                    const uint8_t* left) {
1045
24.1k
    (void)above;
1046
24.1k
    (void)left;
1047
1048
520k
    for (int32_t r = 0; r < bh; r++) {
1049
496k
        memset(dst, 128, bw);
1050
496k
        dst += stride;
1051
496k
    }
1052
24.1k
}
1053
1054
static INLINE void dc_left_predictor(uint8_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint8_t* above,
1055
126k
                                     const uint8_t* left) {
1056
126k
    int32_t sum = 0;
1057
126k
    (void)above;
1058
1059
868k
    for (int32_t i = 0; i < bh; i++) {
1060
742k
        sum += left[i];
1061
742k
    }
1062
126k
    int32_t expected_dc = (sum + (bh >> 1)) / bh;
1063
1064
868k
    for (int32_t r = 0; r < bh; r++) {
1065
742k
        memset(dst, expected_dc, bw);
1066
742k
        dst += stride;
1067
742k
    }
1068
126k
}
1069
1070
static INLINE void dc_top_predictor(uint8_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint8_t* above,
1071
119k
                                    const uint8_t* left) {
1072
119k
    int32_t sum = 0;
1073
119k
    (void)left;
1074
1075
776k
    for (int32_t i = 0; i < bw; i++) {
1076
657k
        sum += above[i];
1077
657k
    }
1078
119k
    int32_t expected_dc = (sum + (bw >> 1)) / bw;
1079
1080
775k
    for (int32_t r = 0; r < bh; r++) {
1081
656k
        memset(dst, expected_dc, bw);
1082
656k
        dst += stride;
1083
656k
    }
1084
119k
}
1085
1086
static INLINE void dc_predictor(uint8_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint8_t* above,
1087
1.19M
                                const uint8_t* left) {
1088
1.19M
    int32_t       sum   = 0;
1089
1.19M
    const int32_t count = bw + bh;
1090
1091
6.73M
    for (int32_t i = 0; i < bw; i++) {
1092
5.53M
        sum += above[i];
1093
5.53M
    }
1094
6.73M
    for (int32_t i = 0; i < bh; i++) {
1095
5.53M
        sum += left[i];
1096
5.53M
    }
1097
1.19M
    int32_t expected_dc = (sum + (count >> 1)) / count;
1098
1099
6.69M
    for (int32_t r = 0; r < bh; r++) {
1100
5.49M
        memset(dst, expected_dc, bw);
1101
5.49M
        dst += stride;
1102
5.49M
    }
1103
1.19M
}
1104
1105
static INLINE void v_predictor(uint8_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint8_t* above,
1106
0
                               const uint8_t* left) {
1107
0
    (void)left;
1108
1109
0
    for (int32_t r = 0; r < bh; r++) {
1110
0
        svt_memcpy(dst, above, bw);
1111
0
        dst += stride;
1112
0
    }
1113
0
}
1114
1115
static INLINE void h_predictor(uint8_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint8_t* above,
1116
0
                               const uint8_t* left) {
1117
0
    (void)above;
1118
1119
0
    for (int32_t r = 0; r < bh; r++) {
1120
0
        memset(dst, left[r], bw);
1121
0
        dst += stride;
1122
0
    }
1123
0
}
1124
1125
static INLINE void smooth_predictor(uint8_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint8_t* above,
1126
0
                                    const uint8_t* left) {
1127
0
    const uint8_t        below_pred   = left[bh - 1]; // estimated by bottom-left pixel
1128
0
    const uint8_t        right_pred   = above[bw - 1]; // estimated by top-right pixel
1129
0
    const uint8_t* const sm_weights_w = sm_weight_arrays + bw;
1130
0
    const uint8_t* const sm_weights_h = sm_weight_arrays + bh;
1131
    // scale = 2 * 2^sm_weight_log2_scale
1132
0
    const int32_t  log2_scale = 1 + sm_weight_log2_scale;
1133
0
    const uint16_t scale      = (1 << sm_weight_log2_scale);
1134
0
    sm_weights_sanity_checks(sm_weights_w, sm_weights_h, scale, log2_scale + 1);
1135
0
    for (int32_t r = 0; r < bh; ++r, dst += stride) {
1136
0
        for (int32_t c = 0; c < bw; ++c) {
1137
0
            const uint8_t pixels[]  = {above[c], below_pred, left[r], right_pred};
1138
0
            const uint8_t weights[] = {sm_weights_h[r],
1139
0
                                       (uint8_t)(scale - sm_weights_h[r]),
1140
0
                                       sm_weights_w[c],
1141
0
                                       (uint8_t)(scale - sm_weights_w[c])};
1142
0
            uint32_t      this_pred = 0;
1143
0
            assert(scale >= sm_weights_h[r] && scale >= sm_weights_w[c]);
1144
0
            for (int i = 0; i < 4; ++i) {
1145
0
                this_pred += weights[i] * pixels[i];
1146
0
            }
1147
0
            dst[c] = (uint8_t)divide_round(this_pred, log2_scale);
1148
0
        }
1149
0
    }
1150
0
}
1151
1152
static INLINE void smooth_v_predictor(uint8_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint8_t* above,
1153
0
                                      const uint8_t* left) {
1154
0
    const uint8_t        below_pred = left[bh - 1]; // estimated by bottom-left pixel
1155
0
    const uint8_t* const sm_weights = sm_weight_arrays + bh;
1156
    // scale = 2^sm_weight_log2_scale
1157
0
    const int32_t  log2_scale = sm_weight_log2_scale;
1158
0
    const uint16_t scale      = (1 << sm_weight_log2_scale);
1159
0
    sm_weights_sanity_checks(sm_weights, sm_weights, scale, log2_scale + 1);
1160
1161
0
    for (int32_t r = 0; r < bh; ++r, dst += stride) {
1162
0
        for (int32_t c = 0; c < bw; ++c) {
1163
0
            const uint8_t pixels[]  = {above[c], below_pred};
1164
0
            const uint8_t weights[] = {sm_weights[r], (uint8_t)(scale - sm_weights[r])};
1165
0
            uint32_t      this_pred = 0;
1166
0
            assert(scale >= sm_weights[r]);
1167
0
            for (unsigned i = 0; i < 2; ++i) {
1168
0
                this_pred += weights[i] * pixels[i];
1169
0
            }
1170
0
            dst[c] = (uint8_t)divide_round(this_pred, log2_scale);
1171
0
        }
1172
0
    }
1173
0
}
1174
1175
static INLINE void smooth_h_predictor(uint8_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint8_t* above,
1176
0
                                      const uint8_t* left) {
1177
0
    const uint8_t        right_pred = above[bw - 1]; // estimated by top-right pixel
1178
0
    const uint8_t* const sm_weights = sm_weight_arrays + bw;
1179
    // scale = 2^sm_weight_log2_scale
1180
0
    const int32_t  log2_scale = sm_weight_log2_scale;
1181
0
    const uint16_t scale      = (1 << sm_weight_log2_scale);
1182
0
    sm_weights_sanity_checks(sm_weights, sm_weights, scale, log2_scale + 1);
1183
1184
0
    for (int32_t r = 0; r < bh; ++r, dst += stride) {
1185
0
        for (int32_t c = 0; c < bw; ++c) {
1186
0
            const uint8_t pixels[]  = {left[r], right_pred};
1187
0
            const uint8_t weights[] = {sm_weights[c], (uint8_t)(scale - sm_weights[c])};
1188
0
            uint32_t      this_pred = 0;
1189
0
            assert(scale >= sm_weights[c]);
1190
0
            for (unsigned i = 0; i < 2; ++i) {
1191
0
                this_pred += weights[i] * pixels[i];
1192
0
            }
1193
0
            dst[c] = (uint8_t)divide_round(this_pred, log2_scale);
1194
0
        }
1195
0
    }
1196
0
}
1197
1198
#undef DC_MULTIPLIER_1X2
1199
#undef DC_MULTIPLIER_1X4
1200
1201
#if CONFIG_ENABLE_HIGH_BIT_DEPTH
1202
static INLINE void highbd_v_predictor(uint16_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint16_t* above,
1203
0
                                      const uint16_t* left, int32_t bd) {
1204
0
    (void)left;
1205
0
    (void)bd;
1206
0
    for (int32_t r = 0; r < bh; r++) {
1207
0
        svt_memcpy(dst, above, bw * sizeof(uint16_t));
1208
0
        dst += stride;
1209
0
    }
1210
0
}
1211
1212
static INLINE void highbd_h_predictor(uint16_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint16_t* above,
1213
0
                                      const uint16_t* left, int32_t bd) {
1214
0
    (void)above;
1215
0
    (void)bd;
1216
0
    for (int32_t r = 0; r < bh; r++) {
1217
0
        svt_aom_memset16(dst, left[r], bw);
1218
0
        dst += stride;
1219
0
    }
1220
0
}
1221
#endif
1222
0
static INLINE int abs_diff(int a, int b) {
1223
0
    return (a > b) ? a - b : b - a;
1224
0
}
1225
1226
0
static INLINE uint16_t paeth_predictor_single(uint16_t left, uint16_t top, uint16_t top_left) {
1227
0
    const int base       = top + left - top_left;
1228
0
    const int p_left     = abs_diff(base, left);
1229
0
    const int p_top      = abs_diff(base, top);
1230
0
    const int p_top_left = abs_diff(base, top_left);
1231
1232
    // Return nearest to base of left, top and top_left.
1233
0
    return (p_left <= p_top && p_left <= p_top_left) ? left : (p_top <= p_top_left) ? top : top_left;
1234
0
}
1235
1236
static INLINE void paeth_predictor(uint8_t* dst, ptrdiff_t stride, int bw, int bh, const uint8_t* above,
1237
0
                                   const uint8_t* left) {
1238
0
    const uint8_t ytop_left = above[-1];
1239
1240
0
    for (int r = 0; r < bh; ++r, dst += stride) {
1241
0
        for (int c = 0; c < bw; ++c) {
1242
0
            dst[c] = (uint8_t)paeth_predictor_single(left[r], above[c], ytop_left);
1243
0
        }
1244
0
    }
1245
0
}
1246
1247
#if CONFIG_ENABLE_HIGH_BIT_DEPTH
1248
static INLINE void highbd_paeth_predictor(uint16_t* dst, ptrdiff_t stride, int bw, int bh, const uint16_t* above,
1249
0
                                          const uint16_t* left, int bd) {
1250
0
    const uint16_t ytop_left = above[-1];
1251
0
    (void)bd;
1252
1253
0
    for (int r = 0; r < bh; ++r, dst += stride) {
1254
0
        for (int c = 0; c < bw; ++c) {
1255
0
            dst[c] = paeth_predictor_single(left[r], above[c], ytop_left);
1256
0
        }
1257
0
    }
1258
0
}
1259
1260
static INLINE void highbd_smooth_predictor(uint16_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh,
1261
0
                                           const uint16_t* above, const uint16_t* left, int32_t bd) {
1262
0
    (void)bd;
1263
0
    const uint16_t       below_pred   = left[bh - 1]; // estimated by bottom-left pixel
1264
0
    const uint16_t       right_pred   = above[bw - 1]; // estimated by top-right pixel
1265
0
    const uint8_t* const sm_weights_w = sm_weight_arrays + bw;
1266
0
    const uint8_t* const sm_weights_h = sm_weight_arrays + bh;
1267
    // scale = 2 * 2^sm_weight_log2_scale
1268
0
    const int32_t  log2_scale = 1 + sm_weight_log2_scale;
1269
0
    const uint16_t scale      = (1 << sm_weight_log2_scale);
1270
0
    sm_weights_sanity_checks(sm_weights_w, sm_weights_h, scale, log2_scale + 2);
1271
0
    for (int32_t r = 0; r < bh; ++r, dst += stride) {
1272
0
        for (int32_t c = 0; c < bw; ++c) {
1273
0
            const uint16_t pixels[]  = {above[c], below_pred, left[r], right_pred};
1274
0
            const uint8_t  weights[] = {sm_weights_h[r],
1275
0
                                        (uint8_t)(scale - sm_weights_h[r]),
1276
0
                                        sm_weights_w[c],
1277
0
                                        (uint8_t)(scale - sm_weights_w[c])};
1278
0
            uint32_t       this_pred = 0;
1279
0
            assert(scale >= sm_weights_h[r] && scale >= sm_weights_w[c]);
1280
0
            for (int i = 0; i < 4; ++i) {
1281
0
                this_pred += weights[i] * pixels[i];
1282
0
            }
1283
0
            dst[c] = (uint16_t)divide_round(this_pred, log2_scale);
1284
0
        }
1285
0
    }
1286
0
}
1287
1288
static INLINE void highbd_smooth_v_predictor(uint16_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh,
1289
0
                                             const uint16_t* above, const uint16_t* left, int32_t bd) {
1290
0
    (void)bd;
1291
0
    const uint16_t       below_pred = left[bh - 1]; // estimated by bottom-left pixel
1292
0
    const uint8_t* const sm_weights = sm_weight_arrays + bh;
1293
    // scale = 2^sm_weight_log2_scale
1294
0
    const int32_t  log2_scale = sm_weight_log2_scale;
1295
0
    const uint16_t scale      = (1 << sm_weight_log2_scale);
1296
0
    sm_weights_sanity_checks(sm_weights, sm_weights, scale, log2_scale + sizeof(*dst));
1297
1298
0
    for (int32_t r = 0; r < bh; ++r, dst += stride) {
1299
0
        for (int32_t c = 0; c < bw; ++c) {
1300
0
            const uint16_t pixels[]  = {above[c], below_pred};
1301
0
            const uint8_t  weights[] = {sm_weights[r], (uint8_t)(scale - sm_weights[r])};
1302
0
            uint32_t       this_pred = 0;
1303
0
            assert(scale >= sm_weights[r]);
1304
0
            for (int i = 0; i < 2; ++i) {
1305
0
                this_pred += weights[i] * pixels[i];
1306
0
            }
1307
0
            dst[c] = (uint16_t)divide_round(this_pred, log2_scale);
1308
0
        }
1309
0
    }
1310
0
}
1311
1312
static INLINE void highbd_smooth_h_predictor(uint16_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh,
1313
0
                                             const uint16_t* above, const uint16_t* left, int32_t bd) {
1314
0
    (void)bd;
1315
0
    const uint16_t       right_pred = above[bw - 1]; // estimated by top-right pixel
1316
0
    const uint8_t* const sm_weights = sm_weight_arrays + bw;
1317
    // scale = 2^sm_weight_log2_scale
1318
0
    const int32_t  log2_scale = sm_weight_log2_scale;
1319
0
    const uint16_t scale      = (1 << sm_weight_log2_scale);
1320
0
    sm_weights_sanity_checks(sm_weights, sm_weights, scale, log2_scale + sizeof(*dst));
1321
1322
0
    for (int32_t r = 0; r < bh; r++, dst += stride) {
1323
0
        for (int32_t c = 0; c < bw; ++c) {
1324
0
            const uint16_t pixels[]  = {left[r], right_pred};
1325
0
            const uint8_t  weights[] = {sm_weights[c], (uint8_t)(scale - sm_weights[c])};
1326
0
            uint32_t       this_pred = 0;
1327
0
            assert(scale >= sm_weights[c]);
1328
0
            for (int i = 0; i < 2; ++i) {
1329
0
                this_pred += weights[i] * pixels[i];
1330
0
            }
1331
0
            dst[c] = (uint16_t)divide_round(this_pred, log2_scale);
1332
0
        }
1333
0
    }
1334
0
}
1335
1336
static INLINE void highbd_dc_128_predictor(uint16_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh,
1337
0
                                           const uint16_t* above, const uint16_t* left, int32_t bd) {
1338
0
    (void)above;
1339
0
    (void)left;
1340
1341
0
    for (int32_t r = 0; r < bh; r++) {
1342
0
        svt_aom_memset16(dst, 128 << (bd - 8), bw);
1343
0
        dst += stride;
1344
0
    }
1345
0
}
1346
1347
static INLINE void highbd_dc_left_predictor(uint16_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh,
1348
0
                                            const uint16_t* above, const uint16_t* left, int32_t bd) {
1349
0
    int32_t sum = 0;
1350
0
    (void)above;
1351
0
    (void)bd;
1352
1353
0
    for (int32_t i = 0; i < bh; i++) {
1354
0
        sum += left[i];
1355
0
    }
1356
0
    int32_t expected_dc = (sum + (bh >> 1)) / bh;
1357
1358
0
    for (int32_t r = 0; r < bh; r++) {
1359
0
        svt_aom_memset16(dst, expected_dc, bw);
1360
0
        dst += stride;
1361
0
    }
1362
0
}
1363
1364
static INLINE void highbd_dc_top_predictor(uint16_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh,
1365
0
                                           const uint16_t* above, const uint16_t* left, int32_t bd) {
1366
0
    int32_t sum = 0;
1367
0
    (void)left;
1368
0
    (void)bd;
1369
1370
0
    for (int32_t i = 0; i < bw; i++) {
1371
0
        sum += above[i];
1372
0
    }
1373
0
    int32_t expected_dc = (sum + (bw >> 1)) / bw;
1374
1375
0
    for (int32_t r = 0; r < bh; r++) {
1376
0
        svt_aom_memset16(dst, expected_dc, bw);
1377
0
        dst += stride;
1378
0
    }
1379
0
}
1380
1381
static INLINE void highbd_dc_predictor(uint16_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint16_t* above,
1382
0
                                       const uint16_t* left, int32_t bd) {
1383
0
    int32_t       sum   = 0;
1384
0
    const int32_t count = bw + bh;
1385
0
    (void)bd;
1386
1387
0
    for (int32_t i = 0; i < bw; i++) {
1388
0
        sum += above[i];
1389
0
    }
1390
0
    for (int32_t i = 0; i < bh; i++) {
1391
0
        sum += left[i];
1392
0
    }
1393
0
    int32_t expected_dc = (sum + (count >> 1)) / count;
1394
1395
0
    for (int32_t r = 0; r < bh; r++) {
1396
0
        svt_aom_memset16(dst, expected_dc, bw);
1397
0
        dst += stride;
1398
0
    }
1399
0
}
1400
#endif
1401
1402
#define intra_pred_sized(type, width, height)                                        \
1403
    void svt_aom_##type##_predictor_##width##x##height##_c(                          \
1404
1.46M
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
1.46M
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
1.46M
    }
svt_aom_dc_predictor_4x4_c
Line
Count
Source
1404
1.01M
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
1.01M
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
1.01M
    }
svt_aom_dc_predictor_8x8_c
Line
Count
Source
1404
180k
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
180k
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
180k
    }
svt_aom_dc_predictor_16x16_c
Line
Count
Source
1404
52
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
52
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
52
    }
svt_aom_dc_predictor_32x32_c
Line
Count
Source
1404
144
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
144
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
144
    }
svt_aom_dc_predictor_64x64_c
Line
Count
Source
1404
144
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
144
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
144
    }
Unexecuted instantiation: svt_aom_dc_predictor_4x8_c
Unexecuted instantiation: svt_aom_dc_predictor_4x16_c
Unexecuted instantiation: svt_aom_dc_predictor_8x4_c
Unexecuted instantiation: svt_aom_dc_predictor_8x16_c
Unexecuted instantiation: svt_aom_dc_predictor_8x32_c
Unexecuted instantiation: svt_aom_dc_predictor_16x4_c
Unexecuted instantiation: svt_aom_dc_predictor_16x8_c
Unexecuted instantiation: svt_aom_dc_predictor_16x32_c
Unexecuted instantiation: svt_aom_dc_predictor_16x64_c
Unexecuted instantiation: svt_aom_dc_predictor_32x8_c
Unexecuted instantiation: svt_aom_dc_predictor_32x16_c
Unexecuted instantiation: svt_aom_dc_predictor_32x64_c
Unexecuted instantiation: svt_aom_dc_predictor_64x16_c
Unexecuted instantiation: svt_aom_dc_predictor_64x32_c
svt_aom_dc_128_predictor_4x4_c
Line
Count
Source
1404
8.96k
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
8.96k
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
8.96k
    }
svt_aom_dc_128_predictor_8x8_c
Line
Count
Source
1404
5.44k
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
5.44k
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
5.44k
    }
svt_aom_dc_128_predictor_16x16_c
Line
Count
Source
1404
1.20k
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
1.20k
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
1.20k
    }
svt_aom_dc_128_predictor_32x32_c
Line
Count
Source
1404
4.53k
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
4.53k
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
4.53k
    }
svt_aom_dc_128_predictor_64x64_c
Line
Count
Source
1404
3.97k
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
3.97k
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
3.97k
    }
Unexecuted instantiation: svt_aom_dc_128_predictor_4x8_c
Unexecuted instantiation: svt_aom_dc_128_predictor_4x16_c
Unexecuted instantiation: svt_aom_dc_128_predictor_8x4_c
Unexecuted instantiation: svt_aom_dc_128_predictor_8x16_c
Unexecuted instantiation: svt_aom_dc_128_predictor_8x32_c
Unexecuted instantiation: svt_aom_dc_128_predictor_16x4_c
Unexecuted instantiation: svt_aom_dc_128_predictor_16x8_c
Unexecuted instantiation: svt_aom_dc_128_predictor_16x32_c
Unexecuted instantiation: svt_aom_dc_128_predictor_16x64_c
Unexecuted instantiation: svt_aom_dc_128_predictor_32x8_c
Unexecuted instantiation: svt_aom_dc_128_predictor_32x16_c
Unexecuted instantiation: svt_aom_dc_128_predictor_32x64_c
Unexecuted instantiation: svt_aom_dc_128_predictor_64x16_c
Unexecuted instantiation: svt_aom_dc_128_predictor_64x32_c
svt_aom_dc_left_predictor_4x4_c
Line
Count
Source
1404
91.2k
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
91.2k
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
91.2k
    }
svt_aom_dc_left_predictor_8x8_c
Line
Count
Source
1404
31.2k
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
31.2k
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
31.2k
    }
svt_aom_dc_left_predictor_16x16_c
Line
Count
Source
1404
1.26k
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
1.26k
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
1.26k
    }
svt_aom_dc_left_predictor_32x32_c
Line
Count
Source
1404
1.35k
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
1.35k
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
1.35k
    }
svt_aom_dc_left_predictor_64x64_c
Line
Count
Source
1404
1.01k
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
1.01k
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
1.01k
    }
Unexecuted instantiation: svt_aom_dc_left_predictor_4x8_c
Unexecuted instantiation: svt_aom_dc_left_predictor_4x16_c
Unexecuted instantiation: svt_aom_dc_left_predictor_8x4_c
Unexecuted instantiation: svt_aom_dc_left_predictor_8x16_c
Unexecuted instantiation: svt_aom_dc_left_predictor_8x32_c
Unexecuted instantiation: svt_aom_dc_left_predictor_16x4_c
Unexecuted instantiation: svt_aom_dc_left_predictor_16x8_c
Unexecuted instantiation: svt_aom_dc_left_predictor_16x32_c
Unexecuted instantiation: svt_aom_dc_left_predictor_16x64_c
Unexecuted instantiation: svt_aom_dc_left_predictor_32x8_c
Unexecuted instantiation: svt_aom_dc_left_predictor_32x16_c
Unexecuted instantiation: svt_aom_dc_left_predictor_32x64_c
Unexecuted instantiation: svt_aom_dc_left_predictor_64x16_c
Unexecuted instantiation: svt_aom_dc_left_predictor_64x32_c
svt_aom_dc_top_predictor_4x4_c
Line
Count
Source
1404
86.2k
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
86.2k
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
86.2k
    }
svt_aom_dc_top_predictor_8x8_c
Line
Count
Source
1404
30.4k
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
30.4k
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
30.4k
    }
svt_aom_dc_top_predictor_16x16_c
Line
Count
Source
1404
1.39k
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
1.39k
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
1.39k
    }
svt_aom_dc_top_predictor_32x32_c
Line
Count
Source
1404
604
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
604
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
604
    }
svt_aom_dc_top_predictor_64x64_c
Line
Count
Source
1404
420
        uint8_t* dst, ptrdiff_t stride, const uint8_t* above, const uint8_t* left) { \
1405
420
        type##_predictor(dst, stride, width, height, above, left);                   \
1406
420
    }
Unexecuted instantiation: svt_aom_dc_top_predictor_4x8_c
Unexecuted instantiation: svt_aom_dc_top_predictor_4x16_c
Unexecuted instantiation: svt_aom_dc_top_predictor_8x4_c
Unexecuted instantiation: svt_aom_dc_top_predictor_8x16_c
Unexecuted instantiation: svt_aom_dc_top_predictor_8x32_c
Unexecuted instantiation: svt_aom_dc_top_predictor_16x4_c
Unexecuted instantiation: svt_aom_dc_top_predictor_16x8_c
Unexecuted instantiation: svt_aom_dc_top_predictor_16x32_c
Unexecuted instantiation: svt_aom_dc_top_predictor_16x64_c
Unexecuted instantiation: svt_aom_dc_top_predictor_32x8_c
Unexecuted instantiation: svt_aom_dc_top_predictor_32x16_c
Unexecuted instantiation: svt_aom_dc_top_predictor_32x64_c
Unexecuted instantiation: svt_aom_dc_top_predictor_64x16_c
Unexecuted instantiation: svt_aom_dc_top_predictor_64x32_c
Unexecuted instantiation: svt_aom_v_predictor_4x4_c
Unexecuted instantiation: svt_aom_v_predictor_8x8_c
Unexecuted instantiation: svt_aom_v_predictor_16x16_c
Unexecuted instantiation: svt_aom_v_predictor_32x32_c
Unexecuted instantiation: svt_aom_v_predictor_64x64_c
Unexecuted instantiation: svt_aom_v_predictor_4x8_c
Unexecuted instantiation: svt_aom_v_predictor_4x16_c
Unexecuted instantiation: svt_aom_v_predictor_8x4_c
Unexecuted instantiation: svt_aom_v_predictor_8x16_c
Unexecuted instantiation: svt_aom_v_predictor_8x32_c
Unexecuted instantiation: svt_aom_v_predictor_16x4_c
Unexecuted instantiation: svt_aom_v_predictor_16x8_c
Unexecuted instantiation: svt_aom_v_predictor_16x32_c
Unexecuted instantiation: svt_aom_v_predictor_16x64_c
Unexecuted instantiation: svt_aom_v_predictor_32x8_c
Unexecuted instantiation: svt_aom_v_predictor_32x16_c
Unexecuted instantiation: svt_aom_v_predictor_32x64_c
Unexecuted instantiation: svt_aom_v_predictor_64x16_c
Unexecuted instantiation: svt_aom_v_predictor_64x32_c
Unexecuted instantiation: svt_aom_h_predictor_4x4_c
Unexecuted instantiation: svt_aom_h_predictor_8x8_c
Unexecuted instantiation: svt_aom_h_predictor_16x16_c
Unexecuted instantiation: svt_aom_h_predictor_32x32_c
Unexecuted instantiation: svt_aom_h_predictor_64x64_c
Unexecuted instantiation: svt_aom_h_predictor_4x8_c
Unexecuted instantiation: svt_aom_h_predictor_4x16_c
Unexecuted instantiation: svt_aom_h_predictor_8x4_c
Unexecuted instantiation: svt_aom_h_predictor_8x16_c
Unexecuted instantiation: svt_aom_h_predictor_8x32_c
Unexecuted instantiation: svt_aom_h_predictor_16x4_c
Unexecuted instantiation: svt_aom_h_predictor_16x8_c
Unexecuted instantiation: svt_aom_h_predictor_16x32_c
Unexecuted instantiation: svt_aom_h_predictor_16x64_c
Unexecuted instantiation: svt_aom_h_predictor_32x8_c
Unexecuted instantiation: svt_aom_h_predictor_32x16_c
Unexecuted instantiation: svt_aom_h_predictor_32x64_c
Unexecuted instantiation: svt_aom_h_predictor_64x16_c
Unexecuted instantiation: svt_aom_h_predictor_64x32_c
Unexecuted instantiation: svt_aom_smooth_predictor_4x4_c
Unexecuted instantiation: svt_aom_smooth_predictor_8x8_c
Unexecuted instantiation: svt_aom_smooth_predictor_16x16_c
Unexecuted instantiation: svt_aom_smooth_predictor_32x32_c
Unexecuted instantiation: svt_aom_smooth_predictor_64x64_c
Unexecuted instantiation: svt_aom_smooth_predictor_4x8_c
Unexecuted instantiation: svt_aom_smooth_predictor_4x16_c
Unexecuted instantiation: svt_aom_smooth_predictor_8x4_c
Unexecuted instantiation: svt_aom_smooth_predictor_8x16_c
Unexecuted instantiation: svt_aom_smooth_predictor_8x32_c
Unexecuted instantiation: svt_aom_smooth_predictor_16x4_c
Unexecuted instantiation: svt_aom_smooth_predictor_16x8_c
Unexecuted instantiation: svt_aom_smooth_predictor_16x32_c
Unexecuted instantiation: svt_aom_smooth_predictor_16x64_c
Unexecuted instantiation: svt_aom_smooth_predictor_32x8_c
Unexecuted instantiation: svt_aom_smooth_predictor_32x16_c
Unexecuted instantiation: svt_aom_smooth_predictor_32x64_c
Unexecuted instantiation: svt_aom_smooth_predictor_64x16_c
Unexecuted instantiation: svt_aom_smooth_predictor_64x32_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_4x4_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_8x8_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_16x16_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_32x32_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_64x64_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_4x8_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_4x16_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_8x4_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_8x16_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_8x32_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_16x4_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_16x8_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_16x32_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_16x64_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_32x8_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_32x16_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_32x64_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_64x16_c
Unexecuted instantiation: svt_aom_smooth_h_predictor_64x32_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_4x4_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_8x8_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_16x16_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_32x32_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_64x64_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_4x8_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_4x16_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_8x4_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_8x16_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_8x32_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_16x4_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_16x8_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_16x32_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_16x64_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_32x8_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_32x16_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_32x64_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_64x16_c
Unexecuted instantiation: svt_aom_smooth_v_predictor_64x32_c
Unexecuted instantiation: svt_aom_paeth_predictor_4x4_c
Unexecuted instantiation: svt_aom_paeth_predictor_8x8_c
Unexecuted instantiation: svt_aom_paeth_predictor_16x16_c
Unexecuted instantiation: svt_aom_paeth_predictor_32x32_c
Unexecuted instantiation: svt_aom_paeth_predictor_64x64_c
Unexecuted instantiation: svt_aom_paeth_predictor_4x8_c
Unexecuted instantiation: svt_aom_paeth_predictor_4x16_c
Unexecuted instantiation: svt_aom_paeth_predictor_8x4_c
Unexecuted instantiation: svt_aom_paeth_predictor_8x16_c
Unexecuted instantiation: svt_aom_paeth_predictor_8x32_c
Unexecuted instantiation: svt_aom_paeth_predictor_16x4_c
Unexecuted instantiation: svt_aom_paeth_predictor_16x8_c
Unexecuted instantiation: svt_aom_paeth_predictor_16x32_c
Unexecuted instantiation: svt_aom_paeth_predictor_16x64_c
Unexecuted instantiation: svt_aom_paeth_predictor_32x8_c
Unexecuted instantiation: svt_aom_paeth_predictor_32x16_c
Unexecuted instantiation: svt_aom_paeth_predictor_32x64_c
Unexecuted instantiation: svt_aom_paeth_predictor_64x16_c
Unexecuted instantiation: svt_aom_paeth_predictor_64x32_c
1407
1408
intra_pred_sized(dc, 4, 4);
1409
intra_pred_sized(dc, 8, 8);
1410
intra_pred_sized(dc, 16, 16);
1411
intra_pred_sized(dc, 32, 32);
1412
intra_pred_sized(dc, 64, 64);
1413
intra_pred_sized(dc, 4, 8);
1414
intra_pred_sized(dc, 4, 16);
1415
intra_pred_sized(dc, 8, 4);
1416
intra_pred_sized(dc, 8, 16);
1417
intra_pred_sized(dc, 8, 32);
1418
intra_pred_sized(dc, 16, 4);
1419
intra_pred_sized(dc, 16, 8);
1420
intra_pred_sized(dc, 16, 32);
1421
intra_pred_sized(dc, 16, 64);
1422
intra_pred_sized(dc, 32, 8);
1423
intra_pred_sized(dc, 32, 16);
1424
intra_pred_sized(dc, 32, 64);
1425
intra_pred_sized(dc, 64, 16);
1426
intra_pred_sized(dc, 64, 32);
1427
1428
intra_pred_sized(dc_128, 4, 4);
1429
intra_pred_sized(dc_128, 8, 8);
1430
intra_pred_sized(dc_128, 16, 16);
1431
intra_pred_sized(dc_128, 32, 32);
1432
intra_pred_sized(dc_128, 64, 64);
1433
intra_pred_sized(dc_128, 4, 8);
1434
intra_pred_sized(dc_128, 4, 16);
1435
intra_pred_sized(dc_128, 8, 4);
1436
intra_pred_sized(dc_128, 8, 16);
1437
intra_pred_sized(dc_128, 8, 32);
1438
intra_pred_sized(dc_128, 16, 4);
1439
intra_pred_sized(dc_128, 16, 8);
1440
intra_pred_sized(dc_128, 16, 32);
1441
intra_pred_sized(dc_128, 16, 64);
1442
intra_pred_sized(dc_128, 32, 8);
1443
intra_pred_sized(dc_128, 32, 16);
1444
intra_pred_sized(dc_128, 32, 64);
1445
intra_pred_sized(dc_128, 64, 16);
1446
intra_pred_sized(dc_128, 64, 32);
1447
1448
intra_pred_sized(dc_left, 4, 4);
1449
intra_pred_sized(dc_left, 8, 8);
1450
intra_pred_sized(dc_left, 16, 16);
1451
intra_pred_sized(dc_left, 32, 32);
1452
intra_pred_sized(dc_left, 64, 64);
1453
intra_pred_sized(dc_left, 4, 8);
1454
intra_pred_sized(dc_left, 4, 16);
1455
intra_pred_sized(dc_left, 8, 4);
1456
intra_pred_sized(dc_left, 8, 16);
1457
intra_pred_sized(dc_left, 8, 32);
1458
intra_pred_sized(dc_left, 16, 4);
1459
intra_pred_sized(dc_left, 16, 8);
1460
intra_pred_sized(dc_left, 16, 32);
1461
intra_pred_sized(dc_left, 16, 64);
1462
intra_pred_sized(dc_left, 32, 8);
1463
intra_pred_sized(dc_left, 32, 16);
1464
intra_pred_sized(dc_left, 32, 64);
1465
intra_pred_sized(dc_left, 64, 16);
1466
intra_pred_sized(dc_left, 64, 32);
1467
1468
intra_pred_sized(dc_top, 4, 4);
1469
intra_pred_sized(dc_top, 8, 8);
1470
intra_pred_sized(dc_top, 16, 16);
1471
intra_pred_sized(dc_top, 32, 32);
1472
intra_pred_sized(dc_top, 64, 64);
1473
intra_pred_sized(dc_top, 4, 8);
1474
intra_pred_sized(dc_top, 4, 16);
1475
intra_pred_sized(dc_top, 8, 4);
1476
intra_pred_sized(dc_top, 8, 16);
1477
intra_pred_sized(dc_top, 8, 32);
1478
intra_pred_sized(dc_top, 16, 4);
1479
intra_pred_sized(dc_top, 16, 8);
1480
intra_pred_sized(dc_top, 16, 32);
1481
intra_pred_sized(dc_top, 16, 64);
1482
intra_pred_sized(dc_top, 32, 8);
1483
intra_pred_sized(dc_top, 32, 16);
1484
intra_pred_sized(dc_top, 32, 64);
1485
intra_pred_sized(dc_top, 64, 16);
1486
intra_pred_sized(dc_top, 64, 32);
1487
intra_pred_sized(v, 4, 4);
1488
intra_pred_sized(v, 8, 8);
1489
intra_pred_sized(v, 16, 16);
1490
intra_pred_sized(v, 32, 32);
1491
intra_pred_sized(v, 64, 64);
1492
intra_pred_sized(v, 4, 8);
1493
intra_pred_sized(v, 4, 16);
1494
intra_pred_sized(v, 8, 4);
1495
intra_pred_sized(v, 8, 16);
1496
intra_pred_sized(v, 8, 32);
1497
intra_pred_sized(v, 16, 4);
1498
intra_pred_sized(v, 16, 8);
1499
intra_pred_sized(v, 16, 32);
1500
intra_pred_sized(v, 16, 64);
1501
intra_pred_sized(v, 32, 8);
1502
intra_pred_sized(v, 32, 16);
1503
intra_pred_sized(v, 32, 64);
1504
intra_pred_sized(v, 64, 16);
1505
intra_pred_sized(v, 64, 32);
1506
intra_pred_sized(h, 4, 4);
1507
intra_pred_sized(h, 8, 8);
1508
intra_pred_sized(h, 16, 16);
1509
intra_pred_sized(h, 32, 32);
1510
intra_pred_sized(h, 64, 64);
1511
intra_pred_sized(h, 4, 8);
1512
intra_pred_sized(h, 4, 16);
1513
intra_pred_sized(h, 8, 4);
1514
intra_pred_sized(h, 8, 16);
1515
intra_pred_sized(h, 8, 32);
1516
intra_pred_sized(h, 16, 4);
1517
intra_pred_sized(h, 16, 8);
1518
intra_pred_sized(h, 16, 32);
1519
intra_pred_sized(h, 16, 64);
1520
intra_pred_sized(h, 32, 8);
1521
intra_pred_sized(h, 32, 16);
1522
intra_pred_sized(h, 32, 64);
1523
intra_pred_sized(h, 64, 16);
1524
intra_pred_sized(h, 64, 32);
1525
intra_pred_sized(smooth, 4, 4);
1526
intra_pred_sized(smooth, 8, 8);
1527
intra_pred_sized(smooth, 16, 16);
1528
intra_pred_sized(smooth, 32, 32);
1529
intra_pred_sized(smooth, 64, 64);
1530
intra_pred_sized(smooth, 4, 8);
1531
intra_pred_sized(smooth, 4, 16);
1532
intra_pred_sized(smooth, 8, 4);
1533
intra_pred_sized(smooth, 8, 16);
1534
intra_pred_sized(smooth, 8, 32);
1535
intra_pred_sized(smooth, 16, 4);
1536
intra_pred_sized(smooth, 16, 8);
1537
intra_pred_sized(smooth, 16, 32);
1538
intra_pred_sized(smooth, 16, 64);
1539
intra_pred_sized(smooth, 32, 8);
1540
intra_pred_sized(smooth, 32, 16);
1541
intra_pred_sized(smooth, 32, 64);
1542
intra_pred_sized(smooth, 64, 16);
1543
intra_pred_sized(smooth, 64, 32);
1544
intra_pred_sized(smooth_h, 4, 4);
1545
intra_pred_sized(smooth_h, 8, 8);
1546
intra_pred_sized(smooth_h, 16, 16);
1547
intra_pred_sized(smooth_h, 32, 32);
1548
intra_pred_sized(smooth_h, 64, 64);
1549
intra_pred_sized(smooth_h, 4, 8);
1550
intra_pred_sized(smooth_h, 4, 16);
1551
intra_pred_sized(smooth_h, 8, 4);
1552
intra_pred_sized(smooth_h, 8, 16);
1553
intra_pred_sized(smooth_h, 8, 32);
1554
intra_pred_sized(smooth_h, 16, 4);
1555
intra_pred_sized(smooth_h, 16, 8);
1556
intra_pred_sized(smooth_h, 16, 32);
1557
intra_pred_sized(smooth_h, 16, 64);
1558
intra_pred_sized(smooth_h, 32, 8);
1559
intra_pred_sized(smooth_h, 32, 16);
1560
intra_pred_sized(smooth_h, 32, 64);
1561
intra_pred_sized(smooth_h, 64, 16);
1562
intra_pred_sized(smooth_h, 64, 32);
1563
intra_pred_sized(smooth_v, 4, 4);
1564
intra_pred_sized(smooth_v, 8, 8);
1565
intra_pred_sized(smooth_v, 16, 16);
1566
intra_pred_sized(smooth_v, 32, 32);
1567
intra_pred_sized(smooth_v, 64, 64);
1568
intra_pred_sized(smooth_v, 4, 8);
1569
intra_pred_sized(smooth_v, 4, 16);
1570
intra_pred_sized(smooth_v, 8, 4);
1571
intra_pred_sized(smooth_v, 8, 16);
1572
intra_pred_sized(smooth_v, 8, 32);
1573
intra_pred_sized(smooth_v, 16, 4);
1574
intra_pred_sized(smooth_v, 16, 8);
1575
intra_pred_sized(smooth_v, 16, 32);
1576
intra_pred_sized(smooth_v, 16, 64);
1577
intra_pred_sized(smooth_v, 32, 8);
1578
intra_pred_sized(smooth_v, 32, 16);
1579
intra_pred_sized(smooth_v, 32, 64);
1580
intra_pred_sized(smooth_v, 64, 16);
1581
intra_pred_sized(smooth_v, 64, 32);
1582
intra_pred_sized(paeth, 4, 4);
1583
intra_pred_sized(paeth, 8, 8);
1584
intra_pred_sized(paeth, 16, 16);
1585
intra_pred_sized(paeth, 32, 32);
1586
intra_pred_sized(paeth, 64, 64);
1587
intra_pred_sized(paeth, 4, 8);
1588
intra_pred_sized(paeth, 4, 16);
1589
intra_pred_sized(paeth, 8, 4);
1590
intra_pred_sized(paeth, 8, 16);
1591
intra_pred_sized(paeth, 8, 32);
1592
intra_pred_sized(paeth, 16, 4);
1593
intra_pred_sized(paeth, 16, 8);
1594
intra_pred_sized(paeth, 16, 32);
1595
intra_pred_sized(paeth, 16, 64);
1596
intra_pred_sized(paeth, 32, 8);
1597
intra_pred_sized(paeth, 32, 16);
1598
intra_pred_sized(paeth, 32, 64);
1599
intra_pred_sized(paeth, 64, 16);
1600
intra_pred_sized(paeth, 64, 32);
1601
#if CONFIG_ENABLE_HIGH_BIT_DEPTH
1602
#define intra_pred_highbd_sized(type, width, height)                                                \
1603
    void svt_aom_highbd_##type##_predictor_##width##x##height##_c(                                  \
1604
0
        uint16_t* dst, ptrdiff_t stride, const uint16_t* above, const uint16_t* left, int32_t bd) { \
1605
0
        highbd_##type##_predictor(dst, stride, width, height, above, left, bd);                     \
1606
0
    };
Unexecuted instantiation: svt_aom_highbd_dc_predictor_4x4_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_8x8_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_16x16_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_32x32_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_64x64_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_4x8_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_4x16_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_8x4_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_8x16_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_8x32_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_16x4_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_16x8_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_16x32_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_16x64_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_32x8_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_32x16_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_32x64_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_64x16_c
Unexecuted instantiation: svt_aom_highbd_dc_predictor_64x32_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_4x4_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_8x8_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_16x16_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_32x32_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_64x64_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_4x8_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_4x16_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_8x4_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_8x16_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_8x32_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_16x4_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_16x8_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_16x32_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_16x64_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_32x8_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_32x16_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_32x64_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_64x16_c
Unexecuted instantiation: svt_aom_highbd_dc_128_predictor_64x32_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_4x4_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_8x8_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_16x16_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_32x32_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_64x64_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_4x8_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_4x16_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_8x4_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_8x16_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_8x32_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_16x4_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_16x8_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_16x32_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_16x64_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_32x8_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_32x16_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_32x64_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_64x16_c
Unexecuted instantiation: svt_aom_highbd_dc_left_predictor_64x32_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_4x4_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_8x8_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_16x16_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_32x32_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_64x64_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_4x8_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_4x16_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_8x4_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_8x16_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_8x32_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_16x4_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_16x8_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_16x32_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_16x64_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_32x8_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_32x16_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_32x64_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_64x16_c
Unexecuted instantiation: svt_aom_highbd_dc_top_predictor_64x32_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_4x4_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_8x8_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_16x16_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_32x32_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_64x64_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_4x8_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_4x16_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_8x4_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_8x16_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_8x32_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_16x4_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_16x8_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_16x32_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_16x64_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_32x8_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_32x16_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_32x64_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_64x16_c
Unexecuted instantiation: svt_aom_highbd_v_predictor_64x32_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_4x4_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_8x8_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_16x16_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_32x32_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_64x64_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_4x8_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_4x16_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_8x4_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_8x16_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_8x32_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_16x4_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_16x8_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_16x32_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_16x64_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_32x8_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_32x16_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_32x64_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_64x16_c
Unexecuted instantiation: svt_aom_highbd_h_predictor_64x32_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_4x4_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_8x8_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_16x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_32x32_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_64x64_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_4x8_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_4x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_8x4_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_8x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_8x32_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_16x4_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_16x8_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_16x32_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_16x64_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_32x8_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_32x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_32x64_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_64x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_predictor_64x32_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_4x4_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_8x8_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_16x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_32x32_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_64x64_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_4x8_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_4x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_8x4_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_8x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_8x32_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_16x4_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_16x8_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_16x32_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_16x64_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_32x8_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_32x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_32x64_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_64x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_h_predictor_64x32_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_4x4_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_8x8_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_16x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_32x32_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_64x64_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_4x8_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_4x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_8x4_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_8x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_8x32_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_16x4_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_16x8_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_16x32_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_16x64_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_32x8_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_32x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_32x64_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_64x16_c
Unexecuted instantiation: svt_aom_highbd_smooth_v_predictor_64x32_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_4x4_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_8x8_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_16x16_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_32x32_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_64x64_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_4x8_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_4x16_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_8x4_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_8x16_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_8x32_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_16x4_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_16x8_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_16x32_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_16x64_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_32x8_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_32x16_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_32x64_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_64x16_c
Unexecuted instantiation: svt_aom_highbd_paeth_predictor_64x32_c
1607
1608
intra_pred_highbd_sized(dc, 4, 4);
1609
intra_pred_highbd_sized(dc, 8, 8);
1610
intra_pred_highbd_sized(dc, 16, 16);
1611
intra_pred_highbd_sized(dc, 32, 32);
1612
intra_pred_highbd_sized(dc, 64, 64);
1613
intra_pred_highbd_sized(dc, 4, 8);
1614
intra_pred_highbd_sized(dc, 4, 16);
1615
intra_pred_highbd_sized(dc, 8, 4);
1616
intra_pred_highbd_sized(dc, 8, 16);
1617
intra_pred_highbd_sized(dc, 8, 32);
1618
intra_pred_highbd_sized(dc, 16, 4);
1619
intra_pred_highbd_sized(dc, 16, 8);
1620
intra_pred_highbd_sized(dc, 16, 32);
1621
intra_pred_highbd_sized(dc, 16, 64);
1622
intra_pred_highbd_sized(dc, 32, 8);
1623
intra_pred_highbd_sized(dc, 32, 16);
1624
intra_pred_highbd_sized(dc, 32, 64);
1625
intra_pred_highbd_sized(dc, 64, 16);
1626
intra_pred_highbd_sized(dc, 64, 32);
1627
1628
intra_pred_highbd_sized(dc_128, 4, 4);
1629
intra_pred_highbd_sized(dc_128, 8, 8);
1630
intra_pred_highbd_sized(dc_128, 16, 16);
1631
intra_pred_highbd_sized(dc_128, 32, 32);
1632
intra_pred_highbd_sized(dc_128, 64, 64);
1633
1634
intra_pred_highbd_sized(dc_128, 4, 8);
1635
intra_pred_highbd_sized(dc_128, 4, 16);
1636
intra_pred_highbd_sized(dc_128, 8, 4);
1637
intra_pred_highbd_sized(dc_128, 8, 16);
1638
intra_pred_highbd_sized(dc_128, 8, 32);
1639
intra_pred_highbd_sized(dc_128, 16, 4);
1640
intra_pred_highbd_sized(dc_128, 16, 8);
1641
intra_pred_highbd_sized(dc_128, 16, 32);
1642
intra_pred_highbd_sized(dc_128, 16, 64);
1643
intra_pred_highbd_sized(dc_128, 32, 8);
1644
intra_pred_highbd_sized(dc_128, 32, 16);
1645
intra_pred_highbd_sized(dc_128, 32, 64);
1646
intra_pred_highbd_sized(dc_128, 64, 16);
1647
intra_pred_highbd_sized(dc_128, 64, 32);
1648
1649
intra_pred_highbd_sized(dc_left, 4, 4);
1650
intra_pred_highbd_sized(dc_left, 8, 8);
1651
intra_pred_highbd_sized(dc_left, 16, 16);
1652
intra_pred_highbd_sized(dc_left, 32, 32);
1653
intra_pred_highbd_sized(dc_left, 64, 64);
1654
1655
intra_pred_highbd_sized(dc_left, 4, 8);
1656
intra_pred_highbd_sized(dc_left, 4, 16);
1657
intra_pred_highbd_sized(dc_left, 8, 4);
1658
intra_pred_highbd_sized(dc_left, 8, 16);
1659
intra_pred_highbd_sized(dc_left, 8, 32);
1660
intra_pred_highbd_sized(dc_left, 16, 4);
1661
intra_pred_highbd_sized(dc_left, 16, 8);
1662
intra_pred_highbd_sized(dc_left, 16, 32);
1663
intra_pred_highbd_sized(dc_left, 16, 64);
1664
intra_pred_highbd_sized(dc_left, 32, 8);
1665
intra_pred_highbd_sized(dc_left, 32, 16);
1666
intra_pred_highbd_sized(dc_left, 32, 64);
1667
intra_pred_highbd_sized(dc_left, 64, 16);
1668
intra_pred_highbd_sized(dc_left, 64, 32);
1669
1670
intra_pred_highbd_sized(dc_top, 4, 4);
1671
intra_pred_highbd_sized(dc_top, 8, 8);
1672
intra_pred_highbd_sized(dc_top, 16, 16);
1673
intra_pred_highbd_sized(dc_top, 32, 32);
1674
intra_pred_highbd_sized(dc_top, 64, 64);
1675
1676
intra_pred_highbd_sized(dc_top, 4, 8);
1677
intra_pred_highbd_sized(dc_top, 4, 16);
1678
intra_pred_highbd_sized(dc_top, 8, 4);
1679
intra_pred_highbd_sized(dc_top, 8, 16);
1680
intra_pred_highbd_sized(dc_top, 8, 32);
1681
intra_pred_highbd_sized(dc_top, 16, 4);
1682
intra_pred_highbd_sized(dc_top, 16, 8);
1683
intra_pred_highbd_sized(dc_top, 16, 32);
1684
intra_pred_highbd_sized(dc_top, 16, 64);
1685
intra_pred_highbd_sized(dc_top, 32, 8);
1686
intra_pred_highbd_sized(dc_top, 32, 16);
1687
intra_pred_highbd_sized(dc_top, 32, 64);
1688
intra_pred_highbd_sized(dc_top, 64, 16);
1689
intra_pred_highbd_sized(dc_top, 64, 32);
1690
1691
intra_pred_highbd_sized(v, 4, 4);
1692
intra_pred_highbd_sized(v, 8, 8);
1693
intra_pred_highbd_sized(v, 16, 16);
1694
intra_pred_highbd_sized(v, 32, 32);
1695
intra_pred_highbd_sized(v, 64, 64);
1696
1697
intra_pred_highbd_sized(v, 4, 8);
1698
intra_pred_highbd_sized(v, 4, 16);
1699
intra_pred_highbd_sized(v, 8, 4);
1700
intra_pred_highbd_sized(v, 8, 16);
1701
intra_pred_highbd_sized(v, 8, 32);
1702
intra_pred_highbd_sized(v, 16, 4);
1703
intra_pred_highbd_sized(v, 16, 8);
1704
intra_pred_highbd_sized(v, 16, 32);
1705
intra_pred_highbd_sized(v, 16, 64);
1706
intra_pred_highbd_sized(v, 32, 8);
1707
intra_pred_highbd_sized(v, 32, 16);
1708
intra_pred_highbd_sized(v, 32, 64);
1709
intra_pred_highbd_sized(v, 64, 16);
1710
intra_pred_highbd_sized(v, 64, 32);
1711
1712
intra_pred_highbd_sized(h, 4, 4);
1713
intra_pred_highbd_sized(h, 8, 8);
1714
intra_pred_highbd_sized(h, 16, 16);
1715
intra_pred_highbd_sized(h, 32, 32);
1716
intra_pred_highbd_sized(h, 64, 64);
1717
1718
intra_pred_highbd_sized(h, 4, 8);
1719
intra_pred_highbd_sized(h, 4, 16);
1720
intra_pred_highbd_sized(h, 8, 4);
1721
intra_pred_highbd_sized(h, 8, 16);
1722
intra_pred_highbd_sized(h, 8, 32);
1723
intra_pred_highbd_sized(h, 16, 4);
1724
intra_pred_highbd_sized(h, 16, 8);
1725
intra_pred_highbd_sized(h, 16, 32);
1726
intra_pred_highbd_sized(h, 16, 64);
1727
intra_pred_highbd_sized(h, 32, 8);
1728
intra_pred_highbd_sized(h, 32, 16);
1729
intra_pred_highbd_sized(h, 32, 64);
1730
intra_pred_highbd_sized(h, 64, 16);
1731
intra_pred_highbd_sized(h, 64, 32);
1732
1733
intra_pred_highbd_sized(smooth, 4, 4);
1734
intra_pred_highbd_sized(smooth, 8, 8);
1735
intra_pred_highbd_sized(smooth, 16, 16);
1736
intra_pred_highbd_sized(smooth, 32, 32);
1737
intra_pred_highbd_sized(smooth, 64, 64);
1738
1739
intra_pred_highbd_sized(smooth, 4, 8);
1740
intra_pred_highbd_sized(smooth, 4, 16);
1741
intra_pred_highbd_sized(smooth, 8, 4);
1742
intra_pred_highbd_sized(smooth, 8, 16);
1743
intra_pred_highbd_sized(smooth, 8, 32);
1744
intra_pred_highbd_sized(smooth, 16, 4);
1745
intra_pred_highbd_sized(smooth, 16, 8);
1746
intra_pred_highbd_sized(smooth, 16, 32);
1747
intra_pred_highbd_sized(smooth, 16, 64);
1748
intra_pred_highbd_sized(smooth, 32, 8);
1749
intra_pred_highbd_sized(smooth, 32, 16);
1750
intra_pred_highbd_sized(smooth, 32, 64);
1751
intra_pred_highbd_sized(smooth, 64, 16);
1752
intra_pred_highbd_sized(smooth, 64, 32);
1753
1754
intra_pred_highbd_sized(smooth_h, 4, 4);
1755
intra_pred_highbd_sized(smooth_h, 8, 8);
1756
intra_pred_highbd_sized(smooth_h, 16, 16);
1757
intra_pred_highbd_sized(smooth_h, 32, 32);
1758
intra_pred_highbd_sized(smooth_h, 64, 64);
1759
1760
intra_pred_highbd_sized(smooth_h, 4, 8);
1761
intra_pred_highbd_sized(smooth_h, 4, 16);
1762
intra_pred_highbd_sized(smooth_h, 8, 4);
1763
intra_pred_highbd_sized(smooth_h, 8, 16);
1764
intra_pred_highbd_sized(smooth_h, 8, 32);
1765
intra_pred_highbd_sized(smooth_h, 16, 4);
1766
intra_pred_highbd_sized(smooth_h, 16, 8);
1767
intra_pred_highbd_sized(smooth_h, 16, 32);
1768
intra_pred_highbd_sized(smooth_h, 16, 64);
1769
intra_pred_highbd_sized(smooth_h, 32, 8);
1770
intra_pred_highbd_sized(smooth_h, 32, 16);
1771
intra_pred_highbd_sized(smooth_h, 32, 64);
1772
intra_pred_highbd_sized(smooth_h, 64, 16);
1773
intra_pred_highbd_sized(smooth_h, 64, 32);
1774
1775
intra_pred_highbd_sized(smooth_v, 4, 4);
1776
intra_pred_highbd_sized(smooth_v, 8, 8);
1777
intra_pred_highbd_sized(smooth_v, 16, 16);
1778
intra_pred_highbd_sized(smooth_v, 32, 32);
1779
intra_pred_highbd_sized(smooth_v, 64, 64);
1780
1781
intra_pred_highbd_sized(smooth_v, 4, 8);
1782
intra_pred_highbd_sized(smooth_v, 4, 16);
1783
intra_pred_highbd_sized(smooth_v, 8, 4);
1784
intra_pred_highbd_sized(smooth_v, 8, 16);
1785
intra_pred_highbd_sized(smooth_v, 8, 32);
1786
intra_pred_highbd_sized(smooth_v, 16, 4);
1787
intra_pred_highbd_sized(smooth_v, 16, 8);
1788
intra_pred_highbd_sized(smooth_v, 16, 32);
1789
intra_pred_highbd_sized(smooth_v, 16, 64);
1790
intra_pred_highbd_sized(smooth_v, 32, 8);
1791
intra_pred_highbd_sized(smooth_v, 32, 16);
1792
intra_pred_highbd_sized(smooth_v, 32, 64);
1793
intra_pred_highbd_sized(smooth_v, 64, 16);
1794
intra_pred_highbd_sized(smooth_v, 64, 32);
1795
1796
intra_pred_highbd_sized(paeth, 4, 4);
1797
intra_pred_highbd_sized(paeth, 8, 8);
1798
intra_pred_highbd_sized(paeth, 16, 16);
1799
intra_pred_highbd_sized(paeth, 32, 32);
1800
intra_pred_highbd_sized(paeth, 64, 64);
1801
intra_pred_highbd_sized(paeth, 4, 8);
1802
intra_pred_highbd_sized(paeth, 4, 16);
1803
intra_pred_highbd_sized(paeth, 8, 4);
1804
intra_pred_highbd_sized(paeth, 8, 16);
1805
intra_pred_highbd_sized(paeth, 8, 32);
1806
intra_pred_highbd_sized(paeth, 16, 4);
1807
intra_pred_highbd_sized(paeth, 16, 8);
1808
intra_pred_highbd_sized(paeth, 16, 32);
1809
intra_pred_highbd_sized(paeth, 16, 64);
1810
intra_pred_highbd_sized(paeth, 32, 8);
1811
intra_pred_highbd_sized(paeth, 32, 16);
1812
intra_pred_highbd_sized(paeth, 32, 64);
1813
intra_pred_highbd_sized(paeth, 64, 16);
1814
intra_pred_highbd_sized(paeth, 64, 32);
1815
#endif
1816
1817
static IntraPredFnC dc_pred_c[2][2];
1818
#if CONFIG_ENABLE_HIGH_BIT_DEPTH
1819
static IntraHighBdPredFnC highbd_dc_pred_c[2][2];
1820
#endif
1821
1822
1
void svt_aom_init_intra_dc_predictors_c_internal(void) {
1823
1
    dc_pred_c[0][0] = dc_128_predictor;
1824
1
    dc_pred_c[0][1] = dc_top_predictor;
1825
1
    dc_pred_c[1][0] = dc_left_predictor;
1826
1
    dc_pred_c[1][1] = dc_predictor;
1827
1828
1
#if CONFIG_ENABLE_HIGH_BIT_DEPTH
1829
1
    highbd_dc_pred_c[0][0] = highbd_dc_128_predictor;
1830
1
    highbd_dc_pred_c[0][1] = highbd_dc_top_predictor;
1831
1
    highbd_dc_pred_c[1][0] = highbd_dc_left_predictor;
1832
1
    highbd_dc_pred_c[1][1] = highbd_dc_predictor;
1833
1
#endif
1834
1
}
1835
1836
1
/*static*/ void svt_aom_init_intra_predictors_internal(void) {
1837
1
    svt_aom_eb_pred[V_PRED][TX_4X4]   = svt_aom_v_predictor_4x4;
1838
1
    svt_aom_eb_pred[V_PRED][TX_8X8]   = svt_aom_v_predictor_8x8;
1839
1
    svt_aom_eb_pred[V_PRED][TX_16X16] = svt_aom_v_predictor_16x16;
1840
1
    svt_aom_eb_pred[V_PRED][TX_32X32] = svt_aom_v_predictor_32x32;
1841
1
    svt_aom_eb_pred[V_PRED][TX_64X64] = svt_aom_v_predictor_64x64;
1842
1
    svt_aom_eb_pred[V_PRED][TX_4X8]   = svt_aom_v_predictor_4x8;
1843
1
    svt_aom_eb_pred[V_PRED][TX_4X16]  = svt_aom_v_predictor_4x16;
1844
1845
1
    svt_aom_eb_pred[V_PRED][TX_8X4]  = svt_aom_v_predictor_8x4;
1846
1
    svt_aom_eb_pred[V_PRED][TX_8X16] = svt_aom_v_predictor_8x16;
1847
1
    svt_aom_eb_pred[V_PRED][TX_8X32] = svt_aom_v_predictor_8x32;
1848
1849
1
    svt_aom_eb_pred[V_PRED][TX_16X4]  = svt_aom_v_predictor_16x4;
1850
1
    svt_aom_eb_pred[V_PRED][TX_16X8]  = svt_aom_v_predictor_16x8;
1851
1
    svt_aom_eb_pred[V_PRED][TX_16X32] = svt_aom_v_predictor_16x32;
1852
1
    svt_aom_eb_pred[V_PRED][TX_16X64] = svt_aom_v_predictor_16x64;
1853
1854
1
    svt_aom_eb_pred[V_PRED][TX_32X8]  = svt_aom_v_predictor_32x8;
1855
1
    svt_aom_eb_pred[V_PRED][TX_32X16] = svt_aom_v_predictor_32x16;
1856
1
    svt_aom_eb_pred[V_PRED][TX_32X64] = svt_aom_v_predictor_32x64;
1857
1858
1
    svt_aom_eb_pred[V_PRED][TX_64X16] = svt_aom_v_predictor_64x16;
1859
1
    svt_aom_eb_pred[V_PRED][TX_64X32] = svt_aom_v_predictor_64x32;
1860
1861
1
    svt_aom_eb_pred[H_PRED][TX_4X4]   = svt_aom_h_predictor_4x4;
1862
1
    svt_aom_eb_pred[H_PRED][TX_8X8]   = svt_aom_h_predictor_8x8;
1863
1
    svt_aom_eb_pred[H_PRED][TX_16X16] = svt_aom_h_predictor_16x16;
1864
1
    svt_aom_eb_pred[H_PRED][TX_32X32] = svt_aom_h_predictor_32x32;
1865
1
    svt_aom_eb_pred[H_PRED][TX_64X64] = svt_aom_h_predictor_64x64;
1866
1867
1
    svt_aom_eb_pred[H_PRED][TX_4X8]  = svt_aom_h_predictor_4x8;
1868
1
    svt_aom_eb_pred[H_PRED][TX_4X16] = svt_aom_h_predictor_4x16;
1869
1870
1
    svt_aom_eb_pred[H_PRED][TX_8X4]  = svt_aom_h_predictor_8x4;
1871
1
    svt_aom_eb_pred[H_PRED][TX_8X16] = svt_aom_h_predictor_8x16;
1872
1
    svt_aom_eb_pred[H_PRED][TX_8X32] = svt_aom_h_predictor_8x32;
1873
1874
1
    svt_aom_eb_pred[H_PRED][TX_16X4]  = svt_aom_h_predictor_16x4;
1875
1
    svt_aom_eb_pred[H_PRED][TX_16X8]  = svt_aom_h_predictor_16x8;
1876
1
    svt_aom_eb_pred[H_PRED][TX_16X32] = svt_aom_h_predictor_16x32;
1877
1
    svt_aom_eb_pred[H_PRED][TX_16X64] = svt_aom_h_predictor_16x64;
1878
1879
1
    svt_aom_eb_pred[H_PRED][TX_32X8]  = svt_aom_h_predictor_32x8;
1880
1
    svt_aom_eb_pred[H_PRED][TX_32X16] = svt_aom_h_predictor_32x16;
1881
1
    svt_aom_eb_pred[H_PRED][TX_32X64] = svt_aom_h_predictor_32x64;
1882
1883
1
    svt_aom_eb_pred[H_PRED][TX_64X16] = svt_aom_h_predictor_64x16;
1884
1
    svt_aom_eb_pred[H_PRED][TX_64X32] = svt_aom_h_predictor_64x32;
1885
1886
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_4X4]   = svt_aom_smooth_predictor_4x4;
1887
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_8X8]   = svt_aom_smooth_predictor_8x8;
1888
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_16X16] = svt_aom_smooth_predictor_16x16;
1889
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_32X32] = svt_aom_smooth_predictor_32x32;
1890
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_64X64] = svt_aom_smooth_predictor_64x64;
1891
1892
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_4X8]  = svt_aom_smooth_predictor_4x8;
1893
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_4X16] = svt_aom_smooth_predictor_4x16;
1894
1895
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_8X4]  = svt_aom_smooth_predictor_8x4;
1896
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_8X16] = svt_aom_smooth_predictor_8x16;
1897
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_8X32] = svt_aom_smooth_predictor_8x32;
1898
1899
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_16X4]  = svt_aom_smooth_predictor_16x4;
1900
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_16X8]  = svt_aom_smooth_predictor_16x8;
1901
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_16X32] = svt_aom_smooth_predictor_16x32;
1902
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_16X64] = svt_aom_smooth_predictor_16x64;
1903
1904
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_32X8]  = svt_aom_smooth_predictor_32x8;
1905
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_32X16] = svt_aom_smooth_predictor_32x16;
1906
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_32X64] = svt_aom_smooth_predictor_32x64;
1907
1908
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_64X16] = svt_aom_smooth_predictor_64x16;
1909
1
    svt_aom_eb_pred[SMOOTH_PRED][TX_64X32] = svt_aom_smooth_predictor_64x32;
1910
1911
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_4X4]   = svt_aom_smooth_v_predictor_4x4;
1912
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_8X8]   = svt_aom_smooth_v_predictor_8x8;
1913
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_16X16] = svt_aom_smooth_v_predictor_16x16;
1914
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_32X32] = svt_aom_smooth_v_predictor_32x32;
1915
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_64X64] = svt_aom_smooth_v_predictor_64x64;
1916
1917
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_4X8]  = svt_aom_smooth_v_predictor_4x8;
1918
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_4X16] = svt_aom_smooth_v_predictor_4x16;
1919
1920
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_8X4]  = svt_aom_smooth_v_predictor_8x4;
1921
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_8X16] = svt_aom_smooth_v_predictor_8x16;
1922
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_8X32] = svt_aom_smooth_v_predictor_8x32;
1923
1924
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_16X4]  = svt_aom_smooth_v_predictor_16x4;
1925
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_16X8]  = svt_aom_smooth_v_predictor_16x8;
1926
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_16X32] = svt_aom_smooth_v_predictor_16x32;
1927
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_16X64] = svt_aom_smooth_v_predictor_16x64;
1928
1929
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_32X8]  = svt_aom_smooth_v_predictor_32x8;
1930
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_32X16] = svt_aom_smooth_v_predictor_32x16;
1931
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_32X64] = svt_aom_smooth_v_predictor_32x64;
1932
1933
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_64X16] = svt_aom_smooth_v_predictor_64x16;
1934
1
    svt_aom_eb_pred[SMOOTH_V_PRED][TX_64X32] = svt_aom_smooth_v_predictor_64x32;
1935
1936
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_4X4]   = svt_aom_smooth_h_predictor_4x4;
1937
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_8X8]   = svt_aom_smooth_h_predictor_8x8;
1938
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_16X16] = svt_aom_smooth_h_predictor_16x16;
1939
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_32X32] = svt_aom_smooth_h_predictor_32x32;
1940
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_64X64] = svt_aom_smooth_h_predictor_64x64;
1941
1942
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_4X8]  = svt_aom_smooth_h_predictor_4x8;
1943
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_4X16] = svt_aom_smooth_h_predictor_4x16;
1944
1945
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_8X4]  = svt_aom_smooth_h_predictor_8x4;
1946
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_8X16] = svt_aom_smooth_h_predictor_8x16;
1947
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_8X32] = svt_aom_smooth_h_predictor_8x32;
1948
1949
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_16X4]  = svt_aom_smooth_h_predictor_16x4;
1950
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_16X8]  = svt_aom_smooth_h_predictor_16x8;
1951
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_16X32] = svt_aom_smooth_h_predictor_16x32;
1952
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_16X64] = svt_aom_smooth_h_predictor_16x64;
1953
1954
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_32X8]  = svt_aom_smooth_h_predictor_32x8;
1955
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_32X16] = svt_aom_smooth_h_predictor_32x16;
1956
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_32X64] = svt_aom_smooth_h_predictor_32x64;
1957
1958
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_64X16] = svt_aom_smooth_h_predictor_64x16;
1959
1
    svt_aom_eb_pred[SMOOTH_H_PRED][TX_64X32] = svt_aom_smooth_h_predictor_64x32;
1960
1961
1
    svt_aom_eb_pred[PAETH_PRED][TX_4X4]   = svt_aom_paeth_predictor_4x4;
1962
1
    svt_aom_eb_pred[PAETH_PRED][TX_8X8]   = svt_aom_paeth_predictor_8x8;
1963
1
    svt_aom_eb_pred[PAETH_PRED][TX_16X16] = svt_aom_paeth_predictor_16x16;
1964
1
    svt_aom_eb_pred[PAETH_PRED][TX_32X32] = svt_aom_paeth_predictor_32x32;
1965
1
    svt_aom_eb_pred[PAETH_PRED][TX_64X64] = svt_aom_paeth_predictor_64x64;
1966
1967
1
    svt_aom_eb_pred[PAETH_PRED][TX_4X8]  = svt_aom_paeth_predictor_4x8;
1968
1
    svt_aom_eb_pred[PAETH_PRED][TX_4X16] = svt_aom_paeth_predictor_4x16;
1969
1970
1
    svt_aom_eb_pred[PAETH_PRED][TX_8X4]  = svt_aom_paeth_predictor_8x4;
1971
1
    svt_aom_eb_pred[PAETH_PRED][TX_8X16] = svt_aom_paeth_predictor_8x16;
1972
1
    svt_aom_eb_pred[PAETH_PRED][TX_8X32] = svt_aom_paeth_predictor_8x32;
1973
1974
1
    svt_aom_eb_pred[PAETH_PRED][TX_16X4]  = svt_aom_paeth_predictor_16x4;
1975
1
    svt_aom_eb_pred[PAETH_PRED][TX_16X8]  = svt_aom_paeth_predictor_16x8;
1976
1
    svt_aom_eb_pred[PAETH_PRED][TX_16X32] = svt_aom_paeth_predictor_16x32;
1977
1
    svt_aom_eb_pred[PAETH_PRED][TX_16X64] = svt_aom_paeth_predictor_16x64;
1978
1979
1
    svt_aom_eb_pred[PAETH_PRED][TX_32X8]  = svt_aom_paeth_predictor_32x8;
1980
1
    svt_aom_eb_pred[PAETH_PRED][TX_32X16] = svt_aom_paeth_predictor_32x16;
1981
1
    svt_aom_eb_pred[PAETH_PRED][TX_32X64] = svt_aom_paeth_predictor_32x64;
1982
1983
1
    svt_aom_eb_pred[PAETH_PRED][TX_64X16] = svt_aom_paeth_predictor_64x16;
1984
1
    svt_aom_eb_pred[PAETH_PRED][TX_64X32] = svt_aom_paeth_predictor_64x32;
1985
1
    svt_aom_dc_pred[0][0][TX_4X4]         = svt_aom_dc_128_predictor_4x4;
1986
1
    svt_aom_dc_pred[0][0][TX_8X8]         = svt_aom_dc_128_predictor_8x8;
1987
1
    svt_aom_dc_pred[0][0][TX_16X16]       = svt_aom_dc_128_predictor_16x16;
1988
1
    svt_aom_dc_pred[0][0][TX_32X32]       = svt_aom_dc_128_predictor_32x32;
1989
1
    svt_aom_dc_pred[0][0][TX_64X64]       = svt_aom_dc_128_predictor_64x64;
1990
1991
1
    svt_aom_dc_pred[0][0][TX_4X8]  = svt_aom_dc_128_predictor_4x8;
1992
1
    svt_aom_dc_pred[0][0][TX_4X16] = svt_aom_dc_128_predictor_4x16;
1993
1994
1
    svt_aom_dc_pred[0][0][TX_8X4]  = svt_aom_dc_128_predictor_8x4;
1995
1
    svt_aom_dc_pred[0][0][TX_8X16] = svt_aom_dc_128_predictor_8x16;
1996
1
    svt_aom_dc_pred[0][0][TX_8X32] = svt_aom_dc_128_predictor_8x32;
1997
1998
1
    svt_aom_dc_pred[0][0][TX_16X4]  = svt_aom_dc_128_predictor_16x4;
1999
1
    svt_aom_dc_pred[0][0][TX_16X8]  = svt_aom_dc_128_predictor_16x8;
2000
1
    svt_aom_dc_pred[0][0][TX_16X32] = svt_aom_dc_128_predictor_16x32;
2001
1
    svt_aom_dc_pred[0][0][TX_16X64] = svt_aom_dc_128_predictor_16x64;
2002
2003
1
    svt_aom_dc_pred[0][0][TX_32X8]  = svt_aom_dc_128_predictor_32x8;
2004
1
    svt_aom_dc_pred[0][0][TX_32X16] = svt_aom_dc_128_predictor_32x16;
2005
1
    svt_aom_dc_pred[0][0][TX_32X64] = svt_aom_dc_128_predictor_32x64;
2006
2007
1
    svt_aom_dc_pred[0][0][TX_64X16] = svt_aom_dc_128_predictor_64x16;
2008
1
    svt_aom_dc_pred[0][0][TX_64X32] = svt_aom_dc_128_predictor_64x32;
2009
2010
1
    svt_aom_dc_pred[0][1][TX_4X4]   = svt_aom_dc_top_predictor_4x4;
2011
1
    svt_aom_dc_pred[0][1][TX_8X8]   = svt_aom_dc_top_predictor_8x8;
2012
1
    svt_aom_dc_pred[0][1][TX_16X16] = svt_aom_dc_top_predictor_16x16;
2013
1
    svt_aom_dc_pred[0][1][TX_32X32] = svt_aom_dc_top_predictor_32x32;
2014
1
    svt_aom_dc_pred[0][1][TX_64X64] = svt_aom_dc_top_predictor_64x64;
2015
2016
1
    svt_aom_dc_pred[0][1][TX_4X8]  = svt_aom_dc_top_predictor_4x8;
2017
1
    svt_aom_dc_pred[0][1][TX_4X16] = svt_aom_dc_top_predictor_4x16;
2018
2019
1
    svt_aom_dc_pred[0][1][TX_8X4]  = svt_aom_dc_top_predictor_8x4;
2020
1
    svt_aom_dc_pred[0][1][TX_8X16] = svt_aom_dc_top_predictor_8x16;
2021
1
    svt_aom_dc_pred[0][1][TX_8X32] = svt_aom_dc_top_predictor_8x32;
2022
2023
1
    svt_aom_dc_pred[0][1][TX_16X4]  = svt_aom_dc_top_predictor_16x4;
2024
1
    svt_aom_dc_pred[0][1][TX_16X8]  = svt_aom_dc_top_predictor_16x8;
2025
1
    svt_aom_dc_pred[0][1][TX_16X32] = svt_aom_dc_top_predictor_16x32;
2026
1
    svt_aom_dc_pred[0][1][TX_16X64] = svt_aom_dc_top_predictor_16x64;
2027
2028
1
    svt_aom_dc_pred[0][1][TX_32X8]  = svt_aom_dc_top_predictor_32x8;
2029
1
    svt_aom_dc_pred[0][1][TX_32X16] = svt_aom_dc_top_predictor_32x16;
2030
1
    svt_aom_dc_pred[0][1][TX_32X64] = svt_aom_dc_top_predictor_32x64;
2031
2032
1
    svt_aom_dc_pred[0][1][TX_64X16] = svt_aom_dc_top_predictor_64x16;
2033
1
    svt_aom_dc_pred[0][1][TX_64X32] = svt_aom_dc_top_predictor_64x32;
2034
2035
1
    svt_aom_dc_pred[1][0][TX_4X4]   = svt_aom_dc_left_predictor_4x4;
2036
1
    svt_aom_dc_pred[1][0][TX_8X8]   = svt_aom_dc_left_predictor_8x8;
2037
1
    svt_aom_dc_pred[1][0][TX_16X16] = svt_aom_dc_left_predictor_16x16;
2038
1
    svt_aom_dc_pred[1][0][TX_32X32] = svt_aom_dc_left_predictor_32x32;
2039
1
    svt_aom_dc_pred[1][0][TX_64X64] = svt_aom_dc_left_predictor_64x64;
2040
1
    svt_aom_dc_pred[1][0][TX_4X8]   = svt_aom_dc_left_predictor_4x8;
2041
1
    svt_aom_dc_pred[1][0][TX_4X16]  = svt_aom_dc_left_predictor_4x16;
2042
2043
1
    svt_aom_dc_pred[1][0][TX_8X4]  = svt_aom_dc_left_predictor_8x4;
2044
1
    svt_aom_dc_pred[1][0][TX_8X16] = svt_aom_dc_left_predictor_8x16;
2045
1
    svt_aom_dc_pred[1][0][TX_8X32] = svt_aom_dc_left_predictor_8x32;
2046
2047
1
    svt_aom_dc_pred[1][0][TX_16X4]  = svt_aom_dc_left_predictor_16x4;
2048
1
    svt_aom_dc_pred[1][0][TX_16X8]  = svt_aom_dc_left_predictor_16x8;
2049
1
    svt_aom_dc_pred[1][0][TX_16X32] = svt_aom_dc_left_predictor_16x32;
2050
1
    svt_aom_dc_pred[1][0][TX_16X64] = svt_aom_dc_left_predictor_16x64;
2051
2052
1
    svt_aom_dc_pred[1][0][TX_32X8]  = svt_aom_dc_left_predictor_32x8;
2053
1
    svt_aom_dc_pred[1][0][TX_32X16] = svt_aom_dc_left_predictor_32x16;
2054
1
    svt_aom_dc_pred[1][0][TX_32X64] = svt_aom_dc_left_predictor_32x64;
2055
2056
1
    svt_aom_dc_pred[1][0][TX_64X16] = svt_aom_dc_left_predictor_64x16;
2057
1
    svt_aom_dc_pred[1][0][TX_64X32] = svt_aom_dc_left_predictor_64x32;
2058
2059
1
    svt_aom_dc_pred[1][1][TX_4X4]   = svt_aom_dc_predictor_4x4;
2060
1
    svt_aom_dc_pred[1][1][TX_8X8]   = svt_aom_dc_predictor_8x8;
2061
1
    svt_aom_dc_pred[1][1][TX_16X16] = svt_aom_dc_predictor_16x16;
2062
1
    svt_aom_dc_pred[1][1][TX_32X32] = svt_aom_dc_predictor_32x32;
2063
1
    svt_aom_dc_pred[1][1][TX_64X64] = svt_aom_dc_predictor_64x64;
2064
1
    svt_aom_dc_pred[1][1][TX_4X8]   = svt_aom_dc_predictor_4x8;
2065
1
    svt_aom_dc_pred[1][1][TX_4X16]  = svt_aom_dc_predictor_4x16;
2066
2067
1
    svt_aom_dc_pred[1][1][TX_8X4]  = svt_aom_dc_predictor_8x4;
2068
1
    svt_aom_dc_pred[1][1][TX_8X16] = svt_aom_dc_predictor_8x16;
2069
1
    svt_aom_dc_pred[1][1][TX_8X32] = svt_aom_dc_predictor_8x32;
2070
2071
1
    svt_aom_dc_pred[1][1][TX_16X4]  = svt_aom_dc_predictor_16x4;
2072
1
    svt_aom_dc_pred[1][1][TX_16X8]  = svt_aom_dc_predictor_16x8;
2073
1
    svt_aom_dc_pred[1][1][TX_16X32] = svt_aom_dc_predictor_16x32;
2074
1
    svt_aom_dc_pred[1][1][TX_16X64] = svt_aom_dc_predictor_16x64;
2075
2076
1
    svt_aom_dc_pred[1][1][TX_32X8]  = svt_aom_dc_predictor_32x8;
2077
1
    svt_aom_dc_pred[1][1][TX_32X16] = svt_aom_dc_predictor_32x16;
2078
1
    svt_aom_dc_pred[1][1][TX_32X64] = svt_aom_dc_predictor_32x64;
2079
2080
1
    svt_aom_dc_pred[1][1][TX_64X16] = svt_aom_dc_predictor_64x16;
2081
1
    svt_aom_dc_pred[1][1][TX_64X32] = svt_aom_dc_predictor_64x32;
2082
2083
1
#if CONFIG_ENABLE_HIGH_BIT_DEPTH
2084
1
    svt_aom_pred_high[V_PRED][TX_4X4]   = svt_aom_highbd_v_predictor_4x4;
2085
1
    svt_aom_pred_high[V_PRED][TX_8X8]   = svt_aom_highbd_v_predictor_8x8;
2086
1
    svt_aom_pred_high[V_PRED][TX_16X16] = svt_aom_highbd_v_predictor_16x16;
2087
1
    svt_aom_pred_high[V_PRED][TX_32X32] = svt_aom_highbd_v_predictor_32x32;
2088
1
    svt_aom_pred_high[V_PRED][TX_64X64] = svt_aom_highbd_v_predictor_64x64;
2089
2090
1
    svt_aom_pred_high[V_PRED][TX_4X8]  = svt_aom_highbd_v_predictor_4x8;
2091
1
    svt_aom_pred_high[V_PRED][TX_4X16] = svt_aom_highbd_v_predictor_4x16;
2092
2093
1
    svt_aom_pred_high[V_PRED][TX_8X4]  = svt_aom_highbd_v_predictor_8x4;
2094
1
    svt_aom_pred_high[V_PRED][TX_8X16] = svt_aom_highbd_v_predictor_8x16;
2095
1
    svt_aom_pred_high[V_PRED][TX_8X32] = svt_aom_highbd_v_predictor_8x32;
2096
2097
1
    svt_aom_pred_high[V_PRED][TX_16X4]  = svt_aom_highbd_v_predictor_16x4;
2098
1
    svt_aom_pred_high[V_PRED][TX_16X8]  = svt_aom_highbd_v_predictor_16x8;
2099
1
    svt_aom_pred_high[V_PRED][TX_16X32] = svt_aom_highbd_v_predictor_16x32;
2100
1
    svt_aom_pred_high[V_PRED][TX_16X64] = svt_aom_highbd_v_predictor_16x64;
2101
2102
1
    svt_aom_pred_high[V_PRED][TX_32X8]  = svt_aom_highbd_v_predictor_32x8;
2103
1
    svt_aom_pred_high[V_PRED][TX_32X16] = svt_aom_highbd_v_predictor_32x16;
2104
1
    svt_aom_pred_high[V_PRED][TX_32X64] = svt_aom_highbd_v_predictor_32x64;
2105
2106
1
    svt_aom_pred_high[V_PRED][TX_64X16] = svt_aom_highbd_v_predictor_64x16;
2107
1
    svt_aom_pred_high[V_PRED][TX_64X32] = svt_aom_highbd_v_predictor_64x32;
2108
2109
1
    svt_aom_pred_high[H_PRED][TX_4X4]   = svt_aom_highbd_h_predictor_4x4;
2110
1
    svt_aom_pred_high[H_PRED][TX_8X8]   = svt_aom_highbd_h_predictor_8x8;
2111
1
    svt_aom_pred_high[H_PRED][TX_16X16] = svt_aom_highbd_h_predictor_16x16;
2112
1
    svt_aom_pred_high[H_PRED][TX_32X32] = svt_aom_highbd_h_predictor_32x32;
2113
1
    svt_aom_pred_high[H_PRED][TX_64X64] = svt_aom_highbd_h_predictor_64x64;
2114
2115
1
    svt_aom_pred_high[H_PRED][TX_4X8]  = svt_aom_highbd_h_predictor_4x8;
2116
1
    svt_aom_pred_high[H_PRED][TX_4X16] = svt_aom_highbd_h_predictor_4x16;
2117
2118
1
    svt_aom_pred_high[H_PRED][TX_8X4]  = svt_aom_highbd_h_predictor_8x4;
2119
1
    svt_aom_pred_high[H_PRED][TX_8X16] = svt_aom_highbd_h_predictor_8x16;
2120
1
    svt_aom_pred_high[H_PRED][TX_8X32] = svt_aom_highbd_h_predictor_8x32;
2121
2122
1
    svt_aom_pred_high[H_PRED][TX_16X4]  = svt_aom_highbd_h_predictor_16x4;
2123
1
    svt_aom_pred_high[H_PRED][TX_16X8]  = svt_aom_highbd_h_predictor_16x8;
2124
1
    svt_aom_pred_high[H_PRED][TX_16X32] = svt_aom_highbd_h_predictor_16x32;
2125
1
    svt_aom_pred_high[H_PRED][TX_16X64] = svt_aom_highbd_h_predictor_16x64;
2126
2127
1
    svt_aom_pred_high[H_PRED][TX_32X8]  = svt_aom_highbd_h_predictor_32x8;
2128
1
    svt_aom_pred_high[H_PRED][TX_32X16] = svt_aom_highbd_h_predictor_32x16;
2129
1
    svt_aom_pred_high[H_PRED][TX_32X64] = svt_aom_highbd_h_predictor_32x64;
2130
2131
1
    svt_aom_pred_high[H_PRED][TX_64X16] = svt_aom_highbd_h_predictor_64x16;
2132
1
    svt_aom_pred_high[H_PRED][TX_64X32] = svt_aom_highbd_h_predictor_64x32;
2133
2134
1
    svt_aom_pred_high[SMOOTH_PRED][TX_4X4]   = svt_aom_highbd_smooth_predictor_4x4;
2135
1
    svt_aom_pred_high[SMOOTH_PRED][TX_8X8]   = svt_aom_highbd_smooth_predictor_8x8;
2136
1
    svt_aom_pred_high[SMOOTH_PRED][TX_16X16] = svt_aom_highbd_smooth_predictor_16x16;
2137
1
    svt_aom_pred_high[SMOOTH_PRED][TX_32X32] = svt_aom_highbd_smooth_predictor_32x32;
2138
1
    svt_aom_pred_high[SMOOTH_PRED][TX_64X64] = svt_aom_highbd_smooth_predictor_64x64;
2139
2140
1
    svt_aom_pred_high[SMOOTH_PRED][TX_4X8]  = svt_aom_highbd_smooth_predictor_4x8;
2141
1
    svt_aom_pred_high[SMOOTH_PRED][TX_4X16] = svt_aom_highbd_smooth_predictor_4x16;
2142
2143
1
    svt_aom_pred_high[SMOOTH_PRED][TX_8X4]  = svt_aom_highbd_smooth_predictor_8x4;
2144
1
    svt_aom_pred_high[SMOOTH_PRED][TX_8X16] = svt_aom_highbd_smooth_predictor_8x16;
2145
1
    svt_aom_pred_high[SMOOTH_PRED][TX_8X32] = svt_aom_highbd_smooth_predictor_8x32;
2146
2147
1
    svt_aom_pred_high[SMOOTH_PRED][TX_16X4]  = svt_aom_highbd_smooth_predictor_16x4;
2148
1
    svt_aom_pred_high[SMOOTH_PRED][TX_16X8]  = svt_aom_highbd_smooth_predictor_16x8;
2149
1
    svt_aom_pred_high[SMOOTH_PRED][TX_16X32] = svt_aom_highbd_smooth_predictor_16x32;
2150
1
    svt_aom_pred_high[SMOOTH_PRED][TX_16X64] = svt_aom_highbd_smooth_predictor_16x64;
2151
2152
1
    svt_aom_pred_high[SMOOTH_PRED][TX_32X8]  = svt_aom_highbd_smooth_predictor_32x8;
2153
1
    svt_aom_pred_high[SMOOTH_PRED][TX_32X16] = svt_aom_highbd_smooth_predictor_32x16;
2154
1
    svt_aom_pred_high[SMOOTH_PRED][TX_32X64] = svt_aom_highbd_smooth_predictor_32x64;
2155
2156
1
    svt_aom_pred_high[SMOOTH_PRED][TX_64X16] = svt_aom_highbd_smooth_predictor_64x16;
2157
1
    svt_aom_pred_high[SMOOTH_PRED][TX_64X32] = svt_aom_highbd_smooth_predictor_64x32;
2158
2159
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_4X4]   = svt_aom_highbd_smooth_v_predictor_4x4;
2160
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_8X8]   = svt_aom_highbd_smooth_v_predictor_8x8;
2161
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_16X16] = svt_aom_highbd_smooth_v_predictor_16x16;
2162
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_32X32] = svt_aom_highbd_smooth_v_predictor_32x32;
2163
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_64X64] = svt_aom_highbd_smooth_v_predictor_64x64;
2164
2165
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_4X8]  = svt_aom_highbd_smooth_v_predictor_4x8;
2166
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_4X16] = svt_aom_highbd_smooth_v_predictor_4x16;
2167
2168
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_8X4]  = svt_aom_highbd_smooth_v_predictor_8x4;
2169
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_8X16] = svt_aom_highbd_smooth_v_predictor_8x16;
2170
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_8X32] = svt_aom_highbd_smooth_v_predictor_8x32;
2171
2172
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_16X4]  = svt_aom_highbd_smooth_v_predictor_16x4;
2173
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_16X8]  = svt_aom_highbd_smooth_v_predictor_16x8;
2174
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_16X32] = svt_aom_highbd_smooth_v_predictor_16x32;
2175
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_16X64] = svt_aom_highbd_smooth_v_predictor_16x64;
2176
2177
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_32X8]  = svt_aom_highbd_smooth_v_predictor_32x8;
2178
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_32X16] = svt_aom_highbd_smooth_v_predictor_32x16;
2179
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_32X64] = svt_aom_highbd_smooth_v_predictor_32x64;
2180
2181
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_64X16] = svt_aom_highbd_smooth_v_predictor_64x16;
2182
1
    svt_aom_pred_high[SMOOTH_V_PRED][TX_64X32] = svt_aom_highbd_smooth_v_predictor_64x32;
2183
2184
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_4X4]   = svt_aom_highbd_smooth_h_predictor_4x4;
2185
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_8X8]   = svt_aom_highbd_smooth_h_predictor_8x8;
2186
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_16X16] = svt_aom_highbd_smooth_h_predictor_16x16;
2187
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_32X32] = svt_aom_highbd_smooth_h_predictor_32x32;
2188
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_64X64] = svt_aom_highbd_smooth_h_predictor_64x64;
2189
2190
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_4X8]  = svt_aom_highbd_smooth_h_predictor_4x8;
2191
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_4X16] = svt_aom_highbd_smooth_h_predictor_4x16;
2192
2193
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_8X4]  = svt_aom_highbd_smooth_h_predictor_8x4;
2194
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_8X16] = svt_aom_highbd_smooth_h_predictor_8x16;
2195
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_8X32] = svt_aom_highbd_smooth_h_predictor_8x32;
2196
2197
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_16X4]  = svt_aom_highbd_smooth_h_predictor_16x4;
2198
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_16X8]  = svt_aom_highbd_smooth_h_predictor_16x8;
2199
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_16X32] = svt_aom_highbd_smooth_h_predictor_16x32;
2200
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_16X64] = svt_aom_highbd_smooth_h_predictor_16x64;
2201
2202
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_32X8]  = svt_aom_highbd_smooth_h_predictor_32x8;
2203
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_32X16] = svt_aom_highbd_smooth_h_predictor_32x16;
2204
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_32X64] = svt_aom_highbd_smooth_h_predictor_32x64;
2205
2206
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_64X16] = svt_aom_highbd_smooth_h_predictor_64x16;
2207
1
    svt_aom_pred_high[SMOOTH_H_PRED][TX_64X32] = svt_aom_highbd_smooth_h_predictor_64x32;
2208
2209
1
    svt_aom_pred_high[PAETH_PRED][TX_4X4]   = svt_aom_highbd_paeth_predictor_4x4;
2210
1
    svt_aom_pred_high[PAETH_PRED][TX_8X8]   = svt_aom_highbd_paeth_predictor_8x8;
2211
1
    svt_aom_pred_high[PAETH_PRED][TX_16X16] = svt_aom_highbd_paeth_predictor_16x16;
2212
1
    svt_aom_pred_high[PAETH_PRED][TX_32X32] = svt_aom_highbd_paeth_predictor_32x32;
2213
1
    svt_aom_pred_high[PAETH_PRED][TX_64X64] = svt_aom_highbd_paeth_predictor_64x64;
2214
2215
1
    svt_aom_pred_high[PAETH_PRED][TX_4X8]  = svt_aom_highbd_paeth_predictor_4x8;
2216
1
    svt_aom_pred_high[PAETH_PRED][TX_4X16] = svt_aom_highbd_paeth_predictor_4x16;
2217
2218
1
    svt_aom_pred_high[PAETH_PRED][TX_8X4]  = svt_aom_highbd_paeth_predictor_8x4;
2219
1
    svt_aom_pred_high[PAETH_PRED][TX_8X16] = svt_aom_highbd_paeth_predictor_8x16;
2220
1
    svt_aom_pred_high[PAETH_PRED][TX_8X32] = svt_aom_highbd_paeth_predictor_8x32;
2221
2222
1
    svt_aom_pred_high[PAETH_PRED][TX_16X4]  = svt_aom_highbd_paeth_predictor_16x4;
2223
1
    svt_aom_pred_high[PAETH_PRED][TX_16X8]  = svt_aom_highbd_paeth_predictor_16x8;
2224
1
    svt_aom_pred_high[PAETH_PRED][TX_16X32] = svt_aom_highbd_paeth_predictor_16x32;
2225
1
    svt_aom_pred_high[PAETH_PRED][TX_16X64] = svt_aom_highbd_paeth_predictor_16x64;
2226
2227
1
    svt_aom_pred_high[PAETH_PRED][TX_32X8]  = svt_aom_highbd_paeth_predictor_32x8;
2228
1
    svt_aom_pred_high[PAETH_PRED][TX_32X16] = svt_aom_highbd_paeth_predictor_32x16;
2229
1
    svt_aom_pred_high[PAETH_PRED][TX_32X64] = svt_aom_highbd_paeth_predictor_32x64;
2230
2231
1
    svt_aom_pred_high[PAETH_PRED][TX_64X16] = svt_aom_highbd_paeth_predictor_64x16;
2232
1
    svt_aom_pred_high[PAETH_PRED][TX_64X32] = svt_aom_highbd_paeth_predictor_64x32;
2233
1
    svt_aom_dc_pred_high[0][0][TX_4X4]      = svt_aom_highbd_dc_128_predictor_4x4;
2234
1
    svt_aom_dc_pred_high[0][0][TX_8X8]      = svt_aom_highbd_dc_128_predictor_8x8;
2235
1
    svt_aom_dc_pred_high[0][0][TX_16X16]    = svt_aom_highbd_dc_128_predictor_16x16;
2236
1
    svt_aom_dc_pred_high[0][0][TX_32X32]    = svt_aom_highbd_dc_128_predictor_32x32;
2237
1
    svt_aom_dc_pred_high[0][0][TX_64X64]    = svt_aom_highbd_dc_128_predictor_64x64;
2238
2239
1
    svt_aom_dc_pred_high[0][0][TX_4X8]  = svt_aom_highbd_dc_128_predictor_4x8;
2240
1
    svt_aom_dc_pred_high[0][0][TX_4X16] = svt_aom_highbd_dc_128_predictor_4x16;
2241
2242
1
    svt_aom_dc_pred_high[0][0][TX_8X4]  = svt_aom_highbd_dc_128_predictor_8x4;
2243
1
    svt_aom_dc_pred_high[0][0][TX_8X16] = svt_aom_highbd_dc_128_predictor_8x16;
2244
1
    svt_aom_dc_pred_high[0][0][TX_8X32] = svt_aom_highbd_dc_128_predictor_8x32;
2245
2246
1
    svt_aom_dc_pred_high[0][0][TX_16X4]  = svt_aom_highbd_dc_128_predictor_16x4;
2247
1
    svt_aom_dc_pred_high[0][0][TX_16X8]  = svt_aom_highbd_dc_128_predictor_16x8;
2248
1
    svt_aom_dc_pred_high[0][0][TX_16X32] = svt_aom_highbd_dc_128_predictor_16x32;
2249
1
    svt_aom_dc_pred_high[0][0][TX_16X64] = svt_aom_highbd_dc_128_predictor_16x64;
2250
2251
1
    svt_aom_dc_pred_high[0][0][TX_32X8]  = svt_aom_highbd_dc_128_predictor_32x8;
2252
1
    svt_aom_dc_pred_high[0][0][TX_32X16] = svt_aom_highbd_dc_128_predictor_32x16;
2253
1
    svt_aom_dc_pred_high[0][0][TX_32X64] = svt_aom_highbd_dc_128_predictor_32x64;
2254
2255
1
    svt_aom_dc_pred_high[0][0][TX_64X16] = svt_aom_highbd_dc_128_predictor_64x16;
2256
1
    svt_aom_dc_pred_high[0][0][TX_64X32] = svt_aom_highbd_dc_128_predictor_64x32;
2257
2258
1
    svt_aom_dc_pred_high[0][1][TX_4X4]   = svt_aom_highbd_dc_top_predictor_4x4;
2259
1
    svt_aom_dc_pred_high[0][1][TX_8X8]   = svt_aom_highbd_dc_top_predictor_8x8;
2260
1
    svt_aom_dc_pred_high[0][1][TX_16X16] = svt_aom_highbd_dc_top_predictor_16x16;
2261
1
    svt_aom_dc_pred_high[0][1][TX_32X32] = svt_aom_highbd_dc_top_predictor_32x32;
2262
1
    svt_aom_dc_pred_high[0][1][TX_64X64] = svt_aom_highbd_dc_top_predictor_64x64;
2263
2264
1
    svt_aom_dc_pred_high[0][1][TX_4X8]  = svt_aom_highbd_dc_top_predictor_4x8;
2265
1
    svt_aom_dc_pred_high[0][1][TX_4X16] = svt_aom_highbd_dc_top_predictor_4x16;
2266
2267
1
    svt_aom_dc_pred_high[0][1][TX_8X4]  = svt_aom_highbd_dc_top_predictor_8x4;
2268
1
    svt_aom_dc_pred_high[0][1][TX_8X16] = svt_aom_highbd_dc_top_predictor_8x16;
2269
1
    svt_aom_dc_pred_high[0][1][TX_8X32] = svt_aom_highbd_dc_top_predictor_8x32;
2270
2271
1
    svt_aom_dc_pred_high[0][1][TX_16X4]  = svt_aom_highbd_dc_top_predictor_16x4;
2272
1
    svt_aom_dc_pred_high[0][1][TX_16X8]  = svt_aom_highbd_dc_top_predictor_16x8;
2273
1
    svt_aom_dc_pred_high[0][1][TX_16X32] = svt_aom_highbd_dc_top_predictor_16x32;
2274
1
    svt_aom_dc_pred_high[0][1][TX_16X64] = svt_aom_highbd_dc_top_predictor_16x64;
2275
2276
1
    svt_aom_dc_pred_high[0][1][TX_32X8]  = svt_aom_highbd_dc_top_predictor_32x8;
2277
1
    svt_aom_dc_pred_high[0][1][TX_32X16] = svt_aom_highbd_dc_top_predictor_32x16;
2278
1
    svt_aom_dc_pred_high[0][1][TX_32X64] = svt_aom_highbd_dc_top_predictor_32x64;
2279
2280
1
    svt_aom_dc_pred_high[0][1][TX_64X16] = svt_aom_highbd_dc_top_predictor_64x16;
2281
1
    svt_aom_dc_pred_high[0][1][TX_64X32] = svt_aom_highbd_dc_top_predictor_64x32;
2282
2283
1
    svt_aom_dc_pred_high[1][0][TX_4X4]   = svt_aom_highbd_dc_left_predictor_4x4;
2284
1
    svt_aom_dc_pred_high[1][0][TX_8X8]   = svt_aom_highbd_dc_left_predictor_8x8;
2285
1
    svt_aom_dc_pred_high[1][0][TX_16X16] = svt_aom_highbd_dc_left_predictor_16x16;
2286
1
    svt_aom_dc_pred_high[1][0][TX_32X32] = svt_aom_highbd_dc_left_predictor_32x32;
2287
1
    svt_aom_dc_pred_high[1][0][TX_64X64] = svt_aom_highbd_dc_left_predictor_64x64;
2288
2289
1
    svt_aom_dc_pred_high[1][0][TX_4X8]  = svt_aom_highbd_dc_left_predictor_4x8;
2290
1
    svt_aom_dc_pred_high[1][0][TX_4X16] = svt_aom_highbd_dc_left_predictor_4x16;
2291
2292
1
    svt_aom_dc_pred_high[1][0][TX_8X4]  = svt_aom_highbd_dc_left_predictor_8x4;
2293
1
    svt_aom_dc_pred_high[1][0][TX_8X16] = svt_aom_highbd_dc_left_predictor_8x16;
2294
1
    svt_aom_dc_pred_high[1][0][TX_8X32] = svt_aom_highbd_dc_left_predictor_8x32;
2295
2296
1
    svt_aom_dc_pred_high[1][0][TX_16X4]  = svt_aom_highbd_dc_left_predictor_16x4;
2297
1
    svt_aom_dc_pred_high[1][0][TX_16X8]  = svt_aom_highbd_dc_left_predictor_16x8;
2298
1
    svt_aom_dc_pred_high[1][0][TX_16X32] = svt_aom_highbd_dc_left_predictor_16x32;
2299
1
    svt_aom_dc_pred_high[1][0][TX_16X64] = svt_aom_highbd_dc_left_predictor_16x64;
2300
2301
1
    svt_aom_dc_pred_high[1][0][TX_32X8]  = svt_aom_highbd_dc_left_predictor_32x8;
2302
1
    svt_aom_dc_pred_high[1][0][TX_32X16] = svt_aom_highbd_dc_left_predictor_32x16;
2303
1
    svt_aom_dc_pred_high[1][0][TX_32X64] = svt_aom_highbd_dc_left_predictor_32x64;
2304
2305
1
    svt_aom_dc_pred_high[1][0][TX_64X16] = svt_aom_highbd_dc_left_predictor_64x16;
2306
1
    svt_aom_dc_pred_high[1][0][TX_64X32] = svt_aom_highbd_dc_left_predictor_64x32;
2307
2308
1
    svt_aom_dc_pred_high[1][1][TX_4X4]   = svt_aom_highbd_dc_predictor_4x4;
2309
1
    svt_aom_dc_pred_high[1][1][TX_8X8]   = svt_aom_highbd_dc_predictor_8x8;
2310
1
    svt_aom_dc_pred_high[1][1][TX_16X16] = svt_aom_highbd_dc_predictor_16x16;
2311
1
    svt_aom_dc_pred_high[1][1][TX_32X32] = svt_aom_highbd_dc_predictor_32x32;
2312
1
    svt_aom_dc_pred_high[1][1][TX_64X64] = svt_aom_highbd_dc_predictor_64x64;
2313
2314
1
    svt_aom_dc_pred_high[1][1][TX_4X8]  = svt_aom_highbd_dc_predictor_4x8;
2315
1
    svt_aom_dc_pred_high[1][1][TX_4X16] = svt_aom_highbd_dc_predictor_4x16;
2316
2317
1
    svt_aom_dc_pred_high[1][1][TX_8X4]  = svt_aom_highbd_dc_predictor_8x4;
2318
1
    svt_aom_dc_pred_high[1][1][TX_8X16] = svt_aom_highbd_dc_predictor_8x16;
2319
1
    svt_aom_dc_pred_high[1][1][TX_8X32] = svt_aom_highbd_dc_predictor_8x32;
2320
2321
1
    svt_aom_dc_pred_high[1][1][TX_16X4]  = svt_aom_highbd_dc_predictor_16x4;
2322
1
    svt_aom_dc_pred_high[1][1][TX_16X8]  = svt_aom_highbd_dc_predictor_16x8;
2323
1
    svt_aom_dc_pred_high[1][1][TX_16X32] = svt_aom_highbd_dc_predictor_16x32;
2324
1
    svt_aom_dc_pred_high[1][1][TX_16X64] = svt_aom_highbd_dc_predictor_16x64;
2325
2326
1
    svt_aom_dc_pred_high[1][1][TX_32X8]  = svt_aom_highbd_dc_predictor_32x8;
2327
1
    svt_aom_dc_pred_high[1][1][TX_32X16] = svt_aom_highbd_dc_predictor_32x16;
2328
1
    svt_aom_dc_pred_high[1][1][TX_32X64] = svt_aom_highbd_dc_predictor_32x64;
2329
2330
1
    svt_aom_dc_pred_high[1][1][TX_64X16] = svt_aom_highbd_dc_predictor_64x16;
2331
1
    svt_aom_dc_pred_high[1][1][TX_64X32] = svt_aom_highbd_dc_predictor_64x32;
2332
1
#endif
2333
1
}
2334
2335
void svt_aom_dr_predictor(uint8_t* dst, ptrdiff_t stride, TxSize tx_size, const uint8_t* above, const uint8_t* left,
2336
0
                          int32_t upsample_above, int32_t upsample_left, int32_t angle) {
2337
0
    const int32_t dx = get_dx(angle);
2338
0
    const int32_t dy = get_dy(angle);
2339
0
    const int32_t bw = tx_size_wide[tx_size];
2340
0
    const int32_t bh = tx_size_high[tx_size];
2341
0
    assert(angle > 0 && angle < 270);
2342
2343
0
    if (angle > 0 && angle < 90) {
2344
0
        svt_av1_dr_prediction_z1(dst, stride, bw, bh, above, left, upsample_above, dx, dy);
2345
0
    } else if (angle > 90 && angle < 180) {
2346
0
        svt_av1_dr_prediction_z2(dst, stride, bw, bh, above, left, upsample_above, upsample_left, dx, dy);
2347
0
    } else if (angle > 180 && angle < 270) {
2348
0
        svt_av1_dr_prediction_z3(dst, stride, bw, bh, above, left, upsample_left, dx, dy);
2349
0
    } else if (angle == 90) {
2350
0
        svt_aom_eb_pred[V_PRED][tx_size](dst, stride, above, left);
2351
0
    } else if (angle == 180) {
2352
0
        svt_aom_eb_pred[H_PRED][tx_size](dst, stride, above, left);
2353
0
    }
2354
0
}
2355
2356
0
void filter_intra_edge_corner(uint8_t* p_above, uint8_t* p_left) {
2357
0
    const int32_t kernel[3] = {5, 6, 5};
2358
2359
0
    int32_t s   = (p_left[0] * kernel[0]) + (p_above[-1] * kernel[1]) + (p_above[0] * kernel[2]);
2360
0
    s           = (s + 8) >> 4;
2361
0
    p_above[-1] = (uint8_t)s;
2362
0
    p_left[-1]  = (uint8_t)s;
2363
0
}
2364
2365
// Directional prediction, zone 1: 0 < angle < 90
2366
#if CONFIG_ENABLE_HIGH_BIT_DEPTH
2367
void svt_av1_highbd_dr_prediction_z1_c(uint16_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint16_t* above,
2368
                                       const uint16_t* left, int32_t upsample_above, int32_t dx, int32_t dy,
2369
0
                                       int32_t bd) {
2370
0
    (void)left;
2371
0
    (void)dy;
2372
0
    (void)bd;
2373
0
    assert(dy == 1);
2374
0
    assert(dx > 0);
2375
2376
0
    const int32_t max_base_x = ((bw + bh) - 1) << upsample_above;
2377
0
    const int32_t frac_bits  = 6 - upsample_above;
2378
0
    const int32_t base_inc   = 1 << upsample_above;
2379
0
    for (int32_t r = 0, x = dx; r < bh; ++r, dst += stride, x += dx) {
2380
0
        int32_t       base  = x >> frac_bits;
2381
0
        const int32_t shift = ((x << upsample_above) & 0x3F) >> 1;
2382
2383
0
        if (base >= max_base_x) {
2384
0
            for (int32_t i = r; i < bh; ++i) {
2385
0
                svt_aom_memset16(dst, above[max_base_x], bw);
2386
0
                dst += stride;
2387
0
            }
2388
0
            return;
2389
0
        }
2390
2391
0
        for (int32_t c = 0; c < bw; ++c, base += base_inc) {
2392
0
            if (base < max_base_x) {
2393
0
                int32_t val = above[base] * (32 - shift) + above[base + 1] * shift;
2394
0
                val         = ROUND_POWER_OF_TWO(val, 5);
2395
0
                dst[c]      = (uint16_t)clip_pixel_highbd(val, bd);
2396
0
            } else {
2397
0
                dst[c] = above[max_base_x];
2398
0
            }
2399
0
        }
2400
0
    }
2401
0
}
2402
2403
// Directional prediction, zone 2: 90 < angle < 180
2404
void svt_av1_highbd_dr_prediction_z2_c(uint16_t* dst, ptrdiff_t stride, int32_t bw, int32_t bh, const uint16_t* above,
2405
                                       const uint16_t* left, int32_t upsample_above, int32_t upsample_left, int32_t dx,
2406
0
                                       int32_t dy, int32_t bd) {
2407
0
    (void)bd;
2408
0
    assert(dx > 0);
2409
0
    assert(dy > 0);
2410
2411
0
    const int32_t min_base_x  = -(1 << upsample_above);
2412
0
    const int32_t frac_bits_x = 6 - upsample_above;
2413
0
    const int32_t frac_bits_y = 6 - upsample_left;
2414
0
    for (int32_t r = 0; r < bh; ++r, dst += stride) {
2415
0
        for (int32_t c = 0; c < bw; ++c) {
2416
0
            int32_t y    = r + 1;
2417
0
            int32_t x    = (c << 6) - y * dx;
2418
0
            int32_t base = x >> frac_bits_x;
2419
0
            int32_t val;
2420
0
            if (base >= min_base_x) {
2421
0
                const int32_t shift = ((x * (1 << upsample_above)) & 0x3F) >> 1;
2422
0
                val                 = above[base] * (32 - shift) + above[base + 1] * shift;
2423
0
                val                 = ROUND_POWER_OF_TWO(val, 5);
2424
0
            } else {
2425
0
                x                   = c + 1;
2426
0
                y                   = (r << 6) - x * dy;
2427
0
                base                = y >> frac_bits_y;
2428
0
                const int32_t shift = ((y * (1 << upsample_left)) & 0x3F) >> 1;
2429
0
                val                 = left[base] * (32 - shift) + left[base + 1] * shift;
2430
0
                val                 = ROUND_POWER_OF_TWO(val, 5);
2431
0
            }
2432
0
            dst[c] = clip_pixel_highbd(val, bd);
2433
0
        }
2434
0
    }
2435
0
}
2436
2437
void svt_aom_highbd_dr_predictor(uint16_t* dst, ptrdiff_t stride, TxSize tx_size, const uint16_t* above,
2438
                                 const uint16_t* left, int32_t upsample_above, int32_t upsample_left, int32_t angle,
2439
0
                                 int32_t bd) {
2440
0
    const int32_t dx = get_dx(angle);
2441
0
    const int32_t dy = get_dy(angle);
2442
0
    const int32_t bw = tx_size_wide[tx_size];
2443
0
    const int32_t bh = tx_size_high[tx_size];
2444
0
    assert(angle > 0 && angle < 270);
2445
2446
0
    if (angle > 0 && angle < 90) {
2447
0
        svt_av1_highbd_dr_prediction_z1(dst, stride, bw, bh, above, left, upsample_above, dx, dy, bd);
2448
0
    } else if (angle > 90 && angle < 180) {
2449
0
        svt_av1_highbd_dr_prediction_z2(dst, stride, bw, bh, above, left, upsample_above, upsample_left, dx, dy, bd);
2450
0
    } else if (angle > 180 && angle < 270) {
2451
0
        svt_av1_highbd_dr_prediction_z3(dst, stride, bw, bh, above, left, upsample_left, dx, dy, bd);
2452
0
    } else if (angle == 90) {
2453
0
        svt_aom_pred_high[V_PRED][tx_size](dst, stride, above, left, bd);
2454
0
    } else if (angle == 180) {
2455
0
        svt_aom_pred_high[H_PRED][tx_size](dst, stride, above, left, bd);
2456
0
    }
2457
0
}
2458
2459
0
void svt_av1_filter_intra_edge_high_c(uint16_t* p, int32_t sz, int32_t strength) {
2460
0
    if (!strength) {
2461
0
        return;
2462
0
    }
2463
2464
0
    const int32_t kernel[INTRA_EDGE_FILT][INTRA_EDGE_TAPS] = {{0, 4, 8, 4, 0}, {0, 5, 6, 5, 0}, {2, 4, 4, 4, 2}};
2465
0
    const int32_t filt                                     = strength - 1;
2466
0
    uint16_t      edge[129];
2467
2468
0
    svt_memcpy_c(edge, p, sz * sizeof(*p));
2469
0
    for (int32_t i = 1; i < sz; i++) {
2470
0
        int32_t s = 0;
2471
0
        for (unsigned j = 0; j < INTRA_EDGE_TAPS; j++) {
2472
0
            int32_t k = i - 2 + j;
2473
0
            k         = (k < 0) ? 0 : k;
2474
0
            k         = (k > sz - 1) ? sz - 1 : k;
2475
0
            s += edge[k] * kernel[filt][j];
2476
0
        }
2477
0
        s    = (s + 8) >> 4;
2478
0
        p[i] = (uint16_t)s;
2479
0
    }
2480
0
}
2481
2482
0
void filter_intra_edge_corner_high(uint16_t* p_above, uint16_t* p_left) {
2483
0
    const int32_t kernel[3] = {5, 6, 5};
2484
2485
0
    int32_t s   = (p_left[0] * kernel[0]) + (p_above[-1] * kernel[1]) + (p_above[0] * kernel[2]);
2486
0
    s           = (s + 8) >> 4;
2487
0
    p_above[-1] = (uint16_t)s;
2488
0
    p_left[-1]  = (uint16_t)s;
2489
0
}
2490
#endif
2491
2492
1.46M
/*static INLINE*/ BlockSize svt_aom_scale_chroma_bsize(BlockSize bsize, int32_t subsampling_x, int32_t subsampling_y) {
2493
1.46M
    BlockSize bs = bsize;
2494
1.46M
    switch (bsize) {
2495
0
    case BLOCK_4X4:
2496
0
        if (subsampling_x == 1 && subsampling_y == 1) {
2497
0
            bs = BLOCK_8X8;
2498
0
        } else if (subsampling_x == 1) {
2499
0
            bs = BLOCK_8X4;
2500
0
        } else if (subsampling_y == 1) {
2501
0
            bs = BLOCK_4X8;
2502
0
        }
2503
0
        break;
2504
0
    case BLOCK_4X8:
2505
0
        if (subsampling_x == 1 && subsampling_y == 1) {
2506
0
            bs = BLOCK_8X8;
2507
0
        } else if (subsampling_x == 1) {
2508
0
            bs = BLOCK_8X8;
2509
0
        } else if (subsampling_y == 1) {
2510
0
            bs = BLOCK_4X8;
2511
0
        }
2512
0
        break;
2513
0
    case BLOCK_8X4:
2514
0
        if (subsampling_x == 1 && subsampling_y == 1) {
2515
0
            bs = BLOCK_8X8;
2516
0
        } else if (subsampling_x == 1) {
2517
0
            bs = BLOCK_8X4;
2518
0
        } else if (subsampling_y == 1) {
2519
0
            bs = BLOCK_8X8;
2520
0
        }
2521
0
        break;
2522
0
    case BLOCK_4X16:
2523
0
        if (subsampling_x == 1 && subsampling_y == 1) {
2524
0
            bs = BLOCK_8X16;
2525
0
        } else if (subsampling_x == 1) {
2526
0
            bs = BLOCK_8X16;
2527
0
        } else if (subsampling_y == 1) {
2528
0
            bs = BLOCK_4X16;
2529
0
        }
2530
0
        break;
2531
0
    case BLOCK_16X4:
2532
0
        if (subsampling_x == 1 && subsampling_y == 1) {
2533
0
            bs = BLOCK_16X8;
2534
0
        } else if (subsampling_x == 1) {
2535
0
            bs = BLOCK_16X4;
2536
0
        } else if (subsampling_y == 1) {
2537
0
            bs = BLOCK_16X8;
2538
0
        }
2539
0
        break;
2540
1.46M
    default:
2541
1.46M
        break;
2542
1.46M
    }
2543
1.46M
    return bs;
2544
1.46M
}
2545
2546
////////////########...........Recurssive intra prediction starting...........#########
2547
2548
#if CONFIG_ENABLE_HIGH_BIT_DEPTH
2549
void svt_aom_highbd_filter_intra_predictor(uint16_t* dst, ptrdiff_t stride, TxSize tx_size, const uint16_t* above,
2550
0
                                           const uint16_t* left, int mode, int bd) {
2551
0
    uint16_t  buffer[33][33];
2552
0
    const int bw = tx_size_wide[tx_size];
2553
0
    const int bh = tx_size_high[tx_size];
2554
2555
0
    assert(bw <= 32 && bh <= 32);
2556
2557
    // The initialization is just for silencing Jenkins static analysis warnings
2558
0
    for (int r = 0; r < bh + 1; ++r) {
2559
0
        memset(buffer[r], 0, (bw + 1) * sizeof(buffer[0][0]));
2560
0
    }
2561
2562
0
    for (int r = 0; r < bh; ++r) {
2563
0
        buffer[r + 1][0] = left[r];
2564
0
    }
2565
0
    svt_memcpy(buffer[0], &above[-1], (bw + 1) * sizeof(buffer[0][0]));
2566
2567
0
    for (int r = 1; r < bh + 1; r += 2) {
2568
0
        for (int c = 1; c < bw + 1; c += 4) {
2569
0
            const uint16_t p0 = buffer[r - 1][c - 1];
2570
0
            const uint16_t p1 = buffer[r - 1][c];
2571
0
            const uint16_t p2 = buffer[r - 1][c + 1];
2572
0
            const uint16_t p3 = buffer[r - 1][c + 2];
2573
0
            const uint16_t p4 = buffer[r - 1][c + 3];
2574
0
            const uint16_t p5 = buffer[r][c - 1];
2575
0
            const uint16_t p6 = buffer[r + 1][c - 1];
2576
0
            for (unsigned k = 0; k < 8; ++k) {
2577
0
                int r_offset                       = k >> 2;
2578
0
                int c_offset                       = k & 0x03;
2579
0
                buffer[r + r_offset][c + c_offset] = clip_pixel_highbd(
2580
0
                    ROUND_POWER_OF_TWO_SIGNED(
2581
0
                        eb_av1_filter_intra_taps[mode][k][0] * p0 + eb_av1_filter_intra_taps[mode][k][1] * p1 +
2582
0
                            eb_av1_filter_intra_taps[mode][k][2] * p2 + eb_av1_filter_intra_taps[mode][k][3] * p3 +
2583
0
                            eb_av1_filter_intra_taps[mode][k][4] * p4 + eb_av1_filter_intra_taps[mode][k][5] * p5 +
2584
0
                            eb_av1_filter_intra_taps[mode][k][6] * p6,
2585
0
                        FILTER_INTRA_SCALE_BITS),
2586
0
                    bd);
2587
0
            }
2588
0
        }
2589
0
    }
2590
2591
0
    for (int r = 0; r < bh; ++r) {
2592
0
        svt_memcpy(dst, &buffer[r + 1][1], bw * sizeof(dst[0]));
2593
0
        dst += stride;
2594
0
    }
2595
0
}
2596
#endif
2597
void svt_aom_filter_intra_edge(uint8_t mode, uint16_t max_frame_width, uint16_t max_frame_height, int32_t p_angle,
2598
0
                               int32_t cu_origin_x, int32_t cu_origin_y, uint8_t* above_row, uint8_t* left_col) {
2599
0
    const int mb_stride       = (max_frame_width + 15) / 16;
2600
0
    const int mb_height       = (max_frame_height + 15) / 16;
2601
0
    const int txwpx           = tx_size_wide[TX_16X16];
2602
0
    const int txhpx           = tx_size_high[TX_16X16];
2603
0
    const int need_right      = p_angle < 90;
2604
0
    const int need_bottom     = p_angle > 180;
2605
0
    int       need_left       = extend_modes[mode] & NEED_LEFT;
2606
0
    int       need_above      = extend_modes[mode] & NEED_ABOVE;
2607
0
    int       need_above_left = extend_modes[mode] & NEED_ABOVELEFT;
2608
    //force to 0 for neighbor may not be ready at segment boundary
2609
    // int ab_sm = 0; // (cu_origin_y > 0 && (ois_mb_results_ptr - mb_stride)) ? is_smooth_luma((ois_mb_results_ptr - mb_stride)->intra_mode) : 0;
2610
    // int le_sm = 0; // (cu_origin_x > 0 && (ois_mb_results_ptr - 1)) ? is_smooth_luma((ois_mb_results_ptr - 1)->intra_mode) : 0;
2611
0
    const int filt_type = 0; // (ab_sm || le_sm) ? 1 : 0
2612
0
    int       n_top_px  = cu_origin_y > 0 ? AOMMIN(txwpx, (mb_stride * 16 - cu_origin_x + txwpx)) : 0;
2613
0
    int       n_left_px = cu_origin_x > 0 ? AOMMIN(txhpx, (mb_height * 16 - cu_origin_y + txhpx)) : 0;
2614
2615
0
    if (av1_is_directional_mode((PredictionMode)mode)) {
2616
0
        if (p_angle <= 90) {
2617
0
            need_above = 1, need_left = 0, need_above_left = 1;
2618
0
        } else if (p_angle < 180) {
2619
0
            need_above = 1, need_left = 1, need_above_left = 1;
2620
0
        } else {
2621
0
            need_above = 0, need_left = 1, need_above_left = 1;
2622
0
        }
2623
0
    }
2624
2625
0
    if (p_angle != 90 && p_angle != 180) {
2626
0
        const int ab_le = need_above_left ? 1 : 0;
2627
0
        if (need_above && need_left && (txwpx + txhpx >= 24)) {
2628
0
            filter_intra_edge_corner(above_row, left_col);
2629
0
        }
2630
0
        if (need_above && n_top_px > 0) {
2631
0
            const int strength = svt_aom_intra_edge_filter_strength(txwpx, txhpx, p_angle - 90, filt_type);
2632
0
            const int n_px     = n_top_px + ab_le + (need_right ? txhpx : 0);
2633
0
            svt_av1_filter_intra_edge(above_row - ab_le, n_px, strength);
2634
0
        }
2635
0
        if (need_left && n_left_px > 0) {
2636
0
            const int strength = svt_aom_intra_edge_filter_strength(txhpx, txwpx, p_angle - 180, filt_type);
2637
0
            const int n_px     = n_left_px + ab_le + (need_bottom ? txwpx : 0);
2638
0
            svt_av1_filter_intra_edge(left_col - ab_le, n_px, strength);
2639
0
        }
2640
0
    }
2641
0
    int upsample_above = svt_aom_use_intra_edge_upsample(txwpx, txhpx, p_angle - 90, filt_type);
2642
0
    if (need_above && upsample_above) {
2643
0
        const int n_px = txwpx + (need_right ? txhpx : 0);
2644
0
        svt_av1_upsample_intra_edge(above_row, n_px);
2645
0
    }
2646
0
    int upsample_left = svt_aom_use_intra_edge_upsample(txhpx, txwpx, p_angle - 180, filt_type);
2647
0
    if (need_left && upsample_left) {
2648
0
        const int n_px = txhpx + (need_bottom ? txwpx : 0);
2649
0
        svt_av1_upsample_intra_edge(left_col, n_px);
2650
0
    }
2651
0
    return;
2652
0
}
2653
2654
EbErrorType svt_aom_intra_prediction_open_loop_mb(int32_t p_angle, uint8_t ois_intra_mode, uint32_t src_origin_x,
2655
                                                  uint32_t src_origin_y, TxSize tx_size, uint8_t* above_row,
2656
                                                  uint8_t* left_col, uint8_t* dst, uint32_t dst_stride)
2657
2658
0
{
2659
0
    EbErrorType    return_error = EB_ErrorNone;
2660
0
    PredictionMode mode         = ois_intra_mode;
2661
0
    const int32_t  is_dr_mode   = av1_is_directional_mode(mode);
2662
2663
0
    if (is_dr_mode) {
2664
0
        svt_aom_dr_predictor(dst, dst_stride, tx_size, above_row, left_col, 0, 0, p_angle);
2665
0
    } else {
2666
        // predict
2667
0
        if (mode == DC_PRED) {
2668
0
            svt_aom_dc_pred[src_origin_x > 0][src_origin_y > 0][tx_size](dst, dst_stride, above_row, left_col);
2669
0
        } else {
2670
0
            svt_aom_eb_pred[mode][tx_size](dst, dst_stride, above_row, left_col);
2671
0
        }
2672
0
    }
2673
0
    return return_error;
2674
0
}