FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/tests/checkasm/vvc_pred.c
Date: 2026-10-29 07:45:57
Exec Total Coverage
Lines: 136 143 95.1%
Functions: 7 7 100.0%
Branches: 134 254 52.8%

Line Branch Exec Source
1 /*
2 * This file is part of FFmpeg.
3 *
4 * FFmpeg is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * FFmpeg is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 */
18
19 #include <string.h>
20 #include "checkasm.h"
21 #include "libavcodec/vvc/dsp.h"
22 #include "libavcodec/vvc/intra.h"
23 #include "libavutil/intreadwrite.h"
24 #include "libavutil/mem_internal.h"
25
26 static const uint32_t pixel_mask[3] = { 0xffffffff, 0x03ff03ff, 0x0fff0fff };
27 static const int mip_modes[] = {16, 8, 6};
28
29 #define SIZEOF_PIXEL ((bit_depth + 7) / 8)
30 #define PIXEL_STRIDE (MAX_TB_SIZE * 2) // 2 * max transform size
31 #define BUF_SIZE (2 * PIXEL_STRIDE * 64) // Enough for 64x64 with stride=128
32 // IntraEdgeParams arrays are uint16_t, rounded up as they are filled 4 bytes at a time
33 #define REF_BYTES FFALIGN(2 * (6 * MAX_TB_SIZE + 5), 4)
34 #define REF_OFFSET (MAX_TB_SIZE + 3) // Same as offset from prepare_intra_edge_params
35
36 #define randomize_buffers() \
37 do { \
38 uint32_t mask = pixel_mask[(bit_depth - 8) >> 1]; \
39 for (int i = 0; i < BUF_SIZE; i += 4) { \
40 uint32_t r = rnd() & mask; \
41 AV_WN32A(buf0 + i, r); \
42 AV_WN32A(buf1 + i, r); \
43 } \
44 /* Make sure reference buffer writes don't go out of bounds */ \
45 for (int i = -(REF_OFFSET * SIZEOF_PIXEL); \
46 i < REF_BYTES - REF_OFFSET * SIZEOF_PIXEL; i += 4) { \
47 AV_WN32A(top + i, rnd() & mask); \
48 AV_WN32A(left + i, rnd() & mask); \
49 } \
50 } while (0)
51
52 // From prepare_intra_edge_params in avcodec/vvc/intra_template.c
53 14175 static int derive_filter_flag(const int mode, const int ref_idx, const int w, const int h)
54 {
55
4/4
✓ Branch 1 taken 13500 times.
✓ Branch 2 taken 675 times.
✓ Branch 3 taken 9000 times.
✓ Branch 4 taken 4500 times.
14175 if (ff_vvc_ref_filter_flag_derive(mode) || ref_idx)
56 9675 return 0;
57 4500 const int min_dist_ver_hor = FFMIN(abs(mode - 50), abs(mode - 18));
58 4500 const int intra_hor_ver_dist_thres[] = {24, 14, 2, 0, 0};
59 4500 const int ntbs = (av_log2(w) + av_log2(h)) >> 1;
60 4500 return min_dist_ver_hor > intra_hor_ver_dist_thres[ntbs - 2];
61 }
62
63 42 static void check_pred_dc(VVCDSPContext *c,
64 uint8_t *buf0, uint8_t *buf1,
65 uint8_t *top, uint8_t *left, int bit_depth)
66 {
67 42 declare_func(void, uint8_t *src, const uint8_t *top,
68 const uint8_t *left, const int w, const int h, const ptrdiff_t stride);
69
70 /* Test all sizes 4x4 up to 64x64, including non-square */
71
2/2
✓ Branch 0 taken 210 times.
✓ Branch 1 taken 42 times.
252 for (int log2_w = 2; log2_w <= 6; log2_w++) {
72
2/2
✓ Branch 0 taken 1050 times.
✓ Branch 1 taken 210 times.
1260 for (int log2_h = 2; log2_h <= 6; log2_h++) {
73 1050 int w = 1 << log2_w;
74 1050 int h = 1 << log2_h;
75 1050 ptrdiff_t stride = FFALIGN((w + rnd() % 64), 32);
76
77
2/2
✓ Branch 1 taken 75 times.
✓ Branch 2 taken 975 times.
1050 if (check_func(c->intra.pred_dc, "vvc_pred_dc_%dx%d_%d",
78 w, h, bit_depth)) {
79
4/4
✓ Branch 1 taken 307200 times.
✓ Branch 2 taken 75 times.
✓ Branch 5 taken 14625 times.
✓ Branch 6 taken 75 times.
321900 randomize_buffers();
80
1/2
✗ Branch 2 not taken.
✓ Branch 3 taken 75 times.
75 call_ref(buf0, top, left, w, h, stride);
81 75 call_new(buf1, top, left, w, h, stride);
82
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if (memcmp(buf0, buf1, BUF_SIZE))
83 ✗ fail();
84
2/2
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 60 times.
75 if (w == h)
85
1/18
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
15 bench_new(buf1, top, left, w, h, stride);
86 }
87 }
88 }
89
90 42 report("pred_dc");
91 42 }
92
93 42 static void check_pred_planar(VVCDSPContext *c,
94 uint8_t *buf0, uint8_t *buf1,
95 uint8_t *top, uint8_t *left, int bit_depth)
96 {
97 42 declare_func(void, uint8_t *src, const uint8_t *top,
98 const uint8_t *left, const int w, const int h, const ptrdiff_t stride);
99
100 /* Test all sizes 4x1 up to 64x64, including non-square. Heights of 1 and 2
101 * come from ISP splits and from chroma. */
102
2/2
✓ Branch 0 taken 210 times.
✓ Branch 1 taken 42 times.
252 for (int log2_w = 2; log2_w <= 6; log2_w++) {
103
2/2
✓ Branch 0 taken 1470 times.
✓ Branch 1 taken 210 times.
1680 for (int log2_h = 0; log2_h <= 6; log2_h++) {
104 1470 int w = 1 << log2_w;
105 1470 int h = 1 << log2_h;
106 1470 ptrdiff_t stride = FFALIGN((w + rnd() % 64), 32);
107
108
2/2
✓ Branch 1 taken 140 times.
✓ Branch 2 taken 1330 times.
1470 if (check_func(c->intra.pred_planar, "vvc_pred_planar_%dx%d_%d",
109 w, h, bit_depth)) {
110
4/4
✓ Branch 1 taken 573440 times.
✓ Branch 2 taken 140 times.
✓ Branch 5 taken 27300 times.
✓ Branch 6 taken 140 times.
600880 randomize_buffers();
111
1/2
✗ Branch 2 not taken.
✓ Branch 3 taken 140 times.
140 call_ref(buf0, top, left, w, h, stride);
112 140 call_new(buf1, top, left, w, h, stride);
113
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 140 times.
140 if (memcmp(buf0, buf1, BUF_SIZE))
114 ✗ fail();
115
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 120 times.
140 if (w == h)
116
1/18
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
20 bench_new(buf1, top, left, w, h, stride);
117 }
118 }
119 }
120
121 42 report("pred_planar");
122 42 }
123
124 42 static void check_pred_vh(VVCDSPContext *c,
125 uint8_t *buf0, uint8_t *buf1,
126 uint8_t *top, uint8_t *left, int bit_depth)
127 {
128 42 declare_func(void, uint8_t *src, const uint8_t *ref,
129 const int w, const int h, const ptrdiff_t stride);
130
131 /* Test all sizes 4x4 up to 64x64, including non-square */
132
2/2
✓ Branch 0 taken 210 times.
✓ Branch 1 taken 42 times.
252 for (int log2_w = 2; log2_w <= 6; log2_w++) {
133
2/2
✓ Branch 0 taken 1050 times.
✓ Branch 1 taken 210 times.
1260 for (int log2_h = 2; log2_h <= 6; log2_h++) {
134 1050 int w = 1 << log2_w;
135 1050 int h = 1 << log2_h;
136 1050 ptrdiff_t stride = FFALIGN((w + rnd() % 64), 32);
137
138
2/2
✓ Branch 1 taken 75 times.
✓ Branch 2 taken 975 times.
1050 if (check_func(c->intra.pred_v, "vvc_pred_v_%dx%d_%d",
139 w, h, bit_depth)) {
140
4/4
✓ Branch 1 taken 307200 times.
✓ Branch 2 taken 75 times.
✓ Branch 5 taken 14625 times.
✓ Branch 6 taken 75 times.
321900 randomize_buffers();
141
1/2
✗ Branch 2 not taken.
✓ Branch 3 taken 75 times.
75 call_ref(buf0, top, w, h, stride);
142 75 call_new(buf1, top, w, h, stride);
143
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if (memcmp(buf0, buf1, BUF_SIZE))
144 ✗ fail();
145
2/2
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 60 times.
75 if (w == h)
146
1/18
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
15 bench_new(buf1, top, w, h, stride);
147 }
148
149
2/2
✓ Branch 1 taken 75 times.
✓ Branch 2 taken 975 times.
1050 if (check_func(c->intra.pred_h, "vvc_pred_h_%dx%d_%d",
150 w, h, bit_depth)) {
151
4/4
✓ Branch 1 taken 307200 times.
✓ Branch 2 taken 75 times.
✓ Branch 5 taken 14625 times.
✓ Branch 6 taken 75 times.
321900 randomize_buffers();
152
1/2
✗ Branch 2 not taken.
✓ Branch 3 taken 75 times.
75 call_ref(buf0, left, w, h, stride);
153 75 call_new(buf1, left, w, h, stride);
154
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if (memcmp(buf0, buf1, BUF_SIZE))
155 ✗ fail();
156
2/2
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 60 times.
75 if (w == h)
157
1/18
✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
15 bench_new(buf1, left, w, h, stride);
158 }
159 }
160 }
161
162 42 report("pred_vh");
163 42 }
164
165 42 static void check_pred_mip(VVCDSPContext *c,
166 uint8_t *buf0, uint8_t *buf1,
167 uint8_t *top, uint8_t *left, int bit_depth)
168 {
169 42 declare_func(void, uint8_t *src, const uint8_t *top,
170 const uint8_t *left, const int w, const int h,
171 const ptrdiff_t stride, int mode_id, int is_transposed);
172
173 /* Test all sizes 4x4 up to 64x64, including non-square */
174
2/2
✓ Branch 0 taken 210 times.
✓ Branch 1 taken 42 times.
252 for (int log2_w = 2; log2_w <= 6; log2_w++) {
175
2/2
✓ Branch 0 taken 1050 times.
✓ Branch 1 taken 210 times.
1260 for (int log2_h = 2; log2_h <= 6; log2_h++) {
176 1050 int w = 1 << log2_w;
177 1050 int h = 1 << log2_h;
178 1050 ptrdiff_t stride = FFALIGN((w + rnd() % 64), 32);
179 1050 int size_id = ff_vvc_get_mip_size_id(w, h);
180
181
2/2
✓ Branch 0 taken 7476 times.
✓ Branch 1 taken 1050 times.
8526 for (int mode_id = 0; mode_id < mip_modes[size_id]; mode_id++) {
182
2/2
✓ Branch 1 taken 534 times.
✓ Branch 2 taken 6942 times.
7476 if (check_func(c->intra.pred_mip, "vvc_pred_mip_%dx%d_mode%d_%d",
183 w, h, mode_id, bit_depth)) {
184
4/4
✓ Branch 1 taken 2187264 times.
✓ Branch 2 taken 534 times.
✓ Branch 5 taken 104130 times.
✓ Branch 6 taken 534 times.
2291928 randomize_buffers();
185
1/2
✗ Branch 2 not taken.
✓ Branch 3 taken 534 times.
534 call_ref(buf0, top, left, w, h, stride, mode_id, 0);
186 534 call_new(buf1, top, left, w, h, stride, mode_id, 0);
187
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 534 times.
534 if (memcmp(buf0, buf1, BUF_SIZE))
188 ✗ fail();
189
190 /* Test transposed */
191
4/4
✓ Branch 1 taken 2187264 times.
✓ Branch 2 taken 534 times.
✓ Branch 5 taken 104130 times.
✓ Branch 6 taken 534 times.
2291928 randomize_buffers();
192
1/2
✗ Branch 2 not taken.
✓ Branch 3 taken 534 times.
534 call_ref(buf0, top, left, w, h, stride, mode_id, 1);
193 534 call_new(buf1, top, left, w, h, stride, mode_id, 1);
194
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 534 times.
534 if (memcmp(buf0, buf1, BUF_SIZE))
195 ✗ fail();
196
197
2/2
✓ Branch 0 taken 126 times.
✓ Branch 1 taken 408 times.
534 if (w == h)
198
1/18
✗ Branch 1 not taken.
✓ Branch 2 taken 126 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
126 bench_new(buf1, top, left, w, h, stride, mode_id, 0);
199 }
200 }
201 }
202 }
203
204 42 report("pred_mip");
205 42 }
206
207 42 static void check_pred_angular(VVCDSPContext *c,
208 uint8_t *buf0, uint8_t *buf1,
209 uint8_t *top, uint8_t *left, int bit_depth)
210 {
211 // Set modes to bench
212 static const int bench_modes[] = { 2, 10, 26, INTRA_DIAG, 42, 58, INTRA_VDIAG };
213
214 42 declare_func(void, uint8_t *src, const uint8_t *top, const uint8_t *left,
215 const int w, const int h, const ptrdiff_t stride, const int c_idx,
216 const int mode, const int ref_idx, const int filter_flag,
217 const int need_pdpc);
218
219 /* Test all sizes 4x4 up to 64x64, including non-square */
220
2/2
✓ Branch 0 taken 210 times.
✓ Branch 1 taken 42 times.
252 for (int log2_w = 2; log2_w <= 6; log2_w++) {
221
2/2
✓ Branch 0 taken 1050 times.
✓ Branch 1 taken 210 times.
1260 for (int log2_h = 2; log2_h <= 6; log2_h++) {
222 1050 int w = 1 << log2_w;
223 1050 int h = 1 << log2_h;
224 1050 ptrdiff_t stride = FFALIGN((w + rnd() % 64), 32);
225
226
2/2
✓ Branch 0 taken 68250 times.
✓ Branch 1 taken 1050 times.
69300 for (int mode = 2; mode <= INTRA_VDIAG; mode++) {
227 // Skip vertical and horizontal (pred_v, pred_h)
228
4/4
✓ Branch 0 taken 67200 times.
✓ Branch 1 taken 1050 times.
✓ Branch 2 taken 1050 times.
✓ Branch 3 taken 66150 times.
68250 if (mode == INTRA_VERT || mode == INTRA_HORZ)
229 2100 continue;
230
231 66150 int dir = mode >= INTRA_DIAG;
232 const char *mode_category;
233
234
2/2
✓ Branch 0 taken 1050 times.
✓ Branch 1 taken 65100 times.
66150 if (mode == 2)
235 1050 mode_category = "Hdiag";
236
3/4
✓ Branch 0 taken 65100 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15750 times.
✓ Branch 3 taken 49350 times.
65100 else if (mode > 2 && mode < INTRA_HORZ)
237 15750 mode_category = "Hpos";
238
3/4
✓ Branch 0 taken 49350 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15750 times.
✓ Branch 3 taken 33600 times.
49350 else if (mode > INTRA_HORZ && mode < INTRA_DIAG)
239 15750 mode_category = "Hneg";
240
2/2
✓ Branch 0 taken 1050 times.
✓ Branch 1 taken 32550 times.
33600 else if (mode == INTRA_DIAG)
241 1050 mode_category = "Diag";
242
3/4
✓ Branch 0 taken 32550 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15750 times.
✓ Branch 3 taken 16800 times.
32550 else if (mode > INTRA_DIAG && mode < INTRA_VERT)
243 15750 mode_category = "Vneg";
244
3/4
✓ Branch 0 taken 16800 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15750 times.
✓ Branch 3 taken 1050 times.
16800 else if (mode > INTRA_VERT && mode < INTRA_VDIAG)
245 15750 mode_category = "Vpos";
246 else
247 1050 mode_category = "Vdiag";
248
249
2/2
✓ Branch 0 taken 198450 times.
✓ Branch 1 taken 66150 times.
264600 for (int ref_idx = 0; ref_idx <= 2; ref_idx++) {
250
6/6
✓ Branch 0 taken 100800 times.
✓ Branch 1 taken 97650 times.
✓ Branch 2 taken 100800 times.
✓ Branch 3 taken 97650 times.
✓ Branch 5 taken 14175 times.
✓ Branch 6 taken 184275 times.
198450 if (check_func(dir ? c->intra.pred_angular_v : c->intra.pred_angular_h, "vvc_pred_angular_%c_%dx%d_%s_mode%d_ref%d_%d",
251 dir ? 'v' : 'h', w, h, mode_category, mode, ref_idx, bit_depth)) {
252 14175 int filter_flag = derive_filter_flag(mode, ref_idx, w, h);
253 14175 int need_pdpc = ff_vvc_need_pdpc(w, h, 0, mode, ref_idx);
254
255
4/4
✓ Branch 1 taken 58060800 times.
✓ Branch 2 taken 14175 times.
✓ Branch 5 taken 2764125 times.
✓ Branch 6 taken 14175 times.
60839100 randomize_buffers();
256
1/2
✗ Branch 2 not taken.
✓ Branch 3 taken 14175 times.
14175 call_ref(buf0, top, left, w, h, stride, 0, mode, ref_idx, filter_flag, need_pdpc);
257 14175 call_new(buf1, top, left, w, h, stride, 0, mode, ref_idx, filter_flag, need_pdpc);
258
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 14175 times.
14175 if (memcmp(buf0, buf1, BUF_SIZE))
259 ✗ fail();
260
2/2
✓ Branch 0 taken 99225 times.
✓ Branch 1 taken 14175 times.
113400 for (int i = 0; i < FF_ARRAY_ELEMS(bench_modes); i++) {
261
6/6
✓ Branch 0 taken 1575 times.
✓ Branch 1 taken 97650 times.
✓ Branch 2 taken 315 times.
✓ Branch 3 taken 1260 times.
✓ Branch 4 taken 105 times.
✓ Branch 5 taken 210 times.
99225 if (mode == bench_modes[i] && w == h && ref_idx == 0)
262
1/18
✗ Branch 1 not taken.
✓ Branch 2 taken 105 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✗ Branch 51 not taken.
✗ Branch 52 not taken.
✗ Branch 54 not taken.
✗ Branch 55 not taken.
✗ Branch 59 not taken.
✗ Branch 60 not taken.
105 bench_new(buf1, top, left, w, h, stride, 0, mode, ref_idx, filter_flag, need_pdpc);
263 }
264 }
265 }
266 // TODO: Add c_idx=1 (chroma)
267 }
268 }
269 }
270
271 42 report("pred_angular");
272 42 }
273
274 14 void checkasm_check_vvc_pred(void)
275 {
276 14 LOCAL_ALIGNED_32(uint8_t, buf0, [BUF_SIZE]);
277 14 LOCAL_ALIGNED_32(uint8_t, buf1, [BUF_SIZE]);
278 14 LOCAL_ALIGNED_32(uint8_t, top_buf, [REF_BYTES + 16]);
279 14 LOCAL_ALIGNED_32(uint8_t, left_buf, [REF_BYTES + 16]);
280
281
2/2
✓ Branch 0 taken 42 times.
✓ Branch 1 taken 14 times.
56 for (int bit_depth = 8; bit_depth <= 12; bit_depth += 2) {
282 VVCDSPContext c;
283
284 42 uint8_t *top = top_buf + REF_OFFSET * SIZEOF_PIXEL;
285 42 uint8_t *left = left_buf + REF_OFFSET * SIZEOF_PIXEL;
286
287 42 ff_vvc_dsp_init(&c, bit_depth);
288 42 check_pred_dc(&c, buf0, buf1, top, left, bit_depth);
289 42 check_pred_planar(&c, buf0, buf1, top, left, bit_depth);
290 42 check_pred_vh(&c, buf0, buf1, top, left, bit_depth);
291 42 check_pred_mip(&c, buf0, buf1, top, left, bit_depth);
292 42 check_pred_angular(&c, buf0, buf1, top, left, bit_depth);
293 }
294 14 }
295