/src/ffmpeg/libswscale/yuv2rgb.c
Line | Count | Source |
1 | | /* |
2 | | * software YUV to RGB converter |
3 | | * |
4 | | * Copyright (C) 2009 Konstantin Shishkov |
5 | | * |
6 | | * 1,4,8bpp support and context / deglobalize stuff |
7 | | * by Michael Niedermayer (michaelni@gmx.at) |
8 | | * |
9 | | * This file is part of FFmpeg. |
10 | | * |
11 | | * FFmpeg is free software; you can redistribute it and/or |
12 | | * modify it under the terms of the GNU Lesser General Public |
13 | | * License as published by the Free Software Foundation; either |
14 | | * version 2.1 of the License, or (at your option) any later version. |
15 | | * |
16 | | * FFmpeg is distributed in the hope that it will be useful, |
17 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
18 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
19 | | * Lesser General Public License for more details. |
20 | | * |
21 | | * You should have received a copy of the GNU Lesser General Public |
22 | | * License along with FFmpeg; if not, write to the Free Software |
23 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
24 | | */ |
25 | | |
26 | | #include <stddef.h> |
27 | | #include <stdint.h> |
28 | | |
29 | | #include "libavutil/bswap.h" |
30 | | #include "libavutil/mem.h" |
31 | | #include "config.h" |
32 | | #include "swscale.h" |
33 | | #include "swscale_internal.h" |
34 | | #include "libavutil/pixdesc.h" |
35 | | |
36 | | /* Color space conversion coefficients for YCbCr -> RGB mapping. |
37 | | * |
38 | | * Entries are {crv, cbu, cgu, cgv} |
39 | | * |
40 | | * crv = (255 / 224) * 65536 * (1 - cr) / 0.5 |
41 | | * cbu = (255 / 224) * 65536 * (1 - cb) / 0.5 |
42 | | * cgu = (255 / 224) * 65536 * (cb / cg) * (1 - cb) / 0.5 |
43 | | * cgv = (255 / 224) * 65536 * (cr / cg) * (1 - cr) / 0.5 |
44 | | * |
45 | | * where Y = cr * R + cg * G + cb * B and cr + cg + cb = 1. |
46 | | */ |
47 | | const int32_t ff_yuv2rgb_coeffs[11][4] = { |
48 | | { 104597, 132201, 25675, 53279 }, /* no sequence_display_extension */ |
49 | | { 117489, 138438, 13975, 34925 }, /* ITU-R Rec. 709 (1990) */ |
50 | | { 104597, 132201, 25675, 53279 }, /* unspecified */ |
51 | | { 104597, 132201, 25675, 53279 }, /* reserved */ |
52 | | { 104448, 132798, 24759, 53109 }, /* FCC */ |
53 | | { 104597, 132201, 25675, 53279 }, /* ITU-R Rec. 624-4 System B, G */ |
54 | | { 104597, 132201, 25675, 53279 }, /* SMPTE 170M */ |
55 | | { 117579, 136230, 16907, 35559 }, /* SMPTE 240M (1987) */ |
56 | | { 0 }, /* YCgCo */ |
57 | | { 110013, 140363, 12277, 42626 }, /* Bt-2020-NCL */ |
58 | | { 110013, 140363, 12277, 42626 }, /* Bt-2020-CL */ |
59 | | }; |
60 | | |
61 | | const int *sws_getCoefficients(int colorspace) |
62 | 0 | { |
63 | 0 | if (colorspace > 10 || colorspace < 0 || colorspace == 8) |
64 | 0 | colorspace = SWS_CS_DEFAULT; |
65 | 0 | return ff_yuv2rgb_coeffs[colorspace]; |
66 | 0 | } |
67 | | |
68 | | #define LOADCHROMA(l, i) \ |
69 | 876k | U = pu_##l[i]; \ |
70 | 876k | V = pv_##l[i]; \ |
71 | 876k | r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \ |
72 | 876k | g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \ |
73 | 876k | b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; |
74 | | |
75 | | #define PUTRGB(l, i, abase) \ |
76 | 90.9k | Y = py_##l[2 * i]; \ |
77 | 90.9k | dst_##l[2 * i] = r[Y] + g[Y] + b[Y]; \ |
78 | 90.9k | Y = py_##l[2 * i + 1]; \ |
79 | 90.9k | dst_##l[2 * i + 1] = r[Y] + g[Y] + b[Y]; |
80 | | |
81 | | #define PUTRGB24(l, i, abase) \ |
82 | 86.7k | Y = py_##l[2 * i]; \ |
83 | 86.7k | dst_##l[6 * i + 0] = r[Y]; \ |
84 | 86.7k | dst_##l[6 * i + 1] = g[Y]; \ |
85 | 86.7k | dst_##l[6 * i + 2] = b[Y]; \ |
86 | 86.7k | Y = py_##l[2 * i + 1]; \ |
87 | 86.7k | dst_##l[6 * i + 3] = r[Y]; \ |
88 | 86.7k | dst_##l[6 * i + 4] = g[Y]; \ |
89 | 86.7k | dst_##l[6 * i + 5] = b[Y]; |
90 | | |
91 | | #define PUTBGR24(l, i, abase) \ |
92 | 74.0k | Y = py_##l[2 * i]; \ |
93 | 74.0k | dst_##l[6 * i + 0] = b[Y]; \ |
94 | 74.0k | dst_##l[6 * i + 1] = g[Y]; \ |
95 | 74.0k | dst_##l[6 * i + 2] = r[Y]; \ |
96 | 74.0k | Y = py_##l[2 * i + 1]; \ |
97 | 74.0k | dst_##l[6 * i + 3] = b[Y]; \ |
98 | 74.0k | dst_##l[6 * i + 4] = g[Y]; \ |
99 | 74.0k | dst_##l[6 * i + 5] = r[Y]; |
100 | | |
101 | | #define PUTRGBA(l, i, abase) \ |
102 | 127k | Y = py_##l[2 * i]; \ |
103 | 127k | dst_##l[2 * i] = r[Y] + g[Y] + b[Y] + ((uint32_t)(pa_##l[2 * i]) << abase); \ |
104 | 127k | Y = py_##l[2 * i + 1]; \ |
105 | 127k | dst_##l[2 * i + 1] = r[Y] + g[Y] + b[Y] + ((uint32_t)(pa_##l[2 * i + 1]) << abase); |
106 | | |
107 | | #define PUTRGB48(l, i, abase) \ |
108 | 100k | Y = py_##l[ 2 * i]; \ |
109 | 100k | dst_##l[12 * i + 0] = dst_##l[12 * i + 1] = r[Y]; \ |
110 | 100k | dst_##l[12 * i + 2] = dst_##l[12 * i + 3] = g[Y]; \ |
111 | 100k | dst_##l[12 * i + 4] = dst_##l[12 * i + 5] = b[Y]; \ |
112 | 100k | Y = py_##l[ 2 * i + 1]; \ |
113 | 100k | dst_##l[12 * i + 6] = dst_##l[12 * i + 7] = r[Y]; \ |
114 | 100k | dst_##l[12 * i + 8] = dst_##l[12 * i + 9] = g[Y]; \ |
115 | 100k | dst_##l[12 * i + 10] = dst_##l[12 * i + 11] = b[Y]; |
116 | | |
117 | | #define PUTBGR48(l, i, abase) \ |
118 | 80.9k | Y = py_##l[2 * i]; \ |
119 | 80.9k | dst_##l[12 * i + 0] = dst_##l[12 * i + 1] = b[Y]; \ |
120 | 80.9k | dst_##l[12 * i + 2] = dst_##l[12 * i + 3] = g[Y]; \ |
121 | 80.9k | dst_##l[12 * i + 4] = dst_##l[12 * i + 5] = r[Y]; \ |
122 | 80.9k | Y = py_##l[2 * i + 1]; \ |
123 | 80.9k | dst_##l[12 * i + 6] = dst_##l[12 * i + 7] = b[Y]; \ |
124 | 80.9k | dst_##l[12 * i + 8] = dst_##l[12 * i + 9] = g[Y]; \ |
125 | 80.9k | dst_##l[12 * i + 10] = dst_##l[12 * i + 11] = r[Y]; |
126 | | |
127 | | #define PUTGBRP(l, i, abase) \ |
128 | 71.4k | Y = py_##l[2 * i]; \ |
129 | 71.4k | dst_##l [2 * i + 0] = g[Y]; \ |
130 | 71.4k | dst1_##l[2 * i + 0] = b[Y]; \ |
131 | 71.4k | dst2_##l[2 * i + 0] = r[Y]; \ |
132 | 71.4k | Y = py_##l[2 * i + 1]; \ |
133 | 71.4k | dst_##l [2 * i + 1] = g[Y]; \ |
134 | 71.4k | dst1_##l[2 * i + 1] = b[Y]; \ |
135 | 71.4k | dst2_##l[2 * i + 1] = r[Y]; |
136 | | |
137 | | #define YUV2RGBFUNC(func_name, dst_type, alpha, yuv422, nb_dst_planes) \ |
138 | | static int func_name(SwsInternal *c, const uint8_t *const src[], \ |
139 | | const int srcStride[], int srcSliceY, int srcSliceH, \ |
140 | | uint8_t *const dst[], const int dstStride[]) \ |
141 | 645 | { \ |
142 | 645 | int y; \ |
143 | 645 | \ |
144 | 56.0k | for (y = 0; y < srcSliceH; y += 2) { \ |
145 | 55.4k | int yd = y + srcSliceY; \ |
146 | 55.4k | dst_type *dst_1 = \ |
147 | 55.4k | (dst_type *)(dst[0] + (yd) * dstStride[0]); \ |
148 | 55.4k | dst_type *dst_2 = \ |
149 | 55.4k | (dst_type *)(dst[0] + (yd + 1) * dstStride[0]); \ |
150 | 55.4k | av_unused dst_type *dst1_1, *dst1_2, *dst2_1, *dst2_2; \ |
151 | 55.4k | av_unused dst_type *r, *g, *b; \ |
152 | 55.4k | const uint8_t *py_1 = src[0] + y * srcStride[0]; \ |
153 | 55.4k | const uint8_t *py_2 = py_1 + srcStride[0]; \ |
154 | 55.4k | av_unused const uint8_t *pu_1 = src[1] + (y >> !yuv422) * srcStride[1]; \ |
155 | 55.4k | av_unused const uint8_t *pv_1 = src[2] + (y >> !yuv422) * srcStride[2]; \ |
156 | 55.4k | av_unused const uint8_t *pu_2, *pv_2; \ |
157 | 55.4k | av_unused const uint8_t *pa_1, *pa_2; \ |
158 | 55.4k | unsigned int h_size = c->opts.dst_w >> 3; \ |
159 | 55.4k | if (nb_dst_planes > 1) { \ |
160 | 3.26k | dst1_1 = (dst_type *)(dst[1] + (yd) * dstStride[1]); \ |
161 | 3.26k | dst1_2 = (dst_type *)(dst[1] + (yd + 1) * dstStride[1]); \ |
162 | 3.26k | dst2_1 = (dst_type *)(dst[2] + (yd) * dstStride[2]); \ |
163 | 3.26k | dst2_2 = (dst_type *)(dst[2] + (yd + 1) * dstStride[2]); \ |
164 | 3.26k | } \ |
165 | 55.4k | if (yuv422) { \ |
166 | 23.4k | pu_2 = pu_1 + srcStride[1]; \ |
167 | 23.4k | pv_2 = pv_1 + srcStride[2]; \ |
168 | 23.4k | } \ |
169 | 55.4k | if (alpha) { \ |
170 | 8.62k | pa_1 = src[3] + y * srcStride[3]; \ |
171 | 8.62k | pa_2 = pa_1 + srcStride[3]; \ |
172 | 8.62k | } \ |
173 | 206k | while (h_size--) { \ |
174 | 151k | av_unused int U, V, Y; \ |
175 | | |
176 | | #define ENDYUV2RGBLINE(dst_delta, ss, alpha, yuv422, nb_dst_planes) \ |
177 | 156k | pu_1 += 4 >> ss; \ |
178 | 156k | pv_1 += 4 >> ss; \ |
179 | 156k | if (yuv422) { \ |
180 | 66.8k | pu_2 += 4 >> ss; \ |
181 | 66.8k | pv_2 += 4 >> ss; \ |
182 | 66.8k | } \ |
183 | 156k | py_1 += 8 >> ss; \ |
184 | 156k | py_2 += 8 >> ss; \ |
185 | 156k | if (alpha) { \ |
186 | 15.8k | pa_1 += 8 >> ss; \ |
187 | 15.8k | pa_2 += 8 >> ss; \ |
188 | 15.8k | } \ |
189 | 156k | dst_1 += dst_delta >> ss; \ |
190 | 156k | dst_2 += dst_delta >> ss; \ |
191 | 156k | if (nb_dst_planes > 1) { \ |
192 | 8.93k | dst1_1 += dst_delta >> ss; \ |
193 | 8.93k | dst1_2 += dst_delta >> ss; \ |
194 | 8.93k | dst2_1 += dst_delta >> ss; \ |
195 | 8.93k | dst2_2 += dst_delta >> ss; \ |
196 | 8.93k | } \ |
197 | 156k | } \ |
198 | 107k | if (c->opts.dst_w & (4 >> ss)) { \ |
199 | 35.3k | av_unused int Y, U, V; \ |
200 | | |
201 | | #define ENDYUV2RGBFUNC() \ |
202 | 21.2k | } \ |
203 | 55.4k | } \ |
204 | 645 | return srcSliceH; \ |
205 | 645 | } |
206 | | |
207 | | #define YUV420FUNC(func_name, dst_type, alpha, abase, PUTFUNC, dst_delta, nb_dst_planes) \ |
208 | 45.4k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ |
209 | 45.4k | LOADCHROMA(1, 0); \ |
210 | 45.4k | PUTFUNC(1, 0, abase); \ |
211 | 45.4k | PUTFUNC(2, 0, abase); \ |
212 | 45.4k | \ |
213 | 45.4k | LOADCHROMA(1, 1); \ |
214 | 45.4k | PUTFUNC(2, 1, abase); \ |
215 | 45.4k | PUTFUNC(1, 1, abase); \ |
216 | 45.4k | \ |
217 | 45.4k | LOADCHROMA(1, 2); \ |
218 | 45.4k | PUTFUNC(1, 2, abase); \ |
219 | 45.4k | PUTFUNC(2, 2, abase); \ |
220 | 45.4k | \ |
221 | 45.4k | LOADCHROMA(1, 3); \ |
222 | 45.4k | PUTFUNC(2, 3, abase); \ |
223 | 45.4k | PUTFUNC(1, 3, abase); \ |
224 | 45.4k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ |
225 | 4.71k | LOADCHROMA(1, 0); \ |
226 | 4.71k | PUTFUNC(1, 0, abase); \ |
227 | 4.71k | PUTFUNC(2, 0, abase); \ |
228 | 4.71k | \ |
229 | 4.71k | LOADCHROMA(1, 1); \ |
230 | 4.71k | PUTFUNC(2, 1, abase); \ |
231 | 4.71k | PUTFUNC(1, 1, abase); \ |
232 | 5.32k | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ |
233 | 5.32k | LOADCHROMA(1, 0); \ |
234 | 5.32k | PUTFUNC(1, 0, abase); \ |
235 | 5.32k | PUTFUNC(2, 0, abase); \ |
236 | 5.32k | ENDYUV2RGBFUNC() yuv2rgb.c:yuv2rgb_c_bgr48 Line | Count | Source | 208 | 4.63k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 4.63k | LOADCHROMA(1, 0); \ | 210 | 4.63k | PUTFUNC(1, 0, abase); \ | 211 | 4.63k | PUTFUNC(2, 0, abase); \ | 212 | 4.63k | \ | 213 | 4.63k | LOADCHROMA(1, 1); \ | 214 | 4.63k | PUTFUNC(2, 1, abase); \ | 215 | 4.63k | PUTFUNC(1, 1, abase); \ | 216 | 4.63k | \ | 217 | 4.63k | LOADCHROMA(1, 2); \ | 218 | 4.63k | PUTFUNC(1, 2, abase); \ | 219 | 4.63k | PUTFUNC(2, 2, abase); \ | 220 | 4.63k | \ | 221 | 4.63k | LOADCHROMA(1, 3); \ | 222 | 4.63k | PUTFUNC(2, 3, abase); \ | 223 | 4.63k | PUTFUNC(1, 3, abase); \ | 224 | 4.63k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 281 | LOADCHROMA(1, 0); \ | 226 | 281 | PUTFUNC(1, 0, abase); \ | 227 | 281 | PUTFUNC(2, 0, abase); \ | 228 | 281 | \ | 229 | 281 | LOADCHROMA(1, 1); \ | 230 | 281 | PUTFUNC(2, 1, abase); \ | 231 | 281 | PUTFUNC(1, 1, abase); \ | 232 | 1.00k | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 1.00k | LOADCHROMA(1, 0); \ | 234 | 1.00k | PUTFUNC(1, 0, abase); \ | 235 | 1.00k | PUTFUNC(2, 0, abase); \ | 236 | 1.00k | ENDYUV2RGBFUNC() |
Line | Count | Source | 208 | 6.11k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 6.11k | LOADCHROMA(1, 0); \ | 210 | 6.11k | PUTFUNC(1, 0, abase); \ | 211 | 6.11k | PUTFUNC(2, 0, abase); \ | 212 | 6.11k | \ | 213 | 6.11k | LOADCHROMA(1, 1); \ | 214 | 6.11k | PUTFUNC(2, 1, abase); \ | 215 | 6.11k | PUTFUNC(1, 1, abase); \ | 216 | 6.11k | \ | 217 | 6.11k | LOADCHROMA(1, 2); \ | 218 | 6.11k | PUTFUNC(1, 2, abase); \ | 219 | 6.11k | PUTFUNC(2, 2, abase); \ | 220 | 6.11k | \ | 221 | 6.11k | LOADCHROMA(1, 3); \ | 222 | 6.11k | PUTFUNC(2, 3, abase); \ | 223 | 6.11k | PUTFUNC(1, 3, abase); \ | 224 | 6.11k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 234 | LOADCHROMA(1, 0); \ | 226 | 234 | PUTFUNC(1, 0, abase); \ | 227 | 234 | PUTFUNC(2, 0, abase); \ | 228 | 234 | \ | 229 | 234 | LOADCHROMA(1, 1); \ | 230 | 234 | PUTFUNC(2, 1, abase); \ | 231 | 234 | PUTFUNC(1, 1, abase); \ | 232 | 391 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 391 | LOADCHROMA(1, 0); \ | 234 | 391 | PUTFUNC(1, 0, abase); \ | 235 | 391 | PUTFUNC(2, 0, abase); \ | 236 | 391 | ENDYUV2RGBFUNC() |
Line | Count | Source | 208 | 8.05k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 8.05k | LOADCHROMA(1, 0); \ | 210 | 8.05k | PUTFUNC(1, 0, abase); \ | 211 | 8.05k | PUTFUNC(2, 0, abase); \ | 212 | 8.05k | \ | 213 | 8.05k | LOADCHROMA(1, 1); \ | 214 | 8.05k | PUTFUNC(2, 1, abase); \ | 215 | 8.05k | PUTFUNC(1, 1, abase); \ | 216 | 8.05k | \ | 217 | 8.05k | LOADCHROMA(1, 2); \ | 218 | 8.05k | PUTFUNC(1, 2, abase); \ | 219 | 8.05k | PUTFUNC(2, 2, abase); \ | 220 | 8.05k | \ | 221 | 8.05k | LOADCHROMA(1, 3); \ | 222 | 8.05k | PUTFUNC(2, 3, abase); \ | 223 | 8.05k | PUTFUNC(1, 3, abase); \ | 224 | 8.05k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 278 | LOADCHROMA(1, 0); \ | 226 | 278 | PUTFUNC(1, 0, abase); \ | 227 | 278 | PUTFUNC(2, 0, abase); \ | 228 | 278 | \ | 229 | 278 | LOADCHROMA(1, 1); \ | 230 | 278 | PUTFUNC(2, 1, abase); \ | 231 | 278 | PUTFUNC(1, 1, abase); \ | 232 | 611 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 611 | LOADCHROMA(1, 0); \ | 234 | 611 | PUTFUNC(1, 0, abase); \ | 235 | 611 | PUTFUNC(2, 0, abase); \ | 236 | 611 | ENDYUV2RGBFUNC() |
Line | Count | Source | 208 | 7.22k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 7.22k | LOADCHROMA(1, 0); \ | 210 | 7.22k | PUTFUNC(1, 0, abase); \ | 211 | 7.22k | PUTFUNC(2, 0, abase); \ | 212 | 7.22k | \ | 213 | 7.22k | LOADCHROMA(1, 1); \ | 214 | 7.22k | PUTFUNC(2, 1, abase); \ | 215 | 7.22k | PUTFUNC(1, 1, abase); \ | 216 | 7.22k | \ | 217 | 7.22k | LOADCHROMA(1, 2); \ | 218 | 7.22k | PUTFUNC(1, 2, abase); \ | 219 | 7.22k | PUTFUNC(2, 2, abase); \ | 220 | 7.22k | \ | 221 | 7.22k | LOADCHROMA(1, 3); \ | 222 | 7.22k | PUTFUNC(2, 3, abase); \ | 223 | 7.22k | PUTFUNC(1, 3, abase); \ | 224 | 7.22k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 297 | LOADCHROMA(1, 0); \ | 226 | 297 | PUTFUNC(1, 0, abase); \ | 227 | 297 | PUTFUNC(2, 0, abase); \ | 228 | 297 | \ | 229 | 297 | LOADCHROMA(1, 1); \ | 230 | 297 | PUTFUNC(2, 1, abase); \ | 231 | 297 | PUTFUNC(1, 1, abase); \ | 232 | 929 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 929 | LOADCHROMA(1, 0); \ | 234 | 929 | PUTFUNC(1, 0, abase); \ | 235 | 929 | PUTFUNC(2, 0, abase); \ | 236 | 929 | ENDYUV2RGBFUNC() |
Line | Count | Source | 208 | 5.70k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 5.70k | LOADCHROMA(1, 0); \ | 210 | 5.70k | PUTFUNC(1, 0, abase); \ | 211 | 5.70k | PUTFUNC(2, 0, abase); \ | 212 | 5.70k | \ | 213 | 5.70k | LOADCHROMA(1, 1); \ | 214 | 5.70k | PUTFUNC(2, 1, abase); \ | 215 | 5.70k | PUTFUNC(1, 1, abase); \ | 216 | 5.70k | \ | 217 | 5.70k | LOADCHROMA(1, 2); \ | 218 | 5.70k | PUTFUNC(1, 2, abase); \ | 219 | 5.70k | PUTFUNC(2, 2, abase); \ | 220 | 5.70k | \ | 221 | 5.70k | LOADCHROMA(1, 3); \ | 222 | 5.70k | PUTFUNC(2, 3, abase); \ | 223 | 5.70k | PUTFUNC(1, 3, abase); \ | 224 | 5.70k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 318 | LOADCHROMA(1, 0); \ | 226 | 318 | PUTFUNC(1, 0, abase); \ | 227 | 318 | PUTFUNC(2, 0, abase); \ | 228 | 318 | \ | 229 | 318 | LOADCHROMA(1, 1); \ | 230 | 318 | PUTFUNC(2, 1, abase); \ | 231 | 318 | PUTFUNC(1, 1, abase); \ | 232 | 440 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 440 | LOADCHROMA(1, 0); \ | 234 | 440 | PUTFUNC(1, 0, abase); \ | 235 | 440 | PUTFUNC(2, 0, abase); \ | 236 | 440 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv2rgb_c_24_rgb Line | Count | Source | 208 | 4.75k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 4.75k | LOADCHROMA(1, 0); \ | 210 | 4.75k | PUTFUNC(1, 0, abase); \ | 211 | 4.75k | PUTFUNC(2, 0, abase); \ | 212 | 4.75k | \ | 213 | 4.75k | LOADCHROMA(1, 1); \ | 214 | 4.75k | PUTFUNC(2, 1, abase); \ | 215 | 4.75k | PUTFUNC(1, 1, abase); \ | 216 | 4.75k | \ | 217 | 4.75k | LOADCHROMA(1, 2); \ | 218 | 4.75k | PUTFUNC(1, 2, abase); \ | 219 | 4.75k | PUTFUNC(2, 2, abase); \ | 220 | 4.75k | \ | 221 | 4.75k | LOADCHROMA(1, 3); \ | 222 | 4.75k | PUTFUNC(2, 3, abase); \ | 223 | 4.75k | PUTFUNC(1, 3, abase); \ | 224 | 4.75k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 2.57k | LOADCHROMA(1, 0); \ | 226 | 2.57k | PUTFUNC(1, 0, abase); \ | 227 | 2.57k | PUTFUNC(2, 0, abase); \ | 228 | 2.57k | \ | 229 | 2.57k | LOADCHROMA(1, 1); \ | 230 | 2.57k | PUTFUNC(2, 1, abase); \ | 231 | 2.57k | PUTFUNC(1, 1, abase); \ | 232 | 2.57k | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 816 | LOADCHROMA(1, 0); \ | 234 | 816 | PUTFUNC(1, 0, abase); \ | 235 | 816 | PUTFUNC(2, 0, abase); \ | 236 | 816 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv2rgb_c_24_bgr Line | Count | Source | 208 | 4.27k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 4.27k | LOADCHROMA(1, 0); \ | 210 | 4.27k | PUTFUNC(1, 0, abase); \ | 211 | 4.27k | PUTFUNC(2, 0, abase); \ | 212 | 4.27k | \ | 213 | 4.27k | LOADCHROMA(1, 1); \ | 214 | 4.27k | PUTFUNC(2, 1, abase); \ | 215 | 4.27k | PUTFUNC(1, 1, abase); \ | 216 | 4.27k | \ | 217 | 4.27k | LOADCHROMA(1, 2); \ | 218 | 4.27k | PUTFUNC(1, 2, abase); \ | 219 | 4.27k | PUTFUNC(2, 2, abase); \ | 220 | 4.27k | \ | 221 | 4.27k | LOADCHROMA(1, 3); \ | 222 | 4.27k | PUTFUNC(2, 3, abase); \ | 223 | 4.27k | PUTFUNC(1, 3, abase); \ | 224 | 4.27k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 497 | LOADCHROMA(1, 0); \ | 226 | 497 | PUTFUNC(1, 0, abase); \ | 227 | 497 | PUTFUNC(2, 0, abase); \ | 228 | 497 | \ | 229 | 497 | LOADCHROMA(1, 1); \ | 230 | 497 | PUTFUNC(2, 1, abase); \ | 231 | 497 | PUTFUNC(1, 1, abase); \ | 232 | 896 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 896 | LOADCHROMA(1, 0); \ | 234 | 896 | PUTFUNC(1, 0, abase); \ | 235 | 896 | PUTFUNC(2, 0, abase); \ | 236 | 896 | ENDYUV2RGBFUNC() |
Line | Count | Source | 208 | 4.70k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 4.70k | LOADCHROMA(1, 0); \ | 210 | 4.70k | PUTFUNC(1, 0, abase); \ | 211 | 4.70k | PUTFUNC(2, 0, abase); \ | 212 | 4.70k | \ | 213 | 4.70k | LOADCHROMA(1, 1); \ | 214 | 4.70k | PUTFUNC(2, 1, abase); \ | 215 | 4.70k | PUTFUNC(1, 1, abase); \ | 216 | 4.70k | \ | 217 | 4.70k | LOADCHROMA(1, 2); \ | 218 | 4.70k | PUTFUNC(1, 2, abase); \ | 219 | 4.70k | PUTFUNC(2, 2, abase); \ | 220 | 4.70k | \ | 221 | 4.70k | LOADCHROMA(1, 3); \ | 222 | 4.70k | PUTFUNC(2, 3, abase); \ | 223 | 4.70k | PUTFUNC(1, 3, abase); \ | 224 | 4.70k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 236 | LOADCHROMA(1, 0); \ | 226 | 236 | PUTFUNC(1, 0, abase); \ | 227 | 236 | PUTFUNC(2, 0, abase); \ | 228 | 236 | \ | 229 | 236 | LOADCHROMA(1, 1); \ | 230 | 236 | PUTFUNC(2, 1, abase); \ | 231 | 236 | PUTFUNC(1, 1, abase); \ | 232 | 237 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 237 | LOADCHROMA(1, 0); \ | 234 | 237 | PUTFUNC(1, 0, abase); \ | 235 | 237 | PUTFUNC(2, 0, abase); \ | 236 | 237 | ENDYUV2RGBFUNC() |
|
237 | | |
238 | | #define YUV422FUNC(func_name, dst_type, alpha, abase, PUTFUNC, dst_delta, nb_dst_planes) \ |
239 | 28.0k | YUV2RGBFUNC(func_name, dst_type, alpha, 1, nb_dst_planes) \ |
240 | 28.0k | LOADCHROMA(1, 0); \ |
241 | 28.0k | PUTFUNC(1, 0, abase); \ |
242 | 28.0k | \ |
243 | 28.0k | LOADCHROMA(2, 0); \ |
244 | 28.0k | PUTFUNC(2, 0, abase); \ |
245 | 28.0k | \ |
246 | 28.0k | LOADCHROMA(2, 1); \ |
247 | 28.0k | PUTFUNC(2, 1, abase); \ |
248 | 28.0k | \ |
249 | 28.0k | LOADCHROMA(1, 1); \ |
250 | 28.0k | PUTFUNC(1, 1, abase); \ |
251 | 28.0k | \ |
252 | 28.0k | LOADCHROMA(1, 2); \ |
253 | 28.0k | PUTFUNC(1, 2, abase); \ |
254 | 28.0k | \ |
255 | 28.0k | LOADCHROMA(2, 2); \ |
256 | 28.0k | PUTFUNC(2, 2, abase); \ |
257 | 28.0k | \ |
258 | 28.0k | LOADCHROMA(2, 3); \ |
259 | 28.0k | PUTFUNC(2, 3, abase); \ |
260 | 28.0k | \ |
261 | 28.0k | LOADCHROMA(1, 3); \ |
262 | 28.0k | PUTFUNC(1, 3, abase); \ |
263 | 28.0k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 1, nb_dst_planes) \ |
264 | 1.79k | LOADCHROMA(1, 0); \ |
265 | 1.79k | PUTFUNC(1, 0, abase); \ |
266 | 1.79k | \ |
267 | 1.79k | LOADCHROMA(2, 0); \ |
268 | 1.79k | PUTFUNC(2, 0, abase); \ |
269 | 1.79k | \ |
270 | 1.79k | LOADCHROMA(2, 1); \ |
271 | 1.79k | PUTFUNC(2, 1, abase); \ |
272 | 1.79k | \ |
273 | 1.79k | LOADCHROMA(1, 1); \ |
274 | 1.79k | PUTFUNC(1, 1, abase); \ |
275 | 3.57k | ENDYUV2RGBLINE(dst_delta, 1, alpha, 1, nb_dst_planes) \ |
276 | 3.57k | LOADCHROMA(1, 0); \ |
277 | 3.57k | PUTFUNC(1, 0, abase); \ |
278 | 3.57k | \ |
279 | 3.57k | LOADCHROMA(2, 0); \ |
280 | 3.57k | PUTFUNC(2, 0, abase); \ |
281 | 3.57k | ENDYUV2RGBFUNC() yuv2rgb.c:yuv422p_bgr48_c Line | Count | Source | 239 | 4.82k | YUV2RGBFUNC(func_name, dst_type, alpha, 1, nb_dst_planes) \ | 240 | 4.82k | LOADCHROMA(1, 0); \ | 241 | 4.82k | PUTFUNC(1, 0, abase); \ | 242 | 4.82k | \ | 243 | 4.82k | LOADCHROMA(2, 0); \ | 244 | 4.82k | PUTFUNC(2, 0, abase); \ | 245 | 4.82k | \ | 246 | 4.82k | LOADCHROMA(2, 1); \ | 247 | 4.82k | PUTFUNC(2, 1, abase); \ | 248 | 4.82k | \ | 249 | 4.82k | LOADCHROMA(1, 1); \ | 250 | 4.82k | PUTFUNC(1, 1, abase); \ | 251 | 4.82k | \ | 252 | 4.82k | LOADCHROMA(1, 2); \ | 253 | 4.82k | PUTFUNC(1, 2, abase); \ | 254 | 4.82k | \ | 255 | 4.82k | LOADCHROMA(2, 2); \ | 256 | 4.82k | PUTFUNC(2, 2, abase); \ | 257 | 4.82k | \ | 258 | 4.82k | LOADCHROMA(2, 3); \ | 259 | 4.82k | PUTFUNC(2, 3, abase); \ | 260 | 4.82k | \ | 261 | 4.82k | LOADCHROMA(1, 3); \ | 262 | 4.82k | PUTFUNC(1, 3, abase); \ | 263 | 4.82k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 1, nb_dst_planes) \ | 264 | 236 | LOADCHROMA(1, 0); \ | 265 | 236 | PUTFUNC(1, 0, abase); \ | 266 | 236 | \ | 267 | 236 | LOADCHROMA(2, 0); \ | 268 | 236 | PUTFUNC(2, 0, abase); \ | 269 | 236 | \ | 270 | 236 | LOADCHROMA(2, 1); \ | 271 | 236 | PUTFUNC(2, 1, abase); \ | 272 | 236 | \ | 273 | 236 | LOADCHROMA(1, 1); \ | 274 | 236 | PUTFUNC(1, 1, abase); \ | 275 | 581 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 1, nb_dst_planes) \ | 276 | 581 | LOADCHROMA(1, 0); \ | 277 | 581 | PUTFUNC(1, 0, abase); \ | 278 | 581 | \ | 279 | 581 | LOADCHROMA(2, 0); \ | 280 | 581 | PUTFUNC(2, 0, abase); \ | 281 | 581 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv422p_rgb48_c Line | Count | Source | 239 | 5.88k | YUV2RGBFUNC(func_name, dst_type, alpha, 1, nb_dst_planes) \ | 240 | 5.88k | LOADCHROMA(1, 0); \ | 241 | 5.88k | PUTFUNC(1, 0, abase); \ | 242 | 5.88k | \ | 243 | 5.88k | LOADCHROMA(2, 0); \ | 244 | 5.88k | PUTFUNC(2, 0, abase); \ | 245 | 5.88k | \ | 246 | 5.88k | LOADCHROMA(2, 1); \ | 247 | 5.88k | PUTFUNC(2, 1, abase); \ | 248 | 5.88k | \ | 249 | 5.88k | LOADCHROMA(1, 1); \ | 250 | 5.88k | PUTFUNC(1, 1, abase); \ | 251 | 5.88k | \ | 252 | 5.88k | LOADCHROMA(1, 2); \ | 253 | 5.88k | PUTFUNC(1, 2, abase); \ | 254 | 5.88k | \ | 255 | 5.88k | LOADCHROMA(2, 2); \ | 256 | 5.88k | PUTFUNC(2, 2, abase); \ | 257 | 5.88k | \ | 258 | 5.88k | LOADCHROMA(2, 3); \ | 259 | 5.88k | PUTFUNC(2, 3, abase); \ | 260 | 5.88k | \ | 261 | 5.88k | LOADCHROMA(1, 3); \ | 262 | 5.88k | PUTFUNC(1, 3, abase); \ | 263 | 5.88k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 1, nb_dst_planes) \ | 264 | 239 | LOADCHROMA(1, 0); \ | 265 | 239 | PUTFUNC(1, 0, abase); \ | 266 | 239 | \ | 267 | 239 | LOADCHROMA(2, 0); \ | 268 | 239 | PUTFUNC(2, 0, abase); \ | 269 | 239 | \ | 270 | 239 | LOADCHROMA(2, 1); \ | 271 | 239 | PUTFUNC(2, 1, abase); \ | 272 | 239 | \ | 273 | 239 | LOADCHROMA(1, 1); \ | 274 | 239 | PUTFUNC(1, 1, abase); \ | 275 | 699 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 1, nb_dst_planes) \ | 276 | 699 | LOADCHROMA(1, 0); \ | 277 | 699 | PUTFUNC(1, 0, abase); \ | 278 | 699 | \ | 279 | 699 | LOADCHROMA(2, 0); \ | 280 | 699 | PUTFUNC(2, 0, abase); \ | 281 | 699 | ENDYUV2RGBFUNC() |
Unexecuted instantiation: yuv2rgb.c:yuva422p_argb_c Unexecuted instantiation: yuv2rgb.c:yuva422p_rgba_c yuv2rgb.c:yuv422p_rgb32_c Line | Count | Source | 239 | 5.05k | YUV2RGBFUNC(func_name, dst_type, alpha, 1, nb_dst_planes) \ | 240 | 5.05k | LOADCHROMA(1, 0); \ | 241 | 5.05k | PUTFUNC(1, 0, abase); \ | 242 | 5.05k | \ | 243 | 5.05k | LOADCHROMA(2, 0); \ | 244 | 5.05k | PUTFUNC(2, 0, abase); \ | 245 | 5.05k | \ | 246 | 5.05k | LOADCHROMA(2, 1); \ | 247 | 5.05k | PUTFUNC(2, 1, abase); \ | 248 | 5.05k | \ | 249 | 5.05k | LOADCHROMA(1, 1); \ | 250 | 5.05k | PUTFUNC(1, 1, abase); \ | 251 | 5.05k | \ | 252 | 5.05k | LOADCHROMA(1, 2); \ | 253 | 5.05k | PUTFUNC(1, 2, abase); \ | 254 | 5.05k | \ | 255 | 5.05k | LOADCHROMA(2, 2); \ | 256 | 5.05k | PUTFUNC(2, 2, abase); \ | 257 | 5.05k | \ | 258 | 5.05k | LOADCHROMA(2, 3); \ | 259 | 5.05k | PUTFUNC(2, 3, abase); \ | 260 | 5.05k | \ | 261 | 5.05k | LOADCHROMA(1, 3); \ | 262 | 5.05k | PUTFUNC(1, 3, abase); \ | 263 | 5.05k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 1, nb_dst_planes) \ | 264 | 508 | LOADCHROMA(1, 0); \ | 265 | 508 | PUTFUNC(1, 0, abase); \ | 266 | 508 | \ | 267 | 508 | LOADCHROMA(2, 0); \ | 268 | 508 | PUTFUNC(2, 0, abase); \ | 269 | 508 | \ | 270 | 508 | LOADCHROMA(2, 1); \ | 271 | 508 | PUTFUNC(2, 1, abase); \ | 272 | 508 | \ | 273 | 508 | LOADCHROMA(1, 1); \ | 274 | 508 | PUTFUNC(1, 1, abase); \ | 275 | 508 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 1, nb_dst_planes) \ | 276 | 318 | LOADCHROMA(1, 0); \ | 277 | 318 | PUTFUNC(1, 0, abase); \ | 278 | 318 | \ | 279 | 318 | LOADCHROMA(2, 0); \ | 280 | 318 | PUTFUNC(2, 0, abase); \ | 281 | 318 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv422p_rgb24_c Line | Count | Source | 239 | 4.34k | YUV2RGBFUNC(func_name, dst_type, alpha, 1, nb_dst_planes) \ | 240 | 4.34k | LOADCHROMA(1, 0); \ | 241 | 4.34k | PUTFUNC(1, 0, abase); \ | 242 | 4.34k | \ | 243 | 4.34k | LOADCHROMA(2, 0); \ | 244 | 4.34k | PUTFUNC(2, 0, abase); \ | 245 | 4.34k | \ | 246 | 4.34k | LOADCHROMA(2, 1); \ | 247 | 4.34k | PUTFUNC(2, 1, abase); \ | 248 | 4.34k | \ | 249 | 4.34k | LOADCHROMA(1, 1); \ | 250 | 4.34k | PUTFUNC(1, 1, abase); \ | 251 | 4.34k | \ | 252 | 4.34k | LOADCHROMA(1, 2); \ | 253 | 4.34k | PUTFUNC(1, 2, abase); \ | 254 | 4.34k | \ | 255 | 4.34k | LOADCHROMA(2, 2); \ | 256 | 4.34k | PUTFUNC(2, 2, abase); \ | 257 | 4.34k | \ | 258 | 4.34k | LOADCHROMA(2, 3); \ | 259 | 4.34k | PUTFUNC(2, 3, abase); \ | 260 | 4.34k | \ | 261 | 4.34k | LOADCHROMA(1, 3); \ | 262 | 4.34k | PUTFUNC(1, 3, abase); \ | 263 | 4.34k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 1, nb_dst_planes) \ | 264 | 236 | LOADCHROMA(1, 0); \ | 265 | 236 | PUTFUNC(1, 0, abase); \ | 266 | 236 | \ | 267 | 236 | LOADCHROMA(2, 0); \ | 268 | 236 | PUTFUNC(2, 0, abase); \ | 269 | 236 | \ | 270 | 236 | LOADCHROMA(2, 1); \ | 271 | 236 | PUTFUNC(2, 1, abase); \ | 272 | 236 | \ | 273 | 236 | LOADCHROMA(1, 1); \ | 274 | 236 | PUTFUNC(1, 1, abase); \ | 275 | 501 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 1, nb_dst_planes) \ | 276 | 501 | LOADCHROMA(1, 0); \ | 277 | 501 | PUTFUNC(1, 0, abase); \ | 278 | 501 | \ | 279 | 501 | LOADCHROMA(2, 0); \ | 280 | 501 | PUTFUNC(2, 0, abase); \ | 281 | 501 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv422p_bgr24_c Line | Count | Source | 239 | 4.17k | YUV2RGBFUNC(func_name, dst_type, alpha, 1, nb_dst_planes) \ | 240 | 4.17k | LOADCHROMA(1, 0); \ | 241 | 4.17k | PUTFUNC(1, 0, abase); \ | 242 | 4.17k | \ | 243 | 4.17k | LOADCHROMA(2, 0); \ | 244 | 4.17k | PUTFUNC(2, 0, abase); \ | 245 | 4.17k | \ | 246 | 4.17k | LOADCHROMA(2, 1); \ | 247 | 4.17k | PUTFUNC(2, 1, abase); \ | 248 | 4.17k | \ | 249 | 4.17k | LOADCHROMA(1, 1); \ | 250 | 4.17k | PUTFUNC(1, 1, abase); \ | 251 | 4.17k | \ | 252 | 4.17k | LOADCHROMA(1, 2); \ | 253 | 4.17k | PUTFUNC(1, 2, abase); \ | 254 | 4.17k | \ | 255 | 4.17k | LOADCHROMA(2, 2); \ | 256 | 4.17k | PUTFUNC(2, 2, abase); \ | 257 | 4.17k | \ | 258 | 4.17k | LOADCHROMA(2, 3); \ | 259 | 4.17k | PUTFUNC(2, 3, abase); \ | 260 | 4.17k | \ | 261 | 4.17k | LOADCHROMA(1, 3); \ | 262 | 4.17k | PUTFUNC(1, 3, abase); \ | 263 | 4.17k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 1, nb_dst_planes) \ | 264 | 307 | LOADCHROMA(1, 0); \ | 265 | 307 | PUTFUNC(1, 0, abase); \ | 266 | 307 | \ | 267 | 307 | LOADCHROMA(2, 0); \ | 268 | 307 | PUTFUNC(2, 0, abase); \ | 269 | 307 | \ | 270 | 307 | LOADCHROMA(2, 1); \ | 271 | 307 | PUTFUNC(2, 1, abase); \ | 272 | 307 | \ | 273 | 307 | LOADCHROMA(1, 1); \ | 274 | 307 | PUTFUNC(1, 1, abase); \ | 275 | 735 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 1, nb_dst_planes) \ | 276 | 735 | LOADCHROMA(1, 0); \ | 277 | 735 | PUTFUNC(1, 0, abase); \ | 278 | 735 | \ | 279 | 735 | LOADCHROMA(2, 0); \ | 280 | 735 | PUTFUNC(2, 0, abase); \ | 281 | 735 | ENDYUV2RGBFUNC() |
Line | Count | Source | 239 | 3.73k | YUV2RGBFUNC(func_name, dst_type, alpha, 1, nb_dst_planes) \ | 240 | 3.73k | LOADCHROMA(1, 0); \ | 241 | 3.73k | PUTFUNC(1, 0, abase); \ | 242 | 3.73k | \ | 243 | 3.73k | LOADCHROMA(2, 0); \ | 244 | 3.73k | PUTFUNC(2, 0, abase); \ | 245 | 3.73k | \ | 246 | 3.73k | LOADCHROMA(2, 1); \ | 247 | 3.73k | PUTFUNC(2, 1, abase); \ | 248 | 3.73k | \ | 249 | 3.73k | LOADCHROMA(1, 1); \ | 250 | 3.73k | PUTFUNC(1, 1, abase); \ | 251 | 3.73k | \ | 252 | 3.73k | LOADCHROMA(1, 2); \ | 253 | 3.73k | PUTFUNC(1, 2, abase); \ | 254 | 3.73k | \ | 255 | 3.73k | LOADCHROMA(2, 2); \ | 256 | 3.73k | PUTFUNC(2, 2, abase); \ | 257 | 3.73k | \ | 258 | 3.73k | LOADCHROMA(2, 3); \ | 259 | 3.73k | PUTFUNC(2, 3, abase); \ | 260 | 3.73k | \ | 261 | 3.73k | LOADCHROMA(1, 3); \ | 262 | 3.73k | PUTFUNC(1, 3, abase); \ | 263 | 3.73k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 1, nb_dst_planes) \ | 264 | 266 | LOADCHROMA(1, 0); \ | 265 | 266 | PUTFUNC(1, 0, abase); \ | 266 | 266 | \ | 267 | 266 | LOADCHROMA(2, 0); \ | 268 | 266 | PUTFUNC(2, 0, abase); \ | 269 | 266 | \ | 270 | 266 | LOADCHROMA(2, 1); \ | 271 | 266 | PUTFUNC(2, 1, abase); \ | 272 | 266 | \ | 273 | 266 | LOADCHROMA(1, 1); \ | 274 | 266 | PUTFUNC(1, 1, abase); \ | 275 | 745 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 1, nb_dst_planes) \ | 276 | 745 | LOADCHROMA(1, 0); \ | 277 | 745 | PUTFUNC(1, 0, abase); \ | 278 | 745 | \ | 279 | 745 | LOADCHROMA(2, 0); \ | 280 | 745 | PUTFUNC(2, 0, abase); \ | 281 | 745 | ENDYUV2RGBFUNC() |
|
282 | | |
283 | | #define YUV420FUNC_DITHER(func_name, dst_type, LOADDITHER, PUTFUNC, dst_delta) \ |
284 | 35.9k | YUV2RGBFUNC(func_name, dst_type, 0, 0, 1) \ |
285 | 35.9k | LOADDITHER \ |
286 | 35.9k | \ |
287 | 35.9k | LOADCHROMA(1, 0); \ |
288 | 35.9k | PUTFUNC(1, 0, 0); \ |
289 | 35.9k | PUTFUNC(2, 0, 0 + 8); \ |
290 | 35.9k | \ |
291 | 35.9k | LOADCHROMA(1, 1); \ |
292 | 35.9k | PUTFUNC(2, 1, 2 + 8); \ |
293 | 35.9k | PUTFUNC(1, 1, 2); \ |
294 | 35.9k | \ |
295 | 35.9k | LOADCHROMA(1, 2); \ |
296 | 35.9k | PUTFUNC(1, 2, 4); \ |
297 | 35.9k | PUTFUNC(2, 2, 4 + 8); \ |
298 | 35.9k | \ |
299 | 35.9k | LOADCHROMA(1, 3); \ |
300 | 35.9k | PUTFUNC(2, 3, 6 + 8); \ |
301 | 35.9k | PUTFUNC(1, 3, 6); \ |
302 | 35.9k | ENDYUV2RGBLINE(dst_delta, 0, 0, 0, 1) \ |
303 | 3.73k | LOADDITHER \ |
304 | 3.73k | \ |
305 | 3.73k | LOADCHROMA(1, 0); \ |
306 | 3.73k | PUTFUNC(1, 0, 0); \ |
307 | 3.73k | PUTFUNC(2, 0, 0 + 8); \ |
308 | 3.73k | \ |
309 | 3.73k | LOADCHROMA(1, 1); \ |
310 | 3.73k | PUTFUNC(2, 1, 2 + 8); \ |
311 | 3.73k | PUTFUNC(1, 1, 2); \ |
312 | 5.84k | ENDYUV2RGBLINE(dst_delta, 1, 0, 0, 1) \ |
313 | 5.84k | LOADDITHER \ |
314 | 5.84k | \ |
315 | 5.84k | LOADCHROMA(1, 0); \ |
316 | 5.84k | PUTFUNC(1, 0, 0); \ |
317 | 5.84k | PUTFUNC(2, 0, 0 + 8); \ |
318 | 5.84k | ENDYUV2RGBFUNC() yuv2rgb.c:yuv2rgb_c_16_ordered_dither Line | Count | Source | 284 | 5.52k | YUV2RGBFUNC(func_name, dst_type, 0, 0, 1) \ | 285 | 5.52k | LOADDITHER \ | 286 | 5.52k | \ | 287 | 5.52k | LOADCHROMA(1, 0); \ | 288 | 5.52k | PUTFUNC(1, 0, 0); \ | 289 | 5.52k | PUTFUNC(2, 0, 0 + 8); \ | 290 | 5.52k | \ | 291 | 5.52k | LOADCHROMA(1, 1); \ | 292 | 5.52k | PUTFUNC(2, 1, 2 + 8); \ | 293 | 5.52k | PUTFUNC(1, 1, 2); \ | 294 | 5.52k | \ | 295 | 5.52k | LOADCHROMA(1, 2); \ | 296 | 5.52k | PUTFUNC(1, 2, 4); \ | 297 | 5.52k | PUTFUNC(2, 2, 4 + 8); \ | 298 | 5.52k | \ | 299 | 5.52k | LOADCHROMA(1, 3); \ | 300 | 5.52k | PUTFUNC(2, 3, 6 + 8); \ | 301 | 5.52k | PUTFUNC(1, 3, 6); \ | 302 | 5.52k | ENDYUV2RGBLINE(dst_delta, 0, 0, 0, 1) \ | 303 | 234 | LOADDITHER \ | 304 | 234 | \ | 305 | 234 | LOADCHROMA(1, 0); \ | 306 | 234 | PUTFUNC(1, 0, 0); \ | 307 | 234 | PUTFUNC(2, 0, 0 + 8); \ | 308 | 234 | \ | 309 | 234 | LOADCHROMA(1, 1); \ | 310 | 234 | PUTFUNC(2, 1, 2 + 8); \ | 311 | 234 | PUTFUNC(1, 1, 2); \ | 312 | 770 | ENDYUV2RGBLINE(dst_delta, 1, 0, 0, 1) \ | 313 | 770 | LOADDITHER \ | 314 | 770 | \ | 315 | 770 | LOADCHROMA(1, 0); \ | 316 | 770 | PUTFUNC(1, 0, 0); \ | 317 | 770 | PUTFUNC(2, 0, 0 + 8); \ | 318 | 770 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv2rgb_c_15_ordered_dither Line | Count | Source | 284 | 5.75k | YUV2RGBFUNC(func_name, dst_type, 0, 0, 1) \ | 285 | 5.75k | LOADDITHER \ | 286 | 5.75k | \ | 287 | 5.75k | LOADCHROMA(1, 0); \ | 288 | 5.75k | PUTFUNC(1, 0, 0); \ | 289 | 5.75k | PUTFUNC(2, 0, 0 + 8); \ | 290 | 5.75k | \ | 291 | 5.75k | LOADCHROMA(1, 1); \ | 292 | 5.75k | PUTFUNC(2, 1, 2 + 8); \ | 293 | 5.75k | PUTFUNC(1, 1, 2); \ | 294 | 5.75k | \ | 295 | 5.75k | LOADCHROMA(1, 2); \ | 296 | 5.75k | PUTFUNC(1, 2, 4); \ | 297 | 5.75k | PUTFUNC(2, 2, 4 + 8); \ | 298 | 5.75k | \ | 299 | 5.75k | LOADCHROMA(1, 3); \ | 300 | 5.75k | PUTFUNC(2, 3, 6 + 8); \ | 301 | 5.75k | PUTFUNC(1, 3, 6); \ | 302 | 5.75k | ENDYUV2RGBLINE(dst_delta, 0, 0, 0, 1) \ | 303 | 231 | LOADDITHER \ | 304 | 231 | \ | 305 | 231 | LOADCHROMA(1, 0); \ | 306 | 231 | PUTFUNC(1, 0, 0); \ | 307 | 231 | PUTFUNC(2, 0, 0 + 8); \ | 308 | 231 | \ | 309 | 231 | LOADCHROMA(1, 1); \ | 310 | 231 | PUTFUNC(2, 1, 2 + 8); \ | 311 | 231 | PUTFUNC(1, 1, 2); \ | 312 | 346 | ENDYUV2RGBLINE(dst_delta, 1, 0, 0, 1) \ | 313 | 346 | LOADDITHER \ | 314 | 346 | \ | 315 | 346 | LOADCHROMA(1, 0); \ | 316 | 346 | PUTFUNC(1, 0, 0); \ | 317 | 346 | PUTFUNC(2, 0, 0 + 8); \ | 318 | 346 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv2rgb_c_12_ordered_dither Line | Count | Source | 284 | 6.09k | YUV2RGBFUNC(func_name, dst_type, 0, 0, 1) \ | 285 | 6.09k | LOADDITHER \ | 286 | 6.09k | \ | 287 | 6.09k | LOADCHROMA(1, 0); \ | 288 | 6.09k | PUTFUNC(1, 0, 0); \ | 289 | 6.09k | PUTFUNC(2, 0, 0 + 8); \ | 290 | 6.09k | \ | 291 | 6.09k | LOADCHROMA(1, 1); \ | 292 | 6.09k | PUTFUNC(2, 1, 2 + 8); \ | 293 | 6.09k | PUTFUNC(1, 1, 2); \ | 294 | 6.09k | \ | 295 | 6.09k | LOADCHROMA(1, 2); \ | 296 | 6.09k | PUTFUNC(1, 2, 4); \ | 297 | 6.09k | PUTFUNC(2, 2, 4 + 8); \ | 298 | 6.09k | \ | 299 | 6.09k | LOADCHROMA(1, 3); \ | 300 | 6.09k | PUTFUNC(2, 3, 6 + 8); \ | 301 | 6.09k | PUTFUNC(1, 3, 6); \ | 302 | 6.09k | ENDYUV2RGBLINE(dst_delta, 0, 0, 0, 1) \ | 303 | 296 | LOADDITHER \ | 304 | 296 | \ | 305 | 296 | LOADCHROMA(1, 0); \ | 306 | 296 | PUTFUNC(1, 0, 0); \ | 307 | 296 | PUTFUNC(2, 0, 0 + 8); \ | 308 | 296 | \ | 309 | 296 | LOADCHROMA(1, 1); \ | 310 | 296 | PUTFUNC(2, 1, 2 + 8); \ | 311 | 296 | PUTFUNC(1, 1, 2); \ | 312 | 620 | ENDYUV2RGBLINE(dst_delta, 1, 0, 0, 1) \ | 313 | 620 | LOADDITHER \ | 314 | 620 | \ | 315 | 620 | LOADCHROMA(1, 0); \ | 316 | 620 | PUTFUNC(1, 0, 0); \ | 317 | 620 | PUTFUNC(2, 0, 0 + 8); \ | 318 | 620 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv2rgb_c_8_ordered_dither Line | Count | Source | 284 | 6.83k | YUV2RGBFUNC(func_name, dst_type, 0, 0, 1) \ | 285 | 6.83k | LOADDITHER \ | 286 | 6.83k | \ | 287 | 6.83k | LOADCHROMA(1, 0); \ | 288 | 6.83k | PUTFUNC(1, 0, 0); \ | 289 | 6.83k | PUTFUNC(2, 0, 0 + 8); \ | 290 | 6.83k | \ | 291 | 6.83k | LOADCHROMA(1, 1); \ | 292 | 6.83k | PUTFUNC(2, 1, 2 + 8); \ | 293 | 6.83k | PUTFUNC(1, 1, 2); \ | 294 | 6.83k | \ | 295 | 6.83k | LOADCHROMA(1, 2); \ | 296 | 6.83k | PUTFUNC(1, 2, 4); \ | 297 | 6.83k | PUTFUNC(2, 2, 4 + 8); \ | 298 | 6.83k | \ | 299 | 6.83k | LOADCHROMA(1, 3); \ | 300 | 6.83k | PUTFUNC(2, 3, 6 + 8); \ | 301 | 6.83k | PUTFUNC(1, 3, 6); \ | 302 | 6.83k | ENDYUV2RGBLINE(dst_delta, 0, 0, 0, 1) \ | 303 | 1.31k | LOADDITHER \ | 304 | 1.31k | \ | 305 | 1.31k | LOADCHROMA(1, 0); \ | 306 | 1.31k | PUTFUNC(1, 0, 0); \ | 307 | 1.31k | PUTFUNC(2, 0, 0 + 8); \ | 308 | 1.31k | \ | 309 | 1.31k | LOADCHROMA(1, 1); \ | 310 | 1.31k | PUTFUNC(2, 1, 2 + 8); \ | 311 | 1.31k | PUTFUNC(1, 1, 2); \ | 312 | 1.57k | ENDYUV2RGBLINE(dst_delta, 1, 0, 0, 1) \ | 313 | 1.57k | LOADDITHER \ | 314 | 1.57k | \ | 315 | 1.57k | LOADCHROMA(1, 0); \ | 316 | 1.57k | PUTFUNC(1, 0, 0); \ | 317 | 1.57k | PUTFUNC(2, 0, 0 + 8); \ | 318 | 1.57k | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv2rgb_c_4_ordered_dither Line | Count | Source | 284 | 5.21k | YUV2RGBFUNC(func_name, dst_type, 0, 0, 1) \ | 285 | 5.21k | LOADDITHER \ | 286 | 5.21k | \ | 287 | 5.21k | LOADCHROMA(1, 0); \ | 288 | 5.21k | PUTFUNC(1, 0, 0); \ | 289 | 5.21k | PUTFUNC(2, 0, 0 + 8); \ | 290 | 5.21k | \ | 291 | 5.21k | LOADCHROMA(1, 1); \ | 292 | 5.21k | PUTFUNC(2, 1, 2 + 8); \ | 293 | 5.21k | PUTFUNC(1, 1, 2); \ | 294 | 5.21k | \ | 295 | 5.21k | LOADCHROMA(1, 2); \ | 296 | 5.21k | PUTFUNC(1, 2, 4); \ | 297 | 5.21k | PUTFUNC(2, 2, 4 + 8); \ | 298 | 5.21k | \ | 299 | 5.21k | LOADCHROMA(1, 3); \ | 300 | 5.21k | PUTFUNC(2, 3, 6 + 8); \ | 301 | 5.21k | PUTFUNC(1, 3, 6); \ | 302 | 5.21k | ENDYUV2RGBLINE(dst_delta, 0, 0, 0, 1) \ | 303 | 331 | LOADDITHER \ | 304 | 331 | \ | 305 | 331 | LOADCHROMA(1, 0); \ | 306 | 331 | PUTFUNC(1, 0, 0); \ | 307 | 331 | PUTFUNC(2, 0, 0 + 8); \ | 308 | 331 | \ | 309 | 331 | LOADCHROMA(1, 1); \ | 310 | 331 | PUTFUNC(2, 1, 2 + 8); \ | 311 | 331 | PUTFUNC(1, 1, 2); \ | 312 | 720 | ENDYUV2RGBLINE(dst_delta, 1, 0, 0, 1) \ | 313 | 720 | LOADDITHER \ | 314 | 720 | \ | 315 | 720 | LOADCHROMA(1, 0); \ | 316 | 720 | PUTFUNC(1, 0, 0); \ | 317 | 720 | PUTFUNC(2, 0, 0 + 8); \ | 318 | 720 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv2rgb_c_4b_ordered_dither Line | Count | Source | 284 | 6.52k | YUV2RGBFUNC(func_name, dst_type, 0, 0, 1) \ | 285 | 6.52k | LOADDITHER \ | 286 | 6.52k | \ | 287 | 6.52k | LOADCHROMA(1, 0); \ | 288 | 6.52k | PUTFUNC(1, 0, 0); \ | 289 | 6.52k | PUTFUNC(2, 0, 0 + 8); \ | 290 | 6.52k | \ | 291 | 6.52k | LOADCHROMA(1, 1); \ | 292 | 6.52k | PUTFUNC(2, 1, 2 + 8); \ | 293 | 6.52k | PUTFUNC(1, 1, 2); \ | 294 | 6.52k | \ | 295 | 6.52k | LOADCHROMA(1, 2); \ | 296 | 6.52k | PUTFUNC(1, 2, 4); \ | 297 | 6.52k | PUTFUNC(2, 2, 4 + 8); \ | 298 | 6.52k | \ | 299 | 6.52k | LOADCHROMA(1, 3); \ | 300 | 6.52k | PUTFUNC(2, 3, 6 + 8); \ | 301 | 6.52k | PUTFUNC(1, 3, 6); \ | 302 | 6.52k | ENDYUV2RGBLINE(dst_delta, 0, 0, 0, 1) \ | 303 | 1.32k | LOADDITHER \ | 304 | 1.32k | \ | 305 | 1.32k | LOADCHROMA(1, 0); \ | 306 | 1.32k | PUTFUNC(1, 0, 0); \ | 307 | 1.32k | PUTFUNC(2, 0, 0 + 8); \ | 308 | 1.32k | \ | 309 | 1.32k | LOADCHROMA(1, 1); \ | 310 | 1.32k | PUTFUNC(2, 1, 2 + 8); \ | 311 | 1.32k | PUTFUNC(1, 1, 2); \ | 312 | 1.81k | ENDYUV2RGBLINE(dst_delta, 1, 0, 0, 1) \ | 313 | 1.81k | LOADDITHER \ | 314 | 1.81k | \ | 315 | 1.81k | LOADCHROMA(1, 0); \ | 316 | 1.81k | PUTFUNC(1, 0, 0); \ | 317 | 1.81k | PUTFUNC(2, 0, 0 + 8); \ | 318 | 1.81k | ENDYUV2RGBFUNC() |
|
319 | | |
320 | | #define YUV422FUNC_DITHER(func_name, dst_type, LOADDITHER, PUTFUNC, dst_delta) \ |
321 | 31.6k | YUV2RGBFUNC(func_name, dst_type, 0, 1, 1) \ |
322 | 31.6k | LOADDITHER \ |
323 | 31.6k | \ |
324 | 31.6k | LOADCHROMA(1, 0); \ |
325 | 31.6k | PUTFUNC(1, 0, 0); \ |
326 | 31.6k | \ |
327 | 31.6k | LOADCHROMA(2, 0); \ |
328 | 31.6k | PUTFUNC(2, 0, 0 + 8); \ |
329 | 31.6k | \ |
330 | 31.6k | LOADCHROMA(2, 1); \ |
331 | 31.6k | PUTFUNC(2, 1, 2 + 8); \ |
332 | 31.6k | \ |
333 | 31.6k | LOADCHROMA(1, 1); \ |
334 | 31.6k | PUTFUNC(1, 1, 2); \ |
335 | 31.6k | \ |
336 | 31.6k | LOADCHROMA(1, 2); \ |
337 | 31.6k | PUTFUNC(1, 2, 4); \ |
338 | 31.6k | \ |
339 | 31.6k | LOADCHROMA(2, 2); \ |
340 | 31.6k | PUTFUNC(2, 2, 4 + 8); \ |
341 | 31.6k | \ |
342 | 31.6k | LOADCHROMA(2, 3); \ |
343 | 31.6k | PUTFUNC(2, 3, 6 + 8); \ |
344 | 31.6k | \ |
345 | 31.6k | LOADCHROMA(1, 3); \ |
346 | 31.6k | PUTFUNC(1, 3, 6); \ |
347 | 31.6k | ENDYUV2RGBLINE(dst_delta, 0, 0, 1, 1) \ |
348 | 5.38k | LOADDITHER \ |
349 | 5.38k | \ |
350 | 5.38k | LOADCHROMA(1, 0); \ |
351 | 5.38k | PUTFUNC(1, 0, 0); \ |
352 | 5.38k | \ |
353 | 5.38k | LOADCHROMA(2, 0); \ |
354 | 5.38k | PUTFUNC(2, 0, 0 + 8); \ |
355 | 5.38k | \ |
356 | 5.38k | LOADCHROMA(2, 1); \ |
357 | 5.38k | PUTFUNC(2, 1, 2 + 8); \ |
358 | 5.38k | \ |
359 | 5.38k | LOADCHROMA(1, 1); \ |
360 | 5.38k | PUTFUNC(1, 1, 2); \ |
361 | 5.38k | ENDYUV2RGBLINE(dst_delta, 1, 0, 1, 1) \ |
362 | 4.95k | LOADDITHER \ |
363 | 4.95k | \ |
364 | 4.95k | LOADCHROMA(1, 0); \ |
365 | 4.95k | PUTFUNC(1, 0, 0); \ |
366 | 4.95k | \ |
367 | 4.95k | LOADCHROMA(2, 0); \ |
368 | 4.95k | PUTFUNC(2, 0, 0 + 8); \ |
369 | 4.95k | ENDYUV2RGBFUNC() Line | Count | Source | 321 | 5.20k | YUV2RGBFUNC(func_name, dst_type, 0, 1, 1) \ | 322 | 5.20k | LOADDITHER \ | 323 | 5.20k | \ | 324 | 5.20k | LOADCHROMA(1, 0); \ | 325 | 5.20k | PUTFUNC(1, 0, 0); \ | 326 | 5.20k | \ | 327 | 5.20k | LOADCHROMA(2, 0); \ | 328 | 5.20k | PUTFUNC(2, 0, 0 + 8); \ | 329 | 5.20k | \ | 330 | 5.20k | LOADCHROMA(2, 1); \ | 331 | 5.20k | PUTFUNC(2, 1, 2 + 8); \ | 332 | 5.20k | \ | 333 | 5.20k | LOADCHROMA(1, 1); \ | 334 | 5.20k | PUTFUNC(1, 1, 2); \ | 335 | 5.20k | \ | 336 | 5.20k | LOADCHROMA(1, 2); \ | 337 | 5.20k | PUTFUNC(1, 2, 4); \ | 338 | 5.20k | \ | 339 | 5.20k | LOADCHROMA(2, 2); \ | 340 | 5.20k | PUTFUNC(2, 2, 4 + 8); \ | 341 | 5.20k | \ | 342 | 5.20k | LOADCHROMA(2, 3); \ | 343 | 5.20k | PUTFUNC(2, 3, 6 + 8); \ | 344 | 5.20k | \ | 345 | 5.20k | LOADCHROMA(1, 3); \ | 346 | 5.20k | PUTFUNC(1, 3, 6); \ | 347 | 5.20k | ENDYUV2RGBLINE(dst_delta, 0, 0, 1, 1) \ | 348 | 237 | LOADDITHER \ | 349 | 237 | \ | 350 | 237 | LOADCHROMA(1, 0); \ | 351 | 237 | PUTFUNC(1, 0, 0); \ | 352 | 237 | \ | 353 | 237 | LOADCHROMA(2, 0); \ | 354 | 237 | PUTFUNC(2, 0, 0 + 8); \ | 355 | 237 | \ | 356 | 237 | LOADCHROMA(2, 1); \ | 357 | 237 | PUTFUNC(2, 1, 2 + 8); \ | 358 | 237 | \ | 359 | 237 | LOADCHROMA(1, 1); \ | 360 | 237 | PUTFUNC(1, 1, 2); \ | 361 | 237 | ENDYUV2RGBLINE(dst_delta, 1, 0, 1, 1) \ | 362 | 237 | LOADDITHER \ | 363 | 237 | \ | 364 | 237 | LOADCHROMA(1, 0); \ | 365 | 237 | PUTFUNC(1, 0, 0); \ | 366 | 237 | \ | 367 | 237 | LOADCHROMA(2, 0); \ | 368 | 237 | PUTFUNC(2, 0, 0 + 8); \ | 369 | 237 | ENDYUV2RGBFUNC() |
Line | Count | Source | 321 | 4.90k | YUV2RGBFUNC(func_name, dst_type, 0, 1, 1) \ | 322 | 4.90k | LOADDITHER \ | 323 | 4.90k | \ | 324 | 4.90k | LOADCHROMA(1, 0); \ | 325 | 4.90k | PUTFUNC(1, 0, 0); \ | 326 | 4.90k | \ | 327 | 4.90k | LOADCHROMA(2, 0); \ | 328 | 4.90k | PUTFUNC(2, 0, 0 + 8); \ | 329 | 4.90k | \ | 330 | 4.90k | LOADCHROMA(2, 1); \ | 331 | 4.90k | PUTFUNC(2, 1, 2 + 8); \ | 332 | 4.90k | \ | 333 | 4.90k | LOADCHROMA(1, 1); \ | 334 | 4.90k | PUTFUNC(1, 1, 2); \ | 335 | 4.90k | \ | 336 | 4.90k | LOADCHROMA(1, 2); \ | 337 | 4.90k | PUTFUNC(1, 2, 4); \ | 338 | 4.90k | \ | 339 | 4.90k | LOADCHROMA(2, 2); \ | 340 | 4.90k | PUTFUNC(2, 2, 4 + 8); \ | 341 | 4.90k | \ | 342 | 4.90k | LOADCHROMA(2, 3); \ | 343 | 4.90k | PUTFUNC(2, 3, 6 + 8); \ | 344 | 4.90k | \ | 345 | 4.90k | LOADCHROMA(1, 3); \ | 346 | 4.90k | PUTFUNC(1, 3, 6); \ | 347 | 4.90k | ENDYUV2RGBLINE(dst_delta, 0, 0, 1, 1) \ | 348 | 242 | LOADDITHER \ | 349 | 242 | \ | 350 | 242 | LOADCHROMA(1, 0); \ | 351 | 242 | PUTFUNC(1, 0, 0); \ | 352 | 242 | \ | 353 | 242 | LOADCHROMA(2, 0); \ | 354 | 242 | PUTFUNC(2, 0, 0 + 8); \ | 355 | 242 | \ | 356 | 242 | LOADCHROMA(2, 1); \ | 357 | 242 | PUTFUNC(2, 1, 2 + 8); \ | 358 | 242 | \ | 359 | 242 | LOADCHROMA(1, 1); \ | 360 | 242 | PUTFUNC(1, 1, 2); \ | 361 | 692 | ENDYUV2RGBLINE(dst_delta, 1, 0, 1, 1) \ | 362 | 692 | LOADDITHER \ | 363 | 692 | \ | 364 | 692 | LOADCHROMA(1, 0); \ | 365 | 692 | PUTFUNC(1, 0, 0); \ | 366 | 692 | \ | 367 | 692 | LOADCHROMA(2, 0); \ | 368 | 692 | PUTFUNC(2, 0, 0 + 8); \ | 369 | 692 | ENDYUV2RGBFUNC() |
Line | Count | Source | 321 | 3.41k | YUV2RGBFUNC(func_name, dst_type, 0, 1, 1) \ | 322 | 3.41k | LOADDITHER \ | 323 | 3.41k | \ | 324 | 3.41k | LOADCHROMA(1, 0); \ | 325 | 3.41k | PUTFUNC(1, 0, 0); \ | 326 | 3.41k | \ | 327 | 3.41k | LOADCHROMA(2, 0); \ | 328 | 3.41k | PUTFUNC(2, 0, 0 + 8); \ | 329 | 3.41k | \ | 330 | 3.41k | LOADCHROMA(2, 1); \ | 331 | 3.41k | PUTFUNC(2, 1, 2 + 8); \ | 332 | 3.41k | \ | 333 | 3.41k | LOADCHROMA(1, 1); \ | 334 | 3.41k | PUTFUNC(1, 1, 2); \ | 335 | 3.41k | \ | 336 | 3.41k | LOADCHROMA(1, 2); \ | 337 | 3.41k | PUTFUNC(1, 2, 4); \ | 338 | 3.41k | \ | 339 | 3.41k | LOADCHROMA(2, 2); \ | 340 | 3.41k | PUTFUNC(2, 2, 4 + 8); \ | 341 | 3.41k | \ | 342 | 3.41k | LOADCHROMA(2, 3); \ | 343 | 3.41k | PUTFUNC(2, 3, 6 + 8); \ | 344 | 3.41k | \ | 345 | 3.41k | LOADCHROMA(1, 3); \ | 346 | 3.41k | PUTFUNC(1, 3, 6); \ | 347 | 3.41k | ENDYUV2RGBLINE(dst_delta, 0, 0, 1, 1) \ | 348 | 266 | LOADDITHER \ | 349 | 266 | \ | 350 | 266 | LOADCHROMA(1, 0); \ | 351 | 266 | PUTFUNC(1, 0, 0); \ | 352 | 266 | \ | 353 | 266 | LOADCHROMA(2, 0); \ | 354 | 266 | PUTFUNC(2, 0, 0 + 8); \ | 355 | 266 | \ | 356 | 266 | LOADCHROMA(2, 1); \ | 357 | 266 | PUTFUNC(2, 1, 2 + 8); \ | 358 | 266 | \ | 359 | 266 | LOADCHROMA(1, 1); \ | 360 | 266 | PUTFUNC(1, 1, 2); \ | 361 | 600 | ENDYUV2RGBLINE(dst_delta, 1, 0, 1, 1) \ | 362 | 600 | LOADDITHER \ | 363 | 600 | \ | 364 | 600 | LOADCHROMA(1, 0); \ | 365 | 600 | PUTFUNC(1, 0, 0); \ | 366 | 600 | \ | 367 | 600 | LOADCHROMA(2, 0); \ | 368 | 600 | PUTFUNC(2, 0, 0 + 8); \ | 369 | 600 | ENDYUV2RGBFUNC() |
Line | Count | Source | 321 | 7.48k | YUV2RGBFUNC(func_name, dst_type, 0, 1, 1) \ | 322 | 7.48k | LOADDITHER \ | 323 | 7.48k | \ | 324 | 7.48k | LOADCHROMA(1, 0); \ | 325 | 7.48k | PUTFUNC(1, 0, 0); \ | 326 | 7.48k | \ | 327 | 7.48k | LOADCHROMA(2, 0); \ | 328 | 7.48k | PUTFUNC(2, 0, 0 + 8); \ | 329 | 7.48k | \ | 330 | 7.48k | LOADCHROMA(2, 1); \ | 331 | 7.48k | PUTFUNC(2, 1, 2 + 8); \ | 332 | 7.48k | \ | 333 | 7.48k | LOADCHROMA(1, 1); \ | 334 | 7.48k | PUTFUNC(1, 1, 2); \ | 335 | 7.48k | \ | 336 | 7.48k | LOADCHROMA(1, 2); \ | 337 | 7.48k | PUTFUNC(1, 2, 4); \ | 338 | 7.48k | \ | 339 | 7.48k | LOADCHROMA(2, 2); \ | 340 | 7.48k | PUTFUNC(2, 2, 4 + 8); \ | 341 | 7.48k | \ | 342 | 7.48k | LOADCHROMA(2, 3); \ | 343 | 7.48k | PUTFUNC(2, 3, 6 + 8); \ | 344 | 7.48k | \ | 345 | 7.48k | LOADCHROMA(1, 3); \ | 346 | 7.48k | PUTFUNC(1, 3, 6); \ | 347 | 7.48k | ENDYUV2RGBLINE(dst_delta, 0, 0, 1, 1) \ | 348 | 3.10k | LOADDITHER \ | 349 | 3.10k | \ | 350 | 3.10k | LOADCHROMA(1, 0); \ | 351 | 3.10k | PUTFUNC(1, 0, 0); \ | 352 | 3.10k | \ | 353 | 3.10k | LOADCHROMA(2, 0); \ | 354 | 3.10k | PUTFUNC(2, 0, 0 + 8); \ | 355 | 3.10k | \ | 356 | 3.10k | LOADCHROMA(2, 1); \ | 357 | 3.10k | PUTFUNC(2, 1, 2 + 8); \ | 358 | 3.10k | \ | 359 | 3.10k | LOADCHROMA(1, 1); \ | 360 | 3.10k | PUTFUNC(1, 1, 2); \ | 361 | 3.10k | ENDYUV2RGBLINE(dst_delta, 1, 0, 1, 1) \ | 362 | 1.33k | LOADDITHER \ | 363 | 1.33k | \ | 364 | 1.33k | LOADCHROMA(1, 0); \ | 365 | 1.33k | PUTFUNC(1, 0, 0); \ | 366 | 1.33k | \ | 367 | 1.33k | LOADCHROMA(2, 0); \ | 368 | 1.33k | PUTFUNC(2, 0, 0 + 8); \ | 369 | 1.33k | ENDYUV2RGBFUNC() |
Line | Count | Source | 321 | 4.87k | YUV2RGBFUNC(func_name, dst_type, 0, 1, 1) \ | 322 | 4.87k | LOADDITHER \ | 323 | 4.87k | \ | 324 | 4.87k | LOADCHROMA(1, 0); \ | 325 | 4.87k | PUTFUNC(1, 0, 0); \ | 326 | 4.87k | \ | 327 | 4.87k | LOADCHROMA(2, 0); \ | 328 | 4.87k | PUTFUNC(2, 0, 0 + 8); \ | 329 | 4.87k | \ | 330 | 4.87k | LOADCHROMA(2, 1); \ | 331 | 4.87k | PUTFUNC(2, 1, 2 + 8); \ | 332 | 4.87k | \ | 333 | 4.87k | LOADCHROMA(1, 1); \ | 334 | 4.87k | PUTFUNC(1, 1, 2); \ | 335 | 4.87k | \ | 336 | 4.87k | LOADCHROMA(1, 2); \ | 337 | 4.87k | PUTFUNC(1, 2, 4); \ | 338 | 4.87k | \ | 339 | 4.87k | LOADCHROMA(2, 2); \ | 340 | 4.87k | PUTFUNC(2, 2, 4 + 8); \ | 341 | 4.87k | \ | 342 | 4.87k | LOADCHROMA(2, 3); \ | 343 | 4.87k | PUTFUNC(2, 3, 6 + 8); \ | 344 | 4.87k | \ | 345 | 4.87k | LOADCHROMA(1, 3); \ | 346 | 4.87k | PUTFUNC(1, 3, 6); \ | 347 | 4.87k | ENDYUV2RGBLINE(dst_delta, 0, 0, 1, 1) \ | 348 | 269 | LOADDITHER \ | 349 | 269 | \ | 350 | 269 | LOADCHROMA(1, 0); \ | 351 | 269 | PUTFUNC(1, 0, 0); \ | 352 | 269 | \ | 353 | 269 | LOADCHROMA(2, 0); \ | 354 | 269 | PUTFUNC(2, 0, 0 + 8); \ | 355 | 269 | \ | 356 | 269 | LOADCHROMA(2, 1); \ | 357 | 269 | PUTFUNC(2, 1, 2 + 8); \ | 358 | 269 | \ | 359 | 269 | LOADCHROMA(1, 1); \ | 360 | 269 | PUTFUNC(1, 1, 2); \ | 361 | 354 | ENDYUV2RGBLINE(dst_delta, 1, 0, 1, 1) \ | 362 | 354 | LOADDITHER \ | 363 | 354 | \ | 364 | 354 | LOADCHROMA(1, 0); \ | 365 | 354 | PUTFUNC(1, 0, 0); \ | 366 | 354 | \ | 367 | 354 | LOADCHROMA(2, 0); \ | 368 | 354 | PUTFUNC(2, 0, 0 + 8); \ | 369 | 354 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv422p_bgr4_byte Line | Count | Source | 321 | 5.75k | YUV2RGBFUNC(func_name, dst_type, 0, 1, 1) \ | 322 | 5.75k | LOADDITHER \ | 323 | 5.75k | \ | 324 | 5.75k | LOADCHROMA(1, 0); \ | 325 | 5.75k | PUTFUNC(1, 0, 0); \ | 326 | 5.75k | \ | 327 | 5.75k | LOADCHROMA(2, 0); \ | 328 | 5.75k | PUTFUNC(2, 0, 0 + 8); \ | 329 | 5.75k | \ | 330 | 5.75k | LOADCHROMA(2, 1); \ | 331 | 5.75k | PUTFUNC(2, 1, 2 + 8); \ | 332 | 5.75k | \ | 333 | 5.75k | LOADCHROMA(1, 1); \ | 334 | 5.75k | PUTFUNC(1, 1, 2); \ | 335 | 5.75k | \ | 336 | 5.75k | LOADCHROMA(1, 2); \ | 337 | 5.75k | PUTFUNC(1, 2, 4); \ | 338 | 5.75k | \ | 339 | 5.75k | LOADCHROMA(2, 2); \ | 340 | 5.75k | PUTFUNC(2, 2, 4 + 8); \ | 341 | 5.75k | \ | 342 | 5.75k | LOADCHROMA(2, 3); \ | 343 | 5.75k | PUTFUNC(2, 3, 6 + 8); \ | 344 | 5.75k | \ | 345 | 5.75k | LOADCHROMA(1, 3); \ | 346 | 5.75k | PUTFUNC(1, 3, 6); \ | 347 | 5.75k | ENDYUV2RGBLINE(dst_delta, 0, 0, 1, 1) \ | 348 | 1.26k | LOADDITHER \ | 349 | 1.26k | \ | 350 | 1.26k | LOADCHROMA(1, 0); \ | 351 | 1.26k | PUTFUNC(1, 0, 0); \ | 352 | 1.26k | \ | 353 | 1.26k | LOADCHROMA(2, 0); \ | 354 | 1.26k | PUTFUNC(2, 0, 0 + 8); \ | 355 | 1.26k | \ | 356 | 1.26k | LOADCHROMA(2, 1); \ | 357 | 1.26k | PUTFUNC(2, 1, 2 + 8); \ | 358 | 1.26k | \ | 359 | 1.26k | LOADCHROMA(1, 1); \ | 360 | 1.26k | PUTFUNC(1, 1, 2); \ | 361 | 1.73k | ENDYUV2RGBLINE(dst_delta, 1, 0, 1, 1) \ | 362 | 1.73k | LOADDITHER \ | 363 | 1.73k | \ | 364 | 1.73k | LOADCHROMA(1, 0); \ | 365 | 1.73k | PUTFUNC(1, 0, 0); \ | 366 | 1.73k | \ | 367 | 1.73k | LOADCHROMA(2, 0); \ | 368 | 1.73k | PUTFUNC(2, 0, 0 + 8); \ | 369 | 1.73k | ENDYUV2RGBFUNC() |
|
370 | | |
371 | | #define LOADDITHER16 \ |
372 | | const uint8_t *d16 = ff_dither_2x2_8[y & 1]; \ |
373 | | const uint8_t *e16 = ff_dither_2x2_4[y & 1]; \ |
374 | | const uint8_t *f16 = ff_dither_2x2_8[(y & 1)^1]; |
375 | | |
376 | | #define PUTRGB16(l, i, o) \ |
377 | 89.7k | Y = py_##l[2 * i]; \ |
378 | 89.7k | dst_##l[2 * i] = r[Y + d16[0 + o]] + \ |
379 | 89.7k | g[Y + e16[0 + o]] + \ |
380 | 89.7k | b[Y + f16[0 + o]]; \ |
381 | 89.7k | Y = py_##l[2 * i + 1]; \ |
382 | 89.7k | dst_##l[2 * i + 1] = r[Y + d16[1 + o]] + \ |
383 | 89.7k | g[Y + e16[1 + o]] + \ |
384 | 89.7k | b[Y + f16[1 + o]]; |
385 | | |
386 | | #define LOADDITHER15 \ |
387 | | const uint8_t *d16 = ff_dither_2x2_8[y & 1]; \ |
388 | | const uint8_t *e16 = ff_dither_2x2_8[(y & 1)^1]; |
389 | | |
390 | | #define PUTRGB15(l, i, o) \ |
391 | 89.2k | Y = py_##l[2 * i]; \ |
392 | 89.2k | dst_##l[2 * i] = r[Y + d16[0 + o]] + \ |
393 | 89.2k | g[Y + d16[1 + o]] + \ |
394 | 89.2k | b[Y + e16[0 + o]]; \ |
395 | 89.2k | Y = py_##l[2 * i + 1]; \ |
396 | 89.2k | dst_##l[2 * i + 1] = r[Y + d16[1 + o]] + \ |
397 | 89.2k | g[Y + d16[0 + o]] + \ |
398 | 89.2k | b[Y + e16[1 + o]]; |
399 | | |
400 | | #define LOADDITHER12 \ |
401 | | const uint8_t *d16 = ff_dither_4x4_16[y & 3]; |
402 | | |
403 | | #define PUTRGB12(l, i, o) \ |
404 | 80.7k | Y = py_##l[2 * i]; \ |
405 | 80.7k | dst_##l[2 * i] = r[Y + d16[0 + o]] + \ |
406 | 80.7k | g[Y + d16[0 + o]] + \ |
407 | 80.7k | b[Y + d16[0 + o]]; \ |
408 | 80.7k | Y = py_##l[2 * i + 1]; \ |
409 | 80.7k | dst_##l[2 * i + 1] = r[Y + d16[1 + o]] + \ |
410 | 80.7k | g[Y + d16[1 + o]] + \ |
411 | 80.7k | b[Y + d16[1 + o]]; |
412 | | |
413 | | #define LOADDITHER8 \ |
414 | | const uint8_t *d32 = ff_dither_8x8_32[yd & 7]; \ |
415 | | const uint8_t *d64 = ff_dither_8x8_73[yd & 7]; |
416 | | |
417 | | #define PUTRGB8(l, i, o) \ |
418 | 138k | Y = py_##l[2 * i]; \ |
419 | 138k | dst_##l[2 * i] = r[Y + d32[0 + o]] + \ |
420 | 138k | g[Y + d32[0 + o]] + \ |
421 | 138k | b[Y + d64[0 + o]]; \ |
422 | 138k | Y = py_##l[2 * i + 1]; \ |
423 | 138k | dst_##l[2 * i + 1] = r[Y + d32[1 + o]] + \ |
424 | 138k | g[Y + d32[1 + o]] + \ |
425 | 138k | b[Y + d64[1 + o]]; |
426 | | |
427 | | #define LOADDITHER4D \ |
428 | | const uint8_t * d64 = ff_dither_8x8_73[yd & 7]; \ |
429 | | const uint8_t *d128 = ff_dither_8x8_220[yd & 7]; \ |
430 | | int acc; |
431 | | |
432 | | #define PUTRGB4D(l, i, o) \ |
433 | 85.2k | Y = py_##l[2 * i]; \ |
434 | 85.2k | acc = r[Y + d128[0 + o]] + \ |
435 | 85.2k | g[Y + d64[0 + o]] + \ |
436 | 85.2k | b[Y + d128[0 + o]]; \ |
437 | 85.2k | Y = py_##l[2 * i + 1]; \ |
438 | 85.2k | acc |= (r[Y + d128[1 + o]] + \ |
439 | 85.2k | g[Y + d64[1 + o]] + \ |
440 | 85.2k | b[Y + d128[1 + o]]) << 4; \ |
441 | 85.2k | dst_##l[i] = acc; |
442 | | |
443 | | #define LOADDITHER4DB \ |
444 | | const uint8_t *d64 = ff_dither_8x8_73[yd & 7]; \ |
445 | | const uint8_t *d128 = ff_dither_8x8_220[yd & 7]; |
446 | | |
447 | | #define PUTRGB4DB(l, i, o) \ |
448 | 115k | Y = py_##l[2 * i]; \ |
449 | 115k | dst_##l[2 * i] = r[Y + d128[0 + o]] + \ |
450 | 115k | g[Y + d64[0 + o]] + \ |
451 | 115k | b[Y + d128[0 + o]]; \ |
452 | 115k | Y = py_##l[2 * i + 1]; \ |
453 | 115k | dst_##l[2 * i + 1] = r[Y + d128[1 + o]] + \ |
454 | 115k | g[Y + d64[1 + o]] + \ |
455 | 115k | b[Y + d128[1 + o]]; |
456 | | |
457 | 10.0k | YUV2RGBFUNC(yuv2rgb_c_1_ordered_dither, uint8_t, 0, 0, 1) |
458 | 10.0k | const uint8_t *d128 = ff_dither_8x8_220[yd & 7]; |
459 | 10.0k | char out_1 = 0, out_2 = 0; |
460 | 10.0k | g = c->table_gU[128 + YUVRGB_TABLE_HEADROOM] + c->table_gV[128 + YUVRGB_TABLE_HEADROOM]; |
461 | | |
462 | 10.0k | #define PUTRGB1(out, src, i, o) \ |
463 | 83.5k | Y = src[2 * i]; \ |
464 | 83.5k | out += out + g[Y + d128[0 + o]]; \ |
465 | 83.5k | Y = src[2 * i + 1]; \ |
466 | 83.5k | out += out + g[Y + d128[1 + o]]; |
467 | | |
468 | 10.0k | PUTRGB1(out_1, py_1, 0, 0); |
469 | 10.0k | PUTRGB1(out_2, py_2, 0, 0 + 8); |
470 | | |
471 | 10.0k | PUTRGB1(out_2, py_2, 1, 2 + 8); |
472 | 10.0k | PUTRGB1(out_1, py_1, 1, 2); |
473 | | |
474 | 10.0k | PUTRGB1(out_1, py_1, 2, 4); |
475 | 10.0k | PUTRGB1(out_2, py_2, 2, 4 + 8); |
476 | | |
477 | 10.0k | PUTRGB1(out_2, py_2, 3, 6 + 8); |
478 | 10.0k | PUTRGB1(out_1, py_1, 3, 6); |
479 | | |
480 | 10.0k | dst_1[0] = out_1; |
481 | 10.0k | dst_2[0] = out_2; |
482 | | |
483 | 10.0k | py_1 += 8; |
484 | 10.0k | py_2 += 8; |
485 | 10.0k | dst_1 += 1; |
486 | 10.0k | dst_2 += 1; |
487 | 10.0k | } |
488 | 1.84k | if (c->opts.dst_w & 7) { |
489 | 1.56k | av_unused int Y, U, V; |
490 | 1.56k | int pixels_left = c->opts.dst_w & 7; |
491 | 1.56k | const uint8_t *d128 = ff_dither_8x8_220[yd & 7]; |
492 | 1.56k | char out_1 = 0, out_2 = 0; |
493 | 1.56k | g = c->table_gU[128 + YUVRGB_TABLE_HEADROOM] + c->table_gV[128 + YUVRGB_TABLE_HEADROOM]; |
494 | | |
495 | 1.56k | #define PUTRGB1_OR00(out, src, i, o) \ |
496 | 12.5k | if (pixels_left) { \ |
497 | 3.55k | PUTRGB1(out, src, i, o) \ |
498 | 3.55k | pixels_left--; \ |
499 | 8.99k | } else { \ |
500 | 8.99k | out <<= 2; \ |
501 | 8.99k | } |
502 | | |
503 | 1.56k | PUTRGB1_OR00(out_1, py_1, 0, 0); |
504 | 1.56k | PUTRGB1_OR00(out_2, py_2, 0, 0 + 8); |
505 | | |
506 | 1.56k | PUTRGB1_OR00(out_2, py_2, 1, 2 + 8); |
507 | 1.56k | PUTRGB1_OR00(out_1, py_1, 1, 2); |
508 | | |
509 | 1.56k | PUTRGB1_OR00(out_1, py_1, 2, 4); |
510 | 1.56k | PUTRGB1_OR00(out_2, py_2, 2, 4 + 8); |
511 | | |
512 | 1.56k | PUTRGB1_OR00(out_2, py_2, 3, 6 + 8); |
513 | 1.56k | PUTRGB1_OR00(out_1, py_1, 3, 6); |
514 | | |
515 | 1.56k | dst_1[0] = out_1; |
516 | 1.56k | dst_2[0] = out_2; |
517 | 1.56k | ENDYUV2RGBFUNC() |
518 | | |
519 | | // YUV420 |
520 | 50.6k | YUV420FUNC(yuv2rgb_c_48, uint8_t, 0, 0, PUTRGB48, 48, 1) |
521 | 40.1k | YUV420FUNC(yuv2rgb_c_bgr48, uint8_t, 0, 0, PUTBGR48, 48, 1) |
522 | 47.8k | YUV420FUNC(yuv2rgb_c_32, uint32_t, 0, 0, PUTRGB, 8, 1) |
523 | | #if HAVE_BIGENDIAN |
524 | | YUV420FUNC(yuva2argb_c, uint32_t, 1, 24, PUTRGBA, 8, 1) |
525 | | YUV420FUNC(yuva2rgba_c, uint32_t, 1, 0, PUTRGBA, 8, 1) |
526 | | #else |
527 | 60.8k | YUV420FUNC(yuva2rgba_c, uint32_t, 1, 24, PUTRGBA, 8, 1) |
528 | 66.7k | YUV420FUNC(yuva2argb_c, uint32_t, 1, 0, PUTRGBA, 8, 1) |
529 | | #endif |
530 | 49.9k | YUV420FUNC(yuv2rgb_c_24_rgb, uint8_t, 0, 0, PUTRGB24, 24, 1) |
531 | 37.9k | YUV420FUNC(yuv2rgb_c_24_bgr, uint8_t, 0, 0, PUTBGR24, 24, 1) |
532 | 39.0k | YUV420FUNC(yuv420p_gbrp_c, uint8_t, 0, 0, PUTGBRP, 8, 3) |
533 | 46.6k | YUV420FUNC_DITHER(yuv2rgb_c_16_ordered_dither, uint16_t, LOADDITHER16, PUTRGB16, 8) |
534 | 47.6k | YUV420FUNC_DITHER(yuv2rgb_c_15_ordered_dither, uint16_t, LOADDITHER15, PUTRGB15, 8) |
535 | 51.1k | YUV420FUNC_DITHER(yuv2rgb_c_12_ordered_dither, uint16_t, LOADDITHER12, PUTRGB12, 8) |
536 | 63.0k | YUV420FUNC_DITHER(yuv2rgb_c_8_ordered_dither, uint8_t, LOADDITHER8, PUTRGB8, 8) |
537 | 44.4k | YUV420FUNC_DITHER(yuv2rgb_c_4_ordered_dither, uint8_t, LOADDITHER4D, PUTRGB4D, 4) |
538 | 61.0k | YUV420FUNC_DITHER(yuv2rgb_c_4b_ordered_dither, uint8_t, LOADDITHER4DB, PUTRGB4DB, 8) |
539 | | |
540 | | // YUV422 |
541 | 49.4k | YUV422FUNC(yuv422p_rgb48_c, uint8_t, 0, 0, PUTRGB48, 48, 1) |
542 | 40.7k | YUV422FUNC(yuv422p_bgr48_c, uint8_t, 0, 0, PUTBGR48, 48, 1) |
543 | 43.1k | YUV422FUNC(yuv422p_rgb32_c, uint32_t, 0, 0, PUTRGB, 8, 1) |
544 | | #if HAVE_BIGENDIAN |
545 | | YUV422FUNC(yuva422p_argb_c, uint32_t, 1, 24, PUTRGBA, 8, 1) |
546 | | YUV422FUNC(yuva422p_rgba_c, uint32_t, 1, 0, PUTRGBA, 8, 1) |
547 | | #else |
548 | 0 | YUV422FUNC(yuva422p_rgba_c, uint32_t, 1, 24, PUTRGBA, 8, 1) |
549 | 0 | YUV422FUNC(yuva422p_argb_c, uint32_t, 1, 0, PUTRGBA, 8, 1) |
550 | | #endif |
551 | 36.7k | YUV422FUNC(yuv422p_rgb24_c, uint8_t, 0, 0, PUTRGB24, 24, 1) |
552 | 36.0k | YUV422FUNC(yuv422p_bgr24_c, uint8_t, 0, 0, PUTBGR24, 24, 1) |
553 | 32.4k | YUV422FUNC(yuv422p_gbrp_c, uint8_t, 0, 0, PUTGBRP, 8, 3) |
554 | 43.0k | YUV422FUNC_DITHER(yuv422p_bgr16, uint16_t, LOADDITHER16, PUTRGB16, 8) |
555 | 41.5k | YUV422FUNC_DITHER(yuv422p_bgr15, uint16_t, LOADDITHER15, PUTRGB15, 8) |
556 | 29.5k | YUV422FUNC_DITHER(yuv422p_bgr12, uint16_t, LOADDITHER12, PUTRGB12, 8) |
557 | 74.9k | YUV422FUNC_DITHER(yuv422p_bgr8, uint8_t, LOADDITHER8, PUTRGB8, 8) |
558 | 40.7k | YUV422FUNC_DITHER(yuv422p_bgr4, uint8_t, LOADDITHER4D, PUTRGB4D, 4) |
559 | 54.5k | YUV422FUNC_DITHER(yuv422p_bgr4_byte, uint8_t, LOADDITHER4DB, PUTRGB4DB, 8) |
560 | | |
561 | | SwsFunc ff_yuv2rgb_get_func_ptr(SwsInternal *c) |
562 | 656 | { |
563 | 656 | SwsFunc t = NULL; |
564 | | |
565 | | #if ARCH_PPC |
566 | | t = ff_yuv2rgb_init_ppc(c); |
567 | | #elif ARCH_X86 |
568 | | t = ff_yuv2rgb_init_x86(c); |
569 | | #elif ARCH_LOONGARCH64 |
570 | | t = ff_yuv2rgb_init_loongarch(c); |
571 | | #elif ARCH_AARCH64 |
572 | | t = ff_yuv2rgb_init_aarch64(c); |
573 | | #endif |
574 | | |
575 | 656 | if (t) |
576 | 0 | return t; |
577 | | |
578 | 656 | av_log(c, AV_LOG_WARNING, |
579 | 656 | "No accelerated colorspace conversion found from %s to %s.\n", |
580 | 656 | av_get_pix_fmt_name(c->opts.src_format), av_get_pix_fmt_name(c->opts.dst_format)); |
581 | | |
582 | 656 | if (c->opts.src_format == AV_PIX_FMT_YUV422P) { |
583 | 287 | switch (c->opts.dst_format) { |
584 | 12 | case AV_PIX_FMT_BGR48BE: |
585 | 22 | case AV_PIX_FMT_BGR48LE: |
586 | 22 | return yuv422p_bgr48_c; |
587 | 12 | case AV_PIX_FMT_RGB48BE: |
588 | 26 | case AV_PIX_FMT_RGB48LE: |
589 | 26 | return yuv422p_rgb48_c; |
590 | 6 | case AV_PIX_FMT_ARGB: |
591 | 14 | case AV_PIX_FMT_ABGR: |
592 | 14 | if (CONFIG_SWSCALE_ALPHA && isALPHA(c->opts.src_format)) |
593 | 0 | return yuva422p_argb_c; |
594 | 14 | av_fallthrough; |
595 | 22 | case AV_PIX_FMT_RGBA: |
596 | 26 | case AV_PIX_FMT_BGRA: |
597 | 26 | return (CONFIG_SWSCALE_ALPHA && isALPHA(c->opts.src_format)) ? yuva422p_rgba_c : yuv422p_rgb32_c; |
598 | 22 | case AV_PIX_FMT_RGB24: |
599 | 22 | return yuv422p_rgb24_c; |
600 | 23 | case AV_PIX_FMT_BGR24: |
601 | 23 | return yuv422p_bgr24_c; |
602 | 10 | case AV_PIX_FMT_RGB565: |
603 | 21 | case AV_PIX_FMT_BGR565: |
604 | 21 | return yuv422p_bgr16; |
605 | 14 | case AV_PIX_FMT_RGB555: |
606 | 26 | case AV_PIX_FMT_BGR555: |
607 | 26 | return yuv422p_bgr15; |
608 | 11 | case AV_PIX_FMT_RGB444: |
609 | 21 | case AV_PIX_FMT_BGR444: |
610 | 21 | return yuv422p_bgr12; |
611 | 7 | case AV_PIX_FMT_RGB8: |
612 | 23 | case AV_PIX_FMT_BGR8: |
613 | 23 | return yuv422p_bgr8; |
614 | 13 | case AV_PIX_FMT_RGB4: |
615 | 24 | case AV_PIX_FMT_BGR4: |
616 | 24 | return yuv422p_bgr4; |
617 | 12 | case AV_PIX_FMT_RGB4_BYTE: |
618 | 21 | case AV_PIX_FMT_BGR4_BYTE: |
619 | 21 | return yuv422p_bgr4_byte; |
620 | 6 | case AV_PIX_FMT_MONOBLACK: |
621 | 6 | return yuv2rgb_c_1_ordered_dither; |
622 | 22 | case AV_PIX_FMT_GBRP: |
623 | 22 | return yuv422p_gbrp_c; |
624 | 287 | } |
625 | 369 | } else { |
626 | 369 | switch (c->opts.dst_format) { |
627 | 12 | case AV_PIX_FMT_BGR48BE: |
628 | 24 | case AV_PIX_FMT_BGR48LE: |
629 | 24 | return yuv2rgb_c_bgr48; |
630 | 13 | case AV_PIX_FMT_RGB48BE: |
631 | 24 | case AV_PIX_FMT_RGB48LE: |
632 | 24 | return yuv2rgb_c_48; |
633 | 24 | case AV_PIX_FMT_ARGB: |
634 | 37 | case AV_PIX_FMT_ABGR: |
635 | 37 | if (CONFIG_SWSCALE_ALPHA && isALPHA(c->opts.src_format)) |
636 | 27 | return yuva2argb_c; |
637 | 10 | av_fallthrough; |
638 | 29 | case AV_PIX_FMT_RGBA: |
639 | 49 | case AV_PIX_FMT_BGRA: |
640 | 49 | return (CONFIG_SWSCALE_ALPHA && isALPHA(c->opts.src_format)) ? yuva2rgba_c : yuv2rgb_c_32; |
641 | 24 | case AV_PIX_FMT_RGB24: |
642 | 24 | return yuv2rgb_c_24_rgb; |
643 | 22 | case AV_PIX_FMT_BGR24: |
644 | 22 | return yuv2rgb_c_24_bgr; |
645 | 18 | case AV_PIX_FMT_RGB565: |
646 | 26 | case AV_PIX_FMT_BGR565: |
647 | 26 | return yuv2rgb_c_16_ordered_dither; |
648 | 9 | case AV_PIX_FMT_RGB555: |
649 | 24 | case AV_PIX_FMT_BGR555: |
650 | 24 | return yuv2rgb_c_15_ordered_dither; |
651 | 9 | case AV_PIX_FMT_RGB444: |
652 | 24 | case AV_PIX_FMT_BGR444: |
653 | 24 | return yuv2rgb_c_12_ordered_dither; |
654 | 6 | case AV_PIX_FMT_RGB8: |
655 | 22 | case AV_PIX_FMT_BGR8: |
656 | 22 | return yuv2rgb_c_8_ordered_dither; |
657 | 15 | case AV_PIX_FMT_RGB4: |
658 | 25 | case AV_PIX_FMT_BGR4: |
659 | 25 | return yuv2rgb_c_4_ordered_dither; |
660 | 9 | case AV_PIX_FMT_RGB4_BYTE: |
661 | 23 | case AV_PIX_FMT_BGR4_BYTE: |
662 | 23 | return yuv2rgb_c_4b_ordered_dither; |
663 | 27 | case AV_PIX_FMT_MONOBLACK: |
664 | 27 | return yuv2rgb_c_1_ordered_dither; |
665 | 21 | case AV_PIX_FMT_GBRP: |
666 | 21 | return yuv420p_gbrp_c; |
667 | 369 | } |
668 | 369 | } |
669 | 11 | return NULL; |
670 | 656 | } |
671 | | |
672 | | static void fill_table(uint8_t* table[256 + 2*YUVRGB_TABLE_HEADROOM], const int elemsize, |
673 | | const int64_t inc, void *y_tab) |
674 | 34.5k | { |
675 | 34.5k | int i; |
676 | 34.5k | uint8_t *y_table = y_tab; |
677 | | |
678 | 34.5k | y_table -= elemsize * (inc >> 9); |
679 | | |
680 | 44.3M | for (i = 0; i < 256 + 2*YUVRGB_TABLE_HEADROOM; i++) { |
681 | 44.2M | int64_t cb = av_clip_uint8(i-YUVRGB_TABLE_HEADROOM)*inc; |
682 | 44.2M | table[i] = y_table + elemsize * (cb >> 16); |
683 | 44.2M | } |
684 | 34.5k | } |
685 | | |
686 | | static void fill_gv_table(int table[256 + 2*YUVRGB_TABLE_HEADROOM], const int elemsize, const int64_t inc) |
687 | 11.7k | { |
688 | 11.7k | int i; |
689 | 11.7k | int off = -(inc >> 9); |
690 | | |
691 | 15.0M | for (i = 0; i < 256 + 2*YUVRGB_TABLE_HEADROOM; i++) { |
692 | 14.9M | int64_t cb = av_clip_uint8(i-YUVRGB_TABLE_HEADROOM)*inc; |
693 | 14.9M | table[i] = elemsize * (off + (cb >> 16)); |
694 | 14.9M | } |
695 | 11.7k | } |
696 | | |
697 | | static uint16_t roundToInt16(int64_t f) |
698 | 146k | { |
699 | 146k | int r = (f + (1 << 15)) >> 16; |
700 | | |
701 | 146k | if (r < -0x7FFF) |
702 | 0 | return 0x8000; |
703 | 146k | else if (r > 0x7FFF) |
704 | 0 | return 0x7FFF; |
705 | 146k | else |
706 | 146k | return r; |
707 | 146k | } |
708 | | |
709 | | av_cold int ff_yuv2rgb_c_init_tables(SwsInternal *c, const int inv_table[4], |
710 | | int fullRange, int brightness, |
711 | | int contrast, int saturation) |
712 | 12.2k | { |
713 | 12.2k | const int isRgb = c->opts.dst_format == AV_PIX_FMT_RGB32 || |
714 | 12.2k | c->opts.dst_format == AV_PIX_FMT_RGB32_1 || |
715 | 11.1k | c->opts.dst_format == AV_PIX_FMT_BGR24 || |
716 | 10.7k | c->opts.dst_format == AV_PIX_FMT_RGB565BE || |
717 | 10.7k | c->opts.dst_format == AV_PIX_FMT_RGB565LE || |
718 | 10.6k | c->opts.dst_format == AV_PIX_FMT_RGB555BE || |
719 | 10.5k | c->opts.dst_format == AV_PIX_FMT_RGB555LE || |
720 | 10.5k | c->opts.dst_format == AV_PIX_FMT_RGB444BE || |
721 | 10.4k | c->opts.dst_format == AV_PIX_FMT_RGB444LE || |
722 | 10.4k | c->opts.dst_format == AV_PIX_FMT_X2RGB10BE || |
723 | 10.4k | c->opts.dst_format == AV_PIX_FMT_X2RGB10LE || |
724 | 10.1k | c->opts.dst_format == AV_PIX_FMT_RGB8 || |
725 | 9.84k | c->opts.dst_format == AV_PIX_FMT_RGB4 || |
726 | 9.77k | c->opts.dst_format == AV_PIX_FMT_RGB4_BYTE || |
727 | 9.37k | c->opts.dst_format == AV_PIX_FMT_MONOBLACK; |
728 | 12.2k | const int isNotNe = c->opts.dst_format == AV_PIX_FMT_NE(RGB565LE, RGB565BE) || |
729 | 12.1k | c->opts.dst_format == AV_PIX_FMT_NE(RGB555LE, RGB555BE) || |
730 | 12.1k | c->opts.dst_format == AV_PIX_FMT_NE(RGB444LE, RGB444BE) || |
731 | 12.0k | c->opts.dst_format == AV_PIX_FMT_NE(BGR565LE, BGR565BE) || |
732 | 12.0k | c->opts.dst_format == AV_PIX_FMT_NE(BGR555LE, BGR555BE) || |
733 | 11.9k | c->opts.dst_format == AV_PIX_FMT_NE(BGR444LE, BGR444BE) || |
734 | 11.9k | c->opts.dst_format == AV_PIX_FMT_NE(X2RGB10LE, X2RGB10BE) || |
735 | 11.9k | c->opts.dst_format == AV_PIX_FMT_NE(X2BGR10LE, X2BGR10BE); |
736 | 12.2k | const int bpp = c->dstFormatBpp; |
737 | 12.2k | uint8_t *y_table; |
738 | 12.2k | uint16_t *y_table16; |
739 | 12.2k | uint32_t *y_table32; |
740 | 12.2k | int i, base, rbase, gbase, bbase, av_uninit(abase), needAlpha; |
741 | 12.2k | const int yoffs = (fullRange ? 384 : 326) + YUVRGB_TABLE_LUMA_HEADROOM; |
742 | 12.2k | const int table_plane_size = 1024 + 2*YUVRGB_TABLE_LUMA_HEADROOM; |
743 | | |
744 | 12.2k | int64_t crv = inv_table[0]; |
745 | 12.2k | int64_t cbu = inv_table[1]; |
746 | 12.2k | int64_t cgu = -inv_table[2]; |
747 | 12.2k | int64_t cgv = -inv_table[3]; |
748 | 12.2k | int64_t cy = 1 << 16; |
749 | 12.2k | int64_t oy = 0; |
750 | 12.2k | int64_t yb = 0; |
751 | | |
752 | 12.2k | if (!fullRange) { |
753 | 11.6k | cy = (cy * 255) / 219; |
754 | 11.6k | oy = 16 << 16; |
755 | 11.6k | } else { |
756 | 531 | crv = (crv * 224) / 255; |
757 | 531 | cbu = (cbu * 224) / 255; |
758 | 531 | cgu = (cgu * 224) / 255; |
759 | 531 | cgv = (cgv * 224) / 255; |
760 | 531 | } |
761 | | |
762 | 12.2k | cy = (cy * contrast) >> 16; |
763 | 12.2k | crv = (crv * contrast * saturation) >> 32; |
764 | 12.2k | cbu = (cbu * contrast * saturation) >> 32; |
765 | 12.2k | cgu = (cgu * contrast * saturation) >> 32; |
766 | 12.2k | cgv = (cgv * contrast * saturation) >> 32; |
767 | 12.2k | oy -= 256LL * brightness; |
768 | | |
769 | 12.2k | c->uOffset = 0x0400040004000400LL; |
770 | 12.2k | c->vOffset = 0x0400040004000400LL; |
771 | 12.2k | c->yCoeff = roundToInt16(cy * (1 << 13)) * 0x0001000100010001ULL; |
772 | 12.2k | c->vrCoeff = roundToInt16(crv * (1 << 13)) * 0x0001000100010001ULL; |
773 | 12.2k | c->ubCoeff = roundToInt16(cbu * (1 << 13)) * 0x0001000100010001ULL; |
774 | 12.2k | c->vgCoeff = roundToInt16(cgv * (1 << 13)) * 0x0001000100010001ULL; |
775 | 12.2k | c->ugCoeff = roundToInt16(cgu * (1 << 13)) * 0x0001000100010001ULL; |
776 | 12.2k | c->yOffset = roundToInt16(oy * (1 << 3)) * 0x0001000100010001ULL; |
777 | | |
778 | 12.2k | c->yuv2rgb_y_coeff = (int16_t)roundToInt16(cy * (1 << 13)); |
779 | 12.2k | c->yuv2rgb_y_offset = (int16_t)roundToInt16(oy * (1 << 9)); |
780 | 12.2k | c->yuv2rgb_v2r_coeff = (int16_t)roundToInt16(crv * (1 << 13)); |
781 | 12.2k | c->yuv2rgb_v2g_coeff = (int16_t)roundToInt16(cgv * (1 << 13)); |
782 | 12.2k | c->yuv2rgb_u2g_coeff = (int16_t)roundToInt16(cgu * (1 << 13)); |
783 | 12.2k | c->yuv2rgb_u2b_coeff = (int16_t)roundToInt16(cbu * (1 << 13)); |
784 | | |
785 | | //scale coefficients by cy |
786 | 12.2k | crv = ((crv * (1 << 16)) + 0x8000) / FFMAX(cy, 1); |
787 | 12.2k | cbu = ((cbu * (1 << 16)) + 0x8000) / FFMAX(cy, 1); |
788 | 12.2k | cgu = ((cgu * (1 << 16)) + 0x8000) / FFMAX(cy, 1); |
789 | 12.2k | cgv = ((cgv * (1 << 16)) + 0x8000) / FFMAX(cy, 1); |
790 | | |
791 | 12.2k | av_freep(&c->yuvTable); |
792 | | |
793 | 12.2k | #define ALLOC_YUV_TABLE(x) \ |
794 | 12.2k | c->yuvTable = av_malloc(x); \ |
795 | 11.7k | if (!c->yuvTable) \ |
796 | 11.7k | return AVERROR(ENOMEM); |
797 | 12.2k | switch (bpp) { |
798 | 274 | case 1: |
799 | 274 | ALLOC_YUV_TABLE(table_plane_size); |
800 | 274 | y_table = c->yuvTable; |
801 | 274 | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
802 | 531k | for (i = 0; i < table_plane_size - 110; i++) { |
803 | 531k | y_table[i + 110] = av_clip_uint8((yb + 0x8000) >> 16) >> 7; |
804 | 531k | yb += cy; |
805 | 531k | } |
806 | 274 | fill_table(c->table_gU, 1, cgu, y_table + yoffs); |
807 | 274 | fill_gv_table(c->table_gV, 1, cgv); |
808 | 274 | break; |
809 | 852 | case 4: |
810 | 852 | case 4 | 128: |
811 | 852 | rbase = isRgb ? 3 : 0; |
812 | 852 | gbase = 1; |
813 | 852 | bbase = isRgb ? 0 : 3; |
814 | 852 | ALLOC_YUV_TABLE(table_plane_size * 3); |
815 | 852 | y_table = c->yuvTable; |
816 | 852 | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
817 | 1.65M | for (i = 0; i < table_plane_size - 110; i++) { |
818 | 1.65M | int yval = av_clip_uint8((yb + 0x8000) >> 16); |
819 | 1.65M | y_table[i + 110] = (yval >> 7) << rbase; |
820 | 1.65M | y_table[i + 37 + table_plane_size] = ((yval + 43) / 85) << gbase; |
821 | 1.65M | y_table[i + 110 + 2*table_plane_size] = (yval >> 7) << bbase; |
822 | 1.65M | yb += cy; |
823 | 1.65M | } |
824 | 852 | fill_table(c->table_rV, 1, crv, y_table + yoffs); |
825 | 852 | fill_table(c->table_gU, 1, cgu, y_table + yoffs + table_plane_size); |
826 | 852 | fill_table(c->table_bU, 1, cbu, y_table + yoffs + 2*table_plane_size); |
827 | 852 | fill_gv_table(c->table_gV, 1, cgv); |
828 | 852 | break; |
829 | 667 | case 8: |
830 | 667 | rbase = isRgb ? 5 : 0; |
831 | 667 | gbase = isRgb ? 2 : 3; |
832 | 667 | bbase = isRgb ? 0 : 6; |
833 | 667 | ALLOC_YUV_TABLE(table_plane_size * 3); |
834 | 667 | y_table = c->yuvTable; |
835 | 667 | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
836 | 1.34M | for (i = 0; i < table_plane_size - 38; i++) { |
837 | 1.34M | int yval = av_clip_uint8((yb + 0x8000) >> 16); |
838 | 1.34M | y_table[i + 16] = ((yval + 18) / 36) << rbase; |
839 | 1.34M | y_table[i + 16 + table_plane_size] = ((yval + 18) / 36) << gbase; |
840 | 1.34M | y_table[i + 37 + 2*table_plane_size] = ((yval + 43) / 85) << bbase; |
841 | 1.34M | yb += cy; |
842 | 1.34M | } |
843 | 667 | fill_table(c->table_rV, 1, crv, y_table + yoffs); |
844 | 667 | fill_table(c->table_gU, 1, cgu, y_table + yoffs + table_plane_size); |
845 | 667 | fill_table(c->table_bU, 1, cbu, y_table + yoffs + 2*table_plane_size); |
846 | 667 | fill_gv_table(c->table_gV, 1, cgv); |
847 | 667 | break; |
848 | 173 | case 12: |
849 | 173 | rbase = isRgb ? 8 : 0; |
850 | 173 | gbase = 4; |
851 | 173 | bbase = isRgb ? 0 : 8; |
852 | 173 | ALLOC_YUV_TABLE(table_plane_size * 3 * 2); |
853 | 173 | y_table16 = c->yuvTable; |
854 | 173 | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
855 | 354k | for (i = 0; i < table_plane_size; i++) { |
856 | 354k | uint8_t yval = av_clip_uint8((yb + 0x8000) >> 16); |
857 | 354k | y_table16[i] = (yval >> 4) << rbase; |
858 | 354k | y_table16[i + table_plane_size] = (yval >> 4) << gbase; |
859 | 354k | y_table16[i + 2*table_plane_size] = (yval >> 4) << bbase; |
860 | 354k | yb += cy; |
861 | 354k | } |
862 | 173 | if (isNotNe) |
863 | 387k | for (i = 0; i < table_plane_size * 3; i++) |
864 | 387k | y_table16[i] = av_bswap16(y_table16[i]); |
865 | 173 | fill_table(c->table_rV, 2, crv, y_table16 + yoffs); |
866 | 173 | fill_table(c->table_gU, 2, cgu, y_table16 + yoffs + table_plane_size); |
867 | 173 | fill_table(c->table_bU, 2, cbu, y_table16 + yoffs + 2*table_plane_size); |
868 | 173 | fill_gv_table(c->table_gV, 2, cgv); |
869 | 173 | break; |
870 | 270 | case 15: |
871 | 536 | case 16: |
872 | 536 | rbase = isRgb ? bpp - 5 : 0; |
873 | 536 | gbase = 5; |
874 | 536 | bbase = isRgb ? 0 : (bpp - 5); |
875 | 536 | ALLOC_YUV_TABLE(table_plane_size * 3 * 2); |
876 | 536 | y_table16 = c->yuvTable; |
877 | 536 | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
878 | 1.09M | for (i = 0; i < table_plane_size; i++) { |
879 | 1.09M | uint8_t yval = av_clip_uint8((yb + 0x8000) >> 16); |
880 | 1.09M | y_table16[i] = (yval >> 3) << rbase; |
881 | 1.09M | y_table16[i + table_plane_size] = (yval >> (18 - bpp)) << gbase; |
882 | 1.09M | y_table16[i + 2*table_plane_size] = (yval >> 3) << bbase; |
883 | 1.09M | yb += cy; |
884 | 1.09M | } |
885 | 536 | if (isNotNe) |
886 | 1.35M | for (i = 0; i < table_plane_size * 3; i++) |
887 | 1.35M | y_table16[i] = av_bswap16(y_table16[i]); |
888 | 536 | fill_table(c->table_rV, 2, crv, y_table16 + yoffs); |
889 | 536 | fill_table(c->table_gU, 2, cgu, y_table16 + yoffs + table_plane_size); |
890 | 536 | fill_table(c->table_bU, 2, cbu, y_table16 + yoffs + 2*table_plane_size); |
891 | 536 | fill_gv_table(c->table_gV, 2, cgv); |
892 | 536 | break; |
893 | 1.30k | case 24: |
894 | 3.32k | case 48: |
895 | 3.32k | ALLOC_YUV_TABLE(table_plane_size); |
896 | 3.32k | y_table = c->yuvTable; |
897 | 3.32k | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
898 | 6.80M | for (i = 0; i < table_plane_size; i++) { |
899 | 6.79M | y_table[i] = av_clip_uint8((yb + 0x8000) >> 16); |
900 | 6.79M | yb += cy; |
901 | 6.79M | } |
902 | 3.32k | fill_table(c->table_rV, 1, crv, y_table + yoffs); |
903 | 3.32k | fill_table(c->table_gU, 1, cgu, y_table + yoffs); |
904 | 3.32k | fill_table(c->table_bU, 1, cbu, y_table + yoffs); |
905 | 3.32k | fill_gv_table(c->table_gV, 1, cgv); |
906 | 3.32k | break; |
907 | 556 | case 30: |
908 | 556 | rbase = isRgb ? 20 : 0; |
909 | 556 | gbase = 10; |
910 | 556 | bbase = isRgb ? 0 : 20; |
911 | 556 | needAlpha = CONFIG_SWSCALE_ALPHA && isALPHA(c->opts.src_format); |
912 | 556 | if (!needAlpha) |
913 | 425 | abase = 30; |
914 | 556 | ALLOC_YUV_TABLE(table_plane_size * 3 * 4); |
915 | 556 | y_table32 = c->yuvTable; |
916 | 556 | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
917 | 1.13M | for (i = 0; i < table_plane_size; i++) { |
918 | 1.13M | unsigned yval = av_clip_uintp2((yb + 0x8000) >> 14, 10); |
919 | 1.13M | y_table32[i]= (yval << rbase) + (needAlpha ? 0 : (255u << abase)); |
920 | 1.13M | y_table32[i + table_plane_size] = yval << gbase; |
921 | 1.13M | y_table32[i + 2 * table_plane_size] = yval << bbase; |
922 | 1.13M | yb += cy; |
923 | 1.13M | } |
924 | 556 | if (isNotNe) { |
925 | 12.2k | for (i = 0; i < table_plane_size * 3; i++) |
926 | 12.2k | y_table32[i] = av_bswap32(y_table32[i]); |
927 | 2 | } |
928 | 556 | fill_table(c->table_rV, 4, crv, y_table32 + yoffs); |
929 | 556 | fill_table(c->table_gU, 4, cgu, y_table32 + yoffs + table_plane_size); |
930 | 556 | fill_table(c->table_bU, 4, cbu, y_table32 + yoffs + 2 * table_plane_size); |
931 | 556 | fill_gv_table(c->table_gV, 4, cgv); |
932 | 556 | break; |
933 | 2.37k | case 32: |
934 | 5.33k | case 64: |
935 | 5.33k | base = (c->opts.dst_format == AV_PIX_FMT_RGB32_1 || |
936 | 4.77k | c->opts.dst_format == AV_PIX_FMT_BGR32_1) ? 8 : 0; |
937 | 5.33k | rbase = base + (isRgb ? 16 : 0); |
938 | 5.33k | gbase = base + 8; |
939 | 5.33k | bbase = base + (isRgb ? 0 : 16); |
940 | 5.33k | needAlpha = CONFIG_SWSCALE_ALPHA && isALPHA(c->opts.src_format); |
941 | 5.33k | if (!needAlpha) |
942 | 2.41k | abase = (base + 24) & 31; |
943 | 5.33k | ALLOC_YUV_TABLE(table_plane_size * 3 * 4); |
944 | 5.33k | y_table32 = c->yuvTable; |
945 | 5.33k | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
946 | 10.9M | for (i = 0; i < table_plane_size; i++) { |
947 | 10.9M | unsigned yval = av_clip_uint8((yb + 0x8000) >> 16); |
948 | 10.9M | y_table32[i] = (yval << rbase) + |
949 | 10.9M | (needAlpha ? 0 : (255u << abase)); |
950 | 10.9M | y_table32[i + table_plane_size] = yval << gbase; |
951 | 10.9M | y_table32[i + 2*table_plane_size] = yval << bbase; |
952 | 10.9M | yb += cy; |
953 | 10.9M | } |
954 | 5.33k | fill_table(c->table_rV, 4, crv, y_table32 + yoffs); |
955 | 5.33k | fill_table(c->table_gU, 4, cgu, y_table32 + yoffs + table_plane_size); |
956 | 5.33k | fill_table(c->table_bU, 4, cbu, y_table32 + yoffs + 2*table_plane_size); |
957 | 5.33k | fill_gv_table(c->table_gV, 4, cgv); |
958 | 5.33k | break; |
959 | 507 | default: |
960 | 507 | if(!isPlanar(c->opts.dst_format) || bpp <= 24) |
961 | 1 | av_log(c, AV_LOG_ERROR, "%ibpp not supported by yuv2rgb\n", bpp); |
962 | 507 | return AVERROR(EINVAL); |
963 | 12.2k | } |
964 | 11.7k | return 0; |
965 | 12.2k | } |