Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | * Copyright (C) 2001-2012 Michael Niedermayer <michaelni@gmx.at> | ||
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 <math.h> | ||
22 | #include <stdint.h> | ||
23 | #include <stdio.h> | ||
24 | #include <string.h> | ||
25 | |||
26 | #include "libavutil/attributes.h" | ||
27 | #include "libavutil/avutil.h" | ||
28 | #include "libavutil/avassert.h" | ||
29 | #include "libavutil/bswap.h" | ||
30 | #include "libavutil/intreadwrite.h" | ||
31 | #include "libavutil/mathematics.h" | ||
32 | #include "libavutil/mem_internal.h" | ||
33 | #include "libavutil/pixdesc.h" | ||
34 | #include "config.h" | ||
35 | #include "rgb2rgb.h" | ||
36 | #include "swscale.h" | ||
37 | #include "swscale_internal.h" | ||
38 | |||
39 | DECLARE_ALIGNED(8, const uint8_t, ff_dither_2x2_4)[][8] = { | ||
40 | { 1, 3, 1, 3, 1, 3, 1, 3, }, | ||
41 | { 2, 0, 2, 0, 2, 0, 2, 0, }, | ||
42 | { 1, 3, 1, 3, 1, 3, 1, 3, }, | ||
43 | }; | ||
44 | |||
45 | DECLARE_ALIGNED(8, const uint8_t, ff_dither_2x2_8)[][8] = { | ||
46 | { 6, 2, 6, 2, 6, 2, 6, 2, }, | ||
47 | { 0, 4, 0, 4, 0, 4, 0, 4, }, | ||
48 | { 6, 2, 6, 2, 6, 2, 6, 2, }, | ||
49 | }; | ||
50 | |||
51 | DECLARE_ALIGNED(8, const uint8_t, ff_dither_4x4_16)[][8] = { | ||
52 | { 8, 4, 11, 7, 8, 4, 11, 7, }, | ||
53 | { 2, 14, 1, 13, 2, 14, 1, 13, }, | ||
54 | { 10, 6, 9, 5, 10, 6, 9, 5, }, | ||
55 | { 0, 12, 3, 15, 0, 12, 3, 15, }, | ||
56 | { 8, 4, 11, 7, 8, 4, 11, 7, }, | ||
57 | }; | ||
58 | |||
59 | DECLARE_ALIGNED(8, const uint8_t, ff_dither_8x8_32)[][8] = { | ||
60 | { 17, 9, 23, 15, 16, 8, 22, 14, }, | ||
61 | { 5, 29, 3, 27, 4, 28, 2, 26, }, | ||
62 | { 21, 13, 19, 11, 20, 12, 18, 10, }, | ||
63 | { 0, 24, 6, 30, 1, 25, 7, 31, }, | ||
64 | { 16, 8, 22, 14, 17, 9, 23, 15, }, | ||
65 | { 4, 28, 2, 26, 5, 29, 3, 27, }, | ||
66 | { 20, 12, 18, 10, 21, 13, 19, 11, }, | ||
67 | { 1, 25, 7, 31, 0, 24, 6, 30, }, | ||
68 | { 17, 9, 23, 15, 16, 8, 22, 14, }, | ||
69 | }; | ||
70 | |||
71 | DECLARE_ALIGNED(8, const uint8_t, ff_dither_8x8_73)[][8] = { | ||
72 | { 0, 55, 14, 68, 3, 58, 17, 72, }, | ||
73 | { 37, 18, 50, 32, 40, 22, 54, 35, }, | ||
74 | { 9, 64, 5, 59, 13, 67, 8, 63, }, | ||
75 | { 46, 27, 41, 23, 49, 31, 44, 26, }, | ||
76 | { 2, 57, 16, 71, 1, 56, 15, 70, }, | ||
77 | { 39, 21, 52, 34, 38, 19, 51, 33, }, | ||
78 | { 11, 66, 7, 62, 10, 65, 6, 60, }, | ||
79 | { 48, 30, 43, 25, 47, 29, 42, 24, }, | ||
80 | { 0, 55, 14, 68, 3, 58, 17, 72, }, | ||
81 | }; | ||
82 | |||
83 | #if 1 | ||
84 | DECLARE_ALIGNED(8, const uint8_t, ff_dither_8x8_220)[][8] = { | ||
85 | {117, 62, 158, 103, 113, 58, 155, 100, }, | ||
86 | { 34, 199, 21, 186, 31, 196, 17, 182, }, | ||
87 | {144, 89, 131, 76, 141, 86, 127, 72, }, | ||
88 | { 0, 165, 41, 206, 10, 175, 52, 217, }, | ||
89 | {110, 55, 151, 96, 120, 65, 162, 107, }, | ||
90 | { 28, 193, 14, 179, 38, 203, 24, 189, }, | ||
91 | {138, 83, 124, 69, 148, 93, 134, 79, }, | ||
92 | { 7, 172, 48, 213, 3, 168, 45, 210, }, | ||
93 | {117, 62, 158, 103, 113, 58, 155, 100, }, | ||
94 | }; | ||
95 | #elif 1 | ||
96 | // tries to correct a gamma of 1.5 | ||
97 | DECLARE_ALIGNED(8, const uint8_t, ff_dither_8x8_220)[][8] = { | ||
98 | { 0, 143, 18, 200, 2, 156, 25, 215, }, | ||
99 | { 78, 28, 125, 64, 89, 36, 138, 74, }, | ||
100 | { 10, 180, 3, 161, 16, 195, 8, 175, }, | ||
101 | {109, 51, 93, 38, 121, 60, 105, 47, }, | ||
102 | { 1, 152, 23, 210, 0, 147, 20, 205, }, | ||
103 | { 85, 33, 134, 71, 81, 30, 130, 67, }, | ||
104 | { 14, 190, 6, 171, 12, 185, 5, 166, }, | ||
105 | {117, 57, 101, 44, 113, 54, 97, 41, }, | ||
106 | { 0, 143, 18, 200, 2, 156, 25, 215, }, | ||
107 | }; | ||
108 | #elif 1 | ||
109 | // tries to correct a gamma of 2.0 | ||
110 | DECLARE_ALIGNED(8, const uint8_t, ff_dither_8x8_220)[][8] = { | ||
111 | { 0, 124, 8, 193, 0, 140, 12, 213, }, | ||
112 | { 55, 14, 104, 42, 66, 19, 119, 52, }, | ||
113 | { 3, 168, 1, 145, 6, 187, 3, 162, }, | ||
114 | { 86, 31, 70, 21, 99, 39, 82, 28, }, | ||
115 | { 0, 134, 11, 206, 0, 129, 9, 200, }, | ||
116 | { 62, 17, 114, 48, 58, 16, 109, 45, }, | ||
117 | { 5, 181, 2, 157, 4, 175, 1, 151, }, | ||
118 | { 95, 36, 78, 26, 90, 34, 74, 24, }, | ||
119 | { 0, 124, 8, 193, 0, 140, 12, 213, }, | ||
120 | }; | ||
121 | #else | ||
122 | // tries to correct a gamma of 2.5 | ||
123 | DECLARE_ALIGNED(8, const uint8_t, ff_dither_8x8_220)[][8] = { | ||
124 | { 0, 107, 3, 187, 0, 125, 6, 212, }, | ||
125 | { 39, 7, 86, 28, 49, 11, 102, 36, }, | ||
126 | { 1, 158, 0, 131, 3, 180, 1, 151, }, | ||
127 | { 68, 19, 52, 12, 81, 25, 64, 17, }, | ||
128 | { 0, 119, 5, 203, 0, 113, 4, 195, }, | ||
129 | { 45, 9, 96, 33, 42, 8, 91, 30, }, | ||
130 | { 2, 172, 1, 144, 2, 165, 0, 137, }, | ||
131 | { 77, 23, 60, 15, 72, 21, 56, 14, }, | ||
132 | { 0, 107, 3, 187, 0, 125, 6, 212, }, | ||
133 | }; | ||
134 | #endif | ||
135 | |||
136 | #define IS_BE_LE 0 | ||
137 | #define IS_BE_BE 1 | ||
138 | /* ENDIAN_IDENTIFIER needs to be "BE" or "LE". */ | ||
139 | #define IS_BE(ENDIAN_IDENTIFIER) IS_BE_ ## ENDIAN_IDENTIFIER | ||
140 | |||
141 | #define output_pixel(pos, val, bias, signedness) \ | ||
142 | if (big_endian) { \ | ||
143 | AV_WB16(pos, bias + av_clip_ ## signedness ## 16(val >> shift)); \ | ||
144 | } else { \ | ||
145 | AV_WL16(pos, bias + av_clip_ ## signedness ## 16(val >> shift)); \ | ||
146 | } | ||
147 | |||
148 | static av_always_inline void | ||
149 | 2142478 | yuv2plane1_16_c_template(const int32_t *src, uint16_t *dest, int dstW, | |
150 | int big_endian, int output_bits) | ||
151 | { | ||
152 | int i; | ||
153 | 2142478 | int shift = 3; | |
154 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2142478 times.
|
2142478 | av_assert0(output_bits == 16); |
155 | |||
156 |
2/2✓ Branch 0 taken 698681800 times.
✓ Branch 1 taken 2142478 times.
|
700824278 | for (i = 0; i < dstW; i++) { |
157 | 698681800 | int val = src[i] + (1 << (shift - 1)); | |
158 |
2/2✓ Branch 0 taken 253452960 times.
✓ Branch 1 taken 445228840 times.
|
698681800 | output_pixel(&dest[i], val, 0, uint); |
159 | } | ||
160 | 2142478 | } | |
161 | |||
162 | static av_always_inline void | ||
163 | 494088 | yuv2planeX_16_c_template(const int16_t *filter, int filterSize, | |
164 | const int32_t **src, uint16_t *dest, int dstW, | ||
165 | int big_endian, int output_bits) | ||
166 | { | ||
167 | int i; | ||
168 | 494088 | int shift = 15; | |
169 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 494088 times.
|
494088 | av_assert0(output_bits == 16); |
170 | |||
171 |
2/2✓ Branch 0 taken 136064032 times.
✓ Branch 1 taken 494088 times.
|
136558120 | for (i = 0; i < dstW; i++) { |
172 | 136064032 | int val = 1 << (shift - 1); | |
173 | int j; | ||
174 | |||
175 | /* range of val is [0,0x7FFFFFFF], so 31 bits, but with lanczos/spline | ||
176 | * filters (or anything with negative coeffs, the range can be slightly | ||
177 | * wider in both directions. To account for this overflow, we subtract | ||
178 | * a constant so it always fits in the signed range (assuming a | ||
179 | * reasonable filterSize), and re-add that at the end. */ | ||
180 | 136064032 | val -= 0x40000000; | |
181 |
2/2✓ Branch 0 taken 656087168 times.
✓ Branch 1 taken 136064032 times.
|
792151200 | for (j = 0; j < filterSize; j++) |
182 | 656087168 | val += src[j][i] * (unsigned)filter[j]; | |
183 | |||
184 |
2/2✓ Branch 0 taken 26149504 times.
✓ Branch 1 taken 109914528 times.
|
136064032 | output_pixel(&dest[i], val, 0x8000, int); |
185 | } | ||
186 | 494088 | } | |
187 | |||
188 | static av_always_inline void | ||
189 | 400676 | yuv2nv12cX_16_c_template(int big_endian, const uint8_t *chrDither, | |
190 | const int16_t *chrFilter, int chrFilterSize, | ||
191 | const int16_t **chrUSrc, const int16_t **chrVSrc, | ||
192 | uint8_t *dest8, int chrDstW, int output_bits) | ||
193 | { | ||
194 | 400676 | uint16_t *dest = (uint16_t*)dest8; | |
195 | 400676 | const int32_t **uSrc = (const int32_t **)chrUSrc; | |
196 | 400676 | const int32_t **vSrc = (const int32_t **)chrVSrc; | |
197 | 400676 | int shift = 15; | |
198 | int i, j; | ||
199 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 400676 times.
|
400676 | av_assert0(output_bits == 16); |
200 | |||
201 |
2/2✓ Branch 0 taken 98936944 times.
✓ Branch 1 taken 400676 times.
|
99337620 | for (i = 0; i < chrDstW; i++) { |
202 | 98936944 | int u = 1 << (shift - 1); | |
203 | 98936944 | int v = 1 << (shift - 1); | |
204 | |||
205 | /* See yuv2planeX_16_c_template for details. */ | ||
206 | 98936944 | u -= 0x40000000; | |
207 | 98936944 | v -= 0x40000000; | |
208 |
2/2✓ Branch 0 taken 210358848 times.
✓ Branch 1 taken 98936944 times.
|
309295792 | for (j = 0; j < chrFilterSize; j++) { |
209 | 210358848 | u += uSrc[j][i] * (unsigned)chrFilter[j]; | |
210 | 210358848 | v += vSrc[j][i] * (unsigned)chrFilter[j]; | |
211 | } | ||
212 | |||
213 |
2/2✓ Branch 0 taken 49633208 times.
✓ Branch 1 taken 49303736 times.
|
98936944 | output_pixel(&dest[2*i] , u, 0x8000, int); |
214 |
2/2✓ Branch 0 taken 49633208 times.
✓ Branch 1 taken 49303736 times.
|
98936944 | output_pixel(&dest[2*i+1], v, 0x8000, int); |
215 | } | ||
216 | 400676 | } | |
217 | |||
218 | static av_always_inline void | ||
219 | 24480 | yuv2plane1_float_c_template(const int32_t *src, float *dest, int dstW) | |
220 | { | ||
221 | static const int big_endian = HAVE_BIGENDIAN; | ||
222 | static const int shift = 3; | ||
223 | static const float float_mult = 1.0f / 65535.0f; | ||
224 | int i, val; | ||
225 | uint16_t val_uint; | ||
226 | |||
227 |
2/2✓ Branch 0 taken 8616960 times.
✓ Branch 1 taken 24480 times.
|
8641440 | for (i = 0; i < dstW; ++i){ |
228 | 8616960 | val = src[i] + (1 << (shift - 1)); | |
229 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8616960 times.
|
8616960 | output_pixel(&val_uint, val, 0, uint); |
230 | 8616960 | dest[i] = float_mult * (float)val_uint; | |
231 | } | ||
232 | 24480 | } | |
233 | |||
234 | static av_always_inline void | ||
235 | 9504 | yuv2plane1_float_bswap_c_template(const int32_t *src, uint32_t *dest, int dstW) | |
236 | { | ||
237 | static const int big_endian = HAVE_BIGENDIAN; | ||
238 | static const int shift = 3; | ||
239 | static const float float_mult = 1.0f / 65535.0f; | ||
240 | int i, val; | ||
241 | uint16_t val_uint; | ||
242 | |||
243 |
2/2✓ Branch 0 taken 3345408 times.
✓ Branch 1 taken 9504 times.
|
3354912 | for (i = 0; i < dstW; ++i){ |
244 | 3345408 | val = src[i] + (1 << (shift - 1)); | |
245 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 3345408 times.
|
3345408 | output_pixel(&val_uint, val, 0, uint); |
246 | 3345408 | dest[i] = av_bswap32(av_float2int(float_mult * (float)val_uint)); | |
247 | } | ||
248 | 9504 | } | |
249 | |||
250 | static av_always_inline void | ||
251 | 100 | yuv2planeX_float_c_template(const int16_t *filter, int filterSize, const int32_t **src, | |
252 | float *dest, int dstW) | ||
253 | { | ||
254 | static const int big_endian = HAVE_BIGENDIAN; | ||
255 | static const int shift = 15; | ||
256 | static const float float_mult = 1.0f / 65535.0f; | ||
257 | int i, j, val; | ||
258 | uint16_t val_uint; | ||
259 | |||
260 |
2/2✓ Branch 0 taken 20000 times.
✓ Branch 1 taken 100 times.
|
20100 | for (i = 0; i < dstW; ++i){ |
261 | 20000 | val = (1 << (shift - 1)) - 0x40000000; | |
262 |
2/2✓ Branch 0 taken 240000 times.
✓ Branch 1 taken 20000 times.
|
260000 | for (j = 0; j < filterSize; ++j){ |
263 | 240000 | val += src[j][i] * (unsigned)filter[j]; | |
264 | } | ||
265 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 20000 times.
|
20000 | output_pixel(&val_uint, val, 0x8000, int); |
266 | 20000 | dest[i] = float_mult * (float)val_uint; | |
267 | } | ||
268 | 100 | } | |
269 | |||
270 | static av_always_inline void | ||
271 | 100 | yuv2planeX_float_bswap_c_template(const int16_t *filter, int filterSize, const int32_t **src, | |
272 | uint32_t *dest, int dstW) | ||
273 | { | ||
274 | static const int big_endian = HAVE_BIGENDIAN; | ||
275 | static const int shift = 15; | ||
276 | static const float float_mult = 1.0f / 65535.0f; | ||
277 | int i, j, val; | ||
278 | uint16_t val_uint; | ||
279 | |||
280 |
2/2✓ Branch 0 taken 20000 times.
✓ Branch 1 taken 100 times.
|
20100 | for (i = 0; i < dstW; ++i){ |
281 | 20000 | val = (1 << (shift - 1)) - 0x40000000; | |
282 |
2/2✓ Branch 0 taken 240000 times.
✓ Branch 1 taken 20000 times.
|
260000 | for (j = 0; j < filterSize; ++j){ |
283 | 240000 | val += src[j][i] * (unsigned)filter[j]; | |
284 | } | ||
285 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 20000 times.
|
20000 | output_pixel(&val_uint, val, 0x8000, int); |
286 | 20000 | dest[i] = av_bswap32(av_float2int(float_mult * (float)val_uint)); | |
287 | } | ||
288 | 100 | } | |
289 | |||
290 | #define yuv2plane1_float(template, dest_type, BE_LE) \ | ||
291 | static void yuv2plane1_float ## BE_LE ## _c(const int16_t *src, uint8_t *dest, int dstW, \ | ||
292 | const uint8_t *dither, int offset) \ | ||
293 | { \ | ||
294 | template((const int32_t *)src, (dest_type *)dest, dstW); \ | ||
295 | } | ||
296 | |||
297 | #define yuv2planeX_float(template, dest_type, BE_LE) \ | ||
298 | static void yuv2planeX_float ## BE_LE ## _c(const int16_t *filter, int filterSize, \ | ||
299 | const int16_t **src, uint8_t *dest, int dstW, \ | ||
300 | const uint8_t *dither, int offset) \ | ||
301 | { \ | ||
302 | template(filter, filterSize, (const int32_t **)src, (dest_type *)dest, dstW); \ | ||
303 | } | ||
304 | |||
305 | #if HAVE_BIGENDIAN | ||
306 | yuv2plane1_float(yuv2plane1_float_c_template, float, BE) | ||
307 | yuv2plane1_float(yuv2plane1_float_bswap_c_template, uint32_t, LE) | ||
308 | yuv2planeX_float(yuv2planeX_float_c_template, float, BE) | ||
309 | yuv2planeX_float(yuv2planeX_float_bswap_c_template, uint32_t, LE) | ||
310 | #else | ||
311 | 24480 | yuv2plane1_float(yuv2plane1_float_c_template, float, LE) | |
312 | 9504 | yuv2plane1_float(yuv2plane1_float_bswap_c_template, uint32_t, BE) | |
313 | 100 | yuv2planeX_float(yuv2planeX_float_c_template, float, LE) | |
314 | 100 | yuv2planeX_float(yuv2planeX_float_bswap_c_template, uint32_t, BE) | |
315 | #endif | ||
316 | |||
317 | #undef output_pixel | ||
318 | |||
319 | #define output_pixel(pos, val) \ | ||
320 | if (big_endian) { \ | ||
321 | AV_WB16(pos, av_clip_uintp2(val >> shift, output_bits)); \ | ||
322 | } else { \ | ||
323 | AV_WL16(pos, av_clip_uintp2(val >> shift, output_bits)); \ | ||
324 | } | ||
325 | |||
326 | static av_always_inline void | ||
327 | 6168540 | yuv2plane1_10_c_template(const int16_t *src, uint16_t *dest, int dstW, | |
328 | int big_endian, int output_bits) | ||
329 | { | ||
330 | int i; | ||
331 | 6168540 | int shift = 15 - output_bits; | |
332 | |||
333 |
2/2✓ Branch 0 taken 2024455592 times.
✓ Branch 1 taken 6168540 times.
|
2030624132 | for (i = 0; i < dstW; i++) { |
334 | 2024455592 | int val = src[i] + (1 << (shift - 1)); | |
335 |
2/2✓ Branch 0 taken 334844928 times.
✓ Branch 1 taken 1689610664 times.
|
2024455592 | output_pixel(&dest[i], val); |
336 | } | ||
337 | 6168540 | } | |
338 | |||
339 | static av_always_inline void | ||
340 | 2752688 | yuv2planeX_10_c_template(const int16_t *filter, int filterSize, | |
341 | const int16_t **src, uint16_t *dest, int dstW, | ||
342 | int big_endian, int output_bits) | ||
343 | { | ||
344 | int i; | ||
345 | 2752688 | int shift = 11 + 16 - output_bits; | |
346 | |||
347 |
2/2✓ Branch 0 taken 863156616 times.
✓ Branch 1 taken 2752688 times.
|
865909304 | for (i = 0; i < dstW; i++) { |
348 | 863156616 | int val = 1 << (shift - 1); | |
349 | int j; | ||
350 | |||
351 |
2/2✓ Branch 0 taken 3996531744 times.
✓ Branch 1 taken 863156616 times.
|
4859688360 | for (j = 0; j < filterSize; j++) |
352 | 3996531744 | val += src[j][i] * filter[j]; | |
353 | |||
354 |
2/2✓ Branch 0 taken 108455808 times.
✓ Branch 1 taken 754700808 times.
|
863156616 | output_pixel(&dest[i], val); |
355 | } | ||
356 | 2752688 | } | |
357 | |||
358 | #undef output_pixel | ||
359 | |||
360 | #define yuv2NBPS(bits, BE_LE, is_be, template_size, typeX_t) \ | ||
361 | static void yuv2plane1_ ## bits ## BE_LE ## _c(const int16_t *src, \ | ||
362 | uint8_t *dest, int dstW, \ | ||
363 | const uint8_t *dither, int offset)\ | ||
364 | { \ | ||
365 | yuv2plane1_ ## template_size ## _c_template((const typeX_t *) src, \ | ||
366 | (uint16_t *) dest, dstW, is_be, bits); \ | ||
367 | }\ | ||
368 | static void yuv2planeX_ ## bits ## BE_LE ## _c(const int16_t *filter, int filterSize, \ | ||
369 | const int16_t **src, uint8_t *dest, int dstW, \ | ||
370 | const uint8_t *dither, int offset)\ | ||
371 | { \ | ||
372 | yuv2planeX_## template_size ## _c_template(filter, \ | ||
373 | filterSize, (const typeX_t **) src, \ | ||
374 | (uint16_t *) dest, dstW, is_be, bits); \ | ||
375 | } | ||
376 | |||
377 | 157216 | yuv2NBPS( 9, BE, 1, 10, int16_t) | |
378 | 172204 | yuv2NBPS( 9, LE, 0, 10, int16_t) | |
379 | 1362608 | yuv2NBPS(10, BE, 1, 10, int16_t) | |
380 | 9370652 | yuv2NBPS(10, LE, 0, 10, int16_t) | |
381 | 1362008 | yuv2NBPS(12, BE, 1, 10, int16_t) | |
382 | 5240792 | yuv2NBPS(12, LE, 0, 10, int16_t) | |
383 | 84168 | yuv2NBPS(14, BE, 1, 10, int16_t) | |
384 | 92808 | yuv2NBPS(14, LE, 0, 10, int16_t) | |
385 | 1838944 | yuv2NBPS(16, BE, 1, 16, int32_t) | |
386 | 3434188 | yuv2NBPS(16, LE, 0, 16, int32_t) | |
387 | |||
388 | |||
389 | 199258 | static void yuv2nv12cX_16LE_c(enum AVPixelFormat dstFormat, const uint8_t *chrDither, | |
390 | const int16_t *chrFilter, int chrFilterSize, | ||
391 | const int16_t **chrUSrc, const int16_t **chrVSrc, | ||
392 | uint8_t *dest8, int chrDstW) | ||
393 | { | ||
394 | 199258 | yuv2nv12cX_16_c_template(0, chrDither, chrFilter, chrFilterSize, chrUSrc, chrVSrc, dest8, chrDstW, 16); | |
395 | 199258 | } | |
396 | |||
397 | 201418 | static void yuv2nv12cX_16BE_c(enum AVPixelFormat dstFormat, const uint8_t *chrDither, | |
398 | const int16_t *chrFilter, int chrFilterSize, | ||
399 | const int16_t **chrUSrc, const int16_t **chrVSrc, | ||
400 | uint8_t *dest8, int chrDstW) | ||
401 | { | ||
402 | 201418 | yuv2nv12cX_16_c_template(1, chrDither, chrFilter, chrFilterSize, chrUSrc, chrVSrc, dest8, chrDstW, 16); | |
403 | 201418 | } | |
404 | |||
405 | 11260546 | static void yuv2planeX_8_c(const int16_t *filter, int filterSize, | |
406 | const int16_t **src, uint8_t *dest, int dstW, | ||
407 | const uint8_t *dither, int offset) | ||
408 | { | ||
409 | int i; | ||
410 |
2/2✓ Branch 0 taken 6689025666 times.
✓ Branch 1 taken 11260546 times.
|
6700286212 | for (i=0; i<dstW; i++) { |
411 | 6689025666 | int val = dither[(i + offset) & 7] << 12; | |
412 | int j; | ||
413 |
2/2✓ Branch 0 taken 21779179813 times.
✓ Branch 1 taken 6689025666 times.
|
28468205479 | for (j=0; j<filterSize; j++) |
414 | 21779179813 | val += src[j][i] * filter[j]; | |
415 | |||
416 | 6689025666 | dest[i]= av_clip_uint8(val>>19); | |
417 | } | ||
418 | 11260546 | } | |
419 | |||
420 | 9878163 | static void yuv2plane1_8_c(const int16_t *src, uint8_t *dest, int dstW, | |
421 | const uint8_t *dither, int offset) | ||
422 | { | ||
423 | int i; | ||
424 |
2/2✓ Branch 0 taken 3741871673 times.
✓ Branch 1 taken 9878163 times.
|
3751749836 | for (i=0; i<dstW; i++) { |
425 | 3741871673 | int val = (src[i] + dither[(i + offset) & 7]) >> 7; | |
426 | 3741871673 | dest[i]= av_clip_uint8(val); | |
427 | } | ||
428 | 9878163 | } | |
429 | |||
430 | 161802 | static void yuv2nv12cX_c(enum AVPixelFormat dstFormat, const uint8_t *chrDither, | |
431 | const int16_t *chrFilter, int chrFilterSize, | ||
432 | const int16_t **chrUSrc, const int16_t **chrVSrc, | ||
433 | uint8_t *dest, int chrDstW) | ||
434 | { | ||
435 | int i; | ||
436 | |||
437 |
2/2✓ Branch 1 taken 155604 times.
✓ Branch 2 taken 6198 times.
|
161802 | if (!isSwappedChroma(dstFormat)) |
438 |
2/2✓ Branch 0 taken 37768344 times.
✓ Branch 1 taken 155604 times.
|
37923948 | for (i=0; i<chrDstW; i++) { |
439 | 37768344 | int u = chrDither[i & 7] << 12; | |
440 | 37768344 | int v = chrDither[(i + 3) & 7] << 12; | |
441 | int j; | ||
442 |
2/2✓ Branch 0 taken 85534144 times.
✓ Branch 1 taken 37768344 times.
|
123302488 | for (j=0; j<chrFilterSize; j++) { |
443 | 85534144 | u += chrUSrc[j][i] * chrFilter[j]; | |
444 | 85534144 | v += chrVSrc[j][i] * chrFilter[j]; | |
445 | } | ||
446 | |||
447 | 37768344 | dest[2*i]= av_clip_uint8(u>>19); | |
448 | 37768344 | dest[2*i+1]= av_clip_uint8(v>>19); | |
449 | } | ||
450 | else | ||
451 |
2/2✓ Branch 0 taken 2153896 times.
✓ Branch 1 taken 6198 times.
|
2160094 | for (i=0; i<chrDstW; i++) { |
452 | 2153896 | int u = chrDither[i & 7] << 12; | |
453 | 2153896 | int v = chrDither[(i + 3) & 7] << 12; | |
454 | int j; | ||
455 |
2/2✓ Branch 0 taken 8815584 times.
✓ Branch 1 taken 2153896 times.
|
10969480 | for (j=0; j<chrFilterSize; j++) { |
456 | 8815584 | u += chrUSrc[j][i] * chrFilter[j]; | |
457 | 8815584 | v += chrVSrc[j][i] * chrFilter[j]; | |
458 | } | ||
459 | |||
460 | 2153896 | dest[2*i]= av_clip_uint8(v>>19); | |
461 | 2153896 | dest[2*i+1]= av_clip_uint8(u>>19); | |
462 | } | ||
463 | 161802 | } | |
464 | |||
465 | |||
466 | #define output_pixel(pos, val) \ | ||
467 | if (big_endian) { \ | ||
468 | AV_WB16(pos, av_clip_uintp2(val >> shift, output_bits) << output_shift); \ | ||
469 | } else { \ | ||
470 | AV_WL16(pos, av_clip_uintp2(val >> shift, output_bits) << output_shift); \ | ||
471 | } | ||
472 | |||
473 | 781632 | static void yuv2p01xl1_c(const int16_t *src, | |
474 | uint16_t *dest, int dstW, | ||
475 | int big_endian, int output_bits) | ||
476 | { | ||
477 | int i; | ||
478 | 781632 | int shift = 15 - output_bits; | |
479 | 781632 | int output_shift = 16 - output_bits; | |
480 | |||
481 |
2/2✓ Branch 0 taken 275134464 times.
✓ Branch 1 taken 781632 times.
|
275916096 | for (i = 0; i < dstW; i++) { |
482 | 275134464 | int val = src[i] + (1 << (shift - 1)); | |
483 |
2/2✓ Branch 0 taken 138276864 times.
✓ Branch 1 taken 136857600 times.
|
275134464 | output_pixel(&dest[i], val); |
484 | } | ||
485 | 781632 | } | |
486 | |||
487 | 1200 | static void yuv2p01xlX_c(const int16_t *filter, int filterSize, | |
488 | const int16_t **src, uint16_t *dest, int dstW, | ||
489 | int big_endian, int output_bits) | ||
490 | { | ||
491 | int i, j; | ||
492 | 1200 | int shift = 11 + 16 - output_bits; | |
493 | 1200 | int output_shift = 16 - output_bits; | |
494 | |||
495 |
2/2✓ Branch 0 taken 240000 times.
✓ Branch 1 taken 1200 times.
|
241200 | for (i = 0; i < dstW; i++) { |
496 | 240000 | int val = 1 << (shift - 1); | |
497 | |||
498 |
2/2✓ Branch 0 taken 2880000 times.
✓ Branch 1 taken 240000 times.
|
3120000 | for (j = 0; j < filterSize; j++) |
499 | 2880000 | val += src[j][i] * filter[j]; | |
500 | |||
501 |
2/2✓ Branch 0 taken 120000 times.
✓ Branch 1 taken 120000 times.
|
240000 | output_pixel(&dest[i], val); |
502 | } | ||
503 | 1200 | } | |
504 | |||
505 | 654472 | static void yuv2p01xcX_c(int big_endian, const uint8_t *chrDither, | |
506 | const int16_t *chrFilter, int chrFilterSize, | ||
507 | const int16_t **chrUSrc, const int16_t **chrVSrc, | ||
508 | uint8_t *dest8, int chrDstW, int output_bits) | ||
509 | { | ||
510 | 654472 | uint16_t *dest = (uint16_t*)dest8; | |
511 | int i, j; | ||
512 | 654472 | int shift = 11 + 16 - output_bits; | |
513 | 654472 | int output_shift = 16 - output_bits; | |
514 | |||
515 |
2/2✓ Branch 0 taken 161479904 times.
✓ Branch 1 taken 654472 times.
|
162134376 | for (i = 0; i < chrDstW; i++) { |
516 | 161479904 | int u = 1 << (shift - 1); | |
517 | 161479904 | int v = 1 << (shift - 1); | |
518 | |||
519 |
2/2✓ Branch 0 taken 347422848 times.
✓ Branch 1 taken 161479904 times.
|
508902752 | for (j = 0; j < chrFilterSize; j++) { |
520 | 347422848 | u += chrUSrc[j][i] * chrFilter[j]; | |
521 | 347422848 | v += chrVSrc[j][i] * chrFilter[j]; | |
522 | } | ||
523 | |||
524 |
2/2✓ Branch 0 taken 80815984 times.
✓ Branch 1 taken 80663920 times.
|
161479904 | output_pixel(&dest[2*i] , u); |
525 |
2/2✓ Branch 0 taken 80815984 times.
✓ Branch 1 taken 80663920 times.
|
161479904 | output_pixel(&dest[2*i+1], v); |
526 | } | ||
527 | 654472 | } | |
528 | |||
529 | #undef output_pixel | ||
530 | |||
531 | #define yuv2p01x_wrapper(bits) \ | ||
532 | static void yuv2p0 ## bits ## l1_LE_c(const int16_t *src, \ | ||
533 | uint8_t *dest, int dstW, \ | ||
534 | const uint8_t *dither, int offset) \ | ||
535 | { \ | ||
536 | yuv2p01xl1_c(src, (uint16_t*)dest, dstW, 0, bits); \ | ||
537 | } \ | ||
538 | \ | ||
539 | static void yuv2p0 ## bits ## l1_BE_c(const int16_t *src, \ | ||
540 | uint8_t *dest, int dstW, \ | ||
541 | const uint8_t *dither, int offset) \ | ||
542 | { \ | ||
543 | yuv2p01xl1_c(src, (uint16_t*)dest, dstW, 1, bits); \ | ||
544 | } \ | ||
545 | \ | ||
546 | static void yuv2p0 ## bits ## lX_LE_c(const int16_t *filter, \ | ||
547 | int filterSize, const int16_t **src, \ | ||
548 | uint8_t *dest, int dstW, \ | ||
549 | const uint8_t *dither, int offset) \ | ||
550 | { \ | ||
551 | yuv2p01xlX_c(filter, filterSize, src, (uint16_t*)dest, dstW, 0, bits); \ | ||
552 | } \ | ||
553 | \ | ||
554 | static void yuv2p0 ## bits ## lX_BE_c(const int16_t *filter, \ | ||
555 | int filterSize, const int16_t **src, \ | ||
556 | uint8_t *dest, int dstW, \ | ||
557 | const uint8_t *dither, int offset) \ | ||
558 | { \ | ||
559 | yuv2p01xlX_c(filter, filterSize, src, (uint16_t*)dest, dstW, 1, bits); \ | ||
560 | } \ | ||
561 | \ | ||
562 | static void yuv2p0 ## bits ## cX_LE_c(enum AVPixelFormat dstFormat, \ | ||
563 | const uint8_t *chrDither, \ | ||
564 | const int16_t *chrFilter, \ | ||
565 | int chrFilterSize, \ | ||
566 | const int16_t **chrUSrc, \ | ||
567 | const int16_t **chrVSrc, \ | ||
568 | uint8_t *dest8, int chrDstW) \ | ||
569 | { \ | ||
570 | yuv2p01xcX_c(0, chrDither, chrFilter, chrFilterSize, chrUSrc, chrVSrc, \ | ||
571 | dest8, chrDstW, bits); \ | ||
572 | } \ | ||
573 | \ | ||
574 | static void yuv2p0 ## bits ## cX_BE_c(enum AVPixelFormat dstFormat, \ | ||
575 | const uint8_t *chrDither, \ | ||
576 | const int16_t *chrFilter, \ | ||
577 | int chrFilterSize, \ | ||
578 | const int16_t **chrUSrc, \ | ||
579 | const int16_t **chrVSrc, \ | ||
580 | uint8_t *dest8, int chrDstW) \ | ||
581 | { \ | ||
582 | yuv2p01xcX_c(1, chrDither, chrFilter, chrFilterSize, chrUSrc, chrVSrc, \ | ||
583 | dest8, chrDstW, bits); \ | ||
584 | } | ||
585 | |||
586 | 1428664 | yuv2p01x_wrapper(10) | |
587 | 1445944 | yuv2p01x_wrapper(12) | |
588 | |||
589 | #define accumulate_bit(acc, val) \ | ||
590 | acc <<= 1; \ | ||
591 | acc |= (val) >= 234 | ||
592 | #define output_pixel(pos, acc) \ | ||
593 | if (target == AV_PIX_FMT_MONOBLACK) { \ | ||
594 | pos = acc; \ | ||
595 | } else { \ | ||
596 | pos = ~acc; \ | ||
597 | } | ||
598 | |||
599 | static av_always_inline void | ||
600 | 85420 | yuv2mono_X_c_template(SwsInternal *c, const int16_t *lumFilter, | |
601 | const int16_t **lumSrc, int lumFilterSize, | ||
602 | const int16_t *chrFilter, const int16_t **chrUSrc, | ||
603 | const int16_t **chrVSrc, int chrFilterSize, | ||
604 | const int16_t **alpSrc, uint8_t *dest, int dstW, | ||
605 | int y, enum AVPixelFormat target) | ||
606 | { | ||
607 | 85420 | const uint8_t * const d128 = ff_dither_8x8_220[y&7]; | |
608 | int i; | ||
609 | 85420 | unsigned acc = 0; | |
610 | 85420 | int err = 0; | |
611 | |||
612 |
2/2✓ Branch 0 taken 14748420 times.
✓ Branch 1 taken 85420 times.
|
14833840 | for (i = 0; i < dstW; i += 2) { |
613 | int j; | ||
614 | 14748420 | int Y1 = 1 << 18; | |
615 | 14748420 | int Y2 = 1 << 18; | |
616 | |||
617 |
2/2✓ Branch 0 taken 14968420 times.
✓ Branch 1 taken 14748420 times.
|
29716840 | for (j = 0; j < lumFilterSize; j++) { |
618 | 14968420 | Y1 += lumSrc[j][i] * lumFilter[j]; | |
619 | 14968420 | Y2 += lumSrc[j][i+1] * lumFilter[j]; | |
620 | } | ||
621 | 14748420 | Y1 >>= 19; | |
622 | 14748420 | Y2 >>= 19; | |
623 |
2/2✓ Branch 0 taken 376 times.
✓ Branch 1 taken 14748044 times.
|
14748420 | if ((Y1 | Y2) & 0x100) { |
624 | 376 | Y1 = av_clip_uint8(Y1); | |
625 | 376 | Y2 = av_clip_uint8(Y2); | |
626 | } | ||
627 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 14748420 times.
|
14748420 | if (c->opts.dither == SWS_DITHER_ED) { |
628 | ✗ | Y1 += (7*err + 1*c->dither_error[0][i] + 5*c->dither_error[0][i+1] + 3*c->dither_error[0][i+2] + 8 - 256)>>4; | |
629 | ✗ | c->dither_error[0][i] = err; | |
630 | ✗ | acc = 2*acc + (Y1 >= 128); | |
631 | ✗ | Y1 -= 220*(acc&1); | |
632 | |||
633 | ✗ | err = Y2 + ((7*Y1 + 1*c->dither_error[0][i+1] + 5*c->dither_error[0][i+2] + 3*c->dither_error[0][i+3] + 8 - 256)>>4); | |
634 | ✗ | c->dither_error[0][i+1] = Y1; | |
635 | ✗ | acc = 2*acc + (err >= 128); | |
636 | ✗ | err -= 220*(acc&1); | |
637 | } else { | ||
638 | 14748420 | accumulate_bit(acc, Y1 + d128[(i + 0) & 7]); | |
639 | 14748420 | accumulate_bit(acc, Y2 + d128[(i + 1) & 7]); | |
640 | } | ||
641 |
2/2✓ Branch 0 taken 3686680 times.
✓ Branch 1 taken 11061740 times.
|
14748420 | if ((i & 7) == 6) { |
642 |
2/2✓ Branch 0 taken 560068 times.
✓ Branch 1 taken 3126612 times.
|
3686680 | output_pixel(*dest++, acc); |
643 | } | ||
644 | } | ||
645 | 85420 | c->dither_error[0][i] = err; | |
646 | |||
647 |
2/2✓ Branch 0 taken 1700 times.
✓ Branch 1 taken 83720 times.
|
85420 | if (i & 6) { |
648 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1700 times.
|
1700 | output_pixel(*dest, acc); |
649 | } | ||
650 | 85420 | } | |
651 | |||
652 | static av_always_inline void | ||
653 | ✗ | yuv2mono_2_c_template(SwsInternal *c, const int16_t *buf[2], | |
654 | const int16_t *ubuf[2], const int16_t *vbuf[2], | ||
655 | const int16_t *abuf[2], uint8_t *dest, int dstW, | ||
656 | int yalpha, int uvalpha, int y, | ||
657 | enum AVPixelFormat target) | ||
658 | { | ||
659 | ✗ | const int16_t *buf0 = buf[0], *buf1 = buf[1]; | |
660 | ✗ | const uint8_t * const d128 = ff_dither_8x8_220[y & 7]; | |
661 | ✗ | int yalpha1 = 4096 - yalpha; | |
662 | int i; | ||
663 | av_assert2(yalpha <= 4096U); | ||
664 | |||
665 | ✗ | if (c->opts.dither == SWS_DITHER_ED) { | |
666 | ✗ | int err = 0; | |
667 | ✗ | unsigned acc = 0; | |
668 | ✗ | for (i = 0; i < dstW; i +=2) { | |
669 | int Y; | ||
670 | |||
671 | ✗ | Y = (buf0[i + 0] * yalpha1 + buf1[i + 0] * yalpha) >> 19; | |
672 | ✗ | Y += (7*err + 1*c->dither_error[0][i] + 5*c->dither_error[0][i+1] + 3*c->dither_error[0][i+2] + 8 - 256)>>4; | |
673 | ✗ | c->dither_error[0][i] = err; | |
674 | ✗ | acc = 2*acc + (Y >= 128); | |
675 | ✗ | Y -= 220*(acc&1); | |
676 | |||
677 | ✗ | err = (buf0[i + 1] * yalpha1 + buf1[i + 1] * yalpha) >> 19; | |
678 | ✗ | err += (7*Y + 1*c->dither_error[0][i+1] + 5*c->dither_error[0][i+2] + 3*c->dither_error[0][i+3] + 8 - 256)>>4; | |
679 | ✗ | c->dither_error[0][i+1] = Y; | |
680 | ✗ | acc = 2*acc + (err >= 128); | |
681 | ✗ | err -= 220*(acc&1); | |
682 | |||
683 | ✗ | if ((i & 7) == 6) | |
684 | ✗ | output_pixel(*dest++, acc); | |
685 | } | ||
686 | ✗ | c->dither_error[0][i] = err; | |
687 | } else { | ||
688 | ✗ | for (i = 0; i < dstW; i += 8) { | |
689 | int Y; | ||
690 | ✗ | unsigned acc = 0; | |
691 | |||
692 | ✗ | Y = (buf0[i + 0] * yalpha1 + buf1[i + 0] * yalpha) >> 19; | |
693 | ✗ | accumulate_bit(acc, Y + d128[0]); | |
694 | ✗ | Y = (buf0[i + 1] * yalpha1 + buf1[i + 1] * yalpha) >> 19; | |
695 | ✗ | accumulate_bit(acc, Y + d128[1]); | |
696 | ✗ | Y = (buf0[i + 2] * yalpha1 + buf1[i + 2] * yalpha) >> 19; | |
697 | ✗ | accumulate_bit(acc, Y + d128[2]); | |
698 | ✗ | Y = (buf0[i + 3] * yalpha1 + buf1[i + 3] * yalpha) >> 19; | |
699 | ✗ | accumulate_bit(acc, Y + d128[3]); | |
700 | ✗ | Y = (buf0[i + 4] * yalpha1 + buf1[i + 4] * yalpha) >> 19; | |
701 | ✗ | accumulate_bit(acc, Y + d128[4]); | |
702 | ✗ | Y = (buf0[i + 5] * yalpha1 + buf1[i + 5] * yalpha) >> 19; | |
703 | ✗ | accumulate_bit(acc, Y + d128[5]); | |
704 | ✗ | Y = (buf0[i + 6] * yalpha1 + buf1[i + 6] * yalpha) >> 19; | |
705 | ✗ | accumulate_bit(acc, Y + d128[6]); | |
706 | ✗ | Y = (buf0[i + 7] * yalpha1 + buf1[i + 7] * yalpha) >> 19; | |
707 | ✗ | accumulate_bit(acc, Y + d128[7]); | |
708 | |||
709 | ✗ | output_pixel(*dest++, acc); | |
710 | } | ||
711 | } | ||
712 | ✗ | } | |
713 | |||
714 | static av_always_inline void | ||
715 | 129408 | yuv2mono_1_c_template(SwsInternal *c, const int16_t *buf0, | |
716 | const int16_t *ubuf[2], const int16_t *vbuf[2], | ||
717 | const int16_t *abuf0, uint8_t *dest, int dstW, | ||
718 | int uvalpha, int y, enum AVPixelFormat target) | ||
719 | { | ||
720 | 129408 | const uint8_t * const d128 = ff_dither_8x8_220[y & 7]; | |
721 | int i; | ||
722 | |||
723 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 129408 times.
|
129408 | if (c->opts.dither == SWS_DITHER_ED) { |
724 | ✗ | int err = 0; | |
725 | ✗ | unsigned acc = 0; | |
726 | ✗ | for (i = 0; i < dstW; i +=2) { | |
727 | int Y; | ||
728 | |||
729 | ✗ | Y = ((buf0[i + 0] + 64) >> 7); | |
730 | ✗ | Y += (7*err + 1*c->dither_error[0][i] + 5*c->dither_error[0][i+1] + 3*c->dither_error[0][i+2] + 8 - 256)>>4; | |
731 | ✗ | c->dither_error[0][i] = err; | |
732 | ✗ | acc = 2*acc + (Y >= 128); | |
733 | ✗ | Y -= 220*(acc&1); | |
734 | |||
735 | ✗ | err = ((buf0[i + 1] + 64) >> 7); | |
736 | ✗ | err += (7*Y + 1*c->dither_error[0][i+1] + 5*c->dither_error[0][i+2] + 3*c->dither_error[0][i+3] + 8 - 256)>>4; | |
737 | ✗ | c->dither_error[0][i+1] = Y; | |
738 | ✗ | acc = 2*acc + (err >= 128); | |
739 | ✗ | err -= 220*(acc&1); | |
740 | |||
741 | ✗ | if ((i & 7) == 6) | |
742 | ✗ | output_pixel(*dest++, acc); | |
743 | } | ||
744 | ✗ | c->dither_error[0][i] = err; | |
745 | } else { | ||
746 |
2/2✓ Branch 0 taken 5329152 times.
✓ Branch 1 taken 129408 times.
|
5458560 | for (i = 0; i < dstW; i += 8) { |
747 | 5329152 | unsigned acc = 0; | |
748 | 5329152 | accumulate_bit(acc, ((buf0[i + 0] + 64) >> 7) + d128[0]); | |
749 | 5329152 | accumulate_bit(acc, ((buf0[i + 1] + 64) >> 7) + d128[1]); | |
750 | 5329152 | accumulate_bit(acc, ((buf0[i + 2] + 64) >> 7) + d128[2]); | |
751 | 5329152 | accumulate_bit(acc, ((buf0[i + 3] + 64) >> 7) + d128[3]); | |
752 | 5329152 | accumulate_bit(acc, ((buf0[i + 4] + 64) >> 7) + d128[4]); | |
753 | 5329152 | accumulate_bit(acc, ((buf0[i + 5] + 64) >> 7) + d128[5]); | |
754 | 5329152 | accumulate_bit(acc, ((buf0[i + 6] + 64) >> 7) + d128[6]); | |
755 | 5329152 | accumulate_bit(acc, ((buf0[i + 7] + 64) >> 7) + d128[7]); | |
756 | |||
757 |
2/2✓ Branch 0 taken 2635776 times.
✓ Branch 1 taken 2693376 times.
|
5329152 | output_pixel(*dest++, acc); |
758 | } | ||
759 | } | ||
760 | 129408 | } | |
761 | |||
762 | #undef output_pixel | ||
763 | #undef accumulate_bit | ||
764 | |||
765 | #define YUV2PACKEDWRAPPER(name, base, ext, fmt) \ | ||
766 | static void name ## ext ## _X_c(SwsInternal *c, const int16_t *lumFilter, \ | ||
767 | const int16_t **lumSrc, int lumFilterSize, \ | ||
768 | const int16_t *chrFilter, const int16_t **chrUSrc, \ | ||
769 | const int16_t **chrVSrc, int chrFilterSize, \ | ||
770 | const int16_t **alpSrc, uint8_t *dest, int dstW, \ | ||
771 | int y) \ | ||
772 | { \ | ||
773 | name ## base ## _X_c_template(c, lumFilter, lumSrc, lumFilterSize, \ | ||
774 | chrFilter, chrUSrc, chrVSrc, chrFilterSize, \ | ||
775 | alpSrc, dest, dstW, y, fmt); \ | ||
776 | } \ | ||
777 | \ | ||
778 | static void name ## ext ## _2_c(SwsInternal *c, const int16_t *buf[2], \ | ||
779 | const int16_t *ubuf[2], const int16_t *vbuf[2], \ | ||
780 | const int16_t *abuf[2], uint8_t *dest, int dstW, \ | ||
781 | int yalpha, int uvalpha, int y) \ | ||
782 | { \ | ||
783 | name ## base ## _2_c_template(c, buf, ubuf, vbuf, abuf, \ | ||
784 | dest, dstW, yalpha, uvalpha, y, fmt); \ | ||
785 | } \ | ||
786 | \ | ||
787 | static void name ## ext ## _1_c(SwsInternal *c, const int16_t *buf0, \ | ||
788 | const int16_t *ubuf[2], const int16_t *vbuf[2], \ | ||
789 | const int16_t *abuf0, uint8_t *dest, int dstW, \ | ||
790 | int uvalpha, int y) \ | ||
791 | { \ | ||
792 | name ## base ## _1_c_template(c, buf0, ubuf, vbuf, \ | ||
793 | abuf0, dest, dstW, uvalpha, \ | ||
794 | y, fmt); \ | ||
795 | } | ||
796 | |||
797 | 284304 | YUV2PACKEDWRAPPER(yuv2mono,, white, AV_PIX_FMT_MONOWHITE) | |
798 | 145352 | YUV2PACKEDWRAPPER(yuv2mono,, black, AV_PIX_FMT_MONOBLACK) | |
799 | |||
800 | #define output_pixels(pos, Y1, U, Y2, V) \ | ||
801 | if (target == AV_PIX_FMT_YUYV422) { \ | ||
802 | dest[pos + 0] = Y1; \ | ||
803 | dest[pos + 1] = U; \ | ||
804 | dest[pos + 2] = Y2; \ | ||
805 | dest[pos + 3] = V; \ | ||
806 | } else if (target == AV_PIX_FMT_YVYU422) { \ | ||
807 | dest[pos + 0] = Y1; \ | ||
808 | dest[pos + 1] = V; \ | ||
809 | dest[pos + 2] = Y2; \ | ||
810 | dest[pos + 3] = U; \ | ||
811 | } else { /* AV_PIX_FMT_UYVY422 */ \ | ||
812 | dest[pos + 0] = U; \ | ||
813 | dest[pos + 1] = Y1; \ | ||
814 | dest[pos + 2] = V; \ | ||
815 | dest[pos + 3] = Y2; \ | ||
816 | } | ||
817 | |||
818 | static av_always_inline void | ||
819 | 24204 | yuv2422_X_c_template(SwsInternal *c, const int16_t *lumFilter, | |
820 | const int16_t **lumSrc, int lumFilterSize, | ||
821 | const int16_t *chrFilter, const int16_t **chrUSrc, | ||
822 | const int16_t **chrVSrc, int chrFilterSize, | ||
823 | const int16_t **alpSrc, uint8_t *dest, int dstW, | ||
824 | int y, enum AVPixelFormat target) | ||
825 | { | ||
826 | int i; | ||
827 | |||
828 |
2/2✓ Branch 0 taken 4237104 times.
✓ Branch 1 taken 24204 times.
|
4261308 | for (i = 0; i < ((dstW + 1) >> 1); i++) { |
829 | int j; | ||
830 | 4237104 | int Y1 = 1 << 18; | |
831 | 4237104 | int Y2 = 1 << 18; | |
832 | 4237104 | int U = 1 << 18; | |
833 | 4237104 | int V = 1 << 18; | |
834 | |||
835 |
2/2✓ Branch 0 taken 4567104 times.
✓ Branch 1 taken 4237104 times.
|
8804208 | for (j = 0; j < lumFilterSize; j++) { |
836 | 4567104 | Y1 += lumSrc[j][i * 2] * lumFilter[j]; | |
837 | 4567104 | Y2 += lumSrc[j][i * 2 + 1] * lumFilter[j]; | |
838 | } | ||
839 |
2/2✓ Branch 0 taken 17188416 times.
✓ Branch 1 taken 4237104 times.
|
21425520 | for (j = 0; j < chrFilterSize; j++) { |
840 | 17188416 | U += chrUSrc[j][i] * chrFilter[j]; | |
841 | 17188416 | V += chrVSrc[j][i] * chrFilter[j]; | |
842 | } | ||
843 | 4237104 | Y1 >>= 19; | |
844 | 4237104 | Y2 >>= 19; | |
845 | 4237104 | U >>= 19; | |
846 | 4237104 | V >>= 19; | |
847 |
2/2✓ Branch 0 taken 23 times.
✓ Branch 1 taken 4237081 times.
|
4237104 | if ((Y1 | Y2 | U | V) & 0x100) { |
848 | 23 | Y1 = av_clip_uint8(Y1); | |
849 | 23 | Y2 = av_clip_uint8(Y2); | |
850 | 23 | U = av_clip_uint8(U); | |
851 | 23 | V = av_clip_uint8(V); | |
852 | } | ||
853 |
4/4✓ Branch 0 taken 2290960 times.
✓ Branch 1 taken 1946144 times.
✓ Branch 2 taken 973072 times.
✓ Branch 3 taken 973072 times.
|
4237104 | output_pixels(4*i, Y1, U, Y2, V); |
854 | } | ||
855 | 24204 | } | |
856 | |||
857 | static av_always_inline void | ||
858 | ✗ | yuv2422_2_c_template(SwsInternal *c, const int16_t *buf[2], | |
859 | const int16_t *ubuf[2], const int16_t *vbuf[2], | ||
860 | const int16_t *abuf[2], uint8_t *dest, int dstW, | ||
861 | int yalpha, int uvalpha, int y, | ||
862 | enum AVPixelFormat target) | ||
863 | { | ||
864 | ✗ | const int16_t *buf0 = buf[0], *buf1 = buf[1], | |
865 | ✗ | *ubuf0 = ubuf[0], *ubuf1 = ubuf[1], | |
866 | ✗ | *vbuf0 = vbuf[0], *vbuf1 = vbuf[1]; | |
867 | ✗ | int yalpha1 = 4096 - yalpha; | |
868 | ✗ | int uvalpha1 = 4096 - uvalpha; | |
869 | int i; | ||
870 | av_assert2(yalpha <= 4096U); | ||
871 | av_assert2(uvalpha <= 4096U); | ||
872 | |||
873 | ✗ | for (i = 0; i < ((dstW + 1) >> 1); i++) { | |
874 | ✗ | int Y1 = (buf0[i * 2] * yalpha1 + buf1[i * 2] * yalpha) >> 19; | |
875 | ✗ | int Y2 = (buf0[i * 2 + 1] * yalpha1 + buf1[i * 2 + 1] * yalpha) >> 19; | |
876 | ✗ | int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha) >> 19; | |
877 | ✗ | int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha) >> 19; | |
878 | |||
879 | ✗ | if ((Y1 | Y2 | U | V) & 0x100) { | |
880 | ✗ | Y1 = av_clip_uint8(Y1); | |
881 | ✗ | Y2 = av_clip_uint8(Y2); | |
882 | ✗ | U = av_clip_uint8(U); | |
883 | ✗ | V = av_clip_uint8(V); | |
884 | } | ||
885 | |||
886 | ✗ | output_pixels(i * 4, Y1, U, Y2, V); | |
887 | } | ||
888 | ✗ | } | |
889 | |||
890 | static av_always_inline void | ||
891 | 266112 | yuv2422_1_c_template(SwsInternal *c, const int16_t *buf0, | |
892 | const int16_t *ubuf[2], const int16_t *vbuf[2], | ||
893 | const int16_t *abuf0, uint8_t *dest, int dstW, | ||
894 | int uvalpha, int y, enum AVPixelFormat target) | ||
895 | { | ||
896 | 266112 | const int16_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0]; | |
897 | int i; | ||
898 | |||
899 |
1/2✓ Branch 0 taken 266112 times.
✗ Branch 1 not taken.
|
266112 | if (uvalpha < 2048) { |
900 |
2/2✓ Branch 0 taken 62733312 times.
✓ Branch 1 taken 266112 times.
|
62999424 | for (i = 0; i < ((dstW + 1) >> 1); i++) { |
901 | 62733312 | int Y1 = (buf0[i * 2 ]+64) >> 7; | |
902 | 62733312 | int Y2 = (buf0[i * 2 + 1]+64) >> 7; | |
903 | 62733312 | int U = (ubuf0[i] +64) >> 7; | |
904 | 62733312 | int V = (vbuf0[i] +64) >> 7; | |
905 | |||
906 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 62733312 times.
|
62733312 | if ((Y1 | Y2 | U | V) & 0x100) { |
907 | ✗ | Y1 = av_clip_uint8(Y1); | |
908 | ✗ | Y2 = av_clip_uint8(Y2); | |
909 | ✗ | U = av_clip_uint8(U); | |
910 | ✗ | V = av_clip_uint8(V); | |
911 | } | ||
912 | |||
913 |
4/4✓ Branch 0 taken 10543104 times.
✓ Branch 1 taken 52190208 times.
✓ Branch 2 taken 10543104 times.
✓ Branch 3 taken 41647104 times.
|
62733312 | output_pixels(i * 4, Y1, U, Y2, V); |
914 | } | ||
915 | } else { | ||
916 | ✗ | const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1]; | |
917 | ✗ | for (i = 0; i < ((dstW + 1) >> 1); i++) { | |
918 | ✗ | int Y1 = (buf0[i * 2 ] + 64) >> 7; | |
919 | ✗ | int Y2 = (buf0[i * 2 + 1] + 64) >> 7; | |
920 | ✗ | int U = (ubuf0[i] + ubuf1[i]+128) >> 8; | |
921 | ✗ | int V = (vbuf0[i] + vbuf1[i]+128) >> 8; | |
922 | |||
923 | ✗ | if ((Y1 | Y2 | U | V) & 0x100) { | |
924 | ✗ | Y1 = av_clip_uint8(Y1); | |
925 | ✗ | Y2 = av_clip_uint8(Y2); | |
926 | ✗ | U = av_clip_uint8(U); | |
927 | ✗ | V = av_clip_uint8(V); | |
928 | } | ||
929 | |||
930 | ✗ | output_pixels(i * 4, Y1, U, Y2, V); | |
931 | } | ||
932 | } | ||
933 | 266112 | } | |
934 | |||
935 | #undef output_pixels | ||
936 | |||
937 | 145928 | YUV2PACKEDWRAPPER(yuv2, 422, yuyv422, AV_PIX_FMT_YUYV422) | |
938 | 130952 | YUV2PACKEDWRAPPER(yuv2, 422, yvyu422, AV_PIX_FMT_YVYU422) | |
939 | 303752 | YUV2PACKEDWRAPPER(yuv2, 422, uyvy422, AV_PIX_FMT_UYVY422) | |
940 | |||
941 | #define R_B ((target == AV_PIX_FMT_RGB48LE || target == AV_PIX_FMT_RGB48BE || target == AV_PIX_FMT_RGBA64LE || target == AV_PIX_FMT_RGBA64BE) ? R : B) | ||
942 | #define B_R ((target == AV_PIX_FMT_RGB48LE || target == AV_PIX_FMT_RGB48BE || target == AV_PIX_FMT_RGBA64LE || target == AV_PIX_FMT_RGBA64BE) ? B : R) | ||
943 | #define output_pixel(pos, val) \ | ||
944 | if (is_be) { \ | ||
945 | AV_WB16(pos, val); \ | ||
946 | } else { \ | ||
947 | AV_WL16(pos, val); \ | ||
948 | } | ||
949 | |||
950 | static av_always_inline void | ||
951 | 12008 | yuv2ya16_X_c_template(SwsInternal *c, const int16_t *lumFilter, | |
952 | const int32_t **lumSrc, int lumFilterSize, | ||
953 | const int16_t *chrFilter, const int32_t **unused_chrUSrc, | ||
954 | const int32_t **unused_chrVSrc, int unused_chrFilterSize, | ||
955 | const int32_t **alpSrc, uint16_t *dest, int dstW, | ||
956 | int y, enum AVPixelFormat target, | ||
957 | int unused_hasAlpha, int unused_eightbytes, int is_be) | ||
958 | { | ||
959 | 12008 | int hasAlpha = !!alpSrc; | |
960 | int i; | ||
961 | |||
962 |
2/2✓ Branch 0 taken 4196416 times.
✓ Branch 1 taken 12008 times.
|
4208424 | for (i = 0; i < dstW; i++) { |
963 | int j; | ||
964 | 4196416 | int Y = -0x40000000; | |
965 | 4196416 | int A = 0xffff; | |
966 | |||
967 |
2/2✓ Branch 0 taken 4636416 times.
✓ Branch 1 taken 4196416 times.
|
8832832 | for (j = 0; j < lumFilterSize; j++) |
968 | 4636416 | Y += lumSrc[j][i] * lumFilter[j]; | |
969 | |||
970 | 4196416 | Y >>= 15; | |
971 | 4196416 | Y += (1<<3) + 0x8000; | |
972 | 4196416 | Y = av_clip_uint16(Y); | |
973 | |||
974 |
2/2✓ Branch 0 taken 40000 times.
✓ Branch 1 taken 4156416 times.
|
4196416 | if (hasAlpha) { |
975 | 40000 | A = -0x40000000 + (1<<14); | |
976 |
2/2✓ Branch 0 taken 480000 times.
✓ Branch 1 taken 40000 times.
|
520000 | for (j = 0; j < lumFilterSize; j++) |
977 | 480000 | A += alpSrc[j][i] * lumFilter[j]; | |
978 | |||
979 | 40000 | A >>= 15; | |
980 | 40000 | A += 0x8000; | |
981 | 40000 | A = av_clip_uint16(A); | |
982 | } | ||
983 | |||
984 |
2/2✓ Branch 0 taken 2047520 times.
✓ Branch 1 taken 2148896 times.
|
4196416 | output_pixel(&dest[2 * i ], Y); |
985 |
2/2✓ Branch 0 taken 2047520 times.
✓ Branch 1 taken 2148896 times.
|
4196416 | output_pixel(&dest[2 * i + 1], A); |
986 | } | ||
987 | 12008 | } | |
988 | |||
989 | static av_always_inline void | ||
990 | ✗ | yuv2ya16_2_c_template(SwsInternal *c, const int32_t *buf[2], | |
991 | const int32_t *unused_ubuf[2], const int32_t *unused_vbuf[2], | ||
992 | const int32_t *abuf[2], uint16_t *dest, int dstW, | ||
993 | int yalpha, int unused_uvalpha, int y, | ||
994 | enum AVPixelFormat target, int unused_hasAlpha, | ||
995 | int unused_eightbytes, int is_be) | ||
996 | { | ||
997 | ✗ | int hasAlpha = abuf && abuf[0] && abuf[1]; | |
998 | ✗ | const int32_t *buf0 = buf[0], *buf1 = buf[1], | |
999 | ✗ | *abuf0 = hasAlpha ? abuf[0] : NULL, | |
1000 | ✗ | *abuf1 = hasAlpha ? abuf[1] : NULL; | |
1001 | ✗ | int yalpha1 = 4096 - yalpha; | |
1002 | int i; | ||
1003 | |||
1004 | av_assert2(yalpha <= 4096U); | ||
1005 | |||
1006 | ✗ | for (i = 0; i < dstW; i++) { | |
1007 | ✗ | int Y = (buf0[i] * yalpha1 + buf1[i] * yalpha) >> 15; | |
1008 | int A; | ||
1009 | |||
1010 | ✗ | Y = av_clip_uint16(Y); | |
1011 | |||
1012 | ✗ | if (hasAlpha) { | |
1013 | ✗ | A = (abuf0[i] * yalpha1 + abuf1[i] * yalpha) >> 15; | |
1014 | ✗ | A = av_clip_uint16(A); | |
1015 | } | ||
1016 | |||
1017 | ✗ | output_pixel(&dest[2 * i ], Y); | |
1018 | ✗ | output_pixel(&dest[2 * i + 1], hasAlpha ? A : 65535); | |
1019 | } | ||
1020 | ✗ | } | |
1021 | |||
1022 | static av_always_inline void | ||
1023 | ✗ | yuv2ya16_1_c_template(SwsInternal *c, const int32_t *buf0, | |
1024 | const int32_t *unused_ubuf[2], const int32_t *unused_vbuf[2], | ||
1025 | const int32_t *abuf0, uint16_t *dest, int dstW, | ||
1026 | int unused_uvalpha, int y, enum AVPixelFormat target, | ||
1027 | int unused_hasAlpha, int unused_eightbytes, int is_be) | ||
1028 | { | ||
1029 | ✗ | int hasAlpha = !!abuf0; | |
1030 | int i; | ||
1031 | |||
1032 | ✗ | for (i = 0; i < dstW; i++) { | |
1033 | ✗ | int Y = buf0[i] >> 3;/* 19 - 16 */ | |
1034 | int A; | ||
1035 | |||
1036 | ✗ | Y = av_clip_uint16(Y); | |
1037 | |||
1038 | ✗ | if (hasAlpha) { | |
1039 | ✗ | A = abuf0[i] >> 3; | |
1040 | ✗ | if (A & 0x100) | |
1041 | ✗ | A = av_clip_uint16(A); | |
1042 | } | ||
1043 | |||
1044 | ✗ | output_pixel(&dest[2 * i ], Y); | |
1045 | ✗ | output_pixel(&dest[2 * i + 1], hasAlpha ? A : 65535); | |
1046 | } | ||
1047 | ✗ | } | |
1048 | |||
1049 | static av_always_inline void | ||
1050 | 260080 | yuv2rgba64_X_c_template(SwsInternal *c, const int16_t *lumFilter, | |
1051 | const int32_t **lumSrc, int lumFilterSize, | ||
1052 | const int16_t *chrFilter, const int32_t **chrUSrc, | ||
1053 | const int32_t **chrVSrc, int chrFilterSize, | ||
1054 | const int32_t **alpSrc, uint16_t *dest, int dstW, | ||
1055 | int y, enum AVPixelFormat target, int hasAlpha, int eightbytes, | ||
1056 | int is_be) | ||
1057 | { | ||
1058 | int i; | ||
1059 | 260080 | int A1 = 0xffff<<14, A2 = 0xffff<<14; | |
1060 | |||
1061 |
2/2✓ Branch 0 taken 45574640 times.
✓ Branch 1 taken 260080 times.
|
45834720 | for (i = 0; i < ((dstW + 1) >> 1); i++) { |
1062 | int j; | ||
1063 | 45574640 | unsigned Y1 = -0x40000000; | |
1064 | 45574640 | unsigned Y2 = -0x40000000; | |
1065 | 45574640 | int U = -(128 << 23); // 19 | |
1066 | 45574640 | int V = -(128 << 23); | |
1067 | int R, G, B; | ||
1068 | |||
1069 |
2/2✓ Branch 0 taken 46090176 times.
✓ Branch 1 taken 45574640 times.
|
91664816 | for (j = 0; j < lumFilterSize; j++) { |
1070 | 46090176 | Y1 += lumSrc[j][i * 2] * (unsigned)lumFilter[j]; | |
1071 | 46090176 | Y2 += lumSrc[j][i * 2 + 1] * (unsigned)lumFilter[j]; | |
1072 | } | ||
1073 |
2/2✓ Branch 0 taken 182339520 times.
✓ Branch 1 taken 45574640 times.
|
227914160 | for (j = 0; j < chrFilterSize; j++) {; |
1074 | 182339520 | U += chrUSrc[j][i] * (unsigned)chrFilter[j]; | |
1075 | 182339520 | V += chrVSrc[j][i] * (unsigned)chrFilter[j]; | |
1076 | } | ||
1077 | |||
1078 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 45574640 times.
|
45574640 | if (hasAlpha) { |
1079 | ✗ | A1 = -0x40000000; | |
1080 | ✗ | A2 = -0x40000000; | |
1081 | ✗ | for (j = 0; j < lumFilterSize; j++) { | |
1082 | ✗ | A1 += alpSrc[j][i * 2] * (unsigned)lumFilter[j]; | |
1083 | ✗ | A2 += alpSrc[j][i * 2 + 1] * (unsigned)lumFilter[j]; | |
1084 | } | ||
1085 | ✗ | A1 >>= 1; | |
1086 | ✗ | A1 += 0x20002000; | |
1087 | ✗ | A2 >>= 1; | |
1088 | ✗ | A2 += 0x20002000; | |
1089 | } | ||
1090 | |||
1091 | // 8 bits: 12+15=27; 16 bits: 12+19=31 | ||
1092 | 45574640 | Y1 = (int)Y1 >> 14; // 10 | |
1093 | 45574640 | Y1 += 0x10000; | |
1094 | 45574640 | Y2 = (int)Y2 >> 14; | |
1095 | 45574640 | Y2 += 0x10000; | |
1096 | 45574640 | U >>= 14; | |
1097 | 45574640 | V >>= 14; | |
1098 | |||
1099 | // 8 bits: 27 -> 17 bits, 16 bits: 31 - 14 = 17 bits | ||
1100 | 45574640 | Y1 -= c->yuv2rgb_y_offset; | |
1101 | 45574640 | Y2 -= c->yuv2rgb_y_offset; | |
1102 | 45574640 | Y1 *= c->yuv2rgb_y_coeff; | |
1103 | 45574640 | Y2 *= c->yuv2rgb_y_coeff; | |
1104 | 45574640 | Y1 += (1 << 13) - (1 << 29); // 21 | |
1105 | 45574640 | Y2 += (1 << 13) - (1 << 29); | |
1106 | // 8 bits: 17 + 13 bits = 30 bits, 16 bits: 17 + 13 bits = 30 bits | ||
1107 | |||
1108 | 45574640 | R = V * c->yuv2rgb_v2r_coeff; | |
1109 | 45574640 | G = V * c->yuv2rgb_v2g_coeff + U * c->yuv2rgb_u2g_coeff; | |
1110 | 45574640 | B = U * c->yuv2rgb_u2b_coeff; | |
1111 | |||
1112 | // 8 bits: 30 - 22 = 8 bits, 16 bits: 30 bits - 14 = 16 bits | ||
1113 |
14/18✓ Branch 0 taken 6390784 times.
✓ Branch 1 taken 39183856 times.
✓ Branch 2 taken 6390784 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3044352 times.
✓ Branch 5 taken 3346432 times.
✓ Branch 6 taken 3044352 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1014784 times.
✓ Branch 9 taken 2029568 times.
✓ Branch 10 taken 3956736 times.
✓ Branch 11 taken 35227120 times.
✓ Branch 12 taken 3956736 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2080256 times.
✓ Branch 15 taken 1876480 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2080256 times.
|
45574640 | output_pixel(&dest[0], av_clip_uintp2(((int)(R_B + Y1) >> 14) + (1<<15), 16)); |
1114 |
2/2✓ Branch 0 taken 6390784 times.
✓ Branch 1 taken 39183856 times.
|
45574640 | output_pixel(&dest[1], av_clip_uintp2(((int)( G + Y1) >> 14) + (1<<15), 16)); |
1115 |
14/18✓ Branch 0 taken 6390784 times.
✓ Branch 1 taken 39183856 times.
✓ Branch 2 taken 6390784 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3044352 times.
✓ Branch 5 taken 3346432 times.
✓ Branch 6 taken 3044352 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1014784 times.
✓ Branch 9 taken 2029568 times.
✓ Branch 10 taken 3956736 times.
✓ Branch 11 taken 35227120 times.
✓ Branch 12 taken 3956736 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2080256 times.
✓ Branch 15 taken 1876480 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2080256 times.
|
45574640 | output_pixel(&dest[2], av_clip_uintp2(((int)(B_R + Y1) >> 14) + (1<<15), 16)); |
1116 |
2/2✓ Branch 0 taken 4920832 times.
✓ Branch 1 taken 40653808 times.
|
45574640 | if (eightbytes) { |
1117 |
2/2✓ Branch 0 taken 2029568 times.
✓ Branch 1 taken 2891264 times.
|
4920832 | output_pixel(&dest[3], av_clip_uintp2(A1 , 30) >> 14); |
1118 |
12/18✓ Branch 0 taken 2029568 times.
✓ Branch 1 taken 2891264 times.
✓ Branch 2 taken 2029568 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2029568 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2029568 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1014784 times.
✓ Branch 9 taken 1014784 times.
✓ Branch 10 taken 2891264 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2891264 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1014784 times.
✓ Branch 15 taken 1876480 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 1014784 times.
|
4920832 | output_pixel(&dest[4], av_clip_uintp2(((int)(R_B + Y2) >> 14) + (1<<15), 16)); |
1119 |
2/2✓ Branch 0 taken 2029568 times.
✓ Branch 1 taken 2891264 times.
|
4920832 | output_pixel(&dest[5], av_clip_uintp2(((int)( G + Y2) >> 14) + (1<<15), 16)); |
1120 |
12/18✓ Branch 0 taken 2029568 times.
✓ Branch 1 taken 2891264 times.
✓ Branch 2 taken 2029568 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2029568 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2029568 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1014784 times.
✓ Branch 9 taken 1014784 times.
✓ Branch 10 taken 2891264 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2891264 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1014784 times.
✓ Branch 15 taken 1876480 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 1014784 times.
|
4920832 | output_pixel(&dest[6], av_clip_uintp2(((int)(B_R + Y2) >> 14) + (1<<15), 16)); |
1121 |
2/2✓ Branch 0 taken 2029568 times.
✓ Branch 1 taken 2891264 times.
|
4920832 | output_pixel(&dest[7], av_clip_uintp2(A2 , 30) >> 14); |
1122 | 4920832 | dest += 8; | |
1123 | } else { | ||
1124 |
12/18✓ Branch 0 taken 4361216 times.
✓ Branch 1 taken 36292592 times.
✓ Branch 2 taken 4361216 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1014784 times.
✓ Branch 5 taken 3346432 times.
✓ Branch 6 taken 1014784 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1014784 times.
✓ Branch 10 taken 1065472 times.
✓ Branch 11 taken 35227120 times.
✓ Branch 12 taken 1065472 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1065472 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1065472 times.
|
40653808 | output_pixel(&dest[3], av_clip_uintp2(((int)(R_B + Y2) >> 14) + (1<<15), 16)); |
1125 |
2/2✓ Branch 0 taken 4361216 times.
✓ Branch 1 taken 36292592 times.
|
40653808 | output_pixel(&dest[4], av_clip_uintp2(((int)( G + Y2) >> 14) + (1<<15), 16)); |
1126 |
12/18✓ Branch 0 taken 4361216 times.
✓ Branch 1 taken 36292592 times.
✓ Branch 2 taken 4361216 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1014784 times.
✓ Branch 5 taken 3346432 times.
✓ Branch 6 taken 1014784 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1014784 times.
✓ Branch 10 taken 1065472 times.
✓ Branch 11 taken 35227120 times.
✓ Branch 12 taken 1065472 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1065472 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1065472 times.
|
40653808 | output_pixel(&dest[5], av_clip_uintp2(((int)(B_R + Y2) >> 14) + (1<<15), 16)); |
1127 | 40653808 | dest += 6; | |
1128 | } | ||
1129 | } | ||
1130 | 260080 | } | |
1131 | |||
1132 | static av_always_inline void | ||
1133 | 48 | yuv2rgba64_2_c_template(SwsInternal *c, const int32_t *buf[2], | |
1134 | const int32_t *ubuf[2], const int32_t *vbuf[2], | ||
1135 | const int32_t *abuf[2], uint16_t *dest, int dstW, | ||
1136 | int yalpha, int uvalpha, int y, | ||
1137 | enum AVPixelFormat target, int hasAlpha, int eightbytes, | ||
1138 | int is_be) | ||
1139 | { | ||
1140 | 48 | const int32_t *buf0 = buf[0], *buf1 = buf[1], | |
1141 | 48 | *ubuf0 = ubuf[0], *ubuf1 = ubuf[1], | |
1142 | 48 | *vbuf0 = vbuf[0], *vbuf1 = vbuf[1], | |
1143 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 48 times.
|
48 | *abuf0 = hasAlpha ? abuf[0] : NULL, |
1144 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 48 times.
|
48 | *abuf1 = hasAlpha ? abuf[1] : NULL; |
1145 | 48 | int yalpha1 = 4096 - yalpha; | |
1146 | 48 | int uvalpha1 = 4096 - uvalpha; | |
1147 | int i; | ||
1148 | 48 | int A1 = 0xffff<<14, A2 = 0xffff<<14; | |
1149 | |||
1150 | av_assert2(yalpha <= 4096U); | ||
1151 | av_assert2(uvalpha <= 4096U); | ||
1152 | |||
1153 |
2/2✓ Branch 0 taken 12288 times.
✓ Branch 1 taken 48 times.
|
12336 | for (i = 0; i < ((dstW + 1) >> 1); i++) { |
1154 | 12288 | unsigned Y1 = (buf0[i * 2] * yalpha1 + buf1[i * 2] * yalpha) >> 14; | |
1155 | 12288 | unsigned Y2 = (buf0[i * 2 + 1] * yalpha1 + buf1[i * 2 + 1] * yalpha) >> 14; | |
1156 | 12288 | int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha - (128 << 23)) >> 14; | |
1157 | 12288 | int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha - (128 << 23)) >> 14; | |
1158 | int R, G, B; | ||
1159 | |||
1160 | 12288 | Y1 -= c->yuv2rgb_y_offset; | |
1161 | 12288 | Y2 -= c->yuv2rgb_y_offset; | |
1162 | 12288 | Y1 *= c->yuv2rgb_y_coeff; | |
1163 | 12288 | Y2 *= c->yuv2rgb_y_coeff; | |
1164 | 12288 | Y1 += (1 << 13) - (1 << 29); | |
1165 | 12288 | Y2 += (1 << 13) - (1 << 29); | |
1166 | |||
1167 | 12288 | R = V * c->yuv2rgb_v2r_coeff; | |
1168 | 12288 | G = V * c->yuv2rgb_v2g_coeff + U * c->yuv2rgb_u2g_coeff; | |
1169 | 12288 | B = U * c->yuv2rgb_u2b_coeff; | |
1170 | |||
1171 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 12288 times.
|
12288 | if (hasAlpha) { |
1172 | ✗ | A1 = (abuf0[i * 2 ] * yalpha1 + abuf1[i * 2 ] * yalpha) >> 1; | |
1173 | ✗ | A2 = (abuf0[i * 2 + 1] * yalpha1 + abuf1[i * 2 + 1] * yalpha) >> 1; | |
1174 | |||
1175 | ✗ | A1 += 1 << 13; | |
1176 | ✗ | A2 += 1 << 13; | |
1177 | } | ||
1178 | |||
1179 |
14/18✓ Branch 0 taken 6144 times.
✓ Branch 1 taken 6144 times.
✓ Branch 2 taken 6144 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4608 times.
✓ Branch 5 taken 1536 times.
✓ Branch 6 taken 4608 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1536 times.
✓ Branch 9 taken 3072 times.
✓ Branch 10 taken 4608 times.
✓ Branch 11 taken 1536 times.
✓ Branch 12 taken 4608 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 3072 times.
✓ Branch 15 taken 1536 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 3072 times.
|
12288 | output_pixel(&dest[0], av_clip_uintp2(((int)(R_B + Y1) >> 14) + (1<<15), 16)); |
1180 |
2/2✓ Branch 0 taken 6144 times.
✓ Branch 1 taken 6144 times.
|
12288 | output_pixel(&dest[1], av_clip_uintp2(((int)( G + Y1) >> 14) + (1<<15), 16)); |
1181 |
14/18✓ Branch 0 taken 6144 times.
✓ Branch 1 taken 6144 times.
✓ Branch 2 taken 6144 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4608 times.
✓ Branch 5 taken 1536 times.
✓ Branch 6 taken 4608 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1536 times.
✓ Branch 9 taken 3072 times.
✓ Branch 10 taken 4608 times.
✓ Branch 11 taken 1536 times.
✓ Branch 12 taken 4608 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 3072 times.
✓ Branch 15 taken 1536 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 3072 times.
|
12288 | output_pixel(&dest[2], av_clip_uintp2(((int)(B_R + Y1) >> 14) + (1<<15), 16)); |
1182 |
2/2✓ Branch 0 taken 6144 times.
✓ Branch 1 taken 6144 times.
|
12288 | if (eightbytes) { |
1183 |
2/2✓ Branch 0 taken 3072 times.
✓ Branch 1 taken 3072 times.
|
6144 | output_pixel(&dest[3], av_clip_uintp2(A1 , 30) >> 14); |
1184 |
12/18✓ Branch 0 taken 3072 times.
✓ Branch 1 taken 3072 times.
✓ Branch 2 taken 3072 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3072 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 3072 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1536 times.
✓ Branch 9 taken 1536 times.
✓ Branch 10 taken 3072 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 3072 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1536 times.
✓ Branch 15 taken 1536 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 1536 times.
|
6144 | output_pixel(&dest[4], av_clip_uintp2(((int)(R_B + Y2) >> 14) + (1<<15), 16)); |
1185 |
2/2✓ Branch 0 taken 3072 times.
✓ Branch 1 taken 3072 times.
|
6144 | output_pixel(&dest[5], av_clip_uintp2(((int)( G + Y2) >> 14) + (1<<15), 16)); |
1186 |
12/18✓ Branch 0 taken 3072 times.
✓ Branch 1 taken 3072 times.
✓ Branch 2 taken 3072 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3072 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 3072 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1536 times.
✓ Branch 9 taken 1536 times.
✓ Branch 10 taken 3072 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 3072 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1536 times.
✓ Branch 15 taken 1536 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 1536 times.
|
6144 | output_pixel(&dest[6], av_clip_uintp2(((int)(B_R + Y2) >> 14) + (1<<15), 16)); |
1187 |
2/2✓ Branch 0 taken 3072 times.
✓ Branch 1 taken 3072 times.
|
6144 | output_pixel(&dest[7], av_clip_uintp2(A2 , 30) >> 14); |
1188 | 6144 | dest += 8; | |
1189 | } else { | ||
1190 |
12/18✓ Branch 0 taken 3072 times.
✓ Branch 1 taken 3072 times.
✓ Branch 2 taken 3072 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1536 times.
✓ Branch 5 taken 1536 times.
✓ Branch 6 taken 1536 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1536 times.
✓ Branch 10 taken 1536 times.
✓ Branch 11 taken 1536 times.
✓ Branch 12 taken 1536 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1536 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1536 times.
|
6144 | output_pixel(&dest[3], av_clip_uintp2(((int)(R_B + Y2) >> 14) + (1<<15), 16)); |
1191 |
2/2✓ Branch 0 taken 3072 times.
✓ Branch 1 taken 3072 times.
|
6144 | output_pixel(&dest[4], av_clip_uintp2(((int)( G + Y2) >> 14) + (1<<15), 16)); |
1192 |
12/18✓ Branch 0 taken 3072 times.
✓ Branch 1 taken 3072 times.
✓ Branch 2 taken 3072 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1536 times.
✓ Branch 5 taken 1536 times.
✓ Branch 6 taken 1536 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1536 times.
✓ Branch 10 taken 1536 times.
✓ Branch 11 taken 1536 times.
✓ Branch 12 taken 1536 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1536 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1536 times.
|
6144 | output_pixel(&dest[5], av_clip_uintp2(((int)(B_R + Y2) >> 14) + (1<<15), 16)); |
1193 | 6144 | dest += 6; | |
1194 | } | ||
1195 | } | ||
1196 | 48 | } | |
1197 | |||
1198 | static av_always_inline void | ||
1199 | 209684 | yuv2rgba64_1_c_template(SwsInternal *c, const int32_t *buf0, | |
1200 | const int32_t *ubuf[2], const int32_t *vbuf[2], | ||
1201 | const int32_t *abuf0, uint16_t *dest, int dstW, | ||
1202 | int uvalpha, int y, enum AVPixelFormat target, | ||
1203 | int hasAlpha, int eightbytes, int is_be) | ||
1204 | { | ||
1205 | 209684 | const int32_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0]; | |
1206 | int i; | ||
1207 | 209684 | int A1 = 0xffff<<14, A2= 0xffff<<14; | |
1208 | |||
1209 |
2/2✓ Branch 0 taken 209652 times.
✓ Branch 1 taken 32 times.
|
209684 | if (uvalpha == 0) { |
1210 |
2/2✓ Branch 0 taken 36629732 times.
✓ Branch 1 taken 209652 times.
|
36839384 | for (i = 0; i < ((dstW + 1) >> 1); i++) { |
1211 | 36629732 | SUINT Y1 = (buf0[i * 2] ) >> 2; | |
1212 | 36629732 | SUINT Y2 = (buf0[i * 2 + 1]) >> 2; | |
1213 | 36629732 | int U = (ubuf0[i] - (128 << 11)) >> 2; | |
1214 | 36629732 | int V = (vbuf0[i] - (128 << 11)) >> 2; | |
1215 | int R, G, B; | ||
1216 | |||
1217 | 36629732 | Y1 -= c->yuv2rgb_y_offset; | |
1218 | 36629732 | Y2 -= c->yuv2rgb_y_offset; | |
1219 | 36629732 | Y1 *= c->yuv2rgb_y_coeff; | |
1220 | 36629732 | Y2 *= c->yuv2rgb_y_coeff; | |
1221 | 36629732 | Y1 += (1 << 13) - (1 << 29); | |
1222 | 36629732 | Y2 += (1 << 13) - (1 << 29); | |
1223 | |||
1224 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 36629732 times.
|
36629732 | if (hasAlpha) { |
1225 | ✗ | A1 = abuf0[i * 2 ] * (1 << 11); | |
1226 | ✗ | A2 = abuf0[i * 2 + 1] * (1 << 11); | |
1227 | |||
1228 | ✗ | A1 += 1 << 13; | |
1229 | ✗ | A2 += 1 << 13; | |
1230 | } | ||
1231 | |||
1232 | 36629732 | R = V * c->yuv2rgb_v2r_coeff; | |
1233 | 36629732 | G = V * c->yuv2rgb_v2g_coeff + U * c->yuv2rgb_u2g_coeff; | |
1234 | 36629732 | B = U * c->yuv2rgb_u2b_coeff; | |
1235 | |||
1236 |
14/18✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 36627684 times.
✓ Branch 2 taken 2048 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1536 times.
✓ Branch 5 taken 512 times.
✓ Branch 6 taken 1536 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 512 times.
✓ Branch 9 taken 1024 times.
✓ Branch 10 taken 1536 times.
✓ Branch 11 taken 36626148 times.
✓ Branch 12 taken 1536 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1024 times.
✓ Branch 15 taken 512 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 1024 times.
|
36629732 | output_pixel(&dest[0], av_clip_uintp2(((int)(R_B + Y1) >> 14) + (1<<15), 16)); |
1237 |
2/2✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 36627684 times.
|
36629732 | output_pixel(&dest[1], av_clip_uintp2(((int)( G + Y1) >> 14) + (1<<15), 16)); |
1238 |
14/18✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 36627684 times.
✓ Branch 2 taken 2048 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1536 times.
✓ Branch 5 taken 512 times.
✓ Branch 6 taken 1536 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 512 times.
✓ Branch 9 taken 1024 times.
✓ Branch 10 taken 1536 times.
✓ Branch 11 taken 36626148 times.
✓ Branch 12 taken 1536 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1024 times.
✓ Branch 15 taken 512 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 1024 times.
|
36629732 | output_pixel(&dest[2], av_clip_uintp2(((int)(B_R + Y1) >> 14) + (1<<15), 16)); |
1239 |
2/2✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 36627684 times.
|
36629732 | if (eightbytes) { |
1240 |
2/2✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 1024 times.
|
2048 | output_pixel(&dest[3], av_clip_uintp2(A1 , 30) >> 14); |
1241 |
12/18✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 1024 times.
✓ Branch 2 taken 1024 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1024 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1024 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 512 times.
✓ Branch 9 taken 512 times.
✓ Branch 10 taken 1024 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1024 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 512 times.
✓ Branch 15 taken 512 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 512 times.
|
2048 | output_pixel(&dest[4], av_clip_uintp2(((int)(R_B + Y2) >> 14) + (1<<15), 16)); |
1242 |
2/2✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 1024 times.
|
2048 | output_pixel(&dest[5], av_clip_uintp2(((int)( G + Y2) >> 14) + (1<<15), 16)); |
1243 |
12/18✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 1024 times.
✓ Branch 2 taken 1024 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1024 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1024 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 512 times.
✓ Branch 9 taken 512 times.
✓ Branch 10 taken 1024 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1024 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 512 times.
✓ Branch 15 taken 512 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 512 times.
|
2048 | output_pixel(&dest[6], av_clip_uintp2(((int)(B_R + Y2) >> 14) + (1<<15), 16)); |
1244 |
2/2✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 1024 times.
|
2048 | output_pixel(&dest[7], av_clip_uintp2(A2 , 30) >> 14); |
1245 | 2048 | dest += 8; | |
1246 | } else { | ||
1247 |
12/18✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 36626660 times.
✓ Branch 2 taken 1024 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 512 times.
✓ Branch 5 taken 512 times.
✓ Branch 6 taken 512 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 512 times.
✓ Branch 10 taken 512 times.
✓ Branch 11 taken 36626148 times.
✓ Branch 12 taken 512 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 512 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 512 times.
|
36627684 | output_pixel(&dest[3], av_clip_uintp2(((int)(R_B + Y2) >> 14) + (1<<15), 16)); |
1248 |
2/2✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 36626660 times.
|
36627684 | output_pixel(&dest[4], av_clip_uintp2(((int)( G + Y2) >> 14) + (1<<15), 16)); |
1249 |
12/18✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 36626660 times.
✓ Branch 2 taken 1024 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 512 times.
✓ Branch 5 taken 512 times.
✓ Branch 6 taken 512 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 512 times.
✓ Branch 10 taken 512 times.
✓ Branch 11 taken 36626148 times.
✓ Branch 12 taken 512 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 512 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 512 times.
|
36627684 | output_pixel(&dest[5], av_clip_uintp2(((int)(B_R + Y2) >> 14) + (1<<15), 16)); |
1250 | 36627684 | dest += 6; | |
1251 | } | ||
1252 | } | ||
1253 | } else { | ||
1254 | 32 | const int32_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1]; | |
1255 | 32 | int A1 = 0xffff<<14, A2 = 0xffff<<14; | |
1256 | 32 | int uvalpha1 = 4096 - uvalpha; | |
1257 | av_assert2(uvalpha <= 4096U); | ||
1258 | |||
1259 |
2/2✓ Branch 0 taken 8192 times.
✓ Branch 1 taken 32 times.
|
8224 | for (i = 0; i < ((dstW + 1) >> 1); i++) { |
1260 | 8192 | SUINT Y1 = (buf0[i * 2] ) >> 2; | |
1261 | 8192 | SUINT Y2 = (buf0[i * 2 + 1]) >> 2; | |
1262 | 8192 | int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha - (128 << 23)) >> 14; | |
1263 | 8192 | int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha - (128 << 23)) >> 14; | |
1264 | int R, G, B; | ||
1265 | |||
1266 | 8192 | Y1 -= c->yuv2rgb_y_offset; | |
1267 | 8192 | Y2 -= c->yuv2rgb_y_offset; | |
1268 | 8192 | Y1 *= c->yuv2rgb_y_coeff; | |
1269 | 8192 | Y2 *= c->yuv2rgb_y_coeff; | |
1270 | 8192 | Y1 += (1 << 13) - (1 << 29); | |
1271 | 8192 | Y2 += (1 << 13) - (1 << 29); | |
1272 | |||
1273 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8192 times.
|
8192 | if (hasAlpha) { |
1274 | ✗ | A1 = abuf0[i * 2 ] * (1 << 11); | |
1275 | ✗ | A2 = abuf0[i * 2 + 1] * (1 << 11); | |
1276 | |||
1277 | ✗ | A1 += 1 << 13; | |
1278 | ✗ | A2 += 1 << 13; | |
1279 | } | ||
1280 | |||
1281 | 8192 | R = V * c->yuv2rgb_v2r_coeff; | |
1282 | 8192 | G = V * c->yuv2rgb_v2g_coeff + U * c->yuv2rgb_u2g_coeff; | |
1283 | 8192 | B = U * c->yuv2rgb_u2b_coeff; | |
1284 | |||
1285 |
14/18✓ Branch 0 taken 4096 times.
✓ Branch 1 taken 4096 times.
✓ Branch 2 taken 4096 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3072 times.
✓ Branch 5 taken 1024 times.
✓ Branch 6 taken 3072 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1024 times.
✓ Branch 9 taken 2048 times.
✓ Branch 10 taken 3072 times.
✓ Branch 11 taken 1024 times.
✓ Branch 12 taken 3072 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2048 times.
✓ Branch 15 taken 1024 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2048 times.
|
8192 | output_pixel(&dest[0], av_clip_uintp2(((int)(R_B + Y1) >> 14) + (1<<15), 16)); |
1286 |
2/2✓ Branch 0 taken 4096 times.
✓ Branch 1 taken 4096 times.
|
8192 | output_pixel(&dest[1], av_clip_uintp2(((int)( G + Y1) >> 14) + (1<<15), 16)); |
1287 |
14/18✓ Branch 0 taken 4096 times.
✓ Branch 1 taken 4096 times.
✓ Branch 2 taken 4096 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3072 times.
✓ Branch 5 taken 1024 times.
✓ Branch 6 taken 3072 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1024 times.
✓ Branch 9 taken 2048 times.
✓ Branch 10 taken 3072 times.
✓ Branch 11 taken 1024 times.
✓ Branch 12 taken 3072 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2048 times.
✓ Branch 15 taken 1024 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2048 times.
|
8192 | output_pixel(&dest[2], av_clip_uintp2(((int)(B_R + Y1) >> 14) + (1<<15), 16)); |
1288 |
2/2✓ Branch 0 taken 4096 times.
✓ Branch 1 taken 4096 times.
|
8192 | if (eightbytes) { |
1289 |
2/2✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 2048 times.
|
4096 | output_pixel(&dest[3], av_clip_uintp2(A1 , 30) >> 14); |
1290 |
12/18✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 2048 times.
✓ Branch 2 taken 2048 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2048 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2048 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1024 times.
✓ Branch 9 taken 1024 times.
✓ Branch 10 taken 2048 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2048 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1024 times.
✓ Branch 15 taken 1024 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 1024 times.
|
4096 | output_pixel(&dest[4], av_clip_uintp2(((int)(R_B + Y2) >> 14) + (1<<15), 16)); |
1291 |
2/2✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 2048 times.
|
4096 | output_pixel(&dest[5], av_clip_uintp2(((int)( G + Y2) >> 14) + (1<<15), 16)); |
1292 |
12/18✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 2048 times.
✓ Branch 2 taken 2048 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2048 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2048 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1024 times.
✓ Branch 9 taken 1024 times.
✓ Branch 10 taken 2048 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2048 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1024 times.
✓ Branch 15 taken 1024 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 1024 times.
|
4096 | output_pixel(&dest[6], av_clip_uintp2(((int)(B_R + Y2) >> 14) + (1<<15), 16)); |
1293 |
2/2✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 2048 times.
|
4096 | output_pixel(&dest[7], av_clip_uintp2(A2 , 30) >> 14); |
1294 | 4096 | dest += 8; | |
1295 | } else { | ||
1296 |
12/18✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 2048 times.
✓ Branch 2 taken 2048 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1024 times.
✓ Branch 5 taken 1024 times.
✓ Branch 6 taken 1024 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1024 times.
✓ Branch 10 taken 1024 times.
✓ Branch 11 taken 1024 times.
✓ Branch 12 taken 1024 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1024 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1024 times.
|
4096 | output_pixel(&dest[3], av_clip_uintp2(((int)(R_B + Y2) >> 14) + (1<<15), 16)); |
1297 |
2/2✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 2048 times.
|
4096 | output_pixel(&dest[4], av_clip_uintp2(((int)( G + Y2) >> 14) + (1<<15), 16)); |
1298 |
12/18✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 2048 times.
✓ Branch 2 taken 2048 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1024 times.
✓ Branch 5 taken 1024 times.
✓ Branch 6 taken 1024 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1024 times.
✓ Branch 10 taken 1024 times.
✓ Branch 11 taken 1024 times.
✓ Branch 12 taken 1024 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1024 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1024 times.
|
4096 | output_pixel(&dest[5], av_clip_uintp2(((int)(B_R + Y2) >> 14) + (1<<15), 16)); |
1299 | 4096 | dest += 6; | |
1300 | } | ||
1301 | } | ||
1302 | } | ||
1303 | 209684 | } | |
1304 | |||
1305 | static av_always_inline void | ||
1306 | 1000 | yuv2rgba64_full_X_c_template(SwsInternal *c, const int16_t *lumFilter, | |
1307 | const int32_t **lumSrc, int lumFilterSize, | ||
1308 | const int16_t *chrFilter, const int32_t **chrUSrc, | ||
1309 | const int32_t **chrVSrc, int chrFilterSize, | ||
1310 | const int32_t **alpSrc, uint16_t *dest, int dstW, | ||
1311 | int y, enum AVPixelFormat target, int hasAlpha, | ||
1312 | int eightbytes, int is_be) | ||
1313 | { | ||
1314 | int i; | ||
1315 | 1000 | int A = 0xffff<<14; | |
1316 | |||
1317 |
2/2✓ Branch 0 taken 200000 times.
✓ Branch 1 taken 1000 times.
|
201000 | for (i = 0; i < dstW; i++) { |
1318 | int j; | ||
1319 | 200000 | int Y = -0x40000000; | |
1320 | 200000 | int U = -(128 << 23); // 19 | |
1321 | 200000 | int V = -(128 << 23); | |
1322 | int R, G, B; | ||
1323 | |||
1324 |
2/2✓ Branch 0 taken 2400000 times.
✓ Branch 1 taken 200000 times.
|
2600000 | for (j = 0; j < lumFilterSize; j++) { |
1325 | 2400000 | Y += lumSrc[j][i] * (unsigned)lumFilter[j]; | |
1326 | } | ||
1327 |
2/2✓ Branch 0 taken 2400000 times.
✓ Branch 1 taken 200000 times.
|
2600000 | for (j = 0; j < chrFilterSize; j++) {; |
1328 | 2400000 | U += chrUSrc[j][i] * (unsigned)chrFilter[j]; | |
1329 | 2400000 | V += chrVSrc[j][i] * (unsigned)chrFilter[j]; | |
1330 | } | ||
1331 | |||
1332 |
2/2✓ Branch 0 taken 80000 times.
✓ Branch 1 taken 120000 times.
|
200000 | if (hasAlpha) { |
1333 | 80000 | A = -0x40000000; | |
1334 |
2/2✓ Branch 0 taken 960000 times.
✓ Branch 1 taken 80000 times.
|
1040000 | for (j = 0; j < lumFilterSize; j++) { |
1335 | 960000 | A += alpSrc[j][i] * (unsigned)lumFilter[j]; | |
1336 | } | ||
1337 | 80000 | A >>= 1; | |
1338 | 80000 | A += 0x20002000; | |
1339 | } | ||
1340 | |||
1341 | // 8bit: 12+15=27; 16-bit: 12+19=31 | ||
1342 | 200000 | Y >>= 14; // 10 | |
1343 | 200000 | Y += 0x10000; | |
1344 | 200000 | U >>= 14; | |
1345 | 200000 | V >>= 14; | |
1346 | |||
1347 | // 8bit: 27 -> 17bit, 16bit: 31 - 14 = 17bit | ||
1348 | 200000 | Y -= c->yuv2rgb_y_offset; | |
1349 | 200000 | Y *= c->yuv2rgb_y_coeff; | |
1350 | 200000 | Y += (1 << 13) - (1<<29); // 21 | |
1351 | // 8bit: 17 + 13bit = 30bit, 16bit: 17 + 13bit = 30bit | ||
1352 | |||
1353 | 200000 | R = V * c->yuv2rgb_v2r_coeff; | |
1354 | 200000 | G = V * c->yuv2rgb_v2g_coeff + U * c->yuv2rgb_u2g_coeff; | |
1355 | 200000 | B = U * c->yuv2rgb_u2b_coeff; | |
1356 | |||
1357 | // 8bit: 30 - 22 = 8bit, 16bit: 30bit - 14 = 16bit | ||
1358 |
14/18✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 100000 times.
✓ Branch 2 taken 100000 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 60000 times.
✓ Branch 5 taken 40000 times.
✓ Branch 6 taken 60000 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 20000 times.
✓ Branch 9 taken 40000 times.
✓ Branch 10 taken 60000 times.
✓ Branch 11 taken 40000 times.
✓ Branch 12 taken 60000 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 40000 times.
✓ Branch 15 taken 20000 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 40000 times.
|
200000 | output_pixel(&dest[0], av_clip_uintp2(((int)(R_B + (unsigned)Y)>>14) + (1<<15), 16)); |
1359 |
2/2✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 100000 times.
|
200000 | output_pixel(&dest[1], av_clip_uintp2(((int)( G + (unsigned)Y)>>14) + (1<<15), 16)); |
1360 |
14/18✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 100000 times.
✓ Branch 2 taken 100000 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 60000 times.
✓ Branch 5 taken 40000 times.
✓ Branch 6 taken 60000 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 20000 times.
✓ Branch 9 taken 40000 times.
✓ Branch 10 taken 60000 times.
✓ Branch 11 taken 40000 times.
✓ Branch 12 taken 60000 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 40000 times.
✓ Branch 15 taken 20000 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 40000 times.
|
200000 | output_pixel(&dest[2], av_clip_uintp2(((int)(B_R + (unsigned)Y)>>14) + (1<<15), 16)); |
1361 |
2/2✓ Branch 0 taken 80000 times.
✓ Branch 1 taken 120000 times.
|
200000 | if (eightbytes) { |
1362 |
2/2✓ Branch 0 taken 40000 times.
✓ Branch 1 taken 40000 times.
|
80000 | output_pixel(&dest[3], av_clip_uintp2(A, 30) >> 14); |
1363 | 80000 | dest += 4; | |
1364 | } else { | ||
1365 | 120000 | dest += 3; | |
1366 | } | ||
1367 | } | ||
1368 | 1000 | } | |
1369 | |||
1370 | static av_always_inline void | ||
1371 | ✗ | yuv2rgba64_full_2_c_template(SwsInternal *c, const int32_t *buf[2], | |
1372 | const int32_t *ubuf[2], const int32_t *vbuf[2], | ||
1373 | const int32_t *abuf[2], uint16_t *dest, int dstW, | ||
1374 | int yalpha, int uvalpha, int y, | ||
1375 | enum AVPixelFormat target, int hasAlpha, int eightbytes, | ||
1376 | int is_be) | ||
1377 | { | ||
1378 | ✗ | const int32_t *buf0 = buf[0], *buf1 = buf[1], | |
1379 | ✗ | *ubuf0 = ubuf[0], *ubuf1 = ubuf[1], | |
1380 | ✗ | *vbuf0 = vbuf[0], *vbuf1 = vbuf[1], | |
1381 | ✗ | *abuf0 = hasAlpha ? abuf[0] : NULL, | |
1382 | ✗ | *abuf1 = hasAlpha ? abuf[1] : NULL; | |
1383 | ✗ | int yalpha1 = 4096 - yalpha; | |
1384 | ✗ | int uvalpha1 = 4096 - uvalpha; | |
1385 | int i; | ||
1386 | ✗ | int A = 0xffff<<14; | |
1387 | |||
1388 | av_assert2(yalpha <= 4096U); | ||
1389 | av_assert2(uvalpha <= 4096U); | ||
1390 | |||
1391 | ✗ | for (i = 0; i < dstW; i++) { | |
1392 | ✗ | int Y = (buf0[i] * yalpha1 + buf1[i] * yalpha) >> 14; | |
1393 | ✗ | int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha - (128 << 23)) >> 14; | |
1394 | ✗ | int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha - (128 << 23)) >> 14; | |
1395 | int R, G, B; | ||
1396 | |||
1397 | ✗ | Y -= c->yuv2rgb_y_offset; | |
1398 | ✗ | Y *= c->yuv2rgb_y_coeff; | |
1399 | ✗ | Y += (1 << 13) - (1 << 29); | |
1400 | |||
1401 | ✗ | R = V * c->yuv2rgb_v2r_coeff; | |
1402 | ✗ | G = V * c->yuv2rgb_v2g_coeff + U * c->yuv2rgb_u2g_coeff; | |
1403 | ✗ | B = U * c->yuv2rgb_u2b_coeff; | |
1404 | |||
1405 | ✗ | if (hasAlpha) { | |
1406 | ✗ | A = (abuf0[i] * yalpha1 + abuf1[i] * yalpha) >> 1; | |
1407 | |||
1408 | ✗ | A += 1 << 13; | |
1409 | } | ||
1410 | |||
1411 | ✗ | output_pixel(&dest[0], av_clip_uintp2(((R_B + Y) >> 14) + (1<<15), 16)); | |
1412 | ✗ | output_pixel(&dest[1], av_clip_uintp2((( G + Y) >> 14) + (1<<15), 16)); | |
1413 | ✗ | output_pixel(&dest[2], av_clip_uintp2(((B_R + Y) >> 14) + (1<<15), 16)); | |
1414 | ✗ | if (eightbytes) { | |
1415 | ✗ | output_pixel(&dest[3], av_clip_uintp2(A, 30) >> 14); | |
1416 | ✗ | dest += 4; | |
1417 | } else { | ||
1418 | ✗ | dest += 3; | |
1419 | } | ||
1420 | } | ||
1421 | ✗ | } | |
1422 | |||
1423 | static av_always_inline void | ||
1424 | 359808 | yuv2rgba64_full_1_c_template(SwsInternal *c, const int32_t *buf0, | |
1425 | const int32_t *ubuf[2], const int32_t *vbuf[2], | ||
1426 | const int32_t *abuf0, uint16_t *dest, int dstW, | ||
1427 | int uvalpha, int y, enum AVPixelFormat target, | ||
1428 | int hasAlpha, int eightbytes, int is_be) | ||
1429 | { | ||
1430 | 359808 | const int32_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0]; | |
1431 | int i; | ||
1432 | 359808 | int A = 0xffff<<14; | |
1433 | |||
1434 |
1/2✓ Branch 0 taken 359808 times.
✗ Branch 1 not taken.
|
359808 | if (uvalpha == 0) { |
1435 |
2/2✓ Branch 0 taken 126554112 times.
✓ Branch 1 taken 359808 times.
|
126913920 | for (i = 0; i < dstW; i++) { |
1436 | 126554112 | SUINT Y = (buf0[i]) >> 2; | |
1437 | 126554112 | int U = (ubuf0[i] - (128 << 11)) >> 2; | |
1438 | 126554112 | int V = (vbuf0[i] - (128 << 11)) >> 2; | |
1439 | int R, G, B; | ||
1440 | |||
1441 | 126554112 | Y -= c->yuv2rgb_y_offset; | |
1442 | 126554112 | Y *= c->yuv2rgb_y_coeff; | |
1443 | 126554112 | Y += (1 << 13) - (1 << 29); | |
1444 | |||
1445 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 126554112 times.
|
126554112 | if (hasAlpha) { |
1446 | ✗ | A = abuf0[i] * (1 << 11); | |
1447 | |||
1448 | ✗ | A += 1 << 13; | |
1449 | } | ||
1450 | |||
1451 | 126554112 | R = V * c->yuv2rgb_v2r_coeff; | |
1452 | 126554112 | G = V * c->yuv2rgb_v2g_coeff + U * c->yuv2rgb_u2g_coeff; | |
1453 | 126554112 | B = U * c->yuv2rgb_u2b_coeff; | |
1454 | |||
1455 |
7/18✗ Branch 0 not taken.
✓ Branch 1 taken 126554112 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 27648 times.
✓ Branch 11 taken 126526464 times.
✓ Branch 12 taken 27648 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 18432 times.
✓ Branch 15 taken 9216 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 18432 times.
|
126554112 | output_pixel(&dest[0], av_clip_uintp2(((int)(R_B + Y) >> 14) + (1<<15), 16)); |
1456 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 126554112 times.
|
126554112 | output_pixel(&dest[1], av_clip_uintp2(((int)( G + Y) >> 14) + (1<<15), 16)); |
1457 |
7/18✗ Branch 0 not taken.
✓ Branch 1 taken 126554112 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 27648 times.
✓ Branch 11 taken 126526464 times.
✓ Branch 12 taken 27648 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 18432 times.
✓ Branch 15 taken 9216 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 18432 times.
|
126554112 | output_pixel(&dest[2], av_clip_uintp2(((int)(B_R + Y) >> 14) + (1<<15), 16)); |
1458 |
2/2✓ Branch 0 taken 18432 times.
✓ Branch 1 taken 126535680 times.
|
126554112 | if (eightbytes) { |
1459 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 18432 times.
|
18432 | output_pixel(&dest[3], av_clip_uintp2(A, 30) >> 14); |
1460 | 18432 | dest += 4; | |
1461 | } else { | ||
1462 | 126535680 | dest += 3; | |
1463 | } | ||
1464 | } | ||
1465 | } else { | ||
1466 | ✗ | const int32_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1]; | |
1467 | ✗ | int uvalpha1 = 4096 - uvalpha; | |
1468 | ✗ | int A = 0xffff<<14; | |
1469 | av_assert2(uvalpha <= 4096U); | ||
1470 | |||
1471 | ✗ | for (i = 0; i < dstW; i++) { | |
1472 | ✗ | SUINT Y = (buf0[i] ) >> 2; | |
1473 | ✗ | int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha - (128 << 23)) >> 14; | |
1474 | ✗ | int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha - (128 << 23)) >> 14; | |
1475 | int R, G, B; | ||
1476 | |||
1477 | ✗ | Y -= c->yuv2rgb_y_offset; | |
1478 | ✗ | Y *= c->yuv2rgb_y_coeff; | |
1479 | ✗ | Y += (1 << 13) - (1 << 29); | |
1480 | |||
1481 | ✗ | if (hasAlpha) { | |
1482 | ✗ | A = abuf0[i] * (1 << 11); | |
1483 | |||
1484 | ✗ | A += 1 << 13; | |
1485 | } | ||
1486 | |||
1487 | ✗ | R = V * c->yuv2rgb_v2r_coeff; | |
1488 | ✗ | G = V * c->yuv2rgb_v2g_coeff + U * c->yuv2rgb_u2g_coeff; | |
1489 | ✗ | B = U * c->yuv2rgb_u2b_coeff; | |
1490 | |||
1491 | ✗ | output_pixel(&dest[0], av_clip_uintp2(((int)(R_B + Y) >> 14) + (1<<15), 16)); | |
1492 | ✗ | output_pixel(&dest[1], av_clip_uintp2(((int)( G + Y) >> 14) + (1<<15), 16)); | |
1493 | ✗ | output_pixel(&dest[2], av_clip_uintp2(((int)(B_R + Y) >> 14) + (1<<15), 16)); | |
1494 | ✗ | if (eightbytes) { | |
1495 | ✗ | output_pixel(&dest[3], av_clip_uintp2(A, 30) >> 14); | |
1496 | ✗ | dest += 4; | |
1497 | } else { | ||
1498 | ✗ | dest += 3; | |
1499 | } | ||
1500 | } | ||
1501 | } | ||
1502 | 359808 | } | |
1503 | |||
1504 | #undef output_pixel | ||
1505 | #undef r_b | ||
1506 | #undef b_r | ||
1507 | |||
1508 | #define YUV2PACKED16WRAPPER_EXT(name, base, ext, fmt, is_be, hasAlpha, eightbytes) \ | ||
1509 | static void name ## ext ## _X_c(SwsInternal *c, const int16_t *lumFilter, \ | ||
1510 | const int16_t **_lumSrc, int lumFilterSize, \ | ||
1511 | const int16_t *chrFilter, const int16_t **_chrUSrc, \ | ||
1512 | const int16_t **_chrVSrc, int chrFilterSize, \ | ||
1513 | const int16_t **_alpSrc, uint8_t *_dest, int dstW, \ | ||
1514 | int y) \ | ||
1515 | { \ | ||
1516 | const int32_t **lumSrc = (const int32_t **) _lumSrc, \ | ||
1517 | **chrUSrc = (const int32_t **) _chrUSrc, \ | ||
1518 | **chrVSrc = (const int32_t **) _chrVSrc, \ | ||
1519 | **alpSrc = (const int32_t **) _alpSrc; \ | ||
1520 | uint16_t *dest = (uint16_t *) _dest; \ | ||
1521 | name ## base ## _X_c_template(c, lumFilter, lumSrc, lumFilterSize, \ | ||
1522 | chrFilter, chrUSrc, chrVSrc, chrFilterSize, \ | ||
1523 | alpSrc, dest, dstW, y, fmt, hasAlpha, eightbytes, is_be); \ | ||
1524 | } \ | ||
1525 | \ | ||
1526 | static void name ## ext ## _2_c(SwsInternal *c, const int16_t *_buf[2], \ | ||
1527 | const int16_t *_ubuf[2], const int16_t *_vbuf[2], \ | ||
1528 | const int16_t *_abuf[2], uint8_t *_dest, int dstW, \ | ||
1529 | int yalpha, int uvalpha, int y) \ | ||
1530 | { \ | ||
1531 | const int32_t **buf = (const int32_t **) _buf, \ | ||
1532 | **ubuf = (const int32_t **) _ubuf, \ | ||
1533 | **vbuf = (const int32_t **) _vbuf, \ | ||
1534 | **abuf = (const int32_t **) _abuf; \ | ||
1535 | uint16_t *dest = (uint16_t *) _dest; \ | ||
1536 | name ## base ## _2_c_template(c, buf, ubuf, vbuf, abuf, \ | ||
1537 | dest, dstW, yalpha, uvalpha, y, fmt, hasAlpha, eightbytes, is_be); \ | ||
1538 | } \ | ||
1539 | \ | ||
1540 | static void name ## ext ## _1_c(SwsInternal *c, const int16_t *_buf0, \ | ||
1541 | const int16_t *_ubuf[2], const int16_t *_vbuf[2], \ | ||
1542 | const int16_t *_abuf0, uint8_t *_dest, int dstW, \ | ||
1543 | int uvalpha, int y) \ | ||
1544 | { \ | ||
1545 | const int32_t *buf0 = (const int32_t *) _buf0, \ | ||
1546 | **ubuf = (const int32_t **) _ubuf, \ | ||
1547 | **vbuf = (const int32_t **) _vbuf, \ | ||
1548 | *abuf0 = (const int32_t *) _abuf0; \ | ||
1549 | uint16_t *dest = (uint16_t *) _dest; \ | ||
1550 | name ## base ## _1_c_template(c, buf0, ubuf, vbuf, abuf0, dest, \ | ||
1551 | dstW, uvalpha, y, fmt, hasAlpha, eightbytes, is_be); \ | ||
1552 | } | ||
1553 | #define YUV2PACKED16WRAPPER(name, base, ext, base_fmt, endianness, hasAlpha, eightbytes) \ | ||
1554 | YUV2PACKED16WRAPPER_EXT(name, base, ext, base_fmt ## endianness, IS_BE(endianness), hasAlpha, eightbytes) | ||
1555 | |||
1556 | 38048 | YUV2PACKED16WRAPPER(yuv2, rgba64, rgb48be, AV_PIX_FMT_RGB48, BE, 0, 0) | |
1557 | 821896 | YUV2PACKED16WRAPPER(yuv2, rgba64, rgb48le, AV_PIX_FMT_RGB48, LE, 0, 0) | |
1558 | 11552 | YUV2PACKED16WRAPPER(yuv2, rgba64, bgr48be, AV_PIX_FMT_BGR48, BE, 0, 0) | |
1559 | 12128 | YUV2PACKED16WRAPPER(yuv2, rgba64, bgr48le, AV_PIX_FMT_BGR48, LE, 0, 0) | |
1560 | ✗ | YUV2PACKED16WRAPPER(yuv2, rgba64, rgba64be, AV_PIX_FMT_RGBA64, BE, 1, 1) | |
1561 | ✗ | YUV2PACKED16WRAPPER(yuv2, rgba64, rgba64le, AV_PIX_FMT_RGBA64, LE, 1, 1) | |
1562 | 11552 | YUV2PACKED16WRAPPER(yuv2, rgba64, rgbx64be, AV_PIX_FMT_RGBA64, BE, 0, 1) | |
1563 | 21344 | YUV2PACKED16WRAPPER(yuv2, rgba64, rgbx64le, AV_PIX_FMT_RGBA64, LE, 0, 1) | |
1564 | ✗ | YUV2PACKED16WRAPPER(yuv2, rgba64, bgra64be, AV_PIX_FMT_BGRA64, BE, 1, 1) | |
1565 | ✗ | YUV2PACKED16WRAPPER(yuv2, rgba64, bgra64le, AV_PIX_FMT_BGRA64, LE, 1, 1) | |
1566 | 11552 | YUV2PACKED16WRAPPER(yuv2, rgba64, bgrx64be, AV_PIX_FMT_BGRA64, BE, 0, 1) | |
1567 | 11552 | YUV2PACKED16WRAPPER(yuv2, rgba64, bgrx64le, AV_PIX_FMT_BGRA64, LE, 0, 1) | |
1568 | 11720 | YUV2PACKED16WRAPPER(yuv2, ya16, ya16be, AV_PIX_FMT_YA16, BE, 1, 0) | |
1569 | 12296 | YUV2PACKED16WRAPPER(yuv2, ya16, ya16le, AV_PIX_FMT_YA16, LE, 1, 0) | |
1570 | |||
1571 | 400 | YUV2PACKED16WRAPPER(yuv2, rgba64_full, rgb48be_full, AV_PIX_FMT_RGB48, BE, 0, 0) | |
1572 | 719440 | YUV2PACKED16WRAPPER(yuv2, rgba64_full, rgb48le_full, AV_PIX_FMT_RGB48, LE, 0, 0) | |
1573 | 200 | YUV2PACKED16WRAPPER(yuv2, rgba64_full, bgr48be_full, AV_PIX_FMT_BGR48, BE, 0, 0) | |
1574 | 392 | YUV2PACKED16WRAPPER(yuv2, rgba64_full, bgr48le_full, AV_PIX_FMT_BGR48, LE, 0, 0) | |
1575 | 200 | YUV2PACKED16WRAPPER(yuv2, rgba64_full, rgba64be_full, AV_PIX_FMT_RGBA64, BE, 1, 1) | |
1576 | 200 | YUV2PACKED16WRAPPER(yuv2, rgba64_full, rgba64le_full, AV_PIX_FMT_RGBA64, LE, 1, 1) | |
1577 | ✗ | YUV2PACKED16WRAPPER(yuv2, rgba64_full, rgbx64be_full, AV_PIX_FMT_RGBA64, BE, 0, 1) | |
1578 | 192 | YUV2PACKED16WRAPPER(yuv2, rgba64_full, rgbx64le_full, AV_PIX_FMT_RGBA64, LE, 0, 1) | |
1579 | 200 | YUV2PACKED16WRAPPER(yuv2, rgba64_full, bgra64be_full, AV_PIX_FMT_BGRA64, BE, 1, 1) | |
1580 | 200 | YUV2PACKED16WRAPPER(yuv2, rgba64_full, bgra64le_full, AV_PIX_FMT_BGRA64, LE, 1, 1) | |
1581 | ✗ | YUV2PACKED16WRAPPER(yuv2, rgba64_full, bgrx64be_full, AV_PIX_FMT_BGRA64, BE, 0, 1) | |
1582 | 192 | YUV2PACKED16WRAPPER(yuv2, rgba64_full, bgrx64le_full, AV_PIX_FMT_BGRA64, LE, 0, 1) | |
1583 | |||
1584 | /* | ||
1585 | * Write out 2 RGB pixels in the target pixel format. This function takes a | ||
1586 | * R/G/B LUT as generated by ff_yuv2rgb_c_init_tables(), which takes care of | ||
1587 | * things like endianness conversion and shifting. The caller takes care of | ||
1588 | * setting the correct offset in these tables from the chroma (U/V) values. | ||
1589 | * This function then uses the luminance (Y1/Y2) values to write out the | ||
1590 | * correct RGB values into the destination buffer. | ||
1591 | */ | ||
1592 | static av_always_inline void | ||
1593 | 276239204 | yuv2rgb_write(uint8_t *_dest, int i, int Y1, int Y2, | |
1594 | unsigned A1, unsigned A2, | ||
1595 | const void *_r, const void *_g, const void *_b, int y, | ||
1596 | enum AVPixelFormat target, int hasAlpha) | ||
1597 | { | ||
1598 |
4/6✓ Branch 0 taken 276239204 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 276239204 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 271206564 times.
✓ Branch 5 taken 5032640 times.
|
276239204 | if (target == AV_PIX_FMT_ARGB || target == AV_PIX_FMT_RGBA || |
1599 |
2/2✓ Branch 0 taken 25409992 times.
✓ Branch 1 taken 245796572 times.
|
301649196 | target == AV_PIX_FMT_ABGR || target == AV_PIX_FMT_BGRA) { |
1600 | 30442632 | uint32_t *dest = (uint32_t *) _dest; | |
1601 | 30442632 | const uint32_t *r = (const uint32_t *) _r; | |
1602 | 30442632 | const uint32_t *g = (const uint32_t *) _g; | |
1603 | 30442632 | const uint32_t *b = (const uint32_t *) _b; | |
1604 | |||
1605 | #if CONFIG_SMALL | ||
1606 | int sh = hasAlpha ? ((target == AV_PIX_FMT_RGB32_1 || target == AV_PIX_FMT_BGR32_1) ? 0 : 24) : 0; | ||
1607 | |||
1608 | dest[i * 2 + 0] = r[Y1] + g[Y1] + b[Y1] + (hasAlpha ? A1 << sh : 0); | ||
1609 | dest[i * 2 + 1] = r[Y2] + g[Y2] + b[Y2] + (hasAlpha ? A2 << sh : 0); | ||
1610 | #else | ||
1611 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 30442632 times.
|
30442632 | if (hasAlpha) { |
1612 | ✗ | int sh = (target == AV_PIX_FMT_RGB32_1 || target == AV_PIX_FMT_BGR32_1) ? 0 : 24; | |
1613 | |||
1614 | av_assert2((((r[Y1] + g[Y1] + b[Y1]) >> sh) & 0xFF) == 0); | ||
1615 | ✗ | dest[i * 2 + 0] = r[Y1] + g[Y1] + b[Y1] + (A1 << sh); | |
1616 | ✗ | dest[i * 2 + 1] = r[Y2] + g[Y2] + b[Y2] + (A2 << sh); | |
1617 | } else { | ||
1618 | #if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 | ||
1619 | int sh = (target == AV_PIX_FMT_RGB32_1 || target == AV_PIX_FMT_BGR32_1) ? 0 : 24; | ||
1620 | |||
1621 | av_assert2((((r[Y1] + g[Y1] + b[Y1]) >> sh) & 0xFF) == 0xFF); | ||
1622 | #endif | ||
1623 | 30442632 | dest[i * 2 + 0] = r[Y1] + g[Y1] + b[Y1]; | |
1624 | 30442632 | dest[i * 2 + 1] = r[Y2] + g[Y2] + b[Y2]; | |
1625 | } | ||
1626 | #endif | ||
1627 |
4/4✓ Branch 0 taken 124147206 times.
✓ Branch 1 taken 121649366 times.
✓ Branch 2 taken 26307054 times.
✓ Branch 3 taken 97840152 times.
|
245796572 | } else if (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) { |
1628 | 147956420 | uint8_t *dest = (uint8_t *) _dest; | |
1629 | 147956420 | const uint8_t *r = (const uint8_t *) _r; | |
1630 | 147956420 | const uint8_t *g = (const uint8_t *) _g; | |
1631 | 147956420 | const uint8_t *b = (const uint8_t *) _b; | |
1632 | |||
1633 | #define r_b ((target == AV_PIX_FMT_RGB24) ? r : b) | ||
1634 | #define b_r ((target == AV_PIX_FMT_RGB24) ? b : r) | ||
1635 | |||
1636 |
2/2✓ Branch 0 taken 121649366 times.
✓ Branch 1 taken 26307054 times.
|
147956420 | dest[i * 6 + 0] = r_b[Y1]; |
1637 | 147956420 | dest[i * 6 + 1] = g[Y1]; | |
1638 |
2/2✓ Branch 0 taken 121649366 times.
✓ Branch 1 taken 26307054 times.
|
147956420 | dest[i * 6 + 2] = b_r[Y1]; |
1639 |
2/2✓ Branch 0 taken 121649366 times.
✓ Branch 1 taken 26307054 times.
|
147956420 | dest[i * 6 + 3] = r_b[Y2]; |
1640 | 147956420 | dest[i * 6 + 4] = g[Y2]; | |
1641 |
2/2✓ Branch 0 taken 121649366 times.
✓ Branch 1 taken 26307054 times.
|
147956420 | dest[i * 6 + 5] = b_r[Y2]; |
1642 | #undef r_b | ||
1643 | #undef b_r | ||
1644 |
5/6✓ Branch 0 taken 74590452 times.
✓ Branch 1 taken 23249700 times.
✓ Branch 2 taken 74590452 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 28473352 times.
✓ Branch 5 taken 46117100 times.
|
97840152 | } else if (target == AV_PIX_FMT_RGB565 || target == AV_PIX_FMT_BGR565 || |
1645 |
3/4✓ Branch 0 taken 28473352 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 24361928 times.
✓ Branch 3 taken 4111424 times.
|
28473352 | target == AV_PIX_FMT_RGB555 || target == AV_PIX_FMT_BGR555 || |
1646 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 24361928 times.
|
24361928 | target == AV_PIX_FMT_RGB444 || target == AV_PIX_FMT_BGR444) { |
1647 | 73478224 | uint16_t *dest = (uint16_t *) _dest; | |
1648 | 73478224 | const uint16_t *r = (const uint16_t *) _r; | |
1649 | 73478224 | const uint16_t *g = (const uint16_t *) _g; | |
1650 | 73478224 | const uint16_t *b = (const uint16_t *) _b; | |
1651 | int dr1, dg1, db1, dr2, dg2, db2; | ||
1652 | |||
1653 |
3/4✓ Branch 0 taken 50228524 times.
✓ Branch 1 taken 23249700 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 50228524 times.
|
73478224 | if (target == AV_PIX_FMT_RGB565 || target == AV_PIX_FMT_BGR565) { |
1654 | 23249700 | dr1 = ff_dither_2x2_8[ y & 1 ][0]; | |
1655 | 23249700 | dg1 = ff_dither_2x2_4[ y & 1 ][0]; | |
1656 | 23249700 | db1 = ff_dither_2x2_8[(y & 1) ^ 1][0]; | |
1657 | 23249700 | dr2 = ff_dither_2x2_8[ y & 1 ][1]; | |
1658 | 23249700 | dg2 = ff_dither_2x2_4[ y & 1 ][1]; | |
1659 | 23249700 | db2 = ff_dither_2x2_8[(y & 1) ^ 1][1]; | |
1660 |
3/4✓ Branch 0 taken 4111424 times.
✓ Branch 1 taken 46117100 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4111424 times.
|
50228524 | } else if (target == AV_PIX_FMT_RGB555 || target == AV_PIX_FMT_BGR555) { |
1661 | 46117100 | dr1 = ff_dither_2x2_8[ y & 1 ][0]; | |
1662 | 46117100 | dg1 = ff_dither_2x2_8[ y & 1 ][1]; | |
1663 | 46117100 | db1 = ff_dither_2x2_8[(y & 1) ^ 1][0]; | |
1664 | 46117100 | dr2 = ff_dither_2x2_8[ y & 1 ][1]; | |
1665 | 46117100 | dg2 = ff_dither_2x2_8[ y & 1 ][0]; | |
1666 | 46117100 | db2 = ff_dither_2x2_8[(y & 1) ^ 1][1]; | |
1667 | } else { | ||
1668 | 4111424 | dr1 = ff_dither_4x4_16[ y & 3 ][0]; | |
1669 | 4111424 | dg1 = ff_dither_4x4_16[ y & 3 ][1]; | |
1670 | 4111424 | db1 = ff_dither_4x4_16[(y & 3) ^ 3][0]; | |
1671 | 4111424 | dr2 = ff_dither_4x4_16[ y & 3 ][1]; | |
1672 | 4111424 | dg2 = ff_dither_4x4_16[ y & 3 ][0]; | |
1673 | 4111424 | db2 = ff_dither_4x4_16[(y & 3) ^ 3][1]; | |
1674 | } | ||
1675 | |||
1676 | 73478224 | dest[i * 2 + 0] = r[Y1 + dr1] + g[Y1 + dg1] + b[Y1 + db1]; | |
1677 | 73478224 | dest[i * 2 + 1] = r[Y2 + dr2] + g[Y2 + dg2] + b[Y2 + db2]; | |
1678 |
4/4✓ Branch 0 taken 23348168 times.
✓ Branch 1 taken 1013760 times.
✓ Branch 2 taken 1013760 times.
✓ Branch 3 taken 22334408 times.
|
24361928 | } else if (target == AV_PIX_FMT_X2RGB10 || target == AV_PIX_FMT_X2BGR10) { |
1679 | 2027520 | uint32_t *dest = (uint32_t *) _dest; | |
1680 | 2027520 | const uint32_t *r = (const uint32_t *) _r; | |
1681 | 2027520 | const uint32_t *g = (const uint32_t *) _g; | |
1682 | 2027520 | const uint32_t *b = (const uint32_t *) _b; | |
1683 | 2027520 | dest[i * 2 + 0] = r[Y1] + g[Y1] + b[Y1]; | |
1684 | 2027520 | dest[i * 2 + 1] = r[Y2] + g[Y2] + b[Y2]; | |
1685 | } else /* 8/4 bits */ { | ||
1686 | 22334408 | uint8_t *dest = (uint8_t *) _dest; | |
1687 | 22334408 | const uint8_t *r = (const uint8_t *) _r; | |
1688 | 22334408 | const uint8_t *g = (const uint8_t *) _g; | |
1689 | 22334408 | const uint8_t *b = (const uint8_t *) _b; | |
1690 | int dr1, dg1, db1, dr2, dg2, db2; | ||
1691 | |||
1692 |
3/4✓ Branch 0 taken 2702848 times.
✓ Branch 1 taken 19631560 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2702848 times.
|
22334408 | if (target == AV_PIX_FMT_RGB8 || target == AV_PIX_FMT_BGR8) { |
1693 | 19631560 | const uint8_t * const d64 = ff_dither_8x8_73[y & 7]; | |
1694 | 19631560 | const uint8_t * const d32 = ff_dither_8x8_32[y & 7]; | |
1695 | 19631560 | dr1 = dg1 = d32[(i * 2 + 0) & 7]; | |
1696 | 19631560 | db1 = d64[(i * 2 + 0) & 7]; | |
1697 | 19631560 | dr2 = dg2 = d32[(i * 2 + 1) & 7]; | |
1698 | 19631560 | db2 = d64[(i * 2 + 1) & 7]; | |
1699 | } else { | ||
1700 | 2702848 | const uint8_t * const d64 = ff_dither_8x8_73 [y & 7]; | |
1701 | 2702848 | const uint8_t * const d128 = ff_dither_8x8_220[y & 7]; | |
1702 | 2702848 | dr1 = db1 = d128[(i * 2 + 0) & 7]; | |
1703 | 2702848 | dg1 = d64[(i * 2 + 0) & 7]; | |
1704 | 2702848 | dr2 = db2 = d128[(i * 2 + 1) & 7]; | |
1705 | 2702848 | dg2 = d64[(i * 2 + 1) & 7]; | |
1706 | } | ||
1707 | |||
1708 |
3/4✓ Branch 0 taken 22326216 times.
✓ Branch 1 taken 8192 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 22326216 times.
|
22334408 | if (target == AV_PIX_FMT_RGB4 || target == AV_PIX_FMT_BGR4) { |
1709 | 8192 | dest[i] = r[Y1 + dr1] + g[Y1 + dg1] + b[Y1 + db1] + | |
1710 | 8192 | ((r[Y2 + dr2] + g[Y2 + dg2] + b[Y2 + db2]) << 4); | |
1711 | } else { | ||
1712 | 22326216 | dest[i * 2 + 0] = r[Y1 + dr1] + g[Y1 + dg1] + b[Y1 + db1]; | |
1713 | 22326216 | dest[i * 2 + 1] = r[Y2 + dr2] + g[Y2 + dg2] + b[Y2 + db2]; | |
1714 | } | ||
1715 | } | ||
1716 | 276239204 | } | |
1717 | |||
1718 | static av_always_inline void | ||
1719 | 1184472 | yuv2rgb_X_c_template(SwsInternal *c, const int16_t *lumFilter, | |
1720 | const int16_t **lumSrc, int lumFilterSize, | ||
1721 | const int16_t *chrFilter, const int16_t **chrUSrc, | ||
1722 | const int16_t **chrVSrc, int chrFilterSize, | ||
1723 | const int16_t **alpSrc, uint8_t *dest, int dstW, | ||
1724 | int y, enum AVPixelFormat target, int hasAlpha) | ||
1725 | { | ||
1726 | int i; | ||
1727 | |||
1728 |
2/2✓ Branch 0 taken 203189432 times.
✓ Branch 1 taken 1184472 times.
|
204373904 | for (i = 0; i < ((dstW + 1) >> 1); i++) { |
1729 | int j, A1, A2; | ||
1730 | 203189432 | int Y1 = 1 << 18; | |
1731 | 203189432 | int Y2 = 1 << 18; | |
1732 | 203189432 | int U = 1 << 18; | |
1733 | 203189432 | int V = 1 << 18; | |
1734 | const void *r, *g, *b; | ||
1735 | |||
1736 |
2/2✓ Branch 0 taken 216298040 times.
✓ Branch 1 taken 203189432 times.
|
419487472 | for (j = 0; j < lumFilterSize; j++) { |
1737 | 216298040 | Y1 += lumSrc[j][i * 2] * lumFilter[j]; | |
1738 | 216298040 | Y2 += lumSrc[j][i * 2 + 1] * lumFilter[j]; | |
1739 | } | ||
1740 |
2/2✓ Branch 0 taken 816317408 times.
✓ Branch 1 taken 203189432 times.
|
1019506840 | for (j = 0; j < chrFilterSize; j++) { |
1741 | 816317408 | U += chrUSrc[j][i] * chrFilter[j]; | |
1742 | 816317408 | V += chrVSrc[j][i] * chrFilter[j]; | |
1743 | } | ||
1744 | 203189432 | Y1 >>= 19; | |
1745 | 203189432 | Y2 >>= 19; | |
1746 | 203189432 | U >>= 19; | |
1747 | 203189432 | V >>= 19; | |
1748 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 203189432 times.
|
203189432 | if (hasAlpha) { |
1749 | ✗ | A1 = 1 << 18; | |
1750 | ✗ | A2 = 1 << 18; | |
1751 | ✗ | for (j = 0; j < lumFilterSize; j++) { | |
1752 | ✗ | A1 += alpSrc[j][i * 2 ] * lumFilter[j]; | |
1753 | ✗ | A2 += alpSrc[j][i * 2 + 1] * lumFilter[j]; | |
1754 | } | ||
1755 | ✗ | A1 >>= 19; | |
1756 | ✗ | A2 >>= 19; | |
1757 | ✗ | if ((A1 | A2) & 0x100) { | |
1758 | ✗ | A1 = av_clip_uint8(A1); | |
1759 | ✗ | A2 = av_clip_uint8(A2); | |
1760 | } | ||
1761 | } | ||
1762 | |||
1763 | 203189432 | r = c->table_rV[V + YUVRGB_TABLE_HEADROOM]; | |
1764 | 203189432 | g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + c->table_gV[V + YUVRGB_TABLE_HEADROOM]); | |
1765 | 203189432 | b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; | |
1766 | |||
1767 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 203189432 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 203189432 times.
|
203189432 | yuv2rgb_write(dest, i, Y1, Y2, hasAlpha ? A1 : 0, hasAlpha ? A2 : 0, |
1768 | r, g, b, y, target, hasAlpha); | ||
1769 | } | ||
1770 | 1184472 | } | |
1771 | |||
1772 | static av_always_inline void | ||
1773 | 144 | yuv2rgb_2_c_template(SwsInternal *c, const int16_t *buf[2], | |
1774 | const int16_t *ubuf[2], const int16_t *vbuf[2], | ||
1775 | const int16_t *abuf[2], uint8_t *dest, int dstW, | ||
1776 | int yalpha, int uvalpha, int y, | ||
1777 | enum AVPixelFormat target, int hasAlpha) | ||
1778 | { | ||
1779 | 144 | const int16_t *buf0 = buf[0], *buf1 = buf[1], | |
1780 | 144 | *ubuf0 = ubuf[0], *ubuf1 = ubuf[1], | |
1781 | 144 | *vbuf0 = vbuf[0], *vbuf1 = vbuf[1], | |
1782 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 144 times.
|
144 | *abuf0 = hasAlpha ? abuf[0] : NULL, |
1783 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 144 times.
|
144 | *abuf1 = hasAlpha ? abuf[1] : NULL; |
1784 | 144 | int yalpha1 = 4096 - yalpha; | |
1785 | 144 | int uvalpha1 = 4096 - uvalpha; | |
1786 | int i; | ||
1787 | av_assert2(yalpha <= 4096U); | ||
1788 | av_assert2(uvalpha <= 4096U); | ||
1789 | |||
1790 |
2/2✓ Branch 0 taken 36864 times.
✓ Branch 1 taken 144 times.
|
37008 | for (i = 0; i < ((dstW + 1) >> 1); i++) { |
1791 | 36864 | int Y1 = (buf0[i * 2] * yalpha1 + buf1[i * 2] * yalpha) >> 19; | |
1792 | 36864 | int Y2 = (buf0[i * 2 + 1] * yalpha1 + buf1[i * 2 + 1] * yalpha) >> 19; | |
1793 | 36864 | int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha) >> 19; | |
1794 | 36864 | int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha) >> 19; | |
1795 | int A1, A2; | ||
1796 | 36864 | const void *r = c->table_rV[V + YUVRGB_TABLE_HEADROOM], | |
1797 | 36864 | *g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + c->table_gV[V + YUVRGB_TABLE_HEADROOM]), | |
1798 | 36864 | *b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; | |
1799 | |||
1800 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 36864 times.
|
36864 | if (hasAlpha) { |
1801 | ✗ | A1 = (abuf0[i * 2 ] * yalpha1 + abuf1[i * 2 ] * yalpha) >> 19; | |
1802 | ✗ | A2 = (abuf0[i * 2 + 1] * yalpha1 + abuf1[i * 2 + 1] * yalpha) >> 19; | |
1803 | ✗ | A1 = av_clip_uint8(A1); | |
1804 | ✗ | A2 = av_clip_uint8(A2); | |
1805 | } | ||
1806 | |||
1807 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 36864 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 36864 times.
|
36864 | yuv2rgb_write(dest, i, Y1, Y2, hasAlpha ? A1 : 0, hasAlpha ? A2 : 0, |
1808 | r, g, b, y, target, hasAlpha); | ||
1809 | } | ||
1810 | 144 | } | |
1811 | |||
1812 | static av_always_inline void | ||
1813 | 419388 | yuv2rgb_1_c_template(SwsInternal *c, const int16_t *buf0, | |
1814 | const int16_t *ubuf[2], const int16_t *vbuf[2], | ||
1815 | const int16_t *abuf0, uint8_t *dest, int dstW, | ||
1816 | int uvalpha, int y, enum AVPixelFormat target, | ||
1817 | int hasAlpha) | ||
1818 | { | ||
1819 | 419388 | const int16_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0]; | |
1820 | int i; | ||
1821 | |||
1822 |
2/2✓ Branch 0 taken 419292 times.
✓ Branch 1 taken 96 times.
|
419388 | if (uvalpha == 0) { |
1823 |
2/2✓ Branch 0 taken 72988332 times.
✓ Branch 1 taken 419292 times.
|
73407624 | for (i = 0; i < ((dstW + 1) >> 1); i++) { |
1824 | 72988332 | int Y1 = (buf0[i * 2 ] + 64) >> 7; | |
1825 | 72988332 | int Y2 = (buf0[i * 2 + 1] + 64) >> 7; | |
1826 | 72988332 | int U = (ubuf0[i] + 64) >> 7; | |
1827 | 72988332 | int V = (vbuf0[i] + 64) >> 7; | |
1828 | int A1, A2; | ||
1829 | 72988332 | const void *r = c->table_rV[V + YUVRGB_TABLE_HEADROOM], | |
1830 | 72988332 | *g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + c->table_gV[V + YUVRGB_TABLE_HEADROOM]), | |
1831 | 72988332 | *b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; | |
1832 | |||
1833 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 72988332 times.
|
72988332 | if (hasAlpha) { |
1834 | ✗ | A1 = abuf0[i * 2 ] * 255 + 16384 >> 15; | |
1835 | ✗ | A2 = abuf0[i * 2 + 1] * 255 + 16384 >> 15; | |
1836 | ✗ | A1 = av_clip_uint8(A1); | |
1837 | ✗ | A2 = av_clip_uint8(A2); | |
1838 | } | ||
1839 | |||
1840 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 72988332 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 72988332 times.
|
72988332 | yuv2rgb_write(dest, i, Y1, Y2, hasAlpha ? A1 : 0, hasAlpha ? A2 : 0, |
1841 | r, g, b, y, target, hasAlpha); | ||
1842 | } | ||
1843 | } else { | ||
1844 | 96 | const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1]; | |
1845 | 96 | int uvalpha1 = 4096 - uvalpha; | |
1846 | av_assert2(uvalpha <= 4096U); | ||
1847 | |||
1848 |
2/2✓ Branch 0 taken 24576 times.
✓ Branch 1 taken 96 times.
|
24672 | for (i = 0; i < ((dstW + 1) >> 1); i++) { |
1849 | 24576 | int Y1 = (buf0[i * 2 ] + 64) >> 7; | |
1850 | 24576 | int Y2 = (buf0[i * 2 + 1] + 64) >> 7; | |
1851 | 24576 | int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha + (128 << 11)) >> 19; | |
1852 | 24576 | int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha + (128 << 11)) >> 19; | |
1853 | int A1, A2; | ||
1854 | 24576 | const void *r = c->table_rV[V + YUVRGB_TABLE_HEADROOM], | |
1855 | 24576 | *g = (c->table_gU[U + YUVRGB_TABLE_HEADROOM] + c->table_gV[V + YUVRGB_TABLE_HEADROOM]), | |
1856 | 24576 | *b = c->table_bU[U + YUVRGB_TABLE_HEADROOM]; | |
1857 | |||
1858 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 24576 times.
|
24576 | if (hasAlpha) { |
1859 | ✗ | A1 = (abuf0[i * 2 ] + 64) >> 7; | |
1860 | ✗ | A2 = (abuf0[i * 2 + 1] + 64) >> 7; | |
1861 | ✗ | A1 = av_clip_uint8(A1); | |
1862 | ✗ | A2 = av_clip_uint8(A2); | |
1863 | } | ||
1864 | |||
1865 |
2/4✗ Branch 0 not taken.
✓ Branch 1 taken 24576 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 24576 times.
|
24576 | yuv2rgb_write(dest, i, Y1, Y2, hasAlpha ? A1 : 0, hasAlpha ? A2 : 0, |
1866 | r, g, b, y, target, hasAlpha); | ||
1867 | } | ||
1868 | } | ||
1869 | 419388 | } | |
1870 | |||
1871 | #define YUV2RGBWRAPPERX(name, base, ext, fmt, hasAlpha) \ | ||
1872 | static void name ## ext ## _X_c(SwsInternal *c, const int16_t *lumFilter, \ | ||
1873 | const int16_t **lumSrc, int lumFilterSize, \ | ||
1874 | const int16_t *chrFilter, const int16_t **chrUSrc, \ | ||
1875 | const int16_t **chrVSrc, int chrFilterSize, \ | ||
1876 | const int16_t **alpSrc, uint8_t *dest, int dstW, \ | ||
1877 | int y) \ | ||
1878 | { \ | ||
1879 | name ## base ## _X_c_template(c, lumFilter, lumSrc, lumFilterSize, \ | ||
1880 | chrFilter, chrUSrc, chrVSrc, chrFilterSize, \ | ||
1881 | alpSrc, dest, dstW, y, fmt, hasAlpha); \ | ||
1882 | } | ||
1883 | |||
1884 | #define YUV2RGBWRAPPERX2(name, base, ext, fmt, hasAlpha) \ | ||
1885 | YUV2RGBWRAPPERX(name, base, ext, fmt, hasAlpha) \ | ||
1886 | static void name ## ext ## _2_c(SwsInternal *c, const int16_t *buf[2], \ | ||
1887 | const int16_t *ubuf[2], const int16_t *vbuf[2], \ | ||
1888 | const int16_t *abuf[2], uint8_t *dest, int dstW, \ | ||
1889 | int yalpha, int uvalpha, int y) \ | ||
1890 | { \ | ||
1891 | name ## base ## _2_c_template(c, buf, ubuf, vbuf, abuf, \ | ||
1892 | dest, dstW, yalpha, uvalpha, y, fmt, hasAlpha); \ | ||
1893 | } | ||
1894 | |||
1895 | #define YUV2RGBWRAPPER(name, base, ext, fmt, hasAlpha) \ | ||
1896 | YUV2RGBWRAPPERX2(name, base, ext, fmt, hasAlpha) \ | ||
1897 | static void name ## ext ## _1_c(SwsInternal *c, const int16_t *buf0, \ | ||
1898 | const int16_t *ubuf[2], const int16_t *vbuf[2], \ | ||
1899 | const int16_t *abuf0, uint8_t *dest, int dstW, \ | ||
1900 | int uvalpha, int y) \ | ||
1901 | { \ | ||
1902 | name ## base ## _1_c_template(c, buf0, ubuf, vbuf, abuf0, dest, \ | ||
1903 | dstW, uvalpha, y, fmt, hasAlpha); \ | ||
1904 | } | ||
1905 | |||
1906 | #if CONFIG_SMALL | ||
1907 | YUV2RGBWRAPPER(yuv2rgb,, 32_1, AV_PIX_FMT_RGB32_1, CONFIG_SWSCALE_ALPHA && c->needAlpha) | ||
1908 | YUV2RGBWRAPPER(yuv2rgb,, 32, AV_PIX_FMT_RGB32, CONFIG_SWSCALE_ALPHA && c->needAlpha) | ||
1909 | #else | ||
1910 | #if CONFIG_SWSCALE_ALPHA | ||
1911 | ✗ | YUV2RGBWRAPPER(yuv2rgb,, a32_1, AV_PIX_FMT_RGB32_1, 1) | |
1912 | ✗ | YUV2RGBWRAPPER(yuv2rgb,, a32, AV_PIX_FMT_RGB32, 1) | |
1913 | #endif | ||
1914 | 62560 | YUV2RGBWRAPPER(yuv2rgb,, x32_1, AV_PIX_FMT_RGB32_1, 0) | |
1915 | 294864 | YUV2RGBWRAPPER(yuv2rgb,, x32, AV_PIX_FMT_RGB32, 0) | |
1916 | #endif | ||
1917 | 1411412 | YUV2RGBWRAPPER(yuv2, rgb, rgb24, AV_PIX_FMT_RGB24, 0) | |
1918 | 308148 | YUV2RGBWRAPPER(yuv2, rgb, bgr24, AV_PIX_FMT_BGR24, 0) | |
1919 | 267560 | YUV2RGBWRAPPER(yuv2rgb,, 16, AV_PIX_FMT_RGB565, 0) | |
1920 | 533560 | YUV2RGBWRAPPER(yuv2rgb,, 15, AV_PIX_FMT_RGB555, 0) | |
1921 | 47008 | YUV2RGBWRAPPER(yuv2rgb,, 12, AV_PIX_FMT_RGB444, 0) | |
1922 | 229200 | YUV2RGBWRAPPER(yuv2rgb,, 8, AV_PIX_FMT_RGB8, 0) | |
1923 | 64 | YUV2RGBWRAPPER(yuv2rgb,, 4, AV_PIX_FMT_RGB4, 0) | |
1924 | 30592 | YUV2RGBWRAPPER(yuv2rgb,, 4b, AV_PIX_FMT_RGB4_BYTE, 0) | |
1925 | 11520 | YUV2RGBWRAPPER(yuv2, rgb, x2rgb10, AV_PIX_FMT_X2RGB10, 0) | |
1926 | 11520 | YUV2RGBWRAPPER(yuv2, rgb, x2bgr10, AV_PIX_FMT_X2BGR10, 0) | |
1927 | |||
1928 | 308493732 | static av_always_inline void yuv2rgb_write_full(SwsInternal *c, | |
1929 | uint8_t *dest, int i, int Y, int A, int U, int V, | ||
1930 | int y, enum AVPixelFormat target, int hasAlpha, int err[4]) | ||
1931 | { | ||
1932 | int R, G, B; | ||
1933 |
4/4✓ Branch 0 taken 292160938 times.
✓ Branch 1 taken 16332794 times.
✓ Branch 2 taken 10700797 times.
✓ Branch 3 taken 281460141 times.
|
308493732 | int isrgb8 = target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8; |
1934 | |||
1935 | 308493732 | Y -= c->yuv2rgb_y_offset; | |
1936 | 308493732 | Y *= c->yuv2rgb_y_coeff; | |
1937 | 308493732 | Y += 1 << 21; | |
1938 | 308493732 | R = (unsigned)Y + V*(unsigned)c->yuv2rgb_v2r_coeff; | |
1939 | 308493732 | G = (unsigned)Y + V*(unsigned)c->yuv2rgb_v2g_coeff + U*(unsigned)c->yuv2rgb_u2g_coeff; | |
1940 | 308493732 | B = (unsigned)Y + U*(unsigned)c->yuv2rgb_u2b_coeff; | |
1941 |
2/2✓ Branch 0 taken 34701053 times.
✓ Branch 1 taken 273792679 times.
|
308493732 | if ((R | G | B) & 0xC0000000) { |
1942 | 34701053 | R = av_clip_uintp2(R, 30); | |
1943 | 34701053 | G = av_clip_uintp2(G, 30); | |
1944 | 34701053 | B = av_clip_uintp2(B, 30); | |
1945 | } | ||
1946 | |||
1947 |
9/10✓ Branch 0 taken 58432 times.
✓ Branch 1 taken 139728712 times.
✓ Branch 2 taken 58432 times.
✓ Branch 3 taken 58432 times.
✓ Branch 4 taken 46615556 times.
✓ Branch 5 taken 46938471 times.
✓ Branch 6 taken 15834656 times.
✓ Branch 7 taken 15834656 times.
✓ Branch 8 taken 43366385 times.
✗ Branch 9 not taken.
|
308493732 | switch(target) { |
1948 | 58432 | case AV_PIX_FMT_ARGB: | |
1949 |
2/2✓ Branch 0 taken 40000 times.
✓ Branch 1 taken 18432 times.
|
58432 | dest[0] = hasAlpha ? A : 255; |
1950 | 58432 | dest[1] = R >> 22; | |
1951 | 58432 | dest[2] = G >> 22; | |
1952 | 58432 | dest[3] = B >> 22; | |
1953 | 58432 | break; | |
1954 | 139728712 | case AV_PIX_FMT_RGB24: | |
1955 | 139728712 | dest[0] = R >> 22; | |
1956 | 139728712 | dest[1] = G >> 22; | |
1957 | 139728712 | dest[2] = B >> 22; | |
1958 | 139728712 | break; | |
1959 | 58432 | case AV_PIX_FMT_RGBA: | |
1960 | 58432 | dest[0] = R >> 22; | |
1961 | 58432 | dest[1] = G >> 22; | |
1962 | 58432 | dest[2] = B >> 22; | |
1963 |
2/2✓ Branch 0 taken 40000 times.
✓ Branch 1 taken 18432 times.
|
58432 | dest[3] = hasAlpha ? A : 255; |
1964 | 58432 | break; | |
1965 | 58432 | case AV_PIX_FMT_ABGR: | |
1966 |
2/2✓ Branch 0 taken 40000 times.
✓ Branch 1 taken 18432 times.
|
58432 | dest[0] = hasAlpha ? A : 255; |
1967 | 58432 | dest[1] = B >> 22; | |
1968 | 58432 | dest[2] = G >> 22; | |
1969 | 58432 | dest[3] = R >> 22; | |
1970 | 58432 | break; | |
1971 | 46615556 | case AV_PIX_FMT_BGR24: | |
1972 | 46615556 | dest[0] = B >> 22; | |
1973 | 46615556 | dest[1] = G >> 22; | |
1974 | 46615556 | dest[2] = R >> 22; | |
1975 | 46615556 | break; | |
1976 | 46938471 | case AV_PIX_FMT_BGRA: | |
1977 | 46938471 | dest[0] = B >> 22; | |
1978 | 46938471 | dest[1] = G >> 22; | |
1979 | 46938471 | dest[2] = R >> 22; | |
1980 |
2/2✓ Branch 0 taken 3932007 times.
✓ Branch 1 taken 43006464 times.
|
46938471 | dest[3] = hasAlpha ? A : 255; |
1981 | 46938471 | break; | |
1982 | 15834656 | case AV_PIX_FMT_X2RGB10LE: | |
1983 | 15834656 | R >>= 20; | |
1984 | 15834656 | G >>= 20; | |
1985 | 15834656 | B >>= 20; | |
1986 | 15834656 | AV_WL32(dest, (3U << 30) + (R << 20) + (G << 10) + B); | |
1987 | 15834656 | break; | |
1988 | 15834656 | case AV_PIX_FMT_X2BGR10LE: | |
1989 | 15834656 | R >>= 20; | |
1990 | 15834656 | G >>= 20; | |
1991 | 15834656 | B >>= 20; | |
1992 | 15834656 | AV_WL32(dest, (3U << 30) + (B << 20) + (G << 10) + R); | |
1993 | 15834656 | break; | |
1994 | 43366385 | case AV_PIX_FMT_BGR4_BYTE: | |
1995 | case AV_PIX_FMT_RGB4_BYTE: | ||
1996 | case AV_PIX_FMT_BGR8: | ||
1997 | case AV_PIX_FMT_RGB8: | ||
1998 | { | ||
1999 | int r,g,b; | ||
2000 | |||
2001 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 43366385 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
43366385 | switch (c->opts.dither) { |
2002 | ✗ | case SWS_DITHER_NONE: | |
2003 | ✗ | if (isrgb8) { | |
2004 | ✗ | r = av_clip_uintp2(R >> 27, 3); | |
2005 | ✗ | g = av_clip_uintp2(G >> 27, 3); | |
2006 | ✗ | b = av_clip_uintp2(B >> 28, 2); | |
2007 | } else { | ||
2008 | ✗ | r = av_clip_uintp2(R >> 29, 1); | |
2009 | ✗ | g = av_clip_uintp2(G >> 28, 2); | |
2010 | ✗ | b = av_clip_uintp2(B >> 29, 1); | |
2011 | } | ||
2012 | ✗ | break; | |
2013 | 43366385 | default: | |
2014 | case SWS_DITHER_AUTO: | ||
2015 | case SWS_DITHER_ED: | ||
2016 | 43366385 | R >>= 22; | |
2017 | 43366385 | G >>= 22; | |
2018 | 43366385 | B >>= 22; | |
2019 | 43366385 | R += (7*err[0] + 1*c->dither_error[0][i] + 5*c->dither_error[0][i+1] + 3*c->dither_error[0][i+2])>>4; | |
2020 | 43366385 | G += (7*err[1] + 1*c->dither_error[1][i] + 5*c->dither_error[1][i+1] + 3*c->dither_error[1][i+2])>>4; | |
2021 | 43366385 | B += (7*err[2] + 1*c->dither_error[2][i] + 5*c->dither_error[2][i+1] + 3*c->dither_error[2][i+2])>>4; | |
2022 | 43366385 | c->dither_error[0][i] = err[0]; | |
2023 | 43366385 | c->dither_error[1][i] = err[1]; | |
2024 | 43366385 | c->dither_error[2][i] = err[2]; | |
2025 |
2/2✓ Branch 0 taken 27033591 times.
✓ Branch 1 taken 16332794 times.
|
43366385 | r = R >> (isrgb8 ? 5 : 7); |
2026 |
2/2✓ Branch 0 taken 27033591 times.
✓ Branch 1 taken 16332794 times.
|
43366385 | g = G >> (isrgb8 ? 5 : 6); |
2027 |
2/2✓ Branch 0 taken 27033591 times.
✓ Branch 1 taken 16332794 times.
|
43366385 | b = B >> (isrgb8 ? 6 : 7); |
2028 |
2/2✓ Branch 0 taken 27033591 times.
✓ Branch 1 taken 16332794 times.
|
43366385 | r = av_clip(r, 0, isrgb8 ? 7 : 1); |
2029 |
2/2✓ Branch 0 taken 27033591 times.
✓ Branch 1 taken 16332794 times.
|
43366385 | g = av_clip(g, 0, isrgb8 ? 7 : 3); |
2030 |
2/2✓ Branch 0 taken 27033591 times.
✓ Branch 1 taken 16332794 times.
|
43366385 | b = av_clip(b, 0, isrgb8 ? 3 : 1); |
2031 |
2/2✓ Branch 0 taken 27033591 times.
✓ Branch 1 taken 16332794 times.
|
43366385 | err[0] = R - r*(isrgb8 ? 36 : 255); |
2032 |
2/2✓ Branch 0 taken 27033591 times.
✓ Branch 1 taken 16332794 times.
|
43366385 | err[1] = G - g*(isrgb8 ? 36 : 85); |
2033 |
2/2✓ Branch 0 taken 27033591 times.
✓ Branch 1 taken 16332794 times.
|
43366385 | err[2] = B - b*(isrgb8 ? 85 : 255); |
2034 | 43366385 | break; | |
2035 | ✗ | case SWS_DITHER_A_DITHER: | |
2036 | ✗ | if (isrgb8) { | |
2037 | /* see http://pippin.gimp.org/a_dither/ for details/origin */ | ||
2038 | #define A_DITHER(u,v) (((((u)+((v)*236))*119)&0xff)) | ||
2039 | ✗ | r = (((R >> 19) + A_DITHER(i,y) -96)>>8); | |
2040 | ✗ | g = (((G >> 19) + A_DITHER(i + 17,y) - 96)>>8); | |
2041 | ✗ | b = (((B >> 20) + A_DITHER(i + 17*2,y) -96)>>8); | |
2042 | ✗ | r = av_clip_uintp2(r, 3); | |
2043 | ✗ | g = av_clip_uintp2(g, 3); | |
2044 | ✗ | b = av_clip_uintp2(b, 2); | |
2045 | } else { | ||
2046 | ✗ | r = (((R >> 21) + A_DITHER(i,y)-256)>>8); | |
2047 | ✗ | g = (((G >> 19) + A_DITHER(i + 17,y)-256)>>8); | |
2048 | ✗ | b = (((B >> 21) + A_DITHER(i + 17*2,y)-256)>>8); | |
2049 | ✗ | r = av_clip_uintp2(r, 1); | |
2050 | ✗ | g = av_clip_uintp2(g, 2); | |
2051 | ✗ | b = av_clip_uintp2(b, 1); | |
2052 | } | ||
2053 | ✗ | break; | |
2054 | ✗ | case SWS_DITHER_X_DITHER: | |
2055 | ✗ | if (isrgb8) { | |
2056 | /* see http://pippin.gimp.org/a_dither/ for details/origin */ | ||
2057 | #define X_DITHER(u,v) (((((u)^((v)*237))*181)&0x1ff)/2) | ||
2058 | ✗ | r = (((R >> 19) + X_DITHER(i,y) - 96)>>8); | |
2059 | ✗ | g = (((G >> 19) + X_DITHER(i + 17,y) - 96)>>8); | |
2060 | ✗ | b = (((B >> 20) + X_DITHER(i + 17*2,y) - 96)>>8); | |
2061 | ✗ | r = av_clip_uintp2(r, 3); | |
2062 | ✗ | g = av_clip_uintp2(g, 3); | |
2063 | ✗ | b = av_clip_uintp2(b, 2); | |
2064 | } else { | ||
2065 | ✗ | r = (((R >> 21) + X_DITHER(i,y)-256)>>8); | |
2066 | ✗ | g = (((G >> 19) + X_DITHER(i + 17,y)-256)>>8); | |
2067 | ✗ | b = (((B >> 21) + X_DITHER(i + 17*2,y)-256)>>8); | |
2068 | ✗ | r = av_clip_uintp2(r, 1); | |
2069 | ✗ | g = av_clip_uintp2(g, 2); | |
2070 | ✗ | b = av_clip_uintp2(b, 1); | |
2071 | } | ||
2072 | |||
2073 | ✗ | break; | |
2074 | } | ||
2075 | |||
2076 |
2/2✓ Branch 0 taken 8166397 times.
✓ Branch 1 taken 35199988 times.
|
43366385 | if(target == AV_PIX_FMT_BGR4_BYTE) { |
2077 | 8166397 | dest[0] = r + 2*g + 8*b; | |
2078 |
2/2✓ Branch 0 taken 8166397 times.
✓ Branch 1 taken 27033591 times.
|
35199988 | } else if(target == AV_PIX_FMT_RGB4_BYTE) { |
2079 | 8166397 | dest[0] = b + 2*g + 8*r; | |
2080 |
2/2✓ Branch 0 taken 16332794 times.
✓ Branch 1 taken 10700797 times.
|
27033591 | } else if(target == AV_PIX_FMT_BGR8) { |
2081 | 16332794 | dest[0] = r + 8*g + 64*b; | |
2082 |
1/2✓ Branch 0 taken 10700797 times.
✗ Branch 1 not taken.
|
10700797 | } else if(target == AV_PIX_FMT_RGB8) { |
2083 | 10700797 | dest[0] = b + 4*g + 32*r; | |
2084 | } else | ||
2085 | av_assert2(0); | ||
2086 | 43366385 | break;} | |
2087 | } | ||
2088 | 308493732 | } | |
2089 | |||
2090 | static av_always_inline void | ||
2091 | 10535 | yuv2rgb_full_X_c_template(SwsInternal *c, const int16_t *lumFilter, | |
2092 | const int16_t **lumSrc, int lumFilterSize, | ||
2093 | const int16_t *chrFilter, const int16_t **chrUSrc, | ||
2094 | const int16_t **chrVSrc, int chrFilterSize, | ||
2095 | const int16_t **alpSrc, uint8_t *dest, | ||
2096 | int dstW, int y, enum AVPixelFormat target, int hasAlpha) | ||
2097 | { | ||
2098 | int i; | ||
2099 |
4/4✓ Branch 0 taken 8823 times.
✓ Branch 1 taken 1712 times.
✓ Branch 2 taken 722 times.
✓ Branch 3 taken 8101 times.
|
10535 | int step = (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) ? 3 : 4; |
2100 | 10535 | int err[4] = {0}; | |
2101 | 10535 | int A = 0; //init to silence warning | |
2102 | |||
2103 |
4/4✓ Branch 0 taken 10435 times.
✓ Branch 1 taken 100 times.
✓ Branch 2 taken 10335 times.
✓ Branch 3 taken 100 times.
|
10535 | if( target == AV_PIX_FMT_BGR4_BYTE || target == AV_PIX_FMT_RGB4_BYTE |
2104 |
4/4✓ Branch 0 taken 10135 times.
✓ Branch 1 taken 200 times.
✓ Branch 2 taken 100 times.
✓ Branch 3 taken 10035 times.
|
10335 | || target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8) |
2105 | 500 | step = 1; | |
2106 | |||
2107 |
2/2✓ Branch 0 taken 4865275 times.
✓ Branch 1 taken 10535 times.
|
4875810 | for (i = 0; i < dstW; i++) { |
2108 | int j; | ||
2109 | 4865275 | int Y = 1<<9; | |
2110 | 4865275 | int U = (1<<9)-(128 << 19); | |
2111 | 4865275 | int V = (1<<9)-(128 << 19); | |
2112 | |||
2113 |
2/2✓ Branch 0 taken 21139196 times.
✓ Branch 1 taken 4865275 times.
|
26004471 | for (j = 0; j < lumFilterSize; j++) { |
2114 | 21139196 | Y += lumSrc[j][i] * lumFilter[j]; | |
2115 | } | ||
2116 |
2/2✓ Branch 0 taken 22598900 times.
✓ Branch 1 taken 4865275 times.
|
27464175 | for (j = 0; j < chrFilterSize; j++) { |
2117 | 22598900 | U += chrUSrc[j][i] * chrFilter[j]; | |
2118 | 22598900 | V += chrVSrc[j][i] * chrFilter[j]; | |
2119 | } | ||
2120 | 4865275 | Y >>= 10; | |
2121 | 4865275 | U >>= 10; | |
2122 | 4865275 | V >>= 10; | |
2123 |
2/2✓ Branch 0 taken 4052007 times.
✓ Branch 1 taken 813268 times.
|
4865275 | if (hasAlpha) { |
2124 | 4052007 | A = 1 << 18; | |
2125 |
2/2✓ Branch 0 taken 17488028 times.
✓ Branch 1 taken 4052007 times.
|
21540035 | for (j = 0; j < lumFilterSize; j++) { |
2126 | 17488028 | A += alpSrc[j][i] * lumFilter[j]; | |
2127 | } | ||
2128 | 4052007 | A >>= 19; | |
2129 |
1/2✓ Branch 0 taken 4052007 times.
✗ Branch 1 not taken.
|
4052007 | if (A & 0x100) |
2130 | 4052007 | A = av_clip_uint8(A); | |
2131 | } | ||
2132 | 4865275 | yuv2rgb_write_full(c, dest, i, Y, A, U, V, y, target, hasAlpha, err); | |
2133 | 4865275 | dest += step; | |
2134 | } | ||
2135 | 10535 | c->dither_error[0][i] = err[0]; | |
2136 | 10535 | c->dither_error[1][i] = err[1]; | |
2137 | 10535 | c->dither_error[2][i] = err[2]; | |
2138 | 10535 | } | |
2139 | |||
2140 | static av_always_inline void | ||
2141 | ✗ | yuv2rgb_full_2_c_template(SwsInternal *c, const int16_t *buf[2], | |
2142 | const int16_t *ubuf[2], const int16_t *vbuf[2], | ||
2143 | const int16_t *abuf[2], uint8_t *dest, int dstW, | ||
2144 | int yalpha, int uvalpha, int y, | ||
2145 | enum AVPixelFormat target, int hasAlpha) | ||
2146 | { | ||
2147 | ✗ | const int16_t *buf0 = buf[0], *buf1 = buf[1], | |
2148 | ✗ | *ubuf0 = ubuf[0], *ubuf1 = ubuf[1], | |
2149 | ✗ | *vbuf0 = vbuf[0], *vbuf1 = vbuf[1], | |
2150 | ✗ | *abuf0 = hasAlpha ? abuf[0] : NULL, | |
2151 | ✗ | *abuf1 = hasAlpha ? abuf[1] : NULL; | |
2152 | ✗ | int yalpha1 = 4096 - yalpha; | |
2153 | ✗ | int uvalpha1 = 4096 - uvalpha; | |
2154 | int i; | ||
2155 | ✗ | int step = (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) ? 3 : 4; | |
2156 | ✗ | int err[4] = {0}; | |
2157 | ✗ | int A = 0; // init to silcene warning | |
2158 | |||
2159 | av_assert2(yalpha <= 4096U); | ||
2160 | av_assert2(uvalpha <= 4096U); | ||
2161 | |||
2162 | ✗ | if( target == AV_PIX_FMT_BGR4_BYTE || target == AV_PIX_FMT_RGB4_BYTE | |
2163 | ✗ | || target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8) | |
2164 | ✗ | step = 1; | |
2165 | |||
2166 | ✗ | for (i = 0; i < dstW; i++) { | |
2167 | ✗ | int Y = ( buf0[i] * yalpha1 + buf1[i] * yalpha ) >> 10; //FIXME rounding | |
2168 | ✗ | int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha-(128 << 19)) >> 10; | |
2169 | ✗ | int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha-(128 << 19)) >> 10; | |
2170 | |||
2171 | ✗ | if (hasAlpha) { | |
2172 | ✗ | A = (abuf0[i] * yalpha1 + abuf1[i] * yalpha + (1<<18)) >> 19; | |
2173 | ✗ | if (A & 0x100) | |
2174 | ✗ | A = av_clip_uint8(A); | |
2175 | } | ||
2176 | |||
2177 | ✗ | yuv2rgb_write_full(c, dest, i, Y, A, U, V, y, target, hasAlpha, err); | |
2178 | ✗ | dest += step; | |
2179 | } | ||
2180 | ✗ | c->dither_error[0][i] = err[0]; | |
2181 | ✗ | c->dither_error[1][i] = err[1]; | |
2182 | ✗ | c->dither_error[2][i] = err[2]; | |
2183 | ✗ | } | |
2184 | |||
2185 | static av_always_inline void | ||
2186 | 947661 | yuv2rgb_full_1_c_template(SwsInternal *c, const int16_t *buf0, | |
2187 | const int16_t *ubuf[2], const int16_t *vbuf[2], | ||
2188 | const int16_t *abuf0, uint8_t *dest, int dstW, | ||
2189 | int uvalpha, int y, enum AVPixelFormat target, | ||
2190 | int hasAlpha) | ||
2191 | { | ||
2192 | 947661 | const int16_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0]; | |
2193 | int i; | ||
2194 |
4/4✓ Branch 0 taken 549449 times.
✓ Branch 1 taken 398212 times.
✓ Branch 2 taken 134824 times.
✓ Branch 3 taken 414625 times.
|
947661 | int step = (target == AV_PIX_FMT_RGB24 || target == AV_PIX_FMT_BGR24) ? 3 : 4; |
2195 | 947661 | int err[4] = {0}; | |
2196 | |||
2197 |
4/4✓ Branch 0 taken 910120 times.
✓ Branch 1 taken 37541 times.
✓ Branch 2 taken 872579 times.
✓ Branch 3 taken 37541 times.
|
947661 | if( target == AV_PIX_FMT_BGR4_BYTE || target == AV_PIX_FMT_RGB4_BYTE |
2198 |
4/4✓ Branch 0 taken 797497 times.
✓ Branch 1 taken 75082 times.
✓ Branch 2 taken 44741 times.
✓ Branch 3 taken 752756 times.
|
872579 | || target == AV_PIX_FMT_BGR8 || target == AV_PIX_FMT_RGB8) |
2199 | 194905 | step = 1; | |
2200 | |||
2201 |
1/2✓ Branch 0 taken 947661 times.
✗ Branch 1 not taken.
|
947661 | if (uvalpha == 0) { |
2202 | 947661 | int A = 0; //init to silence warning | |
2203 |
2/2✓ Branch 0 taken 303628457 times.
✓ Branch 1 taken 947661 times.
|
304576118 | for (i = 0; i < dstW; i++) { |
2204 | 303628457 | int Y = buf0[i] * 4; | |
2205 | 303628457 | int U = (ubuf0[i] - (128<<7)) * 4; | |
2206 | 303628457 | int V = (vbuf0[i] - (128<<7)) * 4; | |
2207 | |||
2208 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 303628457 times.
|
303628457 | if (hasAlpha) { |
2209 | ✗ | A = (abuf0[i] + 64) >> 7; | |
2210 | ✗ | if (A & 0x100) | |
2211 | ✗ | A = av_clip_uint8(A); | |
2212 | } | ||
2213 | |||
2214 | 303628457 | yuv2rgb_write_full(c, dest, i, Y, A, U, V, y, target, hasAlpha, err); | |
2215 | 303628457 | dest += step; | |
2216 | } | ||
2217 | } else { | ||
2218 | ✗ | const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1]; | |
2219 | ✗ | int A = 0; //init to silence warning | |
2220 | ✗ | int uvalpha1 = 4096 - uvalpha; | |
2221 | av_assert2(uvalpha <= 4096U); | ||
2222 | |||
2223 | ✗ | for (i = 0; i < dstW; i++) { | |
2224 | ✗ | int Y = buf0[i] * 4; | |
2225 | ✗ | int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha - (128 << 19)) >> 10; | |
2226 | ✗ | int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha - (128 << 19)) >> 10; | |
2227 | |||
2228 | ✗ | if (hasAlpha) { | |
2229 | ✗ | A = (abuf0[i] + 64) >> 7; | |
2230 | ✗ | if (A & 0x100) | |
2231 | ✗ | A = av_clip_uint8(A); | |
2232 | } | ||
2233 | |||
2234 | ✗ | yuv2rgb_write_full(c, dest, i, Y, A, U, V, y, target, hasAlpha, err); | |
2235 | ✗ | dest += step; | |
2236 | } | ||
2237 | } | ||
2238 | |||
2239 | 947661 | c->dither_error[0][i] = err[0]; | |
2240 | 947661 | c->dither_error[1][i] = err[1]; | |
2241 | 947661 | c->dither_error[2][i] = err[2]; | |
2242 | 947661 | } | |
2243 | |||
2244 | #if CONFIG_SMALL | ||
2245 | YUV2RGBWRAPPER(yuv2, rgb_full, bgra32_full, AV_PIX_FMT_BGRA, CONFIG_SWSCALE_ALPHA && c->needAlpha) | ||
2246 | YUV2RGBWRAPPER(yuv2, rgb_full, abgr32_full, AV_PIX_FMT_ABGR, CONFIG_SWSCALE_ALPHA && c->needAlpha) | ||
2247 | YUV2RGBWRAPPER(yuv2, rgb_full, rgba32_full, AV_PIX_FMT_RGBA, CONFIG_SWSCALE_ALPHA && c->needAlpha) | ||
2248 | YUV2RGBWRAPPER(yuv2, rgb_full, argb32_full, AV_PIX_FMT_ARGB, CONFIG_SWSCALE_ALPHA && c->needAlpha) | ||
2249 | #else | ||
2250 | #if CONFIG_SWSCALE_ALPHA | ||
2251 | 13602 | YUV2RGBWRAPPER(yuv2, rgb_full, bgra32_full, AV_PIX_FMT_BGRA, 1) | |
2252 | 400 | YUV2RGBWRAPPER(yuv2, rgb_full, abgr32_full, AV_PIX_FMT_ABGR, 1) | |
2253 | 400 | YUV2RGBWRAPPER(yuv2, rgb_full, rgba32_full, AV_PIX_FMT_RGBA, 1) | |
2254 | 400 | YUV2RGBWRAPPER(yuv2, rgb_full, argb32_full, AV_PIX_FMT_ARGB, 1) | |
2255 | #endif | ||
2256 | 258576 | YUV2RGBWRAPPER(yuv2, rgb_full, bgrx32_full, AV_PIX_FMT_BGRA, 0) | |
2257 | 384 | YUV2RGBWRAPPER(yuv2, rgb_full, xbgr32_full, AV_PIX_FMT_ABGR, 0) | |
2258 | 384 | YUV2RGBWRAPPER(yuv2, rgb_full, rgbx32_full, AV_PIX_FMT_RGBA, 0) | |
2259 | 384 | YUV2RGBWRAPPER(yuv2, rgb_full, xrgb32_full, AV_PIX_FMT_ARGB, 0) | |
2260 | #endif | ||
2261 | 271092 | YUV2RGBWRAPPER(yuv2, rgb_full, bgr24_full, AV_PIX_FMT_BGR24, 0) | |
2262 | 799848 | YUV2RGBWRAPPER(yuv2, rgb_full, rgb24_full, AV_PIX_FMT_RGB24, 0) | |
2263 | |||
2264 | 75282 | YUV2RGBWRAPPER(yuv2, rgb_full, bgr4_byte_full, AV_PIX_FMT_BGR4_BYTE, 0) | |
2265 | 75282 | YUV2RGBWRAPPER(yuv2, rgb_full, rgb4_byte_full, AV_PIX_FMT_RGB4_BYTE, 0) | |
2266 | 150564 | YUV2RGBWRAPPER(yuv2, rgb_full, bgr8_full, AV_PIX_FMT_BGR8, 0) | |
2267 | 89682 | YUV2RGBWRAPPER(yuv2, rgb_full, rgb8_full, AV_PIX_FMT_RGB8, 0) | |
2268 | |||
2269 | 90056 | YUV2RGBWRAPPER(yuv2, rgb_full, x2rgb10_full, AV_PIX_FMT_X2RGB10LE, 0) | |
2270 | 90056 | YUV2RGBWRAPPER(yuv2, rgb_full, x2bgr10_full, AV_PIX_FMT_X2BGR10LE, 0) | |
2271 | |||
2272 | static void | ||
2273 | 2410536 | yuv2gbrp_full_X_c(SwsInternal *c, const int16_t *lumFilter, | |
2274 | const int16_t **lumSrc, int lumFilterSize, | ||
2275 | const int16_t *chrFilter, const int16_t **chrUSrc, | ||
2276 | const int16_t **chrVSrc, int chrFilterSize, | ||
2277 | const int16_t **alpSrc, uint8_t **dest, | ||
2278 | int dstW, int y) | ||
2279 | { | ||
2280 | 2410536 | const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(c->opts.dst_format); | |
2281 | int i; | ||
2282 |
4/4✓ Branch 0 taken 96106 times.
✓ Branch 1 taken 2314430 times.
✓ Branch 2 taken 1060 times.
✓ Branch 3 taken 95046 times.
|
2410536 | int hasAlpha = (desc->flags & AV_PIX_FMT_FLAG_ALPHA) && alpSrc; |
2283 | 2410536 | uint16_t **dest16 = (uint16_t**)dest; | |
2284 | 2410536 | int SH = 22 + 8 - desc->comp[0].depth; | |
2285 | 2410536 | int A = 0; // init to silence warning | |
2286 | |||
2287 |
2/2✓ Branch 0 taken 847005456 times.
✓ Branch 1 taken 2410536 times.
|
849415992 | for (i = 0; i < dstW; i++) { |
2288 | int j; | ||
2289 | 847005456 | int Y = 1 << 9; | |
2290 | 847005456 | int U = (1 << 9) - (128 << 19); | |
2291 | 847005456 | int V = (1 << 9) - (128 << 19); | |
2292 | int R, G, B; | ||
2293 | |||
2294 |
2/2✓ Branch 0 taken 851651056 times.
✓ Branch 1 taken 847005456 times.
|
1698656512 | for (j = 0; j < lumFilterSize; j++) |
2295 | 851651056 | Y += lumSrc[j][i] * lumFilter[j]; | |
2296 | |||
2297 |
2/2✓ Branch 0 taken 1691087008 times.
✓ Branch 1 taken 847005456 times.
|
2538092464 | for (j = 0; j < chrFilterSize; j++) { |
2298 | 1691087008 | U += chrUSrc[j][i] * chrFilter[j]; | |
2299 | 1691087008 | V += chrVSrc[j][i] * chrFilter[j]; | |
2300 | } | ||
2301 | |||
2302 | 847005456 | Y >>= 10; | |
2303 | 847005456 | U >>= 10; | |
2304 | 847005456 | V >>= 10; | |
2305 | |||
2306 |
2/2✓ Branch 0 taken 204320 times.
✓ Branch 1 taken 846801136 times.
|
847005456 | if (hasAlpha) { |
2307 | 204320 | A = 1 << 18; | |
2308 | |||
2309 |
2/2✓ Branch 0 taken 2146320 times.
✓ Branch 1 taken 204320 times.
|
2350640 | for (j = 0; j < lumFilterSize; j++) |
2310 | 2146320 | A += alpSrc[j][i] * lumFilter[j]; | |
2311 | |||
2312 |
2/2✓ Branch 0 taken 175125 times.
✓ Branch 1 taken 29195 times.
|
204320 | if (A & 0xF8000000) |
2313 | 175125 | A = av_clip_uintp2(A, 27); | |
2314 | } | ||
2315 | |||
2316 | 847005456 | Y -= c->yuv2rgb_y_offset; | |
2317 | 847005456 | Y *= c->yuv2rgb_y_coeff; | |
2318 | 847005456 | Y += 1 << (SH-1); | |
2319 | 847005456 | R = Y + V * c->yuv2rgb_v2r_coeff; | |
2320 | 847005456 | G = Y + V * c->yuv2rgb_v2g_coeff + U * c->yuv2rgb_u2g_coeff; | |
2321 | 847005456 | B = Y + U * c->yuv2rgb_u2b_coeff; | |
2322 | |||
2323 |
2/2✓ Branch 0 taken 262059137 times.
✓ Branch 1 taken 584946319 times.
|
847005456 | if ((R | G | B) & 0xC0000000) { |
2324 | 262059137 | R = av_clip_uintp2(R, 30); | |
2325 | 262059137 | G = av_clip_uintp2(G, 30); | |
2326 | 262059137 | B = av_clip_uintp2(B, 30); | |
2327 | } | ||
2328 | |||
2329 |
2/2✓ Branch 0 taken 574643408 times.
✓ Branch 1 taken 272362048 times.
|
847005456 | if (SH != 22) { |
2330 | 574643408 | dest16[0][i] = G >> SH; | |
2331 | 574643408 | dest16[1][i] = B >> SH; | |
2332 | 574643408 | dest16[2][i] = R >> SH; | |
2333 |
2/2✓ Branch 0 taken 171456 times.
✓ Branch 1 taken 574471952 times.
|
574643408 | if (hasAlpha) |
2334 | 171456 | dest16[3][i] = A >> (SH - 3); | |
2335 | } else { | ||
2336 | 272362048 | dest[0][i] = G >> 22; | |
2337 | 272362048 | dest[1][i] = B >> 22; | |
2338 | 272362048 | dest[2][i] = R >> 22; | |
2339 |
2/2✓ Branch 0 taken 32864 times.
✓ Branch 1 taken 272329184 times.
|
272362048 | if (hasAlpha) |
2340 | 32864 | dest[3][i] = A >> 19; | |
2341 | } | ||
2342 | } | ||
2343 |
4/4✓ Branch 0 taken 1636620 times.
✓ Branch 1 taken 773916 times.
✓ Branch 3 taken 131308 times.
✓ Branch 4 taken 1505312 times.
|
2410536 | if (SH != 22 && (!isBE(c->opts.dst_format)) != (!HAVE_BIGENDIAN)) { |
2344 |
2/2✓ Branch 0 taken 46039136 times.
✓ Branch 1 taken 131308 times.
|
46170444 | for (i = 0; i < dstW; i++) { |
2345 | 46039136 | dest16[0][i] = av_bswap16(dest16[0][i]); | |
2346 | 46039136 | dest16[1][i] = av_bswap16(dest16[1][i]); | |
2347 | 46039136 | dest16[2][i] = av_bswap16(dest16[2][i]); | |
2348 |
2/2✓ Branch 0 taken 85728 times.
✓ Branch 1 taken 45953408 times.
|
46039136 | if (hasAlpha) |
2349 | 85728 | dest16[3][i] = av_bswap16(dest16[3][i]); | |
2350 | } | ||
2351 | } | ||
2352 | 2410536 | } | |
2353 | |||
2354 | static void | ||
2355 | 287324 | yuv2gbrp16_full_X_c(SwsInternal *c, const int16_t *lumFilter, | |
2356 | const int16_t **lumSrcx, int lumFilterSize, | ||
2357 | const int16_t *chrFilter, const int16_t **chrUSrcx, | ||
2358 | const int16_t **chrVSrcx, int chrFilterSize, | ||
2359 | const int16_t **alpSrcx, uint8_t **dest, | ||
2360 | int dstW, int y) | ||
2361 | { | ||
2362 | 287324 | const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(c->opts.dst_format); | |
2363 | int i; | ||
2364 |
4/4✓ Branch 0 taken 20110 times.
✓ Branch 1 taken 267214 times.
✓ Branch 2 taken 524 times.
✓ Branch 3 taken 19586 times.
|
287324 | int hasAlpha = (desc->flags & AV_PIX_FMT_FLAG_ALPHA) && alpSrcx; |
2365 | 287324 | uint16_t **dest16 = (uint16_t**)dest; | |
2366 | 287324 | const int32_t **lumSrc = (const int32_t**)lumSrcx; | |
2367 | 287324 | const int32_t **chrUSrc = (const int32_t**)chrUSrcx; | |
2368 | 287324 | const int32_t **chrVSrc = (const int32_t**)chrVSrcx; | |
2369 | 287324 | const int32_t **alpSrc = (const int32_t**)alpSrcx; | |
2370 | |||
2371 |
2/2✓ Branch 0 taken 100925504 times.
✓ Branch 1 taken 287324 times.
|
101212828 | for (i = 0; i < dstW; i++) { |
2372 | int j; | ||
2373 | 100925504 | int Y = -0x40000000; | |
2374 | 100925504 | int U = -(128 << 23); | |
2375 | 100925504 | int V = -(128 << 23); | |
2376 | int R, G, B, A; | ||
2377 | |||
2378 |
2/2✓ Branch 0 taken 102127104 times.
✓ Branch 1 taken 100925504 times.
|
203052608 | for (j = 0; j < lumFilterSize; j++) |
2379 | 102127104 | Y += lumSrc[j][i] * (unsigned)lumFilter[j]; | |
2380 | |||
2381 |
2/2✓ Branch 0 taken 175117824 times.
✓ Branch 1 taken 100925504 times.
|
276043328 | for (j = 0; j < chrFilterSize; j++) { |
2382 | 175117824 | U += chrUSrc[j][i] * (unsigned)chrFilter[j]; | |
2383 | 175117824 | V += chrVSrc[j][i] * (unsigned)chrFilter[j]; | |
2384 | } | ||
2385 | |||
2386 | 100925504 | Y >>= 14; | |
2387 | 100925504 | Y += 0x10000; | |
2388 | 100925504 | U >>= 14; | |
2389 | 100925504 | V >>= 14; | |
2390 | |||
2391 |
2/2✓ Branch 0 taken 78688 times.
✓ Branch 1 taken 100846816 times.
|
100925504 | if (hasAlpha) { |
2392 | 78688 | A = -0x40000000; | |
2393 | |||
2394 |
2/2✓ Branch 0 taken 679488 times.
✓ Branch 1 taken 78688 times.
|
758176 | for (j = 0; j < lumFilterSize; j++) |
2395 | 679488 | A += alpSrc[j][i] * (unsigned)lumFilter[j]; | |
2396 | |||
2397 | 78688 | A >>= 1; | |
2398 | 78688 | A += 0x20002000; | |
2399 | } | ||
2400 | |||
2401 | 100925504 | Y -= c->yuv2rgb_y_offset; | |
2402 | 100925504 | Y *= c->yuv2rgb_y_coeff; | |
2403 | 100925504 | Y += (1 << 13) - (1 << 29); | |
2404 | 100925504 | R = V * c->yuv2rgb_v2r_coeff; | |
2405 | 100925504 | G = V * c->yuv2rgb_v2g_coeff + U * c->yuv2rgb_u2g_coeff; | |
2406 | 100925504 | B = U * c->yuv2rgb_u2b_coeff; | |
2407 | |||
2408 | 100925504 | dest16[2][i] = av_clip_uintp2(((Y + R) >> 14) + (1<<15), 16); | |
2409 | 100925504 | dest16[0][i] = av_clip_uintp2(((Y + G) >> 14) + (1<<15), 16); | |
2410 | 100925504 | dest16[1][i] = av_clip_uintp2(((Y + B) >> 14) + (1<<15), 16); | |
2411 | |||
2412 |
2/2✓ Branch 0 taken 78688 times.
✓ Branch 1 taken 100846816 times.
|
100925504 | if (hasAlpha) |
2413 | 78688 | dest16[3][i] = av_clip_uintp2(A, 30) >> 14; | |
2414 | } | ||
2415 |
2/2✓ Branch 1 taken 87104 times.
✓ Branch 2 taken 200220 times.
|
287324 | if ((!isBE(c->opts.dst_format)) != (!HAVE_BIGENDIAN)) { |
2416 |
2/2✓ Branch 0 taken 30504448 times.
✓ Branch 1 taken 87104 times.
|
30591552 | for (i = 0; i < dstW; i++) { |
2417 | 30504448 | dest16[0][i] = av_bswap16(dest16[0][i]); | |
2418 | 30504448 | dest16[1][i] = av_bswap16(dest16[1][i]); | |
2419 | 30504448 | dest16[2][i] = av_bswap16(dest16[2][i]); | |
2420 |
2/2✓ Branch 0 taken 45824 times.
✓ Branch 1 taken 30458624 times.
|
30504448 | if (hasAlpha) |
2421 | 45824 | dest16[3][i] = av_bswap16(dest16[3][i]); | |
2422 | } | ||
2423 | } | ||
2424 | 287324 | } | |
2425 | |||
2426 | static void | ||
2427 | 61228 | yuv2gbrpf32_full_X_c(SwsInternal *c, const int16_t *lumFilter, | |
2428 | const int16_t **lumSrcx, int lumFilterSize, | ||
2429 | const int16_t *chrFilter, const int16_t **chrUSrcx, | ||
2430 | const int16_t **chrVSrcx, int chrFilterSize, | ||
2431 | const int16_t **alpSrcx, uint8_t **dest, | ||
2432 | int dstW, int y) | ||
2433 | { | ||
2434 | 61228 | const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(c->opts.dst_format); | |
2435 | int i; | ||
2436 |
4/4✓ Branch 0 taken 26840 times.
✓ Branch 1 taken 34388 times.
✓ Branch 2 taken 344 times.
✓ Branch 3 taken 26496 times.
|
61228 | int hasAlpha = (desc->flags & AV_PIX_FMT_FLAG_ALPHA) && alpSrcx; |
2437 | 61228 | uint32_t **dest32 = (uint32_t**)dest; | |
2438 | 61228 | const int32_t **lumSrc = (const int32_t**)lumSrcx; | |
2439 | 61228 | const int32_t **chrUSrc = (const int32_t**)chrUSrcx; | |
2440 | 61228 | const int32_t **chrVSrc = (const int32_t**)chrVSrcx; | |
2441 | 61228 | const int32_t **alpSrc = (const int32_t**)alpSrcx; | |
2442 | static const float float_mult = 1.0f / 65535.0f; | ||
2443 | |||
2444 |
2/2✓ Branch 0 taken 21426176 times.
✓ Branch 1 taken 61228 times.
|
21487404 | for (i = 0; i < dstW; i++) { |
2445 | int j; | ||
2446 | 21426176 | int Y = -0x40000000; | |
2447 | 21426176 | int U = -(128 << 23); | |
2448 | 21426176 | int V = -(128 << 23); | |
2449 | int R, G, B, A; | ||
2450 | |||
2451 |
2/2✓ Branch 0 taken 22627776 times.
✓ Branch 1 taken 21426176 times.
|
44053952 | for (j = 0; j < lumFilterSize; j++) |
2452 | 22627776 | Y += lumSrc[j][i] * (unsigned)lumFilter[j]; | |
2453 | |||
2454 |
2/2✓ Branch 0 taken 86494656 times.
✓ Branch 1 taken 21426176 times.
|
107920832 | for (j = 0; j < chrFilterSize; j++) { |
2455 | 86494656 | U += chrUSrc[j][i] * (unsigned)chrFilter[j]; | |
2456 | 86494656 | V += chrVSrc[j][i] * (unsigned)chrFilter[j]; | |
2457 | } | ||
2458 | |||
2459 | 21426176 | Y >>= 14; | |
2460 | 21426176 | Y += 0x10000; | |
2461 | 21426176 | U >>= 14; | |
2462 | 21426176 | V >>= 14; | |
2463 | |||
2464 |
2/2✓ Branch 0 taken 65728 times.
✓ Branch 1 taken 21360448 times.
|
21426176 | if (hasAlpha) { |
2465 | 65728 | A = -0x40000000; | |
2466 | |||
2467 |
2/2✓ Branch 0 taken 666528 times.
✓ Branch 1 taken 65728 times.
|
732256 | for (j = 0; j < lumFilterSize; j++) |
2468 | 666528 | A += alpSrc[j][i] * (unsigned)lumFilter[j]; | |
2469 | |||
2470 | 65728 | A >>= 1; | |
2471 | 65728 | A += 0x20002000; | |
2472 | } | ||
2473 | |||
2474 | 21426176 | Y -= c->yuv2rgb_y_offset; | |
2475 | 21426176 | Y *= c->yuv2rgb_y_coeff; | |
2476 | 21426176 | Y += (1 << 13) - (1 << 29); | |
2477 | 21426176 | R = V * c->yuv2rgb_v2r_coeff; | |
2478 | 21426176 | G = V * c->yuv2rgb_v2g_coeff + U * c->yuv2rgb_u2g_coeff; | |
2479 | 21426176 | B = U * c->yuv2rgb_u2b_coeff; | |
2480 | |||
2481 | 21426176 | R = av_clip_uintp2(((Y + R) >> 14) + (1<<15), 16); | |
2482 | 21426176 | G = av_clip_uintp2(((Y + G) >> 14) + (1<<15), 16); | |
2483 | 21426176 | B = av_clip_uintp2(((Y + B) >> 14) + (1<<15), 16); | |
2484 | |||
2485 | 21426176 | dest32[0][i] = av_float2int(float_mult * (float)G); | |
2486 | 21426176 | dest32[1][i] = av_float2int(float_mult * (float)B); | |
2487 | 21426176 | dest32[2][i] = av_float2int(float_mult * (float)R); | |
2488 |
2/2✓ Branch 0 taken 65728 times.
✓ Branch 1 taken 21360448 times.
|
21426176 | if (hasAlpha) |
2489 | 65728 | dest32[3][i] = av_float2int(float_mult * (float)(av_clip_uintp2(A, 30) >> 14)); | |
2490 | } | ||
2491 |
2/2✓ Branch 1 taken 15608 times.
✓ Branch 2 taken 45620 times.
|
61228 | if ((!isBE(c->opts.dst_format)) != (!HAVE_BIGENDIAN)) { |
2492 |
2/2✓ Branch 0 taken 5438656 times.
✓ Branch 1 taken 15608 times.
|
5454264 | for (i = 0; i < dstW; i++) { |
2493 | 5438656 | dest32[0][i] = av_bswap32(dest32[0][i]); | |
2494 | 5438656 | dest32[1][i] = av_bswap32(dest32[1][i]); | |
2495 | 5438656 | dest32[2][i] = av_bswap32(dest32[2][i]); | |
2496 |
2/2✓ Branch 0 taken 32864 times.
✓ Branch 1 taken 5405792 times.
|
5438656 | if (hasAlpha) |
2497 | 32864 | dest32[3][i] = av_bswap32(dest32[3][i]); | |
2498 | } | ||
2499 | } | ||
2500 | 61228 | } | |
2501 | |||
2502 | static void | ||
2503 | ✗ | yuv2ya8_1_c(SwsInternal *c, const int16_t *buf0, | |
2504 | const int16_t *ubuf[2], const int16_t *vbuf[2], | ||
2505 | const int16_t *abuf0, uint8_t *dest, int dstW, | ||
2506 | int uvalpha, int y) | ||
2507 | { | ||
2508 | ✗ | int hasAlpha = !!abuf0; | |
2509 | int i; | ||
2510 | |||
2511 | ✗ | for (i = 0; i < dstW; i++) { | |
2512 | ✗ | int Y = (buf0[i] + 64) >> 7; | |
2513 | int A; | ||
2514 | |||
2515 | ✗ | Y = av_clip_uint8(Y); | |
2516 | |||
2517 | ✗ | if (hasAlpha) { | |
2518 | ✗ | A = (abuf0[i] + 64) >> 7; | |
2519 | ✗ | if (A & 0x100) | |
2520 | ✗ | A = av_clip_uint8(A); | |
2521 | } | ||
2522 | |||
2523 | ✗ | dest[i * 2 ] = Y; | |
2524 | ✗ | dest[i * 2 + 1] = hasAlpha ? A : 255; | |
2525 | } | ||
2526 | ✗ | } | |
2527 | |||
2528 | static void | ||
2529 | ✗ | yuv2ya8_2_c(SwsInternal *c, const int16_t *buf[2], | |
2530 | const int16_t *ubuf[2], const int16_t *vbuf[2], | ||
2531 | const int16_t *abuf[2], uint8_t *dest, int dstW, | ||
2532 | int yalpha, int uvalpha, int y) | ||
2533 | { | ||
2534 | ✗ | int hasAlpha = abuf && abuf[0] && abuf[1]; | |
2535 | ✗ | const int16_t *buf0 = buf[0], *buf1 = buf[1], | |
2536 | ✗ | *abuf0 = hasAlpha ? abuf[0] : NULL, | |
2537 | ✗ | *abuf1 = hasAlpha ? abuf[1] : NULL; | |
2538 | ✗ | int yalpha1 = 4096 - yalpha; | |
2539 | int i; | ||
2540 | |||
2541 | av_assert2(yalpha <= 4096U); | ||
2542 | |||
2543 | ✗ | for (i = 0; i < dstW; i++) { | |
2544 | ✗ | int Y = (buf0[i] * yalpha1 + buf1[i] * yalpha) >> 19; | |
2545 | int A; | ||
2546 | |||
2547 | ✗ | Y = av_clip_uint8(Y); | |
2548 | |||
2549 | ✗ | if (hasAlpha) { | |
2550 | ✗ | A = (abuf0[i] * yalpha1 + abuf1[i] * yalpha) >> 19; | |
2551 | ✗ | A = av_clip_uint8(A); | |
2552 | } | ||
2553 | |||
2554 | ✗ | dest[i * 2 ] = Y; | |
2555 | ✗ | dest[i * 2 + 1] = hasAlpha ? A : 255; | |
2556 | } | ||
2557 | ✗ | } | |
2558 | |||
2559 | static void | ||
2560 | 6148 | yuv2ya8_X_c(SwsInternal *c, const int16_t *lumFilter, | |
2561 | const int16_t **lumSrc, int lumFilterSize, | ||
2562 | const int16_t *chrFilter, const int16_t **chrUSrc, | ||
2563 | const int16_t **chrVSrc, int chrFilterSize, | ||
2564 | const int16_t **alpSrc, uint8_t *dest, int dstW, int y) | ||
2565 | { | ||
2566 | 6148 | int hasAlpha = !!alpSrc; | |
2567 | int i; | ||
2568 | |||
2569 |
2/2✓ Branch 0 taken 2148896 times.
✓ Branch 1 taken 6148 times.
|
2155044 | for (i = 0; i < dstW; i++) { |
2570 | int j; | ||
2571 | 2148896 | int Y = 1 << 18, A = 1 << 18; | |
2572 | |||
2573 |
2/2✓ Branch 0 taken 2368896 times.
✓ Branch 1 taken 2148896 times.
|
4517792 | for (j = 0; j < lumFilterSize; j++) |
2574 | 2368896 | Y += lumSrc[j][i] * lumFilter[j]; | |
2575 | |||
2576 | 2148896 | Y >>= 19; | |
2577 |
2/2✓ Branch 0 taken 11918 times.
✓ Branch 1 taken 2136978 times.
|
2148896 | if (Y & 0x100) |
2578 | 11918 | Y = av_clip_uint8(Y); | |
2579 | |||
2580 |
2/2✓ Branch 0 taken 20000 times.
✓ Branch 1 taken 2128896 times.
|
2148896 | if (hasAlpha) { |
2581 |
2/2✓ Branch 0 taken 240000 times.
✓ Branch 1 taken 20000 times.
|
260000 | for (j = 0; j < lumFilterSize; j++) |
2582 | 240000 | A += alpSrc[j][i] * lumFilter[j]; | |
2583 | |||
2584 | 20000 | A >>= 19; | |
2585 | |||
2586 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 20000 times.
|
20000 | if (A & 0x100) |
2587 | ✗ | A = av_clip_uint8(A); | |
2588 | } | ||
2589 | |||
2590 | 2148896 | dest[2 * i ] = Y; | |
2591 |
2/2✓ Branch 0 taken 20000 times.
✓ Branch 1 taken 2128896 times.
|
2148896 | dest[2 * i + 1] = hasAlpha ? A : 255; |
2592 | } | ||
2593 | 6148 | } | |
2594 | |||
2595 | #define output_pixels(pos, val) \ | ||
2596 | if (is_be) { \ | ||
2597 | AV_WB16(pos, val); \ | ||
2598 | } else { \ | ||
2599 | AV_WL16(pos, val); \ | ||
2600 | } | ||
2601 | |||
2602 | static av_always_inline void | ||
2603 | 173200 | yuv2ayuv64_X_c(SwsInternal *c, const int16_t *lumFilter, | |
2604 | const int16_t **_lumSrc, int lumFilterSize, | ||
2605 | const int16_t *chrFilter, const int16_t **_chrUSrc, | ||
2606 | const int16_t **_chrVSrc, int chrFilterSize, | ||
2607 | const int16_t **_alpSrc, uint8_t *dest, int dstW, int y, | ||
2608 | int A_offset, int Y_offset, int U_offset, int V_offset, int is_be) | ||
2609 | { | ||
2610 | 173200 | const int32_t **lumSrc = (const int32_t **) _lumSrc, | |
2611 | 173200 | **chrUSrc = (const int32_t **) _chrUSrc, | |
2612 | 173200 | **chrVSrc = (const int32_t **) _chrVSrc, | |
2613 | 173200 | **alpSrc = (const int32_t **) _alpSrc; | |
2614 | 173200 | int hasAlpha = !!alpSrc; | |
2615 | int i; | ||
2616 | |||
2617 |
2/2✓ Branch 0 taken 60905600 times.
✓ Branch 1 taken 173200 times.
|
61078800 | for (i = 0; i < dstW; i++) { |
2618 | 60905600 | int Y = 1 << 14, U = 1 << 14; | |
2619 | 60905600 | int V = 1 << 14, A = 1 << 14; | |
2620 | int j; | ||
2621 | |||
2622 | 60905600 | Y -= 0x40000000; | |
2623 | 60905600 | U -= 0x40000000; | |
2624 | 60905600 | V -= 0x40000000; | |
2625 | 60905600 | A -= 0x40000000; | |
2626 | |||
2627 |
2/2✓ Branch 0 taken 61785600 times.
✓ Branch 1 taken 60905600 times.
|
122691200 | for (j = 0; j < lumFilterSize; j++) |
2628 | 61785600 | Y += lumSrc[j][i] * (unsigned)lumFilter[j]; | |
2629 | |||
2630 |
2/2✓ Branch 0 taken 86115840 times.
✓ Branch 1 taken 60905600 times.
|
147021440 | for (j = 0; j < chrFilterSize; j++) |
2631 | 86115840 | U += chrUSrc[j][i] * (unsigned)chrFilter[j]; | |
2632 | |||
2633 |
2/2✓ Branch 0 taken 86115840 times.
✓ Branch 1 taken 60905600 times.
|
147021440 | for (j = 0; j < chrFilterSize; j++) |
2634 | 86115840 | V += chrVSrc[j][i] * (unsigned)chrFilter[j]; | |
2635 | |||
2636 |
2/2✓ Branch 0 taken 40000 times.
✓ Branch 1 taken 60865600 times.
|
60905600 | if (hasAlpha) |
2637 |
2/2✓ Branch 0 taken 480000 times.
✓ Branch 1 taken 40000 times.
|
520000 | for (j = 0; j < lumFilterSize; j++) |
2638 | 480000 | A += alpSrc[j][i] * (unsigned)lumFilter[j]; | |
2639 | |||
2640 | 60905600 | Y = 0x8000 + av_clip_int16(Y >> 15); | |
2641 | 60905600 | U = 0x8000 + av_clip_int16(U >> 15); | |
2642 | 60905600 | V = 0x8000 + av_clip_int16(V >> 15); | |
2643 |
2/2✓ Branch 0 taken 40000 times.
✓ Branch 1 taken 60865600 times.
|
60905600 | if (hasAlpha) |
2644 | 40000 | A = 0x8000 + av_clip_int16(A >> 15); | |
2645 | |||
2646 |
6/6✓ Branch 0 taken 30452800 times.
✓ Branch 1 taken 30452800 times.
✓ Branch 2 taken 20000 times.
✓ Branch 3 taken 30432800 times.
✓ Branch 4 taken 20000 times.
✓ Branch 5 taken 30432800 times.
|
60905600 | output_pixels(dest + 8 * i + A_offset, hasAlpha ? A : 65535); |
2647 |
2/2✓ Branch 0 taken 30452800 times.
✓ Branch 1 taken 30452800 times.
|
60905600 | output_pixels(dest + 8 * i + Y_offset, Y); |
2648 |
2/2✓ Branch 0 taken 30452800 times.
✓ Branch 1 taken 30452800 times.
|
60905600 | output_pixels(dest + 8 * i + U_offset, U); |
2649 |
2/2✓ Branch 0 taken 30452800 times.
✓ Branch 1 taken 30452800 times.
|
60905600 | output_pixels(dest + 8 * i + V_offset, V); |
2650 | } | ||
2651 | 173200 | } | |
2652 | |||
2653 | #define YUV2AYUV64(pixfmt, BE_LE, A, Y, U, V, is_be) \ | ||
2654 | static void \ | ||
2655 | yuv2 ## pixfmt ## BE_LE ##_X_c(SwsInternal *c, const int16_t *lumFilter, \ | ||
2656 | const int16_t **lumSrc, int lumFilterSize, \ | ||
2657 | const int16_t *chrFilter, const int16_t **chrUSrc, \ | ||
2658 | const int16_t **chrVSrc, int chrFilterSize, \ | ||
2659 | const int16_t **alpSrc, uint8_t *dest, int dstW, int y) \ | ||
2660 | { \ | ||
2661 | yuv2ayuv64_X_c(c, lumFilter, lumSrc, lumFilterSize, \ | ||
2662 | chrFilter, chrUSrc, chrVSrc, chrFilterSize, \ | ||
2663 | alpSrc, dest, dstW, y, A, Y, U, V, is_be); \ | ||
2664 | } | ||
2665 | |||
2666 | 5860 | YUV2AYUV64(ayuv64, le, 0, 2, 4, 6, 0) | |
2667 | 5860 | YUV2AYUV64(ayuv64, be, 0, 2, 4, 6, 1) | |
2668 | |||
2669 | 80740 | YUV2AYUV64(xv48, le, 6, 2, 0, 4, 0) | |
2670 | 80740 | YUV2AYUV64(xv48, be, 6, 2, 0, 4, 1) | |
2671 | |||
2672 | #undef output_pixels | ||
2673 | |||
2674 | static av_always_inline void | ||
2675 | 176428 | yuv2v30_X_c_template(SwsInternal *c, const int16_t *lumFilter, | |
2676 | const int16_t **lumSrc, int lumFilterSize, | ||
2677 | const int16_t *chrFilter, const int16_t **chrUSrc, | ||
2678 | const int16_t **chrVSrc, int chrFilterSize, | ||
2679 | const int16_t **alpSrc, uint8_t *dest, int dstW, int y, | ||
2680 | int shift) | ||
2681 | { | ||
2682 | int i; | ||
2683 |
2/2✓ Branch 0 taken 61531656 times.
✓ Branch 1 taken 176428 times.
|
61708084 | for (i = 0; i < dstW; i++) { |
2684 | 61531656 | int Y = 1 << 16, U = 1 << 16, V = 1 << 16, A = 0x3; | |
2685 | int j; | ||
2686 | |||
2687 |
2/2✓ Branch 0 taken 61971656 times.
✓ Branch 1 taken 61531656 times.
|
123503312 | for (j = 0; j < lumFilterSize; j++) |
2688 | 61971656 | Y += lumSrc[j][i] * lumFilter[j]; | |
2689 | |||
2690 |
2/2✓ Branch 0 taken 74136776 times.
✓ Branch 1 taken 61531656 times.
|
135668432 | for (j = 0; j < chrFilterSize; j++) { |
2691 | 74136776 | U += chrUSrc[j][i] * chrFilter[j]; | |
2692 | 74136776 | V += chrVSrc[j][i] * chrFilter[j]; | |
2693 | } | ||
2694 | |||
2695 | 61531656 | Y = av_clip_uintp2(Y >> 17, 10); | |
2696 | 61531656 | U = av_clip_uintp2(U >> 17, 10); | |
2697 | 61531656 | V = av_clip_uintp2(V >> 17, 10); | |
2698 | |||
2699 |
2/2✓ Branch 0 taken 38397928 times.
✓ Branch 1 taken 23133728 times.
|
61531656 | AV_WL32(dest + 4 * i, U << (shift + 0) | |
2700 | Y << (shift + 10) | | ||
2701 | (unsigned)V << (shift + 20) | | ||
2702 | (unsigned)A << (shift ? 0 : 30 /* xv30le = 30, v30xle = 0 */)); | ||
2703 | } | ||
2704 | 176428 | } | |
2705 | |||
2706 | #define V30LE_WRAPPER(name, shift) \ | ||
2707 | static void yuv2 ## name ## _X_c(SwsInternal *c, const int16_t *lumFilter, \ | ||
2708 | const int16_t **lumSrc, int lumFilterSize, \ | ||
2709 | const int16_t *chrFilter, const int16_t **chrUSrc, \ | ||
2710 | const int16_t **chrVSrc, int chrFilterSize, \ | ||
2711 | const int16_t **alpSrc, uint8_t *dest, int dstW, \ | ||
2712 | int y) \ | ||
2713 | { \ | ||
2714 | yuv2v30_X_c_template(c, lumFilter, lumSrc, lumFilterSize, \ | ||
2715 | chrFilter, chrUSrc, chrVSrc, chrFilterSize, \ | ||
2716 | alpSrc, dest, dstW, y, shift); \ | ||
2717 | } | ||
2718 | |||
2719 | 65764 | V30LE_WRAPPER(xv30le, 0) | |
2720 | 110664 | V30LE_WRAPPER(v30xle, 2) | |
2721 | |||
2722 | #define output_pixels(pos, val, shift, bits, output_shift) \ | ||
2723 | if (is_be) { \ | ||
2724 | AV_WB16(pos, av_clip_uintp2(val >> shift, bits) << output_shift); \ | ||
2725 | } else { \ | ||
2726 | AV_WL16(pos, av_clip_uintp2(val >> shift, bits) << output_shift); \ | ||
2727 | } | ||
2728 | |||
2729 | static void | ||
2730 | 131528 | yuv2xv36_X_c(SwsInternal *c, const int16_t *lumFilter, | |
2731 | const int16_t **lumSrc, int lumFilterSize, | ||
2732 | const int16_t *chrFilter, const int16_t **chrUSrc, | ||
2733 | const int16_t **chrVSrc, int chrFilterSize, | ||
2734 | const int16_t **alpSrc, uint8_t *dest, int dstW, int y, int is_be) | ||
2735 | { | ||
2736 | int i; | ||
2737 |
2/2✓ Branch 0 taken 46267456 times.
✓ Branch 1 taken 131528 times.
|
46398984 | for (i = 0; i < dstW; i++) { |
2738 | 46267456 | int Y = 1 << 14, U = 1 << 14, V = 1 << 14, A = 65535; | |
2739 | int j; | ||
2740 | |||
2741 |
2/2✓ Branch 0 taken 46707456 times.
✓ Branch 1 taken 46267456 times.
|
92974912 | for (j = 0; j < lumFilterSize; j++) |
2742 | 46707456 | Y += lumSrc[j][i] * lumFilter[j]; | |
2743 | |||
2744 |
2/2✓ Branch 0 taken 58872576 times.
✓ Branch 1 taken 46267456 times.
|
105140032 | for (j = 0; j < chrFilterSize; j++) { |
2745 | 58872576 | U += chrUSrc[j][i] * chrFilter[j]; | |
2746 | 58872576 | V += chrVSrc[j][i] * chrFilter[j]; | |
2747 | } | ||
2748 | |||
2749 |
2/2✓ Branch 0 taken 23133728 times.
✓ Branch 1 taken 23133728 times.
|
46267456 | output_pixels(dest + 8 * i + 2, Y, 15, 12, 4) |
2750 |
2/2✓ Branch 0 taken 23133728 times.
✓ Branch 1 taken 23133728 times.
|
46267456 | output_pixels(dest + 8 * i + 0, U, 15, 12, 4) |
2751 |
2/2✓ Branch 0 taken 23133728 times.
✓ Branch 1 taken 23133728 times.
|
46267456 | output_pixels(dest + 8 * i + 4, V, 15, 12, 4) |
2752 |
2/2✓ Branch 0 taken 23133728 times.
✓ Branch 1 taken 23133728 times.
|
46267456 | output_pixels(dest + 8 * i + 6, A, 0, 12, 4); |
2753 | } | ||
2754 | 131528 | } | |
2755 | |||
2756 | #undef output_pixels | ||
2757 | |||
2758 | #define YUV2XV36(BE_LE, is_be) \ | ||
2759 | static void \ | ||
2760 | yuv2xv36 ## BE_LE ##_X_c(SwsInternal *c, const int16_t *lumFilter, \ | ||
2761 | const int16_t **lumSrc, int lumFilterSize, \ | ||
2762 | const int16_t *chrFilter, const int16_t **chrUSrc, \ | ||
2763 | const int16_t **chrVSrc, int chrFilterSize, \ | ||
2764 | const int16_t **alpSrc, uint8_t *dest, int dstW, int y) \ | ||
2765 | { \ | ||
2766 | yuv2xv36_X_c(c, lumFilter, lumSrc, lumFilterSize, \ | ||
2767 | chrFilter, chrUSrc, chrVSrc, chrFilterSize, \ | ||
2768 | alpSrc, dest, dstW, y, is_be); \ | ||
2769 | } | ||
2770 | |||
2771 | 65764 | YUV2XV36(le, 0) | |
2772 | 65764 | YUV2XV36(be, 1) | |
2773 | |||
2774 | #define output_pixels(pos, A, Y, U, V) \ | ||
2775 | if (target == AV_PIX_FMT_AYUV) { \ | ||
2776 | dest[pos + 0] = A; \ | ||
2777 | dest[pos + 1] = Y; \ | ||
2778 | dest[pos + 2] = U; \ | ||
2779 | dest[pos + 3] = V; \ | ||
2780 | } else if (target == AV_PIX_FMT_UYVA) { \ | ||
2781 | dest[pos + 0] = U; \ | ||
2782 | dest[pos + 1] = Y; \ | ||
2783 | dest[pos + 2] = V; \ | ||
2784 | dest[pos + 3] = A; \ | ||
2785 | } else { /* AV_PIX_FMT_VUYA || AV_PIX_FMT_VUYX */ \ | ||
2786 | dest[pos + 0] = V; \ | ||
2787 | dest[pos + 1] = U; \ | ||
2788 | dest[pos + 2] = Y; \ | ||
2789 | dest[pos + 3] = A; \ | ||
2790 | } | ||
2791 | |||
2792 | static av_always_inline void | ||
2793 | 104804 | yuv2ayuv_1_c_template(SwsInternal *c, const int16_t *buf0, | |
2794 | const int16_t *ubuf[2], const int16_t *vbuf[2], | ||
2795 | const int16_t *abuf0, uint8_t *dest, int dstW, | ||
2796 | int uvalpha, int y, enum AVPixelFormat target) | ||
2797 | { | ||
2798 | 104804 | int hasAlpha = !!abuf0; | |
2799 | int i; | ||
2800 | |||
2801 |
1/2✓ Branch 0 taken 104804 times.
✗ Branch 1 not taken.
|
104804 | if (uvalpha < 2048) { |
2802 |
2/2✓ Branch 0 taken 36350408 times.
✓ Branch 1 taken 104804 times.
|
36455212 | for (i = 0; i < dstW; i++) { |
2803 | 36350408 | int Y = (buf0[i] + 64) >> 7; | |
2804 | 36350408 | int U = (ubuf[0][i] + 64) >> 7; | |
2805 | 36350408 | int V = (vbuf[0][i] + 64) >> 7; | |
2806 | 36350408 | int A = 255; | |
2807 | |||
2808 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 36350408 times.
|
36350408 | if (Y & 0x100) |
2809 | ✗ | Y = av_clip_uint8(Y); | |
2810 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 36350408 times.
|
36350408 | if (U & 0x100) |
2811 | ✗ | U = av_clip_uint8(U); | |
2812 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 36350408 times.
|
36350408 | if (V & 0x100) |
2813 | ✗ | V = av_clip_uint8(V); | |
2814 | |||
2815 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 36350408 times.
|
36350408 | if (hasAlpha) { |
2816 | ✗ | A = (abuf0[i] + 64) >> 7; | |
2817 | ✗ | if (A & 0x100) | |
2818 | ✗ | A = av_clip_uint8(A); | |
2819 | } | ||
2820 | |||
2821 |
3/4✗ Branch 0 not taken.
✓ Branch 1 taken 36350408 times.
✓ Branch 2 taken 15264200 times.
✓ Branch 3 taken 21086208 times.
|
36350408 | output_pixels(i * 4, A, Y, U, V) |
2822 | } | ||
2823 | } else { | ||
2824 | ✗ | for (i = 0; i < dstW; i++) { | |
2825 | ✗ | int Y = (buf0[i] + 64) >> 7; | |
2826 | ✗ | int U = (ubuf[0][i] + ubuf[1][i] + 128) >> 8; | |
2827 | ✗ | int V = (vbuf[0][i] + vbuf[1][i] + 128) >> 8; | |
2828 | ✗ | int A = 255; | |
2829 | |||
2830 | ✗ | if (Y & 0x100) | |
2831 | ✗ | Y = av_clip_uint8(Y); | |
2832 | ✗ | if (U & 0x100) | |
2833 | ✗ | U = av_clip_uint8(U); | |
2834 | ✗ | if (V & 0x100) | |
2835 | ✗ | V = av_clip_uint8(V); | |
2836 | |||
2837 | ✗ | if (hasAlpha) { | |
2838 | ✗ | A = (abuf0[i] + 64) >> 7; | |
2839 | ✗ | if (A & 0x100) | |
2840 | ✗ | A = av_clip_uint8(A); | |
2841 | } | ||
2842 | |||
2843 | ✗ | output_pixels(i * 4, A, Y, U, V) | |
2844 | } | ||
2845 | } | ||
2846 | 104804 | } | |
2847 | |||
2848 | static av_always_inline void | ||
2849 | ✗ | yuv2ayuv_2_c_template(SwsInternal *c, const int16_t *buf[2], | |
2850 | const int16_t *ubuf[2], const int16_t *vbuf[2], | ||
2851 | const int16_t *abuf[2], uint8_t *dest, int dstW, | ||
2852 | int yalpha, int uvalpha, int y, | ||
2853 | enum AVPixelFormat target) | ||
2854 | { | ||
2855 | ✗ | int hasAlpha = abuf && abuf[0] && abuf[1]; | |
2856 | ✗ | const int16_t *buf0 = buf[0], *buf1 = buf[1], | |
2857 | ✗ | *ubuf0 = ubuf[0], *ubuf1 = ubuf[1], | |
2858 | ✗ | *vbuf0 = vbuf[0], *vbuf1 = vbuf[1], | |
2859 | ✗ | *abuf0 = hasAlpha ? abuf[0] : NULL, | |
2860 | ✗ | *abuf1 = hasAlpha ? abuf[1] : NULL; | |
2861 | ✗ | int yalpha1 = 4096 - yalpha; | |
2862 | ✗ | int uvalpha1 = 4096 - uvalpha; | |
2863 | int i; | ||
2864 | |||
2865 | av_assert2(yalpha <= 4096U); | ||
2866 | av_assert2(uvalpha <= 4096U); | ||
2867 | |||
2868 | ✗ | for (i = 0; i < dstW; i++) { | |
2869 | ✗ | int Y = (buf0[i] * yalpha1 + buf1[i] * yalpha) >> 19; | |
2870 | ✗ | int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha) >> 19; | |
2871 | ✗ | int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha) >> 19; | |
2872 | ✗ | int A = 255; | |
2873 | |||
2874 | ✗ | if (Y & 0x100) | |
2875 | ✗ | Y = av_clip_uint8(Y); | |
2876 | ✗ | if (U & 0x100) | |
2877 | ✗ | U = av_clip_uint8(U); | |
2878 | ✗ | if (V & 0x100) | |
2879 | ✗ | V = av_clip_uint8(V); | |
2880 | |||
2881 | ✗ | if (hasAlpha) { | |
2882 | ✗ | A = (abuf0[i] * yalpha1 + abuf1[i] * yalpha) >> 19; | |
2883 | ✗ | A = av_clip_uint8(A); | |
2884 | } | ||
2885 | |||
2886 | ✗ | output_pixels(i * 4, A, Y, U, V) | |
2887 | } | ||
2888 | ✗ | } | |
2889 | |||
2890 | static av_always_inline void | ||
2891 | 25168 | yuv2ayuv_X_c_template(SwsInternal *c, const int16_t *lumFilter, | |
2892 | const int16_t **lumSrc, int lumFilterSize, | ||
2893 | const int16_t *chrFilter, const int16_t **chrUSrc, | ||
2894 | const int16_t **chrVSrc, int chrFilterSize, | ||
2895 | const int16_t **alpSrc, uint8_t *dest, int dstW, | ||
2896 | int y, enum AVPixelFormat target) | ||
2897 | { | ||
2898 | int i; | ||
2899 | |||
2900 |
2/2✓ Branch 0 taken 8798336 times.
✓ Branch 1 taken 25168 times.
|
8823504 | for (i = 0; i < dstW; i++) { |
2901 | int j; | ||
2902 | 8798336 | int Y = 1 << 18, U = 1 << 18; | |
2903 | 8798336 | int V = 1 << 18, A = 255; | |
2904 | |||
2905 |
2/2✓ Branch 0 taken 9678336 times.
✓ Branch 1 taken 8798336 times.
|
18476672 | for (j = 0; j < lumFilterSize; j++) |
2906 | 9678336 | Y += lumSrc[j][i] * lumFilter[j]; | |
2907 | |||
2908 |
2/2✓ Branch 0 taken 35833344 times.
✓ Branch 1 taken 8798336 times.
|
44631680 | for (j = 0; j < chrFilterSize; j++) |
2909 | 35833344 | U += chrUSrc[j][i] * chrFilter[j]; | |
2910 | |||
2911 |
2/2✓ Branch 0 taken 35833344 times.
✓ Branch 1 taken 8798336 times.
|
44631680 | for (j = 0; j < chrFilterSize; j++) |
2912 | 35833344 | V += chrVSrc[j][i] * chrFilter[j]; | |
2913 | |||
2914 | 8798336 | Y >>= 19; | |
2915 | 8798336 | U >>= 19; | |
2916 | 8798336 | V >>= 19; | |
2917 | |||
2918 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8798336 times.
|
8798336 | if (Y & 0x100) |
2919 | ✗ | Y = av_clip_uint8(Y); | |
2920 |
2/2✓ Branch 0 taken 364 times.
✓ Branch 1 taken 8797972 times.
|
8798336 | if (U & 0x100) |
2921 | 364 | U = av_clip_uint8(U); | |
2922 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8798328 times.
|
8798336 | if (V & 0x100) |
2923 | 8 | V = av_clip_uint8(V); | |
2924 | |||
2925 |
2/2✓ Branch 0 taken 60000 times.
✓ Branch 1 taken 8738336 times.
|
8798336 | if (alpSrc) { |
2926 | 60000 | A = 1 << 18; | |
2927 | |||
2928 |
2/2✓ Branch 0 taken 720000 times.
✓ Branch 1 taken 60000 times.
|
780000 | for (j = 0; j < lumFilterSize; j++) |
2929 | 720000 | A += alpSrc[j][i] * lumFilter[j]; | |
2930 | |||
2931 | 60000 | A >>= 19; | |
2932 | |||
2933 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 60000 times.
|
60000 | if (A & 0x100) |
2934 | ✗ | A = av_clip_uint8(A); | |
2935 | } | ||
2936 | |||
2937 |
4/4✓ Branch 0 taken 2148896 times.
✓ Branch 1 taken 6649440 times.
✓ Branch 2 taken 2148896 times.
✓ Branch 3 taken 4500544 times.
|
8798336 | output_pixels(i * 4, A, Y, U, V) |
2938 | } | ||
2939 | 25168 | } | |
2940 | |||
2941 | #undef output_pixels | ||
2942 | |||
2943 | #define AYUVPACKEDWRAPPER(name, fmt) \ | ||
2944 | static void yuv2 ## name ## _X_c(SwsInternal *c, const int16_t *lumFilter, \ | ||
2945 | const int16_t **lumSrc, int lumFilterSize, \ | ||
2946 | const int16_t *chrFilter, const int16_t **chrUSrc, \ | ||
2947 | const int16_t **chrVSrc, int chrFilterSize, \ | ||
2948 | const int16_t **alpSrc, uint8_t *dest, int dstW, \ | ||
2949 | int y) \ | ||
2950 | { \ | ||
2951 | yuv2ayuv_X_c_template(c, lumFilter, lumSrc, lumFilterSize, \ | ||
2952 | chrFilter, chrUSrc, chrVSrc, chrFilterSize, \ | ||
2953 | alpSrc, dest, dstW, y, fmt); \ | ||
2954 | } \ | ||
2955 | \ | ||
2956 | static void yuv2 ## name ## _2_c(SwsInternal *c, const int16_t *buf[2], \ | ||
2957 | const int16_t *ubuf[2], const int16_t *vbuf[2], \ | ||
2958 | const int16_t *abuf[2], uint8_t *dest, int dstW, \ | ||
2959 | int yalpha, int uvalpha, int y) \ | ||
2960 | { \ | ||
2961 | yuv2ayuv_2_c_template(c, buf, ubuf, vbuf, abuf, \ | ||
2962 | dest, dstW, yalpha, uvalpha, y, fmt); \ | ||
2963 | } \ | ||
2964 | \ | ||
2965 | static void yuv2 ## name ## _1_c(SwsInternal *c, const int16_t *buf0, \ | ||
2966 | const int16_t *ubuf[2], const int16_t *vbuf[2], \ | ||
2967 | const int16_t *abuf0, uint8_t *dest, int dstW, \ | ||
2968 | int uvalpha, int y) \ | ||
2969 | { \ | ||
2970 | yuv2ayuv_1_c_template(c, buf0, ubuf, vbuf, \ | ||
2971 | abuf0, dest, dstW, uvalpha, \ | ||
2972 | y, fmt); \ | ||
2973 | } | ||
2974 | |||
2975 | 145552 | AYUVPACKEDWRAPPER(vuyX, AV_PIX_FMT_VUYX) | |
2976 | 12296 | AYUVPACKEDWRAPPER(ayuv, AV_PIX_FMT_AYUV) | |
2977 | 102096 | AYUVPACKEDWRAPPER(uyva, AV_PIX_FMT_UYVA) | |
2978 | |||
2979 | #define output_pixel(pos, val, bits) \ | ||
2980 | AV_WL16(pos, av_clip_uintp2(val >> shift, bits) << output_shift); | ||
2981 | |||
2982 | #define yuv2y2xx_wrapper(bits) \ | ||
2983 | static void \ | ||
2984 | yuv2y2 ## bits ## le_X_c(SwsInternal *c, const int16_t *lumFilter, \ | ||
2985 | const int16_t **lumSrc, int lumFilterSize, \ | ||
2986 | const int16_t *chrFilter, \ | ||
2987 | const int16_t **chrUSrc, \ | ||
2988 | const int16_t **chrVSrc, int chrFilterSize, \ | ||
2989 | const int16_t **alpSrc, \ | ||
2990 | uint8_t *dest, int dstW, int y) \ | ||
2991 | { \ | ||
2992 | int i, j; \ | ||
2993 | int shift = 11 + 16 - bits; \ | ||
2994 | int output_shift = 16 - bits; \ | ||
2995 | for (i = 0; i < ((dstW + 1) >> 1); i++) { \ | ||
2996 | int Y1 = 1 << (shift - 1), Y2 = 1 << (shift - 1); \ | ||
2997 | int U = 1 << (shift - 1), V = 1 << (shift - 1); \ | ||
2998 | \ | ||
2999 | for (j = 0; j < lumFilterSize; j++) { \ | ||
3000 | Y1 += lumSrc[j][i * 2] * lumFilter[j]; \ | ||
3001 | Y2 += lumSrc[j][i * 2 + 1] * lumFilter[j]; \ | ||
3002 | } \ | ||
3003 | \ | ||
3004 | for (j = 0; j < chrFilterSize; j++) { \ | ||
3005 | U += chrUSrc[j][i] * chrFilter[j]; \ | ||
3006 | V += chrVSrc[j][i] * chrFilter[j]; \ | ||
3007 | } \ | ||
3008 | \ | ||
3009 | output_pixel(dest + 8 * i + 0, Y1, bits); \ | ||
3010 | output_pixel(dest + 8 * i + 2, U, bits); \ | ||
3011 | output_pixel(dest + 8 * i + 4, Y2, bits); \ | ||
3012 | output_pixel(dest + 8 * i + 6, V, bits); \ | ||
3013 | } \ | ||
3014 | } | ||
3015 | |||
3016 |
6/6✓ Branch 0 taken 11524800 times.
✓ Branch 1 taken 11414800 times.
✓ Branch 2 taken 14109888 times.
✓ Branch 3 taken 11414800 times.
✓ Branch 4 taken 11414800 times.
✓ Branch 5 taken 64900 times.
|
37114388 | yuv2y2xx_wrapper(10) |
3017 |
6/6✓ Branch 0 taken 11524800 times.
✓ Branch 1 taken 11414800 times.
✓ Branch 2 taken 14109888 times.
✓ Branch 3 taken 11414800 times.
✓ Branch 4 taken 11414800 times.
✓ Branch 5 taken 64900 times.
|
37114388 | yuv2y2xx_wrapper(12) |
3018 | |||
3019 | static void | ||
3020 | 79876 | yuv2y216le_X_c(SwsInternal *c, const int16_t *lumFilter, | |
3021 | const int16_t **_lumSrc, int lumFilterSize, | ||
3022 | const int16_t *chrFilter, | ||
3023 | const int16_t **_chrUSrc, | ||
3024 | const int16_t **_chrVSrc, int chrFilterSize, | ||
3025 | const int16_t **_alpSrc, | ||
3026 | uint8_t *dest, int dstW, int y) | ||
3027 | { | ||
3028 | 79876 | const int32_t **lumSrc = (const int32_t **)_lumSrc; | |
3029 | 79876 | const int32_t **chrUSrc = (const int32_t **)_chrUSrc; | |
3030 | 79876 | const int32_t **chrVSrc = (const int32_t **)_chrVSrc; | |
3031 | 79876 | int shift = 15; | |
3032 | |||
3033 |
2/2✓ Branch 0 taken 14050576 times.
✓ Branch 1 taken 79876 times.
|
14130452 | for (int i = 0; i < ((dstW + 1) >> 1); i++) { |
3034 | 14050576 | int Y1 = 1 << (shift - 1), Y2 = 1 << (shift - 1); | |
3035 | 14050576 | int U = 1 << (shift - 1), V = 1 << (shift - 1); | |
3036 | |||
3037 | /* See yuv2planeX_16_c_template for details. */ | ||
3038 | 14050576 | Y1 -= 0x40000000; | |
3039 | 14050576 | U -= 0x40000000; | |
3040 | 14050576 | Y2 -= 0x40000000; | |
3041 | 14050576 | V -= 0x40000000; | |
3042 | |||
3043 |
2/2✓ Branch 0 taken 14160576 times.
✓ Branch 1 taken 14050576 times.
|
28211152 | for (int j = 0; j < lumFilterSize; j++) { |
3044 | 14160576 | Y1 += lumSrc[j][i * 2] * (unsigned)lumFilter[j]; | |
3045 | 14160576 | Y2 += lumSrc[j][i * 2 + 1] * (unsigned)lumFilter[j]; | |
3046 | } | ||
3047 | |||
3048 |
2/2✓ Branch 0 taken 16745664 times.
✓ Branch 1 taken 14050576 times.
|
30796240 | for (int j = 0; j < chrFilterSize; j++) { |
3049 | 16745664 | U += chrUSrc[j][i] * (unsigned)chrFilter[j]; | |
3050 | 16745664 | V += chrVSrc[j][i] * (unsigned)chrFilter[j]; | |
3051 | } | ||
3052 | |||
3053 | 14050576 | AV_WL16(dest + 8 * i + 0, 0x8000 + av_clip_int16(Y1 >> shift)); | |
3054 | 14050576 | AV_WL16(dest + 8 * i + 2, 0x8000 + av_clip_int16(U >> shift)); | |
3055 | 14050576 | AV_WL16(dest + 8 * i + 4, 0x8000 + av_clip_int16(Y2 >> shift)); | |
3056 | 14050576 | AV_WL16(dest + 8 * i + 6, 0x8000 + av_clip_int16(V >> shift)); | |
3057 | } | ||
3058 | 79876 | } | |
3059 | |||
3060 | static void | ||
3061 | 104804 | yuv2vyu444_1_c(SwsInternal *c, const int16_t *buf0, | |
3062 | const int16_t *ubuf[2], const int16_t *vbuf[2], | ||
3063 | const int16_t *abuf0, uint8_t *dest, int dstW, | ||
3064 | int uvalpha, int y) | ||
3065 | { | ||
3066 | int i; | ||
3067 | |||
3068 |
1/2✓ Branch 0 taken 104804 times.
✗ Branch 1 not taken.
|
104804 | if (uvalpha < 2048) { |
3069 |
2/2✓ Branch 0 taken 36350408 times.
✓ Branch 1 taken 104804 times.
|
36455212 | for (i = 0; i < dstW; i++) { |
3070 | 36350408 | int Y = (buf0[i] + 64) >> 7; | |
3071 | 36350408 | int U = (ubuf[0][i] + 64) >> 7; | |
3072 | 36350408 | int V = (vbuf[0][i] + 64) >> 7; | |
3073 | |||
3074 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 36350408 times.
|
36350408 | if (Y & 0x100) |
3075 | ✗ | Y = av_clip_uint8(Y); | |
3076 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 36350408 times.
|
36350408 | if (U & 0x100) |
3077 | ✗ | U = av_clip_uint8(U); | |
3078 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 36350408 times.
|
36350408 | if (V & 0x100) |
3079 | ✗ | V = av_clip_uint8(V); | |
3080 | |||
3081 | 36350408 | dest[3 * i ] = V; | |
3082 | 36350408 | dest[3 * i + 1] = Y; | |
3083 | 36350408 | dest[3 * i + 2] = U; | |
3084 | } | ||
3085 | } else { | ||
3086 | ✗ | for (i = 0; i < dstW; i++) { | |
3087 | ✗ | int Y = (buf0[i] + 64) >> 7; | |
3088 | ✗ | int U = (ubuf[0][i] + ubuf[1][i] + 128) >> 8; | |
3089 | ✗ | int V = (vbuf[0][i] + vbuf[1][i] + 128) >> 8; | |
3090 | |||
3091 | ✗ | if (Y & 0x100) | |
3092 | ✗ | Y = av_clip_uint8(Y); | |
3093 | ✗ | if (U & 0x100) | |
3094 | ✗ | U = av_clip_uint8(U); | |
3095 | ✗ | if (V & 0x100) | |
3096 | ✗ | V = av_clip_uint8(V); | |
3097 | |||
3098 | ✗ | dest[3 * i ] = V; | |
3099 | ✗ | dest[3 * i + 1] = Y; | |
3100 | ✗ | dest[3 * i + 2] = U; | |
3101 | } | ||
3102 | } | ||
3103 | 104804 | } | |
3104 | |||
3105 | static void | ||
3106 | ✗ | yuv2vyu444_2_c(SwsInternal *c, const int16_t *buf[2], | |
3107 | const int16_t *ubuf[2], const int16_t *vbuf[2], | ||
3108 | const int16_t *abuf[2], uint8_t *dest, int dstW, | ||
3109 | int yalpha, int uvalpha, int y) | ||
3110 | { | ||
3111 | ✗ | const int16_t *buf0 = buf[0], *buf1 = buf[1], | |
3112 | ✗ | *ubuf0 = ubuf[0], *ubuf1 = ubuf[1], | |
3113 | ✗ | *vbuf0 = vbuf[0], *vbuf1 = vbuf[1]; | |
3114 | ✗ | int yalpha1 = 4096 - yalpha; | |
3115 | ✗ | int uvalpha1 = 4096 - uvalpha; | |
3116 | int i; | ||
3117 | |||
3118 | av_assert2(yalpha <= 4096U); | ||
3119 | av_assert2(uvalpha <= 4096U); | ||
3120 | |||
3121 | ✗ | for (i = 0; i < dstW; i++) { | |
3122 | ✗ | int Y = (buf0[i] * yalpha1 + buf1[i] * yalpha) >> 19; | |
3123 | ✗ | int U = (ubuf0[i] * uvalpha1 + ubuf1[i] * uvalpha) >> 19; | |
3124 | ✗ | int V = (vbuf0[i] * uvalpha1 + vbuf1[i] * uvalpha) >> 19; | |
3125 | |||
3126 | ✗ | if (Y & 0x100) | |
3127 | ✗ | Y = av_clip_uint8(Y); | |
3128 | ✗ | if (U & 0x100) | |
3129 | ✗ | U = av_clip_uint8(U); | |
3130 | ✗ | if (V & 0x100) | |
3131 | ✗ | V = av_clip_uint8(V); | |
3132 | |||
3133 | ✗ | dest[3 * i ] = V; | |
3134 | ✗ | dest[3 * i + 1] = Y; | |
3135 | ✗ | dest[3 * i + 2] = U; | |
3136 | } | ||
3137 | ✗ | } | |
3138 | |||
3139 | static void | ||
3140 | 6724 | yuv2vyu444_X_c(SwsInternal *c, const int16_t *lumFilter, | |
3141 | const int16_t **lumSrc, int lumFilterSize, | ||
3142 | const int16_t *chrFilter, const int16_t **chrUSrc, | ||
3143 | const int16_t **chrVSrc, int chrFilterSize, | ||
3144 | const int16_t **alpSrc, uint8_t *dest, int dstW, int y) | ||
3145 | { | ||
3146 | int i; | ||
3147 | |||
3148 |
2/2✓ Branch 0 taken 2351648 times.
✓ Branch 1 taken 6724 times.
|
2358372 | for (i = 0; i < dstW; i++) { |
3149 | int j; | ||
3150 | 2351648 | int Y = 1 << 18, U = 1 << 18; | |
3151 | 2351648 | int V = 1 << 18; | |
3152 | |||
3153 |
2/2✓ Branch 0 taken 2571648 times.
✓ Branch 1 taken 2351648 times.
|
4923296 | for (j = 0; j < lumFilterSize; j++) |
3154 | 2571648 | Y += lumSrc[j][i] * lumFilter[j]; | |
3155 | |||
3156 |
2/2✓ Branch 0 taken 9566592 times.
✓ Branch 1 taken 2351648 times.
|
11918240 | for (j = 0; j < chrFilterSize; j++) |
3157 | 9566592 | U += chrUSrc[j][i] * chrFilter[j]; | |
3158 | |||
3159 |
2/2✓ Branch 0 taken 9566592 times.
✓ Branch 1 taken 2351648 times.
|
11918240 | for (j = 0; j < chrFilterSize; j++) |
3160 | 9566592 | V += chrVSrc[j][i] * chrFilter[j]; | |
3161 | |||
3162 | 2351648 | Y >>= 19; | |
3163 | 2351648 | U >>= 19; | |
3164 | 2351648 | V >>= 19; | |
3165 | |||
3166 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2351648 times.
|
2351648 | if (Y & 0x100) |
3167 | ✗ | Y = av_clip_uint8(Y); | |
3168 |
2/2✓ Branch 0 taken 97 times.
✓ Branch 1 taken 2351551 times.
|
2351648 | if (U & 0x100) |
3169 | 97 | U = av_clip_uint8(U); | |
3170 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2351646 times.
|
2351648 | if (V & 0x100) |
3171 | 2 | V = av_clip_uint8(V); | |
3172 | |||
3173 | 2351648 | dest[3 * i ] = V; | |
3174 | 2351648 | dest[3 * i + 1] = Y; | |
3175 | 2351648 | dest[3 * i + 2] = U; | |
3176 | } | ||
3177 | 6724 | } | |
3178 | |||
3179 | #undef output_pixel | ||
3180 | |||
3181 | 182680 | av_cold void ff_sws_init_output_funcs(SwsInternal *c, | |
3182 | yuv2planar1_fn *yuv2plane1, | ||
3183 | yuv2planarX_fn *yuv2planeX, | ||
3184 | yuv2interleavedX_fn *yuv2nv12cX, | ||
3185 | yuv2packed1_fn *yuv2packed1, | ||
3186 | yuv2packed2_fn *yuv2packed2, | ||
3187 | yuv2packedX_fn *yuv2packedX, | ||
3188 | yuv2anyX_fn *yuv2anyX) | ||
3189 | { | ||
3190 | 182680 | enum AVPixelFormat dstFormat = c->opts.dst_format; | |
3191 | 182680 | const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(dstFormat); | |
3192 | |||
3193 |
4/4✓ Branch 1 taken 12193 times.
✓ Branch 2 taken 170487 times.
✓ Branch 4 taken 6554 times.
✓ Branch 5 taken 5639 times.
|
182680 | if (isSemiPlanarYUV(dstFormat) && isDataInHighBits(dstFormat)) { |
3194 |
2/2✓ Branch 0 taken 3251 times.
✓ Branch 1 taken 3303 times.
|
6554 | if (desc->comp[0].depth == 10) { |
3195 |
2/2✓ Branch 1 taken 1647 times.
✓ Branch 2 taken 1604 times.
|
3251 | *yuv2plane1 = isBE(dstFormat) ? yuv2p010l1_BE_c : yuv2p010l1_LE_c; |
3196 |
2/2✓ Branch 1 taken 1647 times.
✓ Branch 2 taken 1604 times.
|
3251 | *yuv2planeX = isBE(dstFormat) ? yuv2p010lX_BE_c : yuv2p010lX_LE_c; |
3197 |
2/2✓ Branch 1 taken 1647 times.
✓ Branch 2 taken 1604 times.
|
3251 | *yuv2nv12cX = isBE(dstFormat) ? yuv2p010cX_BE_c : yuv2p010cX_LE_c; |
3198 |
1/2✓ Branch 0 taken 3303 times.
✗ Branch 1 not taken.
|
3303 | } else if (desc->comp[0].depth == 12) { |
3199 |
2/2✓ Branch 1 taken 1647 times.
✓ Branch 2 taken 1656 times.
|
3303 | *yuv2plane1 = isBE(dstFormat) ? yuv2p012l1_BE_c : yuv2p012l1_LE_c; |
3200 |
2/2✓ Branch 1 taken 1647 times.
✓ Branch 2 taken 1656 times.
|
3303 | *yuv2planeX = isBE(dstFormat) ? yuv2p012lX_BE_c : yuv2p012lX_LE_c; |
3201 |
2/2✓ Branch 1 taken 1647 times.
✓ Branch 2 taken 1656 times.
|
3303 | *yuv2nv12cX = isBE(dstFormat) ? yuv2p012cX_BE_c : yuv2p012cX_LE_c; |
3202 | } else | ||
3203 | ✗ | av_assert0(0); | |
3204 |
2/2✓ Branch 1 taken 28931 times.
✓ Branch 2 taken 147195 times.
|
176126 | } else if (is16BPS(dstFormat)) { |
3205 |
2/2✓ Branch 1 taken 7311 times.
✓ Branch 2 taken 21620 times.
|
28931 | *yuv2planeX = isBE(dstFormat) ? yuv2planeX_16BE_c : yuv2planeX_16LE_c; |
3206 |
2/2✓ Branch 1 taken 7311 times.
✓ Branch 2 taken 21620 times.
|
28931 | *yuv2plane1 = isBE(dstFormat) ? yuv2plane1_16BE_c : yuv2plane1_16LE_c; |
3207 |
2/2✓ Branch 1 taken 3995 times.
✓ Branch 2 taken 24936 times.
|
28931 | if (isSemiPlanarYUV(dstFormat)) { |
3208 |
2/2✓ Branch 1 taken 2019 times.
✓ Branch 2 taken 1976 times.
|
3995 | *yuv2nv12cX = isBE(dstFormat) ? yuv2nv12cX_16BE_c : yuv2nv12cX_16LE_c; |
3209 | } | ||
3210 |
2/2✓ Branch 1 taken 50518 times.
✓ Branch 2 taken 96677 times.
|
147195 | } else if (isNBPS(dstFormat)) { |
3211 |
2/2✓ Branch 0 taken 1402 times.
✓ Branch 1 taken 49116 times.
|
50518 | if (desc->comp[0].depth == 9) { |
3212 |
2/2✓ Branch 1 taken 654 times.
✓ Branch 2 taken 748 times.
|
1402 | *yuv2planeX = isBE(dstFormat) ? yuv2planeX_9BE_c : yuv2planeX_9LE_c; |
3213 |
2/2✓ Branch 1 taken 654 times.
✓ Branch 2 taken 748 times.
|
1402 | *yuv2plane1 = isBE(dstFormat) ? yuv2plane1_9BE_c : yuv2plane1_9LE_c; |
3214 |
2/2✓ Branch 0 taken 27588 times.
✓ Branch 1 taken 21528 times.
|
49116 | } else if (desc->comp[0].depth == 10) { |
3215 |
2/2✓ Branch 1 taken 3739 times.
✓ Branch 2 taken 23849 times.
|
27588 | *yuv2planeX = isBE(dstFormat) ? yuv2planeX_10BE_c : yuv2planeX_10LE_c; |
3216 |
2/2✓ Branch 1 taken 3739 times.
✓ Branch 2 taken 23849 times.
|
27588 | *yuv2plane1 = isBE(dstFormat) ? yuv2plane1_10BE_c : yuv2plane1_10LE_c; |
3217 |
2/2✓ Branch 0 taken 20257 times.
✓ Branch 1 taken 1271 times.
|
21528 | } else if (desc->comp[0].depth == 12) { |
3218 |
2/2✓ Branch 1 taken 4287 times.
✓ Branch 2 taken 15970 times.
|
20257 | *yuv2planeX = isBE(dstFormat) ? yuv2planeX_12BE_c : yuv2planeX_12LE_c; |
3219 |
2/2✓ Branch 1 taken 4287 times.
✓ Branch 2 taken 15970 times.
|
20257 | *yuv2plane1 = isBE(dstFormat) ? yuv2plane1_12BE_c : yuv2plane1_12LE_c; |
3220 |
1/2✓ Branch 0 taken 1271 times.
✗ Branch 1 not taken.
|
1271 | } else if (desc->comp[0].depth == 14) { |
3221 |
2/2✓ Branch 1 taken 593 times.
✓ Branch 2 taken 678 times.
|
1271 | *yuv2planeX = isBE(dstFormat) ? yuv2planeX_14BE_c : yuv2planeX_14LE_c; |
3222 |
2/2✓ Branch 1 taken 593 times.
✓ Branch 2 taken 678 times.
|
1271 | *yuv2plane1 = isBE(dstFormat) ? yuv2plane1_14BE_c : yuv2plane1_14LE_c; |
3223 | } else | ||
3224 | ✗ | av_assert0(0); | |
3225 |
2/2✓ Branch 0 taken 82 times.
✓ Branch 1 taken 96595 times.
|
96677 | } else if (dstFormat == AV_PIX_FMT_GRAYF32BE) { |
3226 | 82 | *yuv2planeX = yuv2planeX_floatBE_c; | |
3227 | 82 | *yuv2plane1 = yuv2plane1_floatBE_c; | |
3228 |
2/2✓ Branch 0 taken 190 times.
✓ Branch 1 taken 96405 times.
|
96595 | } else if (dstFormat == AV_PIX_FMT_GRAYF32LE) { |
3229 | 190 | *yuv2planeX = yuv2planeX_floatLE_c; | |
3230 | 190 | *yuv2plane1 = yuv2plane1_floatLE_c; | |
3231 | } else { | ||
3232 | 96405 | *yuv2plane1 = yuv2plane1_8_c; | |
3233 | 96405 | *yuv2planeX = yuv2planeX_8_c; | |
3234 |
2/2✓ Branch 1 taken 1644 times.
✓ Branch 2 taken 94761 times.
|
96405 | if (isSemiPlanarYUV(dstFormat)) |
3235 | 1644 | *yuv2nv12cX = yuv2nv12cX_c; | |
3236 | } | ||
3237 | |||
3238 |
2/2✓ Branch 0 taken 140965 times.
✓ Branch 1 taken 41715 times.
|
182680 | if(c->opts.flags & SWS_FULL_CHR_H_INT) { |
3239 |
23/24✓ Branch 0 taken 12 times.
✓ Branch 1 taken 12 times.
✓ Branch 2 taken 1454 times.
✓ Branch 3 taken 12 times.
✓ Branch 4 taken 6 times.
✓ Branch 5 taken 3 times.
✓ Branch 6 taken 6 times.
✓ Branch 7 taken 3 times.
✓ Branch 8 taken 3506 times.
✓ Branch 9 taken 1192 times.
✓ Branch 10 taken 2985 times.
✓ Branch 11 taken 6 times.
✓ Branch 12 taken 6 times.
✓ Branch 13 taken 3 times.
✓ Branch 14 taken 350 times.
✓ Branch 15 taken 350 times.
✓ Branch 16 taken 700 times.
✓ Branch 17 taken 401 times.
✓ Branch 18 taken 375 times.
✓ Branch 19 taken 375 times.
✓ Branch 20 taken 24452 times.
✓ Branch 21 taken 3678 times.
✓ Branch 22 taken 1828 times.
✗ Branch 23 not taken.
|
41715 | switch (dstFormat) { |
3240 | 12 | case AV_PIX_FMT_RGBA: | |
3241 | #if CONFIG_SMALL | ||
3242 | *yuv2packedX = yuv2rgba32_full_X_c; | ||
3243 | *yuv2packed2 = yuv2rgba32_full_2_c; | ||
3244 | *yuv2packed1 = yuv2rgba32_full_1_c; | ||
3245 | #else | ||
3246 | #if CONFIG_SWSCALE_ALPHA | ||
3247 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 6 times.
|
12 | if (c->needAlpha) { |
3248 | 6 | *yuv2packedX = yuv2rgba32_full_X_c; | |
3249 | 6 | *yuv2packed2 = yuv2rgba32_full_2_c; | |
3250 | 6 | *yuv2packed1 = yuv2rgba32_full_1_c; | |
3251 | } else | ||
3252 | #endif /* CONFIG_SWSCALE_ALPHA */ | ||
3253 | { | ||
3254 | 6 | *yuv2packedX = yuv2rgbx32_full_X_c; | |
3255 | 6 | *yuv2packed2 = yuv2rgbx32_full_2_c; | |
3256 | 6 | *yuv2packed1 = yuv2rgbx32_full_1_c; | |
3257 | } | ||
3258 | #endif /* !CONFIG_SMALL */ | ||
3259 | 12 | break; | |
3260 | 12 | case AV_PIX_FMT_ARGB: | |
3261 | #if CONFIG_SMALL | ||
3262 | *yuv2packedX = yuv2argb32_full_X_c; | ||
3263 | *yuv2packed2 = yuv2argb32_full_2_c; | ||
3264 | *yuv2packed1 = yuv2argb32_full_1_c; | ||
3265 | #else | ||
3266 | #if CONFIG_SWSCALE_ALPHA | ||
3267 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 6 times.
|
12 | if (c->needAlpha) { |
3268 | 6 | *yuv2packedX = yuv2argb32_full_X_c; | |
3269 | 6 | *yuv2packed2 = yuv2argb32_full_2_c; | |
3270 | 6 | *yuv2packed1 = yuv2argb32_full_1_c; | |
3271 | } else | ||
3272 | #endif /* CONFIG_SWSCALE_ALPHA */ | ||
3273 | { | ||
3274 | 6 | *yuv2packedX = yuv2xrgb32_full_X_c; | |
3275 | 6 | *yuv2packed2 = yuv2xrgb32_full_2_c; | |
3276 | 6 | *yuv2packed1 = yuv2xrgb32_full_1_c; | |
3277 | } | ||
3278 | #endif /* !CONFIG_SMALL */ | ||
3279 | 12 | break; | |
3280 | 1454 | case AV_PIX_FMT_BGRA: | |
3281 | #if CONFIG_SMALL | ||
3282 | *yuv2packedX = yuv2bgra32_full_X_c; | ||
3283 | *yuv2packed2 = yuv2bgra32_full_2_c; | ||
3284 | *yuv2packed1 = yuv2bgra32_full_1_c; | ||
3285 | #else | ||
3286 | #if CONFIG_SWSCALE_ALPHA | ||
3287 |
2/2✓ Branch 0 taken 102 times.
✓ Branch 1 taken 1352 times.
|
1454 | if (c->needAlpha) { |
3288 | 102 | *yuv2packedX = yuv2bgra32_full_X_c; | |
3289 | 102 | *yuv2packed2 = yuv2bgra32_full_2_c; | |
3290 | 102 | *yuv2packed1 = yuv2bgra32_full_1_c; | |
3291 | } else | ||
3292 | #endif /* CONFIG_SWSCALE_ALPHA */ | ||
3293 | { | ||
3294 | 1352 | *yuv2packedX = yuv2bgrx32_full_X_c; | |
3295 | 1352 | *yuv2packed2 = yuv2bgrx32_full_2_c; | |
3296 | 1352 | *yuv2packed1 = yuv2bgrx32_full_1_c; | |
3297 | } | ||
3298 | #endif /* !CONFIG_SMALL */ | ||
3299 | 1454 | break; | |
3300 | 12 | case AV_PIX_FMT_ABGR: | |
3301 | #if CONFIG_SMALL | ||
3302 | *yuv2packedX = yuv2abgr32_full_X_c; | ||
3303 | *yuv2packed2 = yuv2abgr32_full_2_c; | ||
3304 | *yuv2packed1 = yuv2abgr32_full_1_c; | ||
3305 | #else | ||
3306 | #if CONFIG_SWSCALE_ALPHA | ||
3307 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 6 times.
|
12 | if (c->needAlpha) { |
3308 | 6 | *yuv2packedX = yuv2abgr32_full_X_c; | |
3309 | 6 | *yuv2packed2 = yuv2abgr32_full_2_c; | |
3310 | 6 | *yuv2packed1 = yuv2abgr32_full_1_c; | |
3311 | } else | ||
3312 | #endif /* CONFIG_SWSCALE_ALPHA */ | ||
3313 | { | ||
3314 | 6 | *yuv2packedX = yuv2xbgr32_full_X_c; | |
3315 | 6 | *yuv2packed2 = yuv2xbgr32_full_2_c; | |
3316 | 6 | *yuv2packed1 = yuv2xbgr32_full_1_c; | |
3317 | } | ||
3318 | #endif /* !CONFIG_SMALL */ | ||
3319 | 12 | break; | |
3320 | 6 | case AV_PIX_FMT_RGBA64LE: | |
3321 | #if CONFIG_SWSCALE_ALPHA | ||
3322 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
|
6 | if (c->needAlpha) { |
3323 | 3 | *yuv2packedX = yuv2rgba64le_full_X_c; | |
3324 | 3 | *yuv2packed2 = yuv2rgba64le_full_2_c; | |
3325 | 3 | *yuv2packed1 = yuv2rgba64le_full_1_c; | |
3326 | } else | ||
3327 | #endif /* CONFIG_SWSCALE_ALPHA */ | ||
3328 | { | ||
3329 | 3 | *yuv2packedX = yuv2rgbx64le_full_X_c; | |
3330 | 3 | *yuv2packed2 = yuv2rgbx64le_full_2_c; | |
3331 | 3 | *yuv2packed1 = yuv2rgbx64le_full_1_c; | |
3332 | } | ||
3333 | 6 | break; | |
3334 | 3 | case AV_PIX_FMT_RGBA64BE: | |
3335 | #if CONFIG_SWSCALE_ALPHA | ||
3336 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | if (c->needAlpha) { |
3337 | 3 | *yuv2packedX = yuv2rgba64be_full_X_c; | |
3338 | 3 | *yuv2packed2 = yuv2rgba64be_full_2_c; | |
3339 | 3 | *yuv2packed1 = yuv2rgba64be_full_1_c; | |
3340 | } else | ||
3341 | #endif /* CONFIG_SWSCALE_ALPHA */ | ||
3342 | { | ||
3343 | ✗ | *yuv2packedX = yuv2rgbx64be_full_X_c; | |
3344 | ✗ | *yuv2packed2 = yuv2rgbx64be_full_2_c; | |
3345 | ✗ | *yuv2packed1 = yuv2rgbx64be_full_1_c; | |
3346 | } | ||
3347 | 3 | break; | |
3348 | 6 | case AV_PIX_FMT_BGRA64LE: | |
3349 | #if CONFIG_SWSCALE_ALPHA | ||
3350 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
|
6 | if (c->needAlpha) { |
3351 | 3 | *yuv2packedX = yuv2bgra64le_full_X_c; | |
3352 | 3 | *yuv2packed2 = yuv2bgra64le_full_2_c; | |
3353 | 3 | *yuv2packed1 = yuv2bgra64le_full_1_c; | |
3354 | } else | ||
3355 | #endif /* CONFIG_SWSCALE_ALPHA */ | ||
3356 | { | ||
3357 | 3 | *yuv2packedX = yuv2bgrx64le_full_X_c; | |
3358 | 3 | *yuv2packed2 = yuv2bgrx64le_full_2_c; | |
3359 | 3 | *yuv2packed1 = yuv2bgrx64le_full_1_c; | |
3360 | } | ||
3361 | 6 | break; | |
3362 | 3 | case AV_PIX_FMT_BGRA64BE: | |
3363 | #if CONFIG_SWSCALE_ALPHA | ||
3364 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
3 | if (c->needAlpha) { |
3365 | 3 | *yuv2packedX = yuv2bgra64be_full_X_c; | |
3366 | 3 | *yuv2packed2 = yuv2bgra64be_full_2_c; | |
3367 | 3 | *yuv2packed1 = yuv2bgra64be_full_1_c; | |
3368 | } else | ||
3369 | #endif /* CONFIG_SWSCALE_ALPHA */ | ||
3370 | { | ||
3371 | ✗ | *yuv2packedX = yuv2bgrx64be_full_X_c; | |
3372 | ✗ | *yuv2packed2 = yuv2bgrx64be_full_2_c; | |
3373 | ✗ | *yuv2packed1 = yuv2bgrx64be_full_1_c; | |
3374 | } | ||
3375 | 3 | break; | |
3376 | |||
3377 | 3506 | case AV_PIX_FMT_RGB24: | |
3378 | 3506 | *yuv2packedX = yuv2rgb24_full_X_c; | |
3379 | 3506 | *yuv2packed2 = yuv2rgb24_full_2_c; | |
3380 | 3506 | *yuv2packed1 = yuv2rgb24_full_1_c; | |
3381 | 3506 | break; | |
3382 | 1192 | case AV_PIX_FMT_BGR24: | |
3383 | 1192 | *yuv2packedX = yuv2bgr24_full_X_c; | |
3384 | 1192 | *yuv2packed2 = yuv2bgr24_full_2_c; | |
3385 | 1192 | *yuv2packed1 = yuv2bgr24_full_1_c; | |
3386 | 1192 | break; | |
3387 | 2985 | case AV_PIX_FMT_RGB48LE: | |
3388 | 2985 | *yuv2packedX = yuv2rgb48le_full_X_c; | |
3389 | 2985 | *yuv2packed2 = yuv2rgb48le_full_2_c; | |
3390 | 2985 | *yuv2packed1 = yuv2rgb48le_full_1_c; | |
3391 | 2985 | break; | |
3392 | 6 | case AV_PIX_FMT_BGR48LE: | |
3393 | 6 | *yuv2packedX = yuv2bgr48le_full_X_c; | |
3394 | 6 | *yuv2packed2 = yuv2bgr48le_full_2_c; | |
3395 | 6 | *yuv2packed1 = yuv2bgr48le_full_1_c; | |
3396 | 6 | break; | |
3397 | 6 | case AV_PIX_FMT_RGB48BE: | |
3398 | 6 | *yuv2packedX = yuv2rgb48be_full_X_c; | |
3399 | 6 | *yuv2packed2 = yuv2rgb48be_full_2_c; | |
3400 | 6 | *yuv2packed1 = yuv2rgb48be_full_1_c; | |
3401 | 6 | break; | |
3402 | 3 | case AV_PIX_FMT_BGR48BE: | |
3403 | 3 | *yuv2packedX = yuv2bgr48be_full_X_c; | |
3404 | 3 | *yuv2packed2 = yuv2bgr48be_full_2_c; | |
3405 | 3 | *yuv2packed1 = yuv2bgr48be_full_1_c; | |
3406 | 3 | break; | |
3407 | 350 | case AV_PIX_FMT_BGR4_BYTE: | |
3408 | 350 | *yuv2packedX = yuv2bgr4_byte_full_X_c; | |
3409 | 350 | *yuv2packed2 = yuv2bgr4_byte_full_2_c; | |
3410 | 350 | *yuv2packed1 = yuv2bgr4_byte_full_1_c; | |
3411 | 350 | break; | |
3412 | 350 | case AV_PIX_FMT_RGB4_BYTE: | |
3413 | 350 | *yuv2packedX = yuv2rgb4_byte_full_X_c; | |
3414 | 350 | *yuv2packed2 = yuv2rgb4_byte_full_2_c; | |
3415 | 350 | *yuv2packed1 = yuv2rgb4_byte_full_1_c; | |
3416 | 350 | break; | |
3417 | 700 | case AV_PIX_FMT_BGR8: | |
3418 | 700 | *yuv2packedX = yuv2bgr8_full_X_c; | |
3419 | 700 | *yuv2packed2 = yuv2bgr8_full_2_c; | |
3420 | 700 | *yuv2packed1 = yuv2bgr8_full_1_c; | |
3421 | 700 | break; | |
3422 | 401 | case AV_PIX_FMT_RGB8: | |
3423 | 401 | *yuv2packedX = yuv2rgb8_full_X_c; | |
3424 | 401 | *yuv2packed2 = yuv2rgb8_full_2_c; | |
3425 | 401 | *yuv2packed1 = yuv2rgb8_full_1_c; | |
3426 | 401 | break; | |
3427 | 375 | case AV_PIX_FMT_X2RGB10LE: | |
3428 | 375 | *yuv2packedX = yuv2x2rgb10_full_X_c; | |
3429 | 375 | *yuv2packed2 = yuv2x2rgb10_full_2_c; | |
3430 | 375 | *yuv2packed1 = yuv2x2rgb10_full_1_c; | |
3431 | 375 | break; | |
3432 | 375 | case AV_PIX_FMT_X2BGR10LE: | |
3433 | 375 | *yuv2packedX = yuv2x2bgr10_full_X_c; | |
3434 | 375 | *yuv2packed2 = yuv2x2bgr10_full_2_c; | |
3435 | 375 | *yuv2packed1 = yuv2x2bgr10_full_1_c; | |
3436 | 375 | break; | |
3437 | 24452 | case AV_PIX_FMT_GBRP: | |
3438 | case AV_PIX_FMT_GBRP9BE: | ||
3439 | case AV_PIX_FMT_GBRP9LE: | ||
3440 | case AV_PIX_FMT_GBRP10BE: | ||
3441 | case AV_PIX_FMT_GBRP10LE: | ||
3442 | case AV_PIX_FMT_GBRP12BE: | ||
3443 | case AV_PIX_FMT_GBRP12LE: | ||
3444 | case AV_PIX_FMT_GBRP14BE: | ||
3445 | case AV_PIX_FMT_GBRP14LE: | ||
3446 | case AV_PIX_FMT_GBRAP: | ||
3447 | case AV_PIX_FMT_GBRAP10BE: | ||
3448 | case AV_PIX_FMT_GBRAP10LE: | ||
3449 | case AV_PIX_FMT_GBRAP12BE: | ||
3450 | case AV_PIX_FMT_GBRAP12LE: | ||
3451 | case AV_PIX_FMT_GBRAP14BE: | ||
3452 | case AV_PIX_FMT_GBRAP14LE: | ||
3453 | 24452 | *yuv2anyX = yuv2gbrp_full_X_c; | |
3454 | 24452 | break; | |
3455 | 3678 | case AV_PIX_FMT_GBRP16BE: | |
3456 | case AV_PIX_FMT_GBRP16LE: | ||
3457 | case AV_PIX_FMT_GBRAP16BE: | ||
3458 | case AV_PIX_FMT_GBRAP16LE: | ||
3459 | 3678 | *yuv2anyX = yuv2gbrp16_full_X_c; | |
3460 | 3678 | break; | |
3461 | 1828 | case AV_PIX_FMT_GBRPF32BE: | |
3462 | case AV_PIX_FMT_GBRPF32LE: | ||
3463 | case AV_PIX_FMT_GBRAPF32BE: | ||
3464 | case AV_PIX_FMT_GBRAPF32LE: | ||
3465 | 1828 | *yuv2anyX = yuv2gbrpf32_full_X_c; | |
3466 | 1828 | break; | |
3467 | } | ||
3468 |
3/4✓ Branch 0 taken 29958 times.
✓ Branch 1 taken 11757 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 29958 times.
|
41715 | if (!*yuv2packedX && !*yuv2anyX) |
3469 | ✗ | goto YUV_PACKED; | |
3470 | } else { | ||
3471 | 140965 | YUV_PACKED: | |
3472 |
21/21✓ Branch 0 taken 137 times.
✓ Branch 1 taken 91 times.
✓ Branch 2 taken 91 times.
✓ Branch 3 taken 91 times.
✓ Branch 4 taken 3491 times.
✓ Branch 5 taken 197 times.
✓ Branch 6 taken 94 times.
✓ Branch 7 taken 91 times.
✓ Branch 8 taken 1364 times.
✓ Branch 9 taken 444 times.
✓ Branch 10 taken 6252 times.
✓ Branch 11 taken 1416 times.
✓ Branch 12 taken 1320 times.
✓ Branch 13 taken 2431 times.
✓ Branch 14 taken 376 times.
✓ Branch 15 taken 1091 times.
✓ Branch 16 taken 78 times.
✓ Branch 17 taken 209 times.
✓ Branch 18 taken 52 times.
✓ Branch 19 taken 52 times.
✓ Branch 20 taken 121597 times.
|
140965 | switch (dstFormat) { |
3473 | 137 | case AV_PIX_FMT_RGBA64LE: | |
3474 | #if CONFIG_SWSCALE_ALPHA | ||
3475 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 137 times.
|
137 | if (c->needAlpha) { |
3476 | ✗ | *yuv2packed1 = yuv2rgba64le_1_c; | |
3477 | ✗ | *yuv2packed2 = yuv2rgba64le_2_c; | |
3478 | ✗ | *yuv2packedX = yuv2rgba64le_X_c; | |
3479 | } else | ||
3480 | #endif /* CONFIG_SWSCALE_ALPHA */ | ||
3481 | { | ||
3482 | 137 | *yuv2packed1 = yuv2rgbx64le_1_c; | |
3483 | 137 | *yuv2packed2 = yuv2rgbx64le_2_c; | |
3484 | 137 | *yuv2packedX = yuv2rgbx64le_X_c; | |
3485 | } | ||
3486 | 137 | break; | |
3487 | 91 | case AV_PIX_FMT_RGBA64BE: | |
3488 | #if CONFIG_SWSCALE_ALPHA | ||
3489 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 91 times.
|
91 | if (c->needAlpha) { |
3490 | ✗ | *yuv2packed1 = yuv2rgba64be_1_c; | |
3491 | ✗ | *yuv2packed2 = yuv2rgba64be_2_c; | |
3492 | ✗ | *yuv2packedX = yuv2rgba64be_X_c; | |
3493 | } else | ||
3494 | #endif /* CONFIG_SWSCALE_ALPHA */ | ||
3495 | { | ||
3496 | 91 | *yuv2packed1 = yuv2rgbx64be_1_c; | |
3497 | 91 | *yuv2packed2 = yuv2rgbx64be_2_c; | |
3498 | 91 | *yuv2packedX = yuv2rgbx64be_X_c; | |
3499 | } | ||
3500 | 91 | break; | |
3501 | 91 | case AV_PIX_FMT_BGRA64LE: | |
3502 | #if CONFIG_SWSCALE_ALPHA | ||
3503 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 91 times.
|
91 | if (c->needAlpha) { |
3504 | ✗ | *yuv2packed1 = yuv2bgra64le_1_c; | |
3505 | ✗ | *yuv2packed2 = yuv2bgra64le_2_c; | |
3506 | ✗ | *yuv2packedX = yuv2bgra64le_X_c; | |
3507 | } else | ||
3508 | #endif /* CONFIG_SWSCALE_ALPHA */ | ||
3509 | { | ||
3510 | 91 | *yuv2packed1 = yuv2bgrx64le_1_c; | |
3511 | 91 | *yuv2packed2 = yuv2bgrx64le_2_c; | |
3512 | 91 | *yuv2packedX = yuv2bgrx64le_X_c; | |
3513 | } | ||
3514 | 91 | break; | |
3515 | 91 | case AV_PIX_FMT_BGRA64BE: | |
3516 | #if CONFIG_SWSCALE_ALPHA | ||
3517 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 91 times.
|
91 | if (c->needAlpha) { |
3518 | ✗ | *yuv2packed1 = yuv2bgra64be_1_c; | |
3519 | ✗ | *yuv2packed2 = yuv2bgra64be_2_c; | |
3520 | ✗ | *yuv2packedX = yuv2bgra64be_X_c; | |
3521 | } else | ||
3522 | #endif /* CONFIG_SWSCALE_ALPHA */ | ||
3523 | { | ||
3524 | 91 | *yuv2packed1 = yuv2bgrx64be_1_c; | |
3525 | 91 | *yuv2packed2 = yuv2bgrx64be_2_c; | |
3526 | 91 | *yuv2packedX = yuv2bgrx64be_X_c; | |
3527 | } | ||
3528 | 91 | break; | |
3529 | 3491 | case AV_PIX_FMT_RGB48LE: | |
3530 | 3491 | *yuv2packed1 = yuv2rgb48le_1_c; | |
3531 | 3491 | *yuv2packed2 = yuv2rgb48le_2_c; | |
3532 | 3491 | *yuv2packedX = yuv2rgb48le_X_c; | |
3533 | 3491 | break; | |
3534 | 197 | case AV_PIX_FMT_RGB48BE: | |
3535 | 197 | *yuv2packed1 = yuv2rgb48be_1_c; | |
3536 | 197 | *yuv2packed2 = yuv2rgb48be_2_c; | |
3537 | 197 | *yuv2packedX = yuv2rgb48be_X_c; | |
3538 | 197 | break; | |
3539 | 94 | case AV_PIX_FMT_BGR48LE: | |
3540 | 94 | *yuv2packed1 = yuv2bgr48le_1_c; | |
3541 | 94 | *yuv2packed2 = yuv2bgr48le_2_c; | |
3542 | 94 | *yuv2packedX = yuv2bgr48le_X_c; | |
3543 | 94 | break; | |
3544 | 91 | case AV_PIX_FMT_BGR48BE: | |
3545 | 91 | *yuv2packed1 = yuv2bgr48be_1_c; | |
3546 | 91 | *yuv2packed2 = yuv2bgr48be_2_c; | |
3547 | 91 | *yuv2packedX = yuv2bgr48be_X_c; | |
3548 | 91 | break; | |
3549 | 1364 | case AV_PIX_FMT_RGB32: | |
3550 | case AV_PIX_FMT_BGR32: | ||
3551 | #if CONFIG_SMALL | ||
3552 | *yuv2packed1 = yuv2rgb32_1_c; | ||
3553 | *yuv2packed2 = yuv2rgb32_2_c; | ||
3554 | *yuv2packedX = yuv2rgb32_X_c; | ||
3555 | #else | ||
3556 | #if CONFIG_SWSCALE_ALPHA | ||
3557 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1364 times.
|
1364 | if (c->needAlpha) { |
3558 | ✗ | *yuv2packed1 = yuv2rgba32_1_c; | |
3559 | ✗ | *yuv2packed2 = yuv2rgba32_2_c; | |
3560 | ✗ | *yuv2packedX = yuv2rgba32_X_c; | |
3561 | } else | ||
3562 | #endif /* CONFIG_SWSCALE_ALPHA */ | ||
3563 | { | ||
3564 | 1364 | *yuv2packed1 = yuv2rgbx32_1_c; | |
3565 | 1364 | *yuv2packed2 = yuv2rgbx32_2_c; | |
3566 | 1364 | *yuv2packedX = yuv2rgbx32_X_c; | |
3567 | } | ||
3568 | #endif /* !CONFIG_SMALL */ | ||
3569 | 1364 | break; | |
3570 | 444 | case AV_PIX_FMT_RGB32_1: | |
3571 | case AV_PIX_FMT_BGR32_1: | ||
3572 | #if CONFIG_SMALL | ||
3573 | *yuv2packed1 = yuv2rgb32_1_1_c; | ||
3574 | *yuv2packed2 = yuv2rgb32_1_2_c; | ||
3575 | *yuv2packedX = yuv2rgb32_1_X_c; | ||
3576 | #else | ||
3577 | #if CONFIG_SWSCALE_ALPHA | ||
3578 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 444 times.
|
444 | if (c->needAlpha) { |
3579 | ✗ | *yuv2packed1 = yuv2rgba32_1_1_c; | |
3580 | ✗ | *yuv2packed2 = yuv2rgba32_1_2_c; | |
3581 | ✗ | *yuv2packedX = yuv2rgba32_1_X_c; | |
3582 | } else | ||
3583 | #endif /* CONFIG_SWSCALE_ALPHA */ | ||
3584 | { | ||
3585 | 444 | *yuv2packed1 = yuv2rgbx32_1_1_c; | |
3586 | 444 | *yuv2packed2 = yuv2rgbx32_1_2_c; | |
3587 | 444 | *yuv2packedX = yuv2rgbx32_1_X_c; | |
3588 | } | ||
3589 | #endif /* !CONFIG_SMALL */ | ||
3590 | 444 | break; | |
3591 | 6252 | case AV_PIX_FMT_RGB24: | |
3592 | 6252 | *yuv2packed1 = yuv2rgb24_1_c; | |
3593 | 6252 | *yuv2packed2 = yuv2rgb24_2_c; | |
3594 | 6252 | *yuv2packedX = yuv2rgb24_X_c; | |
3595 | 6252 | break; | |
3596 | 1416 | case AV_PIX_FMT_BGR24: | |
3597 | 1416 | *yuv2packed1 = yuv2bgr24_1_c; | |
3598 | 1416 | *yuv2packed2 = yuv2bgr24_2_c; | |
3599 | 1416 | *yuv2packedX = yuv2bgr24_X_c; | |
3600 | 1416 | break; | |
3601 | 1320 | case AV_PIX_FMT_RGB565LE: | |
3602 | case AV_PIX_FMT_RGB565BE: | ||
3603 | case AV_PIX_FMT_BGR565LE: | ||
3604 | case AV_PIX_FMT_BGR565BE: | ||
3605 | 1320 | *yuv2packed1 = yuv2rgb16_1_c; | |
3606 | 1320 | *yuv2packed2 = yuv2rgb16_2_c; | |
3607 | 1320 | *yuv2packedX = yuv2rgb16_X_c; | |
3608 | 1320 | break; | |
3609 | 2431 | case AV_PIX_FMT_RGB555LE: | |
3610 | case AV_PIX_FMT_RGB555BE: | ||
3611 | case AV_PIX_FMT_BGR555LE: | ||
3612 | case AV_PIX_FMT_BGR555BE: | ||
3613 | 2431 | *yuv2packed1 = yuv2rgb15_1_c; | |
3614 | 2431 | *yuv2packed2 = yuv2rgb15_2_c; | |
3615 | 2431 | *yuv2packedX = yuv2rgb15_X_c; | |
3616 | 2431 | break; | |
3617 | 376 | case AV_PIX_FMT_RGB444LE: | |
3618 | case AV_PIX_FMT_RGB444BE: | ||
3619 | case AV_PIX_FMT_BGR444LE: | ||
3620 | case AV_PIX_FMT_BGR444BE: | ||
3621 | 376 | *yuv2packed1 = yuv2rgb12_1_c; | |
3622 | 376 | *yuv2packed2 = yuv2rgb12_2_c; | |
3623 | 376 | *yuv2packedX = yuv2rgb12_X_c; | |
3624 | 376 | break; | |
3625 | 1091 | case AV_PIX_FMT_RGB8: | |
3626 | case AV_PIX_FMT_BGR8: | ||
3627 | 1091 | *yuv2packed1 = yuv2rgb8_1_c; | |
3628 | 1091 | *yuv2packed2 = yuv2rgb8_2_c; | |
3629 | 1091 | *yuv2packedX = yuv2rgb8_X_c; | |
3630 | 1091 | break; | |
3631 | 78 | case AV_PIX_FMT_RGB4: | |
3632 | case AV_PIX_FMT_BGR4: | ||
3633 | 78 | *yuv2packed1 = yuv2rgb4_1_c; | |
3634 | 78 | *yuv2packed2 = yuv2rgb4_2_c; | |
3635 | 78 | *yuv2packedX = yuv2rgb4_X_c; | |
3636 | 78 | break; | |
3637 | 209 | case AV_PIX_FMT_RGB4_BYTE: | |
3638 | case AV_PIX_FMT_BGR4_BYTE: | ||
3639 | 209 | *yuv2packed1 = yuv2rgb4b_1_c; | |
3640 | 209 | *yuv2packed2 = yuv2rgb4b_2_c; | |
3641 | 209 | *yuv2packedX = yuv2rgb4b_X_c; | |
3642 | 209 | break; | |
3643 | 52 | case AV_PIX_FMT_X2RGB10LE: | |
3644 | case AV_PIX_FMT_X2RGB10BE: | ||
3645 | 52 | *yuv2packed1 = yuv2x2rgb10_1_c; | |
3646 | 52 | *yuv2packed2 = yuv2x2rgb10_2_c; | |
3647 | 52 | *yuv2packedX = yuv2x2rgb10_X_c; | |
3648 | 52 | break; | |
3649 | 52 | case AV_PIX_FMT_X2BGR10LE: | |
3650 | case AV_PIX_FMT_X2BGR10BE: | ||
3651 | 52 | *yuv2packed1 = yuv2x2bgr10_1_c; | |
3652 | 52 | *yuv2packed2 = yuv2x2bgr10_2_c; | |
3653 | 52 | *yuv2packedX = yuv2x2bgr10_X_c; | |
3654 | 52 | break; | |
3655 | } | ||
3656 | } | ||
3657 |
24/24✓ Branch 0 taken 1512 times.
✓ Branch 1 taken 598 times.
✓ Branch 2 taken 610 times.
✓ Branch 3 taken 547 times.
✓ Branch 4 taken 850 times.
✓ Branch 5 taken 963 times.
✓ Branch 6 taken 58 times.
✓ Branch 7 taken 58 times.
✓ Branch 8 taken 55 times.
✓ Branch 9 taken 955 times.
✓ Branch 10 taken 55 times.
✓ Branch 11 taken 55 times.
✓ Branch 12 taken 58 times.
✓ Branch 13 taken 617 times.
✓ Branch 14 taken 462 times.
✓ Branch 15 taken 551 times.
✓ Branch 16 taken 551 times.
✓ Branch 17 taken 551 times.
✓ Branch 18 taken 675 times.
✓ Branch 19 taken 675 times.
✓ Branch 20 taken 542 times.
✓ Branch 21 taken 542 times.
✓ Branch 22 taken 666 times.
✓ Branch 23 taken 170474 times.
|
182680 | switch (dstFormat) { |
3658 | 1512 | case AV_PIX_FMT_MONOWHITE: | |
3659 | 1512 | *yuv2packed1 = yuv2monowhite_1_c; | |
3660 | 1512 | *yuv2packed2 = yuv2monowhite_2_c; | |
3661 | 1512 | *yuv2packedX = yuv2monowhite_X_c; | |
3662 | 1512 | break; | |
3663 | 598 | case AV_PIX_FMT_MONOBLACK: | |
3664 | 598 | *yuv2packed1 = yuv2monoblack_1_c; | |
3665 | 598 | *yuv2packed2 = yuv2monoblack_2_c; | |
3666 | 598 | *yuv2packedX = yuv2monoblack_X_c; | |
3667 | 598 | break; | |
3668 | 610 | case AV_PIX_FMT_YUYV422: | |
3669 | 610 | *yuv2packed1 = yuv2yuyv422_1_c; | |
3670 | 610 | *yuv2packed2 = yuv2yuyv422_2_c; | |
3671 | 610 | *yuv2packedX = yuv2yuyv422_X_c; | |
3672 | 610 | break; | |
3673 | 547 | case AV_PIX_FMT_YVYU422: | |
3674 | 547 | *yuv2packed1 = yuv2yvyu422_1_c; | |
3675 | 547 | *yuv2packed2 = yuv2yvyu422_2_c; | |
3676 | 547 | *yuv2packedX = yuv2yvyu422_X_c; | |
3677 | 547 | break; | |
3678 | 850 | case AV_PIX_FMT_UYVY422: | |
3679 | 850 | *yuv2packed1 = yuv2uyvy422_1_c; | |
3680 | 850 | *yuv2packed2 = yuv2uyvy422_2_c; | |
3681 | 850 | *yuv2packedX = yuv2uyvy422_X_c; | |
3682 | 850 | break; | |
3683 | 963 | case AV_PIX_FMT_VYU444: | |
3684 | 963 | *yuv2packed1 = yuv2vyu444_1_c; | |
3685 | 963 | *yuv2packed2 = yuv2vyu444_2_c; | |
3686 | 963 | *yuv2packedX = yuv2vyu444_X_c; | |
3687 | 963 | break; | |
3688 | 58 | case AV_PIX_FMT_YA8: | |
3689 | 58 | *yuv2packed1 = yuv2ya8_1_c; | |
3690 | 58 | *yuv2packed2 = yuv2ya8_2_c; | |
3691 | 58 | *yuv2packedX = yuv2ya8_X_c; | |
3692 | 58 | break; | |
3693 | 58 | case AV_PIX_FMT_YA16LE: | |
3694 | 58 | *yuv2packed1 = yuv2ya16le_1_c; | |
3695 | 58 | *yuv2packed2 = yuv2ya16le_2_c; | |
3696 | 58 | *yuv2packedX = yuv2ya16le_X_c; | |
3697 | 58 | break; | |
3698 | 55 | case AV_PIX_FMT_YA16BE: | |
3699 | 55 | *yuv2packed1 = yuv2ya16be_1_c; | |
3700 | 55 | *yuv2packed2 = yuv2ya16be_2_c; | |
3701 | 55 | *yuv2packedX = yuv2ya16be_X_c; | |
3702 | 55 | break; | |
3703 | 955 | case AV_PIX_FMT_V30XLE: | |
3704 | 955 | *yuv2packedX = yuv2v30xle_X_c; | |
3705 | 955 | break; | |
3706 | 55 | case AV_PIX_FMT_AYUV64LE: | |
3707 | 55 | *yuv2packedX = yuv2ayuv64le_X_c; | |
3708 | 55 | break; | |
3709 | 55 | case AV_PIX_FMT_AYUV64BE: | |
3710 | 55 | *yuv2packedX = yuv2ayuv64be_X_c; | |
3711 | 55 | break; | |
3712 | 58 | case AV_PIX_FMT_AYUV: | |
3713 | 58 | *yuv2packed1 = yuv2ayuv_1_c; | |
3714 | 58 | *yuv2packed2 = yuv2ayuv_2_c; | |
3715 | 58 | *yuv2packedX = yuv2ayuv_X_c; | |
3716 | 58 | break; | |
3717 | 617 | case AV_PIX_FMT_VUYA: | |
3718 | case AV_PIX_FMT_VUYX: | ||
3719 | 617 | *yuv2packed1 = yuv2vuyX_1_c; | |
3720 | 617 | *yuv2packed2 = yuv2vuyX_2_c; | |
3721 | 617 | *yuv2packedX = yuv2vuyX_X_c; | |
3722 | 617 | break; | |
3723 | 462 | case AV_PIX_FMT_UYVA: | |
3724 | 462 | *yuv2packed1 = yuv2uyva_1_c; | |
3725 | 462 | *yuv2packed2 = yuv2uyva_2_c; | |
3726 | 462 | *yuv2packedX = yuv2uyva_X_c; | |
3727 | 462 | break; | |
3728 | 551 | case AV_PIX_FMT_XV30LE: | |
3729 | 551 | *yuv2packedX = yuv2xv30le_X_c; | |
3730 | 551 | break; | |
3731 | 551 | case AV_PIX_FMT_XV36LE: | |
3732 | 551 | *yuv2packedX = yuv2xv36le_X_c; | |
3733 | 551 | break; | |
3734 | 551 | case AV_PIX_FMT_XV36BE: | |
3735 | 551 | *yuv2packedX = yuv2xv36be_X_c; | |
3736 | 551 | break; | |
3737 | 675 | case AV_PIX_FMT_XV48LE: | |
3738 | 675 | *yuv2packedX = yuv2xv48le_X_c; | |
3739 | 675 | break; | |
3740 | 675 | case AV_PIX_FMT_XV48BE: | |
3741 | 675 | *yuv2packedX = yuv2xv48be_X_c; | |
3742 | 675 | break; | |
3743 | 542 | case AV_PIX_FMT_Y210LE: | |
3744 | 542 | *yuv2packedX = yuv2y210le_X_c; | |
3745 | 542 | break; | |
3746 | 542 | case AV_PIX_FMT_Y212LE: | |
3747 | 542 | *yuv2packedX = yuv2y212le_X_c; | |
3748 | 542 | break; | |
3749 | 666 | case AV_PIX_FMT_Y216LE: | |
3750 | 666 | *yuv2packedX = yuv2y216le_X_c; | |
3751 | 666 | break; | |
3752 | } | ||
3753 | 182680 | } | |
3754 |