Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | * Copyright (c) 2016 Ronald S. Bultje <rsbultje@gmail.com> | ||
3 | * | ||
4 | * This file is part of FFmpeg. | ||
5 | * | ||
6 | * FFmpeg is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU Lesser General Public | ||
8 | * License as published by the Free Software Foundation; either | ||
9 | * version 2.1 of the License, or (at your option) any later version. | ||
10 | * | ||
11 | * FFmpeg is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
14 | * Lesser General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU Lesser General Public | ||
17 | * License along with FFmpeg; if not, write to the Free Software | ||
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
19 | */ | ||
20 | |||
21 | #include <string.h> | ||
22 | #include "checkasm.h" | ||
23 | #include "libavfilter/colorspacedsp.h" | ||
24 | #include "libavutil/common.h" | ||
25 | #include "libavutil/internal.h" | ||
26 | #include "libavutil/intreadwrite.h" | ||
27 | #include "libavutil/mem_internal.h" | ||
28 | |||
29 | #define W 64 | ||
30 | #define H 64 | ||
31 | |||
32 | #define randomize_buffers() \ | ||
33 | do { \ | ||
34 | unsigned mask = bpp_mask[idepth]; \ | ||
35 | int n, m; \ | ||
36 | int bpp = 1 + (!!idepth); \ | ||
37 | int buf_size = W * H * bpp; \ | ||
38 | for (m = 0; m < 3; m++) { \ | ||
39 | int ss = m ? ss_w + ss_h : 0; \ | ||
40 | int plane_sz = buf_size >> ss; \ | ||
41 | for (n = 0; n < plane_sz; n += 4) { \ | ||
42 | unsigned r = rnd() & mask; \ | ||
43 | AV_WN32A(&src[m][n], r); \ | ||
44 | } \ | ||
45 | } \ | ||
46 | } while (0) | ||
47 | |||
48 | static const char *format_string[] = { | ||
49 | "444", "422", "420" | ||
50 | }; | ||
51 | |||
52 | static const unsigned bpp_mask[] = { 0xffffffff, 0x03ff03ff, 0x0fff0fff }; | ||
53 | |||
54 | 13 | static void check_yuv2yuv(void) | |
55 | { | ||
56 | 13 | declare_func(void, uint8_t *dst[3], const ptrdiff_t dst_stride[3], | |
57 | uint8_t *src[3], const ptrdiff_t src_stride[3], | ||
58 | int w, int h, const int16_t coeff[3][3][8], | ||
59 | const int16_t off[2][8]); | ||
60 | ColorSpaceDSPContext dsp; | ||
61 | int idepth, odepth, fmt, n; | ||
62 | 13 | LOCAL_ALIGNED_32(uint8_t, src_y, [W * H * 2]); | |
63 | 13 | LOCAL_ALIGNED_32(uint8_t, src_u, [W * H * 2]); | |
64 | 13 | LOCAL_ALIGNED_32(uint8_t, src_v, [W * H * 2]); | |
65 | 13 | uint8_t *src[3] = { src_y, src_u, src_v }; | |
66 | 13 | LOCAL_ALIGNED_32(uint8_t, dst0_y, [W * H * 2]); | |
67 | 13 | LOCAL_ALIGNED_32(uint8_t, dst0_u, [W * H * 2]); | |
68 | 13 | LOCAL_ALIGNED_32(uint8_t, dst0_v, [W * H * 2]); | |
69 | 13 | LOCAL_ALIGNED_32(uint8_t, dst1_y, [W * H * 2]); | |
70 | 13 | LOCAL_ALIGNED_32(uint8_t, dst1_u, [W * H * 2]); | |
71 | 13 | LOCAL_ALIGNED_32(uint8_t, dst1_v, [W * H * 2]); | |
72 | 13 | uint8_t *dst0[3] = { dst0_y, dst0_u, dst0_v }, *dst1[3] = { dst1_y, dst1_u, dst1_v }; | |
73 | 13 | LOCAL_ALIGNED_32(int16_t, offset_buf, [16]); | |
74 | 13 | LOCAL_ALIGNED_32(int16_t, coeff_buf, [3 * 3 * 8]); | |
75 | 13 | int16_t (*offset)[8] = (int16_t(*)[8]) offset_buf; | |
76 | 13 | int16_t (*coeff)[3][8] = (int16_t(*)[3][8]) coeff_buf; | |
77 | |||
78 | 13 | ff_colorspacedsp_init(&dsp); | |
79 |
2/2✓ Branch 0 taken 104 times.
✓ Branch 1 taken 13 times.
|
117 | for (n = 0; n < 8; n++) { |
80 | 104 | offset[0][n] = offset[1][n] = 16; | |
81 | |||
82 | 104 | coeff[0][0][n] = (1 << 14) + (1 << 7) + 1; | |
83 | 104 | coeff[0][1][n] = (1 << 7) - 1; | |
84 | 104 | coeff[0][2][n] = -(1 << 8); | |
85 | 104 | coeff[1][0][n] = coeff[2][0][n] = 0; | |
86 | 104 | coeff[1][1][n] = (1 << 14) + (1 << 7); | |
87 | 104 | coeff[1][2][n] = -(1 << 7); | |
88 | 104 | coeff[2][2][n] = (1 << 14) - (1 << 6); | |
89 | 104 | coeff[2][1][n] = 1 << 6; | |
90 | } | ||
91 |
2/2✓ Branch 0 taken 39 times.
✓ Branch 1 taken 13 times.
|
52 | for (idepth = 0; idepth < 3; idepth++) { |
92 |
2/2✓ Branch 0 taken 117 times.
✓ Branch 1 taken 39 times.
|
156 | for (odepth = 0; odepth < 3; odepth++) { |
93 |
2/2✓ Branch 0 taken 351 times.
✓ Branch 1 taken 117 times.
|
468 | for (fmt = 0; fmt < 3; fmt++) { |
94 |
2/2✓ Branch 3 taken 54 times.
✓ Branch 4 taken 297 times.
|
351 | if (check_func(dsp.yuv2yuv[idepth][odepth][fmt], |
95 | "ff_colorspacedsp_yuv2yuv_%sp%dto%d", | ||
96 | format_string[fmt], | ||
97 | idepth * 2 + 8, odepth * 2 + 8)) { | ||
98 | 54 | int ss_w = !!fmt, ss_h = fmt == 2; | |
99 |
4/4✓ Branch 0 taken 36 times.
✓ Branch 1 taken 18 times.
✓ Branch 2 taken 36 times.
✓ Branch 3 taken 18 times.
|
54 | int y_src_stride = W << !!idepth, y_dst_stride = W << !!odepth; |
100 | 54 | int uv_src_stride = y_src_stride >> ss_w, uv_dst_stride = y_dst_stride >> ss_w; | |
101 | |||
102 |
8/8✓ Branch 0 taken 36 times.
✓ Branch 1 taken 18 times.
✓ Branch 2 taken 108 times.
✓ Branch 3 taken 54 times.
✓ Branch 5 taken 199680 times.
✓ Branch 6 taken 162 times.
✓ Branch 7 taken 162 times.
✓ Branch 8 taken 54 times.
|
199896 | randomize_buffers(); |
103 | 54 | call_ref(dst0, (ptrdiff_t[3]) { y_dst_stride, uv_dst_stride, uv_dst_stride }, | |
104 | src, (ptrdiff_t[3]) { y_src_stride, uv_src_stride, uv_src_stride }, | ||
105 | W, H, coeff, offset); | ||
106 | 54 | call_new(dst1, (ptrdiff_t[3]) { y_dst_stride, uv_dst_stride, uv_dst_stride }, | |
107 | src, (ptrdiff_t[3]) { y_src_stride, uv_src_stride, uv_src_stride }, | ||
108 | W, H, coeff, offset); | ||
109 |
1/2✓ Branch 0 taken 54 times.
✗ Branch 1 not taken.
|
54 | if (memcmp(dst0[0], dst1[0], y_dst_stride * H) || |
110 |
1/2✓ Branch 0 taken 54 times.
✗ Branch 1 not taken.
|
54 | memcmp(dst0[1], dst1[1], uv_dst_stride * H >> ss_h) || |
111 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 54 times.
|
54 | memcmp(dst0[2], dst1[2], uv_dst_stride * H >> ss_h)) { |
112 | ✗ | fail(); | |
113 | } | ||
114 | } | ||
115 | } | ||
116 | } | ||
117 | } | ||
118 | |||
119 | 13 | report("yuv2yuv"); | |
120 | 13 | } | |
121 | |||
122 | 13 | static void check_yuv2rgb(void) | |
123 | { | ||
124 | 13 | declare_func(void, int16_t *dst[3], ptrdiff_t dst_stride, | |
125 | uint8_t *src[3], const ptrdiff_t src_stride[3], | ||
126 | int w, int h, const int16_t coeff[3][3][8], | ||
127 | const int16_t off[8]); | ||
128 | ColorSpaceDSPContext dsp; | ||
129 | int idepth, fmt, n; | ||
130 | 13 | LOCAL_ALIGNED_32(uint8_t, src_y, [W * H * 2]); | |
131 | 13 | LOCAL_ALIGNED_32(uint8_t, src_u, [W * H * 2]); | |
132 | 13 | LOCAL_ALIGNED_32(uint8_t, src_v, [W * H * 2]); | |
133 | 13 | uint8_t *src[3] = { src_y, src_u, src_v }; | |
134 | 13 | LOCAL_ALIGNED_32(int16_t, dst0_y, [W * H]); | |
135 | 13 | LOCAL_ALIGNED_32(int16_t, dst0_u, [W * H]); | |
136 | 13 | LOCAL_ALIGNED_32(int16_t, dst0_v, [W * H]); | |
137 | 13 | LOCAL_ALIGNED_32(int16_t, dst1_y, [W * H]); | |
138 | 13 | LOCAL_ALIGNED_32(int16_t, dst1_u, [W * H]); | |
139 | 13 | LOCAL_ALIGNED_32(int16_t, dst1_v, [W * H]); | |
140 | 13 | int16_t *dst0[3] = { dst0_y, dst0_u, dst0_v }, *dst1[3] = { dst1_y, dst1_u, dst1_v }; | |
141 | 13 | LOCAL_ALIGNED_32(int16_t, offset, [8]); | |
142 | 13 | LOCAL_ALIGNED_32(int16_t, coeff_buf, [3 * 3 * 8]); | |
143 | 13 | int16_t (*coeff)[3][8] = (int16_t(*)[3][8]) coeff_buf; | |
144 | |||
145 | 13 | ff_colorspacedsp_init(&dsp); | |
146 |
2/2✓ Branch 0 taken 104 times.
✓ Branch 1 taken 13 times.
|
117 | for (n = 0; n < 8; n++) { |
147 | 104 | offset[n] = 16; | |
148 | |||
149 | 104 | coeff[0][0][n] = coeff[1][0][n] = coeff[2][0][n] = (1 << 14) | 1; | |
150 | 104 | coeff[0][1][n] = coeff[2][2][n] = 0; | |
151 | 104 | coeff[0][2][n] = 1 << 13; | |
152 | 104 | coeff[1][1][n] = -(1 << 12); | |
153 | 104 | coeff[1][2][n] = 1 << 12; | |
154 | 104 | coeff[2][1][n] = 1 << 11; | |
155 | } | ||
156 |
2/2✓ Branch 0 taken 39 times.
✓ Branch 1 taken 13 times.
|
52 | for (idepth = 0; idepth < 3; idepth++) { |
157 |
2/2✓ Branch 0 taken 117 times.
✓ Branch 1 taken 39 times.
|
156 | for (fmt = 0; fmt < 3; fmt++) { |
158 |
2/2✓ Branch 3 taken 18 times.
✓ Branch 4 taken 99 times.
|
117 | if (check_func(dsp.yuv2rgb[idepth][fmt], |
159 | "ff_colorspacedsp_yuv2rgb_%sp%d", | ||
160 | format_string[fmt], idepth * 2 + 8)) { | ||
161 | 18 | int ss_w = !!fmt, ss_h = fmt == 2; | |
162 |
2/2✓ Branch 0 taken 12 times.
✓ Branch 1 taken 6 times.
|
18 | int y_src_stride = W << !!idepth; |
163 | 18 | int uv_src_stride = y_src_stride >> ss_w; | |
164 | |||
165 |
8/8✓ Branch 0 taken 12 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 36 times.
✓ Branch 3 taken 18 times.
✓ Branch 5 taken 66560 times.
✓ Branch 6 taken 54 times.
✓ Branch 7 taken 54 times.
✓ Branch 8 taken 18 times.
|
66632 | randomize_buffers(); |
166 | 18 | call_ref(dst0, W, src, | |
167 | (ptrdiff_t[3]) { y_src_stride, uv_src_stride, uv_src_stride }, | ||
168 | W, H, coeff, offset); | ||
169 | 18 | call_new(dst1, W, src, | |
170 | (ptrdiff_t[3]) { y_src_stride, uv_src_stride, uv_src_stride }, | ||
171 | W, H, coeff, offset); | ||
172 |
1/2✓ Branch 0 taken 18 times.
✗ Branch 1 not taken.
|
18 | if (memcmp(dst0[0], dst1[0], W * H * sizeof(int16_t)) || |
173 |
1/2✓ Branch 0 taken 18 times.
✗ Branch 1 not taken.
|
18 | memcmp(dst0[1], dst1[1], W * H * sizeof(int16_t)) || |
174 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 18 times.
|
18 | memcmp(dst0[2], dst1[2], W * H * sizeof(int16_t))) { |
175 | ✗ | fail(); | |
176 | } | ||
177 | } | ||
178 | } | ||
179 | } | ||
180 | |||
181 | 13 | report("yuv2rgb"); | |
182 | 13 | } | |
183 | |||
184 | #undef randomize_buffers | ||
185 | #define randomize_buffers() \ | ||
186 | do { \ | ||
187 | int y, x, p; \ | ||
188 | for (p = 0; p < 3; p++) { \ | ||
189 | for (y = 0; y < H; y++) { \ | ||
190 | for (x = 0; x < W; x++) { \ | ||
191 | int r = rnd() & 0x7fff; \ | ||
192 | r -= (32768 - 28672) >> 1; \ | ||
193 | src[p][y * W + x] = r; \ | ||
194 | } \ | ||
195 | } \ | ||
196 | } \ | ||
197 | } while (0) | ||
198 | |||
199 | 13 | static void check_rgb2yuv(void) | |
200 | { | ||
201 | 13 | declare_func(void, uint8_t *dst[3], const ptrdiff_t dst_stride[3], | |
202 | int16_t *src[3], ptrdiff_t src_stride, | ||
203 | int w, int h, const int16_t coeff[3][3][8], | ||
204 | const int16_t off[8]); | ||
205 | ColorSpaceDSPContext dsp; | ||
206 | int odepth, fmt, n; | ||
207 | 13 | LOCAL_ALIGNED_32(int16_t, src_y, [W * H * 2]); | |
208 | 13 | LOCAL_ALIGNED_32(int16_t, src_u, [W * H * 2]); | |
209 | 13 | LOCAL_ALIGNED_32(int16_t, src_v, [W * H * 2]); | |
210 | 13 | int16_t *src[3] = { src_y, src_u, src_v }; | |
211 | 13 | LOCAL_ALIGNED_32(uint8_t, dst0_y, [W * H * 2]); | |
212 | 13 | LOCAL_ALIGNED_32(uint8_t, dst0_u, [W * H * 2]); | |
213 | 13 | LOCAL_ALIGNED_32(uint8_t, dst0_v, [W * H * 2]); | |
214 | 13 | LOCAL_ALIGNED_32(uint8_t, dst1_y, [W * H * 2]); | |
215 | 13 | LOCAL_ALIGNED_32(uint8_t, dst1_u, [W * H * 2]); | |
216 | 13 | LOCAL_ALIGNED_32(uint8_t, dst1_v, [W * H * 2]); | |
217 | 13 | uint8_t *dst0[3] = { dst0_y, dst0_u, dst0_v }, *dst1[3] = { dst1_y, dst1_u, dst1_v }; | |
218 | 13 | LOCAL_ALIGNED_32(int16_t, offset, [8]); | |
219 | 13 | LOCAL_ALIGNED_32(int16_t, coeff_buf, [3 * 3 * 8]); | |
220 | 13 | int16_t (*coeff)[3][8] = (int16_t(*)[3][8]) coeff_buf; | |
221 | |||
222 | 13 | ff_colorspacedsp_init(&dsp); | |
223 |
2/2✓ Branch 0 taken 104 times.
✓ Branch 1 taken 13 times.
|
117 | for (n = 0; n < 8; n++) { |
224 | 104 | offset[n] = 16; | |
225 | |||
226 | // these somewhat resemble bt601/smpte170m coefficients | ||
227 | 104 | coeff[0][0][n] = lrint(0.3 * (1 << 14)); | |
228 | 104 | coeff[0][1][n] = lrint(0.6 * (1 << 14)); | |
229 | 104 | coeff[0][2][n] = lrint(0.1 * (1 << 14)); | |
230 | 104 | coeff[1][0][n] = lrint(-0.15 * (1 << 14)); | |
231 | 104 | coeff[1][1][n] = lrint(-0.35 * (1 << 14)); | |
232 | 104 | coeff[1][2][n] = lrint(0.5 * (1 << 14)); | |
233 | 104 | coeff[2][0][n] = lrint(0.5 * (1 << 14)); | |
234 | 104 | coeff[2][1][n] = lrint(-0.42 * (1 << 14)); | |
235 | 104 | coeff[2][2][n] = lrint(-0.08 * (1 << 14)); | |
236 | } | ||
237 |
2/2✓ Branch 0 taken 39 times.
✓ Branch 1 taken 13 times.
|
52 | for (odepth = 0; odepth < 3; odepth++) { |
238 |
2/2✓ Branch 0 taken 117 times.
✓ Branch 1 taken 39 times.
|
156 | for (fmt = 0; fmt < 3; fmt++) { |
239 |
2/2✓ Branch 3 taken 18 times.
✓ Branch 4 taken 99 times.
|
117 | if (check_func(dsp.rgb2yuv[odepth][fmt], |
240 | "ff_colorspacedsp_rgb2yuv_%sp%d", | ||
241 | format_string[fmt], odepth * 2 + 8)) { | ||
242 | 18 | int ss_w = !!fmt, ss_h = fmt == 2; | |
243 |
2/2✓ Branch 0 taken 12 times.
✓ Branch 1 taken 6 times.
|
18 | int y_dst_stride = W << !!odepth; |
244 | 18 | int uv_dst_stride = y_dst_stride >> ss_w; | |
245 | |||
246 |
6/6✓ Branch 1 taken 221184 times.
✓ Branch 2 taken 3456 times.
✓ Branch 3 taken 3456 times.
✓ Branch 4 taken 54 times.
✓ Branch 5 taken 54 times.
✓ Branch 6 taken 18 times.
|
224712 | randomize_buffers(); |
247 | 18 | call_ref(dst0, (ptrdiff_t[3]) { y_dst_stride, uv_dst_stride, uv_dst_stride }, | |
248 | src, W, W, H, coeff, offset); | ||
249 | 18 | call_new(dst1, (ptrdiff_t[3]) { y_dst_stride, uv_dst_stride, uv_dst_stride }, | |
250 | src, W, W, H, coeff, offset); | ||
251 |
1/2✓ Branch 0 taken 18 times.
✗ Branch 1 not taken.
|
18 | if (memcmp(dst0[0], dst1[0], H * y_dst_stride) || |
252 |
1/2✓ Branch 0 taken 18 times.
✗ Branch 1 not taken.
|
18 | memcmp(dst0[1], dst1[1], H * uv_dst_stride >> ss_h) || |
253 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 18 times.
|
18 | memcmp(dst0[2], dst1[2], H * uv_dst_stride >> ss_h)) { |
254 | ✗ | fail(); | |
255 | } | ||
256 | } | ||
257 | } | ||
258 | } | ||
259 | |||
260 | 13 | report("rgb2yuv"); | |
261 | 13 | } | |
262 | |||
263 | 13 | static void check_multiply3x3(void) | |
264 | { | ||
265 | 13 | declare_func(void, int16_t *data[3], ptrdiff_t stride, | |
266 | int w, int h, const int16_t coeff[3][3][8]); | ||
267 | ColorSpaceDSPContext dsp; | ||
268 | 13 | LOCAL_ALIGNED_32(int16_t, dst0_y, [W * H]); | |
269 | 13 | LOCAL_ALIGNED_32(int16_t, dst0_u, [W * H]); | |
270 | 13 | LOCAL_ALIGNED_32(int16_t, dst0_v, [W * H]); | |
271 | 13 | LOCAL_ALIGNED_32(int16_t, dst1_y, [W * H]); | |
272 | 13 | LOCAL_ALIGNED_32(int16_t, dst1_u, [W * H]); | |
273 | 13 | LOCAL_ALIGNED_32(int16_t, dst1_v, [W * H]); | |
274 | 13 | int16_t *dst0[3] = { dst0_y, dst0_u, dst0_v }, *dst1[3] = { dst1_y, dst1_u, dst1_v }; | |
275 | 13 | int16_t **src = dst0; | |
276 | 13 | LOCAL_ALIGNED_32(int16_t, coeff_buf, [3 * 3 * 8]); | |
277 | 13 | int16_t (*coeff)[3][8] = (int16_t(*)[3][8]) coeff_buf; | |
278 | int n; | ||
279 | |||
280 | 13 | ff_colorspacedsp_init(&dsp); | |
281 |
2/2✓ Branch 0 taken 104 times.
✓ Branch 1 taken 13 times.
|
117 | for (n = 0; n < 8; n++) { |
282 | 104 | coeff[0][0][n] = lrint(0.85 * (1 << 14)); | |
283 | 104 | coeff[0][1][n] = lrint(0.10 * (1 << 14)); | |
284 | 104 | coeff[0][2][n] = lrint(0.05 * (1 << 14)); | |
285 | 104 | coeff[1][0][n] = lrint(-0.1 * (1 << 14)); | |
286 | 104 | coeff[1][1][n] = lrint(0.95 * (1 << 14)); | |
287 | 104 | coeff[1][2][n] = lrint(0.15 * (1 << 14)); | |
288 | 104 | coeff[2][0][n] = lrint(-0.2 * (1 << 14)); | |
289 | 104 | coeff[2][1][n] = lrint(0.30 * (1 << 14)); | |
290 | 104 | coeff[2][2][n] = lrint(0.90 * (1 << 14)); | |
291 | } | ||
292 |
2/2✓ Branch 3 taken 2 times.
✓ Branch 4 taken 11 times.
|
13 | if (check_func(dsp.multiply3x3, "ff_colorspacedsp_multiply3x3")) { |
293 |
6/6✓ Branch 1 taken 24576 times.
✓ Branch 2 taken 384 times.
✓ Branch 3 taken 384 times.
✓ Branch 4 taken 6 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
|
24968 | randomize_buffers(); |
294 | 2 | memcpy(dst1_y, dst0_y, W * H * sizeof(*dst1_y)); | |
295 | 2 | memcpy(dst1_u, dst0_u, W * H * sizeof(*dst1_u)); | |
296 | 2 | memcpy(dst1_v, dst0_v, W * H * sizeof(*dst1_v)); | |
297 | 2 | call_ref(dst0, W, W, H, coeff); | |
298 | 2 | call_new(dst1, W, W, H, coeff); | |
299 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | if (memcmp(dst0[0], dst1[0], H * W * sizeof(*dst0_y)) || |
300 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | memcmp(dst0[1], dst1[1], H * W * sizeof(*dst0_u)) || |
301 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
2 | memcmp(dst0[2], dst1[2], H * W * sizeof(*dst0_v))) { |
302 | ✗ | fail(); | |
303 | } | ||
304 | } | ||
305 | |||
306 | 13 | report("multiply3x3"); | |
307 | 13 | } | |
308 | |||
309 | 13 | void checkasm_check_colorspace(void) | |
310 | { | ||
311 | 13 | check_yuv2yuv(); | |
312 | 13 | check_yuv2rgb(); | |
313 | 13 | check_rgb2yuv(); | |
314 | 13 | check_multiply3x3(); | |
315 | 13 | } | |
316 |