/src/ffmpeg/libswscale/yuv2rgb.c
Line | Count | Source (jump to first uncovered line) |
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 | 409k | U = pu_##l[i]; \ |
70 | 409k | V = pv_##l[i]; \ |
71 | 409k | r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM]; \ |
72 | 409k | g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]); \ |
73 | 409k | b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM]; |
74 | | |
75 | | #define PUTRGB(l, i, abase) \ |
76 | 73.2k | Y = py_##l[2 * i]; \ |
77 | 73.2k | dst_##l[2 * i] = r[Y] + g[Y] + b[Y]; \ |
78 | 73.2k | Y = py_##l[2 * i + 1]; \ |
79 | 73.2k | dst_##l[2 * i + 1] = r[Y] + g[Y] + b[Y]; |
80 | | |
81 | | #define PUTRGB24(l, i, abase) \ |
82 | 56.8k | Y = py_##l[2 * i]; \ |
83 | 56.8k | dst_##l[6 * i + 0] = r[Y]; \ |
84 | 56.8k | dst_##l[6 * i + 1] = g[Y]; \ |
85 | 56.8k | dst_##l[6 * i + 2] = b[Y]; \ |
86 | 56.8k | Y = py_##l[2 * i + 1]; \ |
87 | 56.8k | dst_##l[6 * i + 3] = r[Y]; \ |
88 | 56.8k | dst_##l[6 * i + 4] = g[Y]; \ |
89 | 56.8k | dst_##l[6 * i + 5] = b[Y]; |
90 | | |
91 | | #define PUTBGR24(l, i, abase) \ |
92 | 26.3k | Y = py_##l[2 * i]; \ |
93 | 26.3k | dst_##l[6 * i + 0] = b[Y]; \ |
94 | 26.3k | dst_##l[6 * i + 1] = g[Y]; \ |
95 | 26.3k | dst_##l[6 * i + 2] = r[Y]; \ |
96 | 26.3k | Y = py_##l[2 * i + 1]; \ |
97 | 26.3k | dst_##l[6 * i + 3] = b[Y]; \ |
98 | 26.3k | dst_##l[6 * i + 4] = g[Y]; \ |
99 | 26.3k | dst_##l[6 * i + 5] = r[Y]; |
100 | | |
101 | | #define PUTRGBA(l, i, abase) \ |
102 | 43.8k | Y = py_##l[2 * i]; \ |
103 | 43.8k | dst_##l[2 * i] = r[Y] + g[Y] + b[Y] + ((uint32_t)(pa_##l[2 * i]) << abase); \ |
104 | 43.8k | Y = py_##l[2 * i + 1]; \ |
105 | 43.8k | 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 | 53.0k | Y = py_##l[ 2 * i]; \ |
109 | 53.0k | dst_##l[12 * i + 0] = dst_##l[12 * i + 1] = r[Y]; \ |
110 | 53.0k | dst_##l[12 * i + 2] = dst_##l[12 * i + 3] = g[Y]; \ |
111 | 53.0k | dst_##l[12 * i + 4] = dst_##l[12 * i + 5] = b[Y]; \ |
112 | 53.0k | Y = py_##l[ 2 * i + 1]; \ |
113 | 53.0k | dst_##l[12 * i + 6] = dst_##l[12 * i + 7] = r[Y]; \ |
114 | 53.0k | dst_##l[12 * i + 8] = dst_##l[12 * i + 9] = g[Y]; \ |
115 | 53.0k | dst_##l[12 * i + 10] = dst_##l[12 * i + 11] = b[Y]; |
116 | | |
117 | | #define PUTBGR48(l, i, abase) \ |
118 | 52.5k | Y = py_##l[2 * i]; \ |
119 | 52.5k | dst_##l[12 * i + 0] = dst_##l[12 * i + 1] = b[Y]; \ |
120 | 52.5k | dst_##l[12 * i + 2] = dst_##l[12 * i + 3] = g[Y]; \ |
121 | 52.5k | dst_##l[12 * i + 4] = dst_##l[12 * i + 5] = r[Y]; \ |
122 | 52.5k | Y = py_##l[2 * i + 1]; \ |
123 | 52.5k | dst_##l[12 * i + 6] = dst_##l[12 * i + 7] = b[Y]; \ |
124 | 52.5k | dst_##l[12 * i + 8] = dst_##l[12 * i + 9] = g[Y]; \ |
125 | 52.5k | dst_##l[12 * i + 10] = dst_##l[12 * i + 11] = r[Y]; |
126 | | |
127 | | #define PUTGBRP(l, i, abase) \ |
128 | 30.7k | Y = py_##l[2 * i]; \ |
129 | 30.7k | dst_##l [2 * i + 0] = g[Y]; \ |
130 | 30.7k | dst1_##l[2 * i + 0] = b[Y]; \ |
131 | 30.7k | dst2_##l[2 * i + 0] = r[Y]; \ |
132 | 30.7k | Y = py_##l[2 * i + 1]; \ |
133 | 30.7k | dst_##l [2 * i + 1] = g[Y]; \ |
134 | 30.7k | dst1_##l[2 * i + 1] = b[Y]; \ |
135 | 30.7k | 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 | 465 | { \ |
142 | 465 | int y; \ |
143 | 465 | \ |
144 | 31.7k | for (y = 0; y < srcSliceH; y += 2) { \ |
145 | 31.2k | int yd = y + srcSliceY; \ |
146 | 31.2k | dst_type *dst_1 = \ |
147 | 31.2k | (dst_type *)(dst[0] + (yd) * dstStride[0]); \ |
148 | 31.2k | dst_type *dst_2 = \ |
149 | 31.2k | (dst_type *)(dst[0] + (yd + 1) * dstStride[0]); \ |
150 | 31.2k | dst_type av_unused *dst1_1, *dst1_2, *dst2_1, *dst2_2; \ |
151 | 31.2k | dst_type av_unused *r, *g, *b; \ |
152 | 31.2k | const uint8_t *py_1 = src[0] + y * srcStride[0]; \ |
153 | 31.2k | const uint8_t *py_2 = py_1 + srcStride[0]; \ |
154 | 31.2k | const uint8_t av_unused *pu_1 = src[1] + (y >> !yuv422) * srcStride[1]; \ |
155 | 31.2k | const uint8_t av_unused *pv_1 = src[2] + (y >> !yuv422) * srcStride[2]; \ |
156 | 31.2k | const uint8_t av_unused *pu_2, *pv_2; \ |
157 | 31.2k | const uint8_t av_unused *pa_1, *pa_2; \ |
158 | 31.2k | unsigned int h_size = c->opts.dst_w >> 3; \ |
159 | 31.2k | if (nb_dst_planes > 1) { \ |
160 | 1.98k | dst1_1 = (dst_type *)(dst[1] + (yd) * dstStride[1]); \ |
161 | 1.98k | dst1_2 = (dst_type *)(dst[1] + (yd + 1) * dstStride[1]); \ |
162 | 1.98k | dst2_1 = (dst_type *)(dst[2] + (yd) * dstStride[2]); \ |
163 | 1.98k | dst2_2 = (dst_type *)(dst[2] + (yd + 1) * dstStride[2]); \ |
164 | 1.98k | } \ |
165 | 31.2k | if (yuv422) { \ |
166 | 12.8k | pu_2 = pu_1 + srcStride[1]; \ |
167 | 12.8k | pv_2 = pv_1 + srcStride[2]; \ |
168 | 12.8k | } \ |
169 | 31.2k | if (alpha) { \ |
170 | 1.36k | pa_1 = src[3] + y * srcStride[3]; \ |
171 | 1.36k | pa_2 = pa_1 + srcStride[3]; \ |
172 | 1.36k | } \ |
173 | 103k | while (h_size--) { \ |
174 | 72.6k | int av_unused U, V, Y; \ |
175 | | |
176 | | #define ENDYUV2RGBLINE(dst_delta, ss, alpha, yuv422, nb_dst_planes) \ |
177 | 73.3k | pu_1 += 4 >> ss; \ |
178 | 73.3k | pv_1 += 4 >> ss; \ |
179 | 73.3k | if (yuv422) { \ |
180 | 27.3k | pu_2 += 4 >> ss; \ |
181 | 27.3k | pv_2 += 4 >> ss; \ |
182 | 27.3k | } \ |
183 | 73.3k | py_1 += 8 >> ss; \ |
184 | 73.3k | py_2 += 8 >> ss; \ |
185 | 73.3k | if (alpha) { \ |
186 | 5.23k | pa_1 += 8 >> ss; \ |
187 | 5.23k | pa_2 += 8 >> ss; \ |
188 | 5.23k | } \ |
189 | 73.3k | dst_1 += dst_delta >> ss; \ |
190 | 73.3k | dst_2 += dst_delta >> ss; \ |
191 | 73.3k | if (nb_dst_planes > 1) { \ |
192 | 3.75k | dst1_1 += dst_delta >> ss; \ |
193 | 3.75k | dst1_2 += dst_delta >> ss; \ |
194 | 3.75k | dst2_1 += dst_delta >> ss; \ |
195 | 3.75k | dst2_2 += dst_delta >> ss; \ |
196 | 3.75k | } \ |
197 | 73.3k | } \ |
198 | 59.1k | if (c->opts.dst_w & (4 >> ss)) { \ |
199 | 16.8k | int av_unused Y, U, V; \ |
200 | | |
201 | | #define ENDYUV2RGBFUNC() \ |
202 | 13.8k | } \ |
203 | 31.2k | } \ |
204 | 465 | return srcSliceH; \ |
205 | 465 | } |
206 | | |
207 | | #define YUV420FUNC(func_name, dst_type, alpha, abase, PUTFUNC, dst_delta, nb_dst_planes) \ |
208 | 24.8k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ |
209 | 24.8k | LOADCHROMA(1, 0); \ |
210 | 24.8k | PUTFUNC(1, 0, abase); \ |
211 | 24.8k | PUTFUNC(2, 0, abase); \ |
212 | 24.8k | \ |
213 | 24.8k | LOADCHROMA(1, 1); \ |
214 | 24.8k | PUTFUNC(2, 1, abase); \ |
215 | 24.8k | PUTFUNC(1, 1, abase); \ |
216 | 24.8k | \ |
217 | 24.8k | LOADCHROMA(1, 2); \ |
218 | 24.8k | PUTFUNC(1, 2, abase); \ |
219 | 24.8k | PUTFUNC(2, 2, abase); \ |
220 | 24.8k | \ |
221 | 24.8k | LOADCHROMA(1, 3); \ |
222 | 24.8k | PUTFUNC(2, 3, abase); \ |
223 | 24.8k | PUTFUNC(1, 3, abase); \ |
224 | 24.8k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ |
225 | 2.07k | LOADCHROMA(1, 0); \ |
226 | 2.07k | PUTFUNC(1, 0, abase); \ |
227 | 2.07k | PUTFUNC(2, 0, abase); \ |
228 | 2.07k | \ |
229 | 2.07k | LOADCHROMA(1, 1); \ |
230 | 2.07k | PUTFUNC(2, 1, abase); \ |
231 | 2.07k | PUTFUNC(1, 1, abase); \ |
232 | 4.82k | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ |
233 | 4.82k | LOADCHROMA(1, 0); \ |
234 | 4.82k | PUTFUNC(1, 0, abase); \ |
235 | 4.82k | PUTFUNC(2, 0, abase); \ |
236 | 4.82k | ENDYUV2RGBFUNC() yuv2rgb.c:yuv2rgb_c_bgr48 Line | Count | Source | 208 | 2.79k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 2.79k | LOADCHROMA(1, 0); \ | 210 | 2.79k | PUTFUNC(1, 0, abase); \ | 211 | 2.79k | PUTFUNC(2, 0, abase); \ | 212 | 2.79k | \ | 213 | 2.79k | LOADCHROMA(1, 1); \ | 214 | 2.79k | PUTFUNC(2, 1, abase); \ | 215 | 2.79k | PUTFUNC(1, 1, abase); \ | 216 | 2.79k | \ | 217 | 2.79k | LOADCHROMA(1, 2); \ | 218 | 2.79k | PUTFUNC(1, 2, abase); \ | 219 | 2.79k | PUTFUNC(2, 2, abase); \ | 220 | 2.79k | \ | 221 | 2.79k | LOADCHROMA(1, 3); \ | 222 | 2.79k | PUTFUNC(2, 3, abase); \ | 223 | 2.79k | PUTFUNC(1, 3, abase); \ | 224 | 2.79k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 302 | LOADCHROMA(1, 0); \ | 226 | 302 | PUTFUNC(1, 0, abase); \ | 227 | 302 | PUTFUNC(2, 0, abase); \ | 228 | 302 | \ | 229 | 302 | LOADCHROMA(1, 1); \ | 230 | 302 | PUTFUNC(2, 1, abase); \ | 231 | 302 | PUTFUNC(1, 1, abase); \ | 232 | 302 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 259 | LOADCHROMA(1, 0); \ | 234 | 259 | PUTFUNC(1, 0, abase); \ | 235 | 259 | PUTFUNC(2, 0, abase); \ | 236 | 259 | ENDYUV2RGBFUNC() |
Line | Count | Source | 208 | 3.41k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 3.41k | LOADCHROMA(1, 0); \ | 210 | 3.41k | PUTFUNC(1, 0, abase); \ | 211 | 3.41k | PUTFUNC(2, 0, abase); \ | 212 | 3.41k | \ | 213 | 3.41k | LOADCHROMA(1, 1); \ | 214 | 3.41k | PUTFUNC(2, 1, abase); \ | 215 | 3.41k | PUTFUNC(1, 1, abase); \ | 216 | 3.41k | \ | 217 | 3.41k | LOADCHROMA(1, 2); \ | 218 | 3.41k | PUTFUNC(1, 2, abase); \ | 219 | 3.41k | PUTFUNC(2, 2, abase); \ | 220 | 3.41k | \ | 221 | 3.41k | LOADCHROMA(1, 3); \ | 222 | 3.41k | PUTFUNC(2, 3, abase); \ | 223 | 3.41k | PUTFUNC(1, 3, abase); \ | 224 | 3.41k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 227 | LOADCHROMA(1, 0); \ | 226 | 227 | PUTFUNC(1, 0, abase); \ | 227 | 227 | PUTFUNC(2, 0, abase); \ | 228 | 227 | \ | 229 | 227 | LOADCHROMA(1, 1); \ | 230 | 227 | PUTFUNC(2, 1, abase); \ | 231 | 227 | PUTFUNC(1, 1, abase); \ | 232 | 393 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 393 | LOADCHROMA(1, 0); \ | 234 | 393 | PUTFUNC(1, 0, abase); \ | 235 | 393 | PUTFUNC(2, 0, abase); \ | 236 | 393 | ENDYUV2RGBFUNC() |
Line | Count | Source | 208 | 3.79k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 3.79k | LOADCHROMA(1, 0); \ | 210 | 3.79k | PUTFUNC(1, 0, abase); \ | 211 | 3.79k | PUTFUNC(2, 0, abase); \ | 212 | 3.79k | \ | 213 | 3.79k | LOADCHROMA(1, 1); \ | 214 | 3.79k | PUTFUNC(2, 1, abase); \ | 215 | 3.79k | PUTFUNC(1, 1, abase); \ | 216 | 3.79k | \ | 217 | 3.79k | LOADCHROMA(1, 2); \ | 218 | 3.79k | PUTFUNC(1, 2, abase); \ | 219 | 3.79k | PUTFUNC(2, 2, abase); \ | 220 | 3.79k | \ | 221 | 3.79k | LOADCHROMA(1, 3); \ | 222 | 3.79k | PUTFUNC(2, 3, abase); \ | 223 | 3.79k | PUTFUNC(1, 3, abase); \ | 224 | 3.79k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 98 | LOADCHROMA(1, 0); \ | 226 | 98 | PUTFUNC(1, 0, abase); \ | 227 | 98 | PUTFUNC(2, 0, abase); \ | 228 | 98 | \ | 229 | 98 | LOADCHROMA(1, 1); \ | 230 | 98 | PUTFUNC(2, 1, abase); \ | 231 | 98 | PUTFUNC(1, 1, abase); \ | 232 | 442 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 442 | LOADCHROMA(1, 0); \ | 234 | 442 | PUTFUNC(1, 0, abase); \ | 235 | 442 | PUTFUNC(2, 0, abase); \ | 236 | 442 | ENDYUV2RGBFUNC() |
Line | Count | Source | 208 | 1.27k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 1.27k | LOADCHROMA(1, 0); \ | 210 | 1.27k | PUTFUNC(1, 0, abase); \ | 211 | 1.27k | PUTFUNC(2, 0, abase); \ | 212 | 1.27k | \ | 213 | 1.27k | LOADCHROMA(1, 1); \ | 214 | 1.27k | PUTFUNC(2, 1, abase); \ | 215 | 1.27k | PUTFUNC(1, 1, abase); \ | 216 | 1.27k | \ | 217 | 1.27k | LOADCHROMA(1, 2); \ | 218 | 1.27k | PUTFUNC(1, 2, abase); \ | 219 | 1.27k | PUTFUNC(2, 2, abase); \ | 220 | 1.27k | \ | 221 | 1.27k | LOADCHROMA(1, 3); \ | 222 | 1.27k | PUTFUNC(2, 3, abase); \ | 223 | 1.27k | PUTFUNC(1, 3, abase); \ | 224 | 1.27k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 62 | LOADCHROMA(1, 0); \ | 226 | 62 | PUTFUNC(1, 0, abase); \ | 227 | 62 | PUTFUNC(2, 0, abase); \ | 228 | 62 | \ | 229 | 62 | LOADCHROMA(1, 1); \ | 230 | 62 | PUTFUNC(2, 1, abase); \ | 231 | 62 | PUTFUNC(1, 1, abase); \ | 232 | 886 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 886 | LOADCHROMA(1, 0); \ | 234 | 886 | PUTFUNC(1, 0, abase); \ | 235 | 886 | PUTFUNC(2, 0, abase); \ | 236 | 886 | ENDYUV2RGBFUNC() |
Line | Count | Source | 208 | 5.83k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 5.83k | LOADCHROMA(1, 0); \ | 210 | 5.83k | PUTFUNC(1, 0, abase); \ | 211 | 5.83k | PUTFUNC(2, 0, abase); \ | 212 | 5.83k | \ | 213 | 5.83k | LOADCHROMA(1, 1); \ | 214 | 5.83k | PUTFUNC(2, 1, abase); \ | 215 | 5.83k | PUTFUNC(1, 1, abase); \ | 216 | 5.83k | \ | 217 | 5.83k | LOADCHROMA(1, 2); \ | 218 | 5.83k | PUTFUNC(1, 2, abase); \ | 219 | 5.83k | PUTFUNC(2, 2, abase); \ | 220 | 5.83k | \ | 221 | 5.83k | LOADCHROMA(1, 3); \ | 222 | 5.83k | PUTFUNC(2, 3, abase); \ | 223 | 5.83k | PUTFUNC(1, 3, abase); \ | 224 | 5.83k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 214 | LOADCHROMA(1, 0); \ | 226 | 214 | PUTFUNC(1, 0, abase); \ | 227 | 214 | PUTFUNC(2, 0, abase); \ | 228 | 214 | \ | 229 | 214 | LOADCHROMA(1, 1); \ | 230 | 214 | PUTFUNC(2, 1, abase); \ | 231 | 214 | PUTFUNC(1, 1, abase); \ | 232 | 666 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 666 | LOADCHROMA(1, 0); \ | 234 | 666 | PUTFUNC(1, 0, abase); \ | 235 | 666 | PUTFUNC(2, 0, abase); \ | 236 | 666 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv2rgb_c_24_rgb Line | Count | Source | 208 | 2.23k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 2.23k | LOADCHROMA(1, 0); \ | 210 | 2.23k | PUTFUNC(1, 0, abase); \ | 211 | 2.23k | PUTFUNC(2, 0, abase); \ | 212 | 2.23k | \ | 213 | 2.23k | LOADCHROMA(1, 1); \ | 214 | 2.23k | PUTFUNC(2, 1, abase); \ | 215 | 2.23k | PUTFUNC(1, 1, abase); \ | 216 | 2.23k | \ | 217 | 2.23k | LOADCHROMA(1, 2); \ | 218 | 2.23k | PUTFUNC(1, 2, abase); \ | 219 | 2.23k | PUTFUNC(2, 2, abase); \ | 220 | 2.23k | \ | 221 | 2.23k | LOADCHROMA(1, 3); \ | 222 | 2.23k | PUTFUNC(2, 3, abase); \ | 223 | 2.23k | PUTFUNC(1, 3, abase); \ | 224 | 2.23k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 730 | LOADCHROMA(1, 0); \ | 226 | 730 | PUTFUNC(1, 0, abase); \ | 227 | 730 | PUTFUNC(2, 0, abase); \ | 228 | 730 | \ | 229 | 730 | LOADCHROMA(1, 1); \ | 230 | 730 | PUTFUNC(2, 1, abase); \ | 231 | 730 | PUTFUNC(1, 1, abase); \ | 232 | 1.11k | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 1.11k | LOADCHROMA(1, 0); \ | 234 | 1.11k | PUTFUNC(1, 0, abase); \ | 235 | 1.11k | PUTFUNC(2, 0, abase); \ | 236 | 1.11k | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv2rgb_c_24_bgr Line | Count | Source | 208 | 1.95k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 1.95k | LOADCHROMA(1, 0); \ | 210 | 1.95k | PUTFUNC(1, 0, abase); \ | 211 | 1.95k | PUTFUNC(2, 0, abase); \ | 212 | 1.95k | \ | 213 | 1.95k | LOADCHROMA(1, 1); \ | 214 | 1.95k | PUTFUNC(2, 1, abase); \ | 215 | 1.95k | PUTFUNC(1, 1, abase); \ | 216 | 1.95k | \ | 217 | 1.95k | LOADCHROMA(1, 2); \ | 218 | 1.95k | PUTFUNC(1, 2, abase); \ | 219 | 1.95k | PUTFUNC(2, 2, abase); \ | 220 | 1.95k | \ | 221 | 1.95k | LOADCHROMA(1, 3); \ | 222 | 1.95k | PUTFUNC(2, 3, abase); \ | 223 | 1.95k | PUTFUNC(1, 3, abase); \ | 224 | 1.95k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 207 | LOADCHROMA(1, 0); \ | 226 | 207 | PUTFUNC(1, 0, abase); \ | 227 | 207 | PUTFUNC(2, 0, abase); \ | 228 | 207 | \ | 229 | 207 | LOADCHROMA(1, 1); \ | 230 | 207 | PUTFUNC(2, 1, abase); \ | 231 | 207 | PUTFUNC(1, 1, abase); \ | 232 | 640 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 640 | LOADCHROMA(1, 0); \ | 234 | 640 | PUTFUNC(1, 0, abase); \ | 235 | 640 | PUTFUNC(2, 0, abase); \ | 236 | 640 | ENDYUV2RGBFUNC() |
Line | Count | Source | 208 | 3.51k | YUV2RGBFUNC(func_name, dst_type, alpha, 0, nb_dst_planes) \ | 209 | 3.51k | LOADCHROMA(1, 0); \ | 210 | 3.51k | PUTFUNC(1, 0, abase); \ | 211 | 3.51k | PUTFUNC(2, 0, abase); \ | 212 | 3.51k | \ | 213 | 3.51k | LOADCHROMA(1, 1); \ | 214 | 3.51k | PUTFUNC(2, 1, abase); \ | 215 | 3.51k | PUTFUNC(1, 1, abase); \ | 216 | 3.51k | \ | 217 | 3.51k | LOADCHROMA(1, 2); \ | 218 | 3.51k | PUTFUNC(1, 2, abase); \ | 219 | 3.51k | PUTFUNC(2, 2, abase); \ | 220 | 3.51k | \ | 221 | 3.51k | LOADCHROMA(1, 3); \ | 222 | 3.51k | PUTFUNC(2, 3, abase); \ | 223 | 3.51k | PUTFUNC(1, 3, abase); \ | 224 | 3.51k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 0, nb_dst_planes) \ | 225 | 230 | LOADCHROMA(1, 0); \ | 226 | 230 | PUTFUNC(1, 0, abase); \ | 227 | 230 | PUTFUNC(2, 0, abase); \ | 228 | 230 | \ | 229 | 230 | LOADCHROMA(1, 1); \ | 230 | 230 | PUTFUNC(2, 1, abase); \ | 231 | 230 | PUTFUNC(1, 1, abase); \ | 232 | 431 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 0, nb_dst_planes) \ | 233 | 431 | LOADCHROMA(1, 0); \ | 234 | 431 | PUTFUNC(1, 0, abase); \ | 235 | 431 | PUTFUNC(2, 0, abase); \ | 236 | 431 | ENDYUV2RGBFUNC() |
|
237 | | |
238 | | #define YUV422FUNC(func_name, dst_type, alpha, abase, PUTFUNC, dst_delta, nb_dst_planes) \ |
239 | 13.7k | YUV2RGBFUNC(func_name, dst_type, alpha, 1, nb_dst_planes) \ |
240 | 13.7k | LOADCHROMA(1, 0); \ |
241 | 13.7k | PUTFUNC(1, 0, abase); \ |
242 | 13.7k | \ |
243 | 13.7k | LOADCHROMA(2, 0); \ |
244 | 13.7k | PUTFUNC(2, 0, abase); \ |
245 | 13.7k | \ |
246 | 13.7k | LOADCHROMA(2, 1); \ |
247 | 13.7k | PUTFUNC(2, 1, abase); \ |
248 | 13.7k | \ |
249 | 13.7k | LOADCHROMA(1, 1); \ |
250 | 13.7k | PUTFUNC(1, 1, abase); \ |
251 | 13.7k | \ |
252 | 13.7k | LOADCHROMA(1, 2); \ |
253 | 13.7k | PUTFUNC(1, 2, abase); \ |
254 | 13.7k | \ |
255 | 13.7k | LOADCHROMA(2, 2); \ |
256 | 13.7k | PUTFUNC(2, 2, abase); \ |
257 | 13.7k | \ |
258 | 13.7k | LOADCHROMA(2, 3); \ |
259 | 13.7k | PUTFUNC(2, 3, abase); \ |
260 | 13.7k | \ |
261 | 13.7k | LOADCHROMA(1, 3); \ |
262 | 13.7k | PUTFUNC(1, 3, abase); \ |
263 | 13.7k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 1, nb_dst_planes) \ |
264 | 859 | LOADCHROMA(1, 0); \ |
265 | 859 | PUTFUNC(1, 0, abase); \ |
266 | 859 | \ |
267 | 859 | LOADCHROMA(2, 0); \ |
268 | 859 | PUTFUNC(2, 0, abase); \ |
269 | 859 | \ |
270 | 859 | LOADCHROMA(2, 1); \ |
271 | 859 | PUTFUNC(2, 1, abase); \ |
272 | 859 | \ |
273 | 859 | LOADCHROMA(1, 1); \ |
274 | 859 | PUTFUNC(1, 1, abase); \ |
275 | 3.30k | ENDYUV2RGBLINE(dst_delta, 1, alpha, 1, nb_dst_planes) \ |
276 | 3.30k | LOADCHROMA(1, 0); \ |
277 | 3.30k | PUTFUNC(1, 0, abase); \ |
278 | 3.30k | \ |
279 | 3.30k | LOADCHROMA(2, 0); \ |
280 | 3.30k | PUTFUNC(2, 0, abase); \ |
281 | 3.30k | ENDYUV2RGBFUNC() yuv2rgb.c:yuv422p_bgr48_c Line | Count | Source | 239 | 3.36k | YUV2RGBFUNC(func_name, dst_type, alpha, 1, nb_dst_planes) \ | 240 | 3.36k | LOADCHROMA(1, 0); \ | 241 | 3.36k | PUTFUNC(1, 0, abase); \ | 242 | 3.36k | \ | 243 | 3.36k | LOADCHROMA(2, 0); \ | 244 | 3.36k | PUTFUNC(2, 0, abase); \ | 245 | 3.36k | \ | 246 | 3.36k | LOADCHROMA(2, 1); \ | 247 | 3.36k | PUTFUNC(2, 1, abase); \ | 248 | 3.36k | \ | 249 | 3.36k | LOADCHROMA(1, 1); \ | 250 | 3.36k | PUTFUNC(1, 1, abase); \ | 251 | 3.36k | \ | 252 | 3.36k | LOADCHROMA(1, 2); \ | 253 | 3.36k | PUTFUNC(1, 2, abase); \ | 254 | 3.36k | \ | 255 | 3.36k | LOADCHROMA(2, 2); \ | 256 | 3.36k | PUTFUNC(2, 2, abase); \ | 257 | 3.36k | \ | 258 | 3.36k | LOADCHROMA(2, 3); \ | 259 | 3.36k | PUTFUNC(2, 3, abase); \ | 260 | 3.36k | \ | 261 | 3.36k | LOADCHROMA(1, 3); \ | 262 | 3.36k | PUTFUNC(1, 3, abase); \ | 263 | 3.36k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 1, nb_dst_planes) \ | 264 | 64 | LOADCHROMA(1, 0); \ | 265 | 64 | PUTFUNC(1, 0, abase); \ | 266 | 64 | \ | 267 | 64 | LOADCHROMA(2, 0); \ | 268 | 64 | PUTFUNC(2, 0, abase); \ | 269 | 64 | \ | 270 | 64 | LOADCHROMA(2, 1); \ | 271 | 64 | PUTFUNC(2, 1, abase); \ | 272 | 64 | \ | 273 | 64 | LOADCHROMA(1, 1); \ | 274 | 64 | PUTFUNC(1, 1, abase); \ | 275 | 604 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 1, nb_dst_planes) \ | 276 | 604 | LOADCHROMA(1, 0); \ | 277 | 604 | PUTFUNC(1, 0, abase); \ | 278 | 604 | \ | 279 | 604 | LOADCHROMA(2, 0); \ | 280 | 604 | PUTFUNC(2, 0, abase); \ | 281 | 604 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv422p_rgb48_c Line | Count | Source | 239 | 2.74k | YUV2RGBFUNC(func_name, dst_type, alpha, 1, nb_dst_planes) \ | 240 | 2.74k | LOADCHROMA(1, 0); \ | 241 | 2.74k | PUTFUNC(1, 0, abase); \ | 242 | 2.74k | \ | 243 | 2.74k | LOADCHROMA(2, 0); \ | 244 | 2.74k | PUTFUNC(2, 0, abase); \ | 245 | 2.74k | \ | 246 | 2.74k | LOADCHROMA(2, 1); \ | 247 | 2.74k | PUTFUNC(2, 1, abase); \ | 248 | 2.74k | \ | 249 | 2.74k | LOADCHROMA(1, 1); \ | 250 | 2.74k | PUTFUNC(1, 1, abase); \ | 251 | 2.74k | \ | 252 | 2.74k | LOADCHROMA(1, 2); \ | 253 | 2.74k | PUTFUNC(1, 2, abase); \ | 254 | 2.74k | \ | 255 | 2.74k | LOADCHROMA(2, 2); \ | 256 | 2.74k | PUTFUNC(2, 2, abase); \ | 257 | 2.74k | \ | 258 | 2.74k | LOADCHROMA(2, 3); \ | 259 | 2.74k | PUTFUNC(2, 3, abase); \ | 260 | 2.74k | \ | 261 | 2.74k | LOADCHROMA(1, 3); \ | 262 | 2.74k | PUTFUNC(1, 3, abase); \ | 263 | 2.74k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 1, nb_dst_planes) \ | 264 | 338 | LOADCHROMA(1, 0); \ | 265 | 338 | PUTFUNC(1, 0, abase); \ | 266 | 338 | \ | 267 | 338 | LOADCHROMA(2, 0); \ | 268 | 338 | PUTFUNC(2, 0, abase); \ | 269 | 338 | \ | 270 | 338 | LOADCHROMA(2, 1); \ | 271 | 338 | PUTFUNC(2, 1, abase); \ | 272 | 338 | \ | 273 | 338 | LOADCHROMA(1, 1); \ | 274 | 338 | PUTFUNC(1, 1, abase); \ | 275 | 385 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 1, nb_dst_planes) \ | 276 | 385 | LOADCHROMA(1, 0); \ | 277 | 385 | PUTFUNC(1, 0, abase); \ | 278 | 385 | \ | 279 | 385 | LOADCHROMA(2, 0); \ | 280 | 385 | PUTFUNC(2, 0, abase); \ | 281 | 385 | ENDYUV2RGBFUNC() |
Unexecuted instantiation: yuv2rgb.c:yuva422p_argb_c Unexecuted instantiation: yuv2rgb.c:yuva422p_rgba_c yuv2rgb.c:yuv422p_rgb32_c Line | Count | Source | 239 | 2.79k | YUV2RGBFUNC(func_name, dst_type, alpha, 1, nb_dst_planes) \ | 240 | 2.79k | LOADCHROMA(1, 0); \ | 241 | 2.79k | PUTFUNC(1, 0, abase); \ | 242 | 2.79k | \ | 243 | 2.79k | LOADCHROMA(2, 0); \ | 244 | 2.79k | PUTFUNC(2, 0, abase); \ | 245 | 2.79k | \ | 246 | 2.79k | LOADCHROMA(2, 1); \ | 247 | 2.79k | PUTFUNC(2, 1, abase); \ | 248 | 2.79k | \ | 249 | 2.79k | LOADCHROMA(1, 1); \ | 250 | 2.79k | PUTFUNC(1, 1, abase); \ | 251 | 2.79k | \ | 252 | 2.79k | LOADCHROMA(1, 2); \ | 253 | 2.79k | PUTFUNC(1, 2, abase); \ | 254 | 2.79k | \ | 255 | 2.79k | LOADCHROMA(2, 2); \ | 256 | 2.79k | PUTFUNC(2, 2, abase); \ | 257 | 2.79k | \ | 258 | 2.79k | LOADCHROMA(2, 3); \ | 259 | 2.79k | PUTFUNC(2, 3, abase); \ | 260 | 2.79k | \ | 261 | 2.79k | LOADCHROMA(1, 3); \ | 262 | 2.79k | PUTFUNC(1, 3, abase); \ | 263 | 2.79k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 1, nb_dst_planes) \ | 264 | 217 | LOADCHROMA(1, 0); \ | 265 | 217 | PUTFUNC(1, 0, abase); \ | 266 | 217 | \ | 267 | 217 | LOADCHROMA(2, 0); \ | 268 | 217 | PUTFUNC(2, 0, abase); \ | 269 | 217 | \ | 270 | 217 | LOADCHROMA(2, 1); \ | 271 | 217 | PUTFUNC(2, 1, abase); \ | 272 | 217 | \ | 273 | 217 | LOADCHROMA(1, 1); \ | 274 | 217 | PUTFUNC(1, 1, abase); \ | 275 | 578 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 1, nb_dst_planes) \ | 276 | 578 | LOADCHROMA(1, 0); \ | 277 | 578 | PUTFUNC(1, 0, abase); \ | 278 | 578 | \ | 279 | 578 | LOADCHROMA(2, 0); \ | 280 | 578 | PUTFUNC(2, 0, abase); \ | 281 | 578 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv422p_rgb24_c Line | Count | Source | 239 | 3.90k | YUV2RGBFUNC(func_name, dst_type, alpha, 1, nb_dst_planes) \ | 240 | 3.90k | LOADCHROMA(1, 0); \ | 241 | 3.90k | PUTFUNC(1, 0, abase); \ | 242 | 3.90k | \ | 243 | 3.90k | LOADCHROMA(2, 0); \ | 244 | 3.90k | PUTFUNC(2, 0, abase); \ | 245 | 3.90k | \ | 246 | 3.90k | LOADCHROMA(2, 1); \ | 247 | 3.90k | PUTFUNC(2, 1, abase); \ | 248 | 3.90k | \ | 249 | 3.90k | LOADCHROMA(1, 1); \ | 250 | 3.90k | PUTFUNC(1, 1, abase); \ | 251 | 3.90k | \ | 252 | 3.90k | LOADCHROMA(1, 2); \ | 253 | 3.90k | PUTFUNC(1, 2, abase); \ | 254 | 3.90k | \ | 255 | 3.90k | LOADCHROMA(2, 2); \ | 256 | 3.90k | PUTFUNC(2, 2, abase); \ | 257 | 3.90k | \ | 258 | 3.90k | LOADCHROMA(2, 3); \ | 259 | 3.90k | PUTFUNC(2, 3, abase); \ | 260 | 3.90k | \ | 261 | 3.90k | LOADCHROMA(1, 3); \ | 262 | 3.90k | PUTFUNC(1, 3, abase); \ | 263 | 3.90k | ENDYUV2RGBLINE(dst_delta, 0, alpha, 1, nb_dst_planes) \ | 264 | 225 | LOADCHROMA(1, 0); \ | 265 | 225 | PUTFUNC(1, 0, abase); \ | 266 | 225 | \ | 267 | 225 | LOADCHROMA(2, 0); \ | 268 | 225 | PUTFUNC(2, 0, abase); \ | 269 | 225 | \ | 270 | 225 | LOADCHROMA(2, 1); \ | 271 | 225 | PUTFUNC(2, 1, abase); \ | 272 | 225 | \ | 273 | 225 | LOADCHROMA(1, 1); \ | 274 | 225 | PUTFUNC(1, 1, abase); \ | 275 | 858 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 1, nb_dst_planes) \ | 276 | 858 | LOADCHROMA(1, 0); \ | 277 | 858 | PUTFUNC(1, 0, abase); \ | 278 | 858 | \ | 279 | 858 | LOADCHROMA(2, 0); \ | 280 | 858 | PUTFUNC(2, 0, abase); \ | 281 | 858 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv422p_bgr24_c Line | Count | Source | 239 | 933 | YUV2RGBFUNC(func_name, dst_type, alpha, 1, nb_dst_planes) \ | 240 | 933 | LOADCHROMA(1, 0); \ | 241 | 933 | PUTFUNC(1, 0, abase); \ | 242 | 933 | \ | 243 | 933 | LOADCHROMA(2, 0); \ | 244 | 933 | PUTFUNC(2, 0, abase); \ | 245 | 933 | \ | 246 | 933 | LOADCHROMA(2, 1); \ | 247 | 933 | PUTFUNC(2, 1, abase); \ | 248 | 933 | \ | 249 | 933 | LOADCHROMA(1, 1); \ | 250 | 933 | PUTFUNC(1, 1, abase); \ | 251 | 933 | \ | 252 | 933 | LOADCHROMA(1, 2); \ | 253 | 933 | PUTFUNC(1, 2, abase); \ | 254 | 933 | \ | 255 | 933 | LOADCHROMA(2, 2); \ | 256 | 933 | PUTFUNC(2, 2, abase); \ | 257 | 933 | \ | 258 | 933 | LOADCHROMA(2, 3); \ | 259 | 933 | PUTFUNC(2, 3, abase); \ | 260 | 933 | \ | 261 | 933 | LOADCHROMA(1, 3); \ | 262 | 933 | PUTFUNC(1, 3, abase); \ | 263 | 933 | ENDYUV2RGBLINE(dst_delta, 0, alpha, 1, nb_dst_planes) \ | 264 | 15 | LOADCHROMA(1, 0); \ | 265 | 15 | PUTFUNC(1, 0, abase); \ | 266 | 15 | \ | 267 | 15 | LOADCHROMA(2, 0); \ | 268 | 15 | PUTFUNC(2, 0, abase); \ | 269 | 15 | \ | 270 | 15 | LOADCHROMA(2, 1); \ | 271 | 15 | PUTFUNC(2, 1, abase); \ | 272 | 15 | \ | 273 | 15 | LOADCHROMA(1, 1); \ | 274 | 15 | PUTFUNC(1, 1, abase); \ | 275 | 510 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 1, nb_dst_planes) \ | 276 | 510 | LOADCHROMA(1, 0); \ | 277 | 510 | PUTFUNC(1, 0, abase); \ | 278 | 510 | \ | 279 | 510 | LOADCHROMA(2, 0); \ | 280 | 510 | PUTFUNC(2, 0, abase); \ | 281 | 510 | ENDYUV2RGBFUNC() |
Line | Count | Source | 239 | 13 | YUV2RGBFUNC(func_name, dst_type, alpha, 1, nb_dst_planes) \ | 240 | 13 | LOADCHROMA(1, 0); \ | 241 | 13 | PUTFUNC(1, 0, abase); \ | 242 | 13 | \ | 243 | 13 | LOADCHROMA(2, 0); \ | 244 | 13 | PUTFUNC(2, 0, abase); \ | 245 | 13 | \ | 246 | 13 | LOADCHROMA(2, 1); \ | 247 | 13 | PUTFUNC(2, 1, abase); \ | 248 | 13 | \ | 249 | 13 | LOADCHROMA(1, 1); \ | 250 | 13 | PUTFUNC(1, 1, abase); \ | 251 | 13 | \ | 252 | 13 | LOADCHROMA(1, 2); \ | 253 | 13 | PUTFUNC(1, 2, abase); \ | 254 | 13 | \ | 255 | 13 | LOADCHROMA(2, 2); \ | 256 | 13 | PUTFUNC(2, 2, abase); \ | 257 | 13 | \ | 258 | 13 | LOADCHROMA(2, 3); \ | 259 | 13 | PUTFUNC(2, 3, abase); \ | 260 | 13 | \ | 261 | 13 | LOADCHROMA(1, 3); \ | 262 | 13 | PUTFUNC(1, 3, abase); \ | 263 | 13 | ENDYUV2RGBLINE(dst_delta, 0, alpha, 1, nb_dst_planes) \ | 264 | 0 | LOADCHROMA(1, 0); \ | 265 | 0 | PUTFUNC(1, 0, abase); \ | 266 | 0 | \ | 267 | 0 | LOADCHROMA(2, 0); \ | 268 | 0 | PUTFUNC(2, 0, abase); \ | 269 | 0 | \ | 270 | 0 | LOADCHROMA(2, 1); \ | 271 | 0 | PUTFUNC(2, 1, abase); \ | 272 | 0 | \ | 273 | 0 | LOADCHROMA(1, 1); \ | 274 | 0 | PUTFUNC(1, 1, abase); \ | 275 | 365 | ENDYUV2RGBLINE(dst_delta, 1, alpha, 1, nb_dst_planes) \ | 276 | 365 | LOADCHROMA(1, 0); \ | 277 | 365 | PUTFUNC(1, 0, abase); \ | 278 | 365 | \ | 279 | 365 | LOADCHROMA(2, 0); \ | 280 | 365 | PUTFUNC(2, 0, abase); \ | 281 | 365 | ENDYUV2RGBFUNC() |
|
282 | | |
283 | | #define YUV420FUNC_DITHER(func_name, dst_type, LOADDITHER, PUTFUNC, dst_delta) \ |
284 | 17.9k | YUV2RGBFUNC(func_name, dst_type, 0, 0, 1) \ |
285 | 17.9k | LOADDITHER \ |
286 | 17.9k | \ |
287 | 17.9k | LOADCHROMA(1, 0); \ |
288 | 17.9k | PUTFUNC(1, 0, 0); \ |
289 | 17.9k | PUTFUNC(2, 0, 0 + 8); \ |
290 | 17.9k | \ |
291 | 17.9k | LOADCHROMA(1, 1); \ |
292 | 17.9k | PUTFUNC(2, 1, 2 + 8); \ |
293 | 17.9k | PUTFUNC(1, 1, 2); \ |
294 | 17.9k | \ |
295 | 17.9k | LOADCHROMA(1, 2); \ |
296 | 17.9k | PUTFUNC(1, 2, 4); \ |
297 | 17.9k | PUTFUNC(2, 2, 4 + 8); \ |
298 | 17.9k | \ |
299 | 17.9k | LOADCHROMA(1, 3); \ |
300 | 17.9k | PUTFUNC(2, 3, 6 + 8); \ |
301 | 17.9k | PUTFUNC(1, 3, 6); \ |
302 | 17.9k | ENDYUV2RGBLINE(dst_delta, 0, 0, 0, 1) \ |
303 | 1.17k | LOADDITHER \ |
304 | 1.17k | \ |
305 | 1.17k | LOADCHROMA(1, 0); \ |
306 | 1.17k | PUTFUNC(1, 0, 0); \ |
307 | 1.17k | PUTFUNC(2, 0, 0 + 8); \ |
308 | 1.17k | \ |
309 | 1.17k | LOADCHROMA(1, 1); \ |
310 | 1.17k | PUTFUNC(2, 1, 2 + 8); \ |
311 | 1.17k | PUTFUNC(1, 1, 2); \ |
312 | 2.19k | ENDYUV2RGBLINE(dst_delta, 1, 0, 0, 1) \ |
313 | 2.19k | LOADDITHER \ |
314 | 2.19k | \ |
315 | 2.19k | LOADCHROMA(1, 0); \ |
316 | 2.19k | PUTFUNC(1, 0, 0); \ |
317 | 2.19k | PUTFUNC(2, 0, 0 + 8); \ |
318 | 2.19k | ENDYUV2RGBFUNC() yuv2rgb.c:yuv2rgb_c_16_ordered_dither Line | Count | Source | 284 | 1.71k | YUV2RGBFUNC(func_name, dst_type, 0, 0, 1) \ | 285 | 1.71k | LOADDITHER \ | 286 | 1.71k | \ | 287 | 1.71k | LOADCHROMA(1, 0); \ | 288 | 1.71k | PUTFUNC(1, 0, 0); \ | 289 | 1.71k | PUTFUNC(2, 0, 0 + 8); \ | 290 | 1.71k | \ | 291 | 1.71k | LOADCHROMA(1, 1); \ | 292 | 1.71k | PUTFUNC(2, 1, 2 + 8); \ | 293 | 1.71k | PUTFUNC(1, 1, 2); \ | 294 | 1.71k | \ | 295 | 1.71k | LOADCHROMA(1, 2); \ | 296 | 1.71k | PUTFUNC(1, 2, 4); \ | 297 | 1.71k | PUTFUNC(2, 2, 4 + 8); \ | 298 | 1.71k | \ | 299 | 1.71k | LOADCHROMA(1, 3); \ | 300 | 1.71k | PUTFUNC(2, 3, 6 + 8); \ | 301 | 1.71k | PUTFUNC(1, 3, 6); \ | 302 | 1.71k | ENDYUV2RGBLINE(dst_delta, 0, 0, 0, 1) \ | 303 | 310 | LOADDITHER \ | 304 | 310 | \ | 305 | 310 | LOADCHROMA(1, 0); \ | 306 | 310 | PUTFUNC(1, 0, 0); \ | 307 | 310 | PUTFUNC(2, 0, 0 + 8); \ | 308 | 310 | \ | 309 | 310 | LOADCHROMA(1, 1); \ | 310 | 310 | PUTFUNC(2, 1, 2 + 8); \ | 311 | 310 | PUTFUNC(1, 1, 2); \ | 312 | 310 | ENDYUV2RGBLINE(dst_delta, 1, 0, 0, 1) \ | 313 | 134 | LOADDITHER \ | 314 | 134 | \ | 315 | 134 | LOADCHROMA(1, 0); \ | 316 | 134 | PUTFUNC(1, 0, 0); \ | 317 | 134 | PUTFUNC(2, 0, 0 + 8); \ | 318 | 134 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv2rgb_c_15_ordered_dither Line | Count | Source | 284 | 3.10k | YUV2RGBFUNC(func_name, dst_type, 0, 0, 1) \ | 285 | 3.10k | LOADDITHER \ | 286 | 3.10k | \ | 287 | 3.10k | LOADCHROMA(1, 0); \ | 288 | 3.10k | PUTFUNC(1, 0, 0); \ | 289 | 3.10k | PUTFUNC(2, 0, 0 + 8); \ | 290 | 3.10k | \ | 291 | 3.10k | LOADCHROMA(1, 1); \ | 292 | 3.10k | PUTFUNC(2, 1, 2 + 8); \ | 293 | 3.10k | PUTFUNC(1, 1, 2); \ | 294 | 3.10k | \ | 295 | 3.10k | LOADCHROMA(1, 2); \ | 296 | 3.10k | PUTFUNC(1, 2, 4); \ | 297 | 3.10k | PUTFUNC(2, 2, 4 + 8); \ | 298 | 3.10k | \ | 299 | 3.10k | LOADCHROMA(1, 3); \ | 300 | 3.10k | PUTFUNC(2, 3, 6 + 8); \ | 301 | 3.10k | PUTFUNC(1, 3, 6); \ | 302 | 3.10k | ENDYUV2RGBLINE(dst_delta, 0, 0, 0, 1) \ | 303 | 232 | LOADDITHER \ | 304 | 232 | \ | 305 | 232 | LOADCHROMA(1, 0); \ | 306 | 232 | PUTFUNC(1, 0, 0); \ | 307 | 232 | PUTFUNC(2, 0, 0 + 8); \ | 308 | 232 | \ | 309 | 232 | LOADCHROMA(1, 1); \ | 310 | 232 | PUTFUNC(2, 1, 2 + 8); \ | 311 | 232 | PUTFUNC(1, 1, 2); \ | 312 | 233 | ENDYUV2RGBLINE(dst_delta, 1, 0, 0, 1) \ | 313 | 233 | LOADDITHER \ | 314 | 233 | \ | 315 | 233 | LOADCHROMA(1, 0); \ | 316 | 233 | PUTFUNC(1, 0, 0); \ | 317 | 233 | PUTFUNC(2, 0, 0 + 8); \ | 318 | 233 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv2rgb_c_12_ordered_dither Line | Count | Source | 284 | 2.61k | YUV2RGBFUNC(func_name, dst_type, 0, 0, 1) \ | 285 | 2.61k | LOADDITHER \ | 286 | 2.61k | \ | 287 | 2.61k | LOADCHROMA(1, 0); \ | 288 | 2.61k | PUTFUNC(1, 0, 0); \ | 289 | 2.61k | PUTFUNC(2, 0, 0 + 8); \ | 290 | 2.61k | \ | 291 | 2.61k | LOADCHROMA(1, 1); \ | 292 | 2.61k | PUTFUNC(2, 1, 2 + 8); \ | 293 | 2.61k | PUTFUNC(1, 1, 2); \ | 294 | 2.61k | \ | 295 | 2.61k | LOADCHROMA(1, 2); \ | 296 | 2.61k | PUTFUNC(1, 2, 4); \ | 297 | 2.61k | PUTFUNC(2, 2, 4 + 8); \ | 298 | 2.61k | \ | 299 | 2.61k | LOADCHROMA(1, 3); \ | 300 | 2.61k | PUTFUNC(2, 3, 6 + 8); \ | 301 | 2.61k | PUTFUNC(1, 3, 6); \ | 302 | 2.61k | ENDYUV2RGBLINE(dst_delta, 0, 0, 0, 1) \ | 303 | 72 | LOADDITHER \ | 304 | 72 | \ | 305 | 72 | LOADCHROMA(1, 0); \ | 306 | 72 | PUTFUNC(1, 0, 0); \ | 307 | 72 | PUTFUNC(2, 0, 0 + 8); \ | 308 | 72 | \ | 309 | 72 | LOADCHROMA(1, 1); \ | 310 | 72 | PUTFUNC(2, 1, 2 + 8); \ | 311 | 72 | PUTFUNC(1, 1, 2); \ | 312 | 576 | ENDYUV2RGBLINE(dst_delta, 1, 0, 0, 1) \ | 313 | 576 | LOADDITHER \ | 314 | 576 | \ | 315 | 576 | LOADCHROMA(1, 0); \ | 316 | 576 | PUTFUNC(1, 0, 0); \ | 317 | 576 | PUTFUNC(2, 0, 0 + 8); \ | 318 | 576 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv2rgb_c_8_ordered_dither Line | Count | Source | 284 | 3.77k | YUV2RGBFUNC(func_name, dst_type, 0, 0, 1) \ | 285 | 3.77k | LOADDITHER \ | 286 | 3.77k | \ | 287 | 3.77k | LOADCHROMA(1, 0); \ | 288 | 3.77k | PUTFUNC(1, 0, 0); \ | 289 | 3.77k | PUTFUNC(2, 0, 0 + 8); \ | 290 | 3.77k | \ | 291 | 3.77k | LOADCHROMA(1, 1); \ | 292 | 3.77k | PUTFUNC(2, 1, 2 + 8); \ | 293 | 3.77k | PUTFUNC(1, 1, 2); \ | 294 | 3.77k | \ | 295 | 3.77k | LOADCHROMA(1, 2); \ | 296 | 3.77k | PUTFUNC(1, 2, 4); \ | 297 | 3.77k | PUTFUNC(2, 2, 4 + 8); \ | 298 | 3.77k | \ | 299 | 3.77k | LOADCHROMA(1, 3); \ | 300 | 3.77k | PUTFUNC(2, 3, 6 + 8); \ | 301 | 3.77k | PUTFUNC(1, 3, 6); \ | 302 | 3.77k | ENDYUV2RGBLINE(dst_delta, 0, 0, 0, 1) \ | 303 | 91 | LOADDITHER \ | 304 | 91 | \ | 305 | 91 | LOADCHROMA(1, 0); \ | 306 | 91 | PUTFUNC(1, 0, 0); \ | 307 | 91 | PUTFUNC(2, 0, 0 + 8); \ | 308 | 91 | \ | 309 | 91 | LOADCHROMA(1, 1); \ | 310 | 91 | PUTFUNC(2, 1, 2 + 8); \ | 311 | 91 | PUTFUNC(1, 1, 2); \ | 312 | 91 | ENDYUV2RGBLINE(dst_delta, 1, 0, 0, 1) \ | 313 | 22 | LOADDITHER \ | 314 | 22 | \ | 315 | 22 | LOADCHROMA(1, 0); \ | 316 | 22 | PUTFUNC(1, 0, 0); \ | 317 | 22 | PUTFUNC(2, 0, 0 + 8); \ | 318 | 22 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv2rgb_c_4_ordered_dither Line | Count | Source | 284 | 3.61k | YUV2RGBFUNC(func_name, dst_type, 0, 0, 1) \ | 285 | 3.61k | LOADDITHER \ | 286 | 3.61k | \ | 287 | 3.61k | LOADCHROMA(1, 0); \ | 288 | 3.61k | PUTFUNC(1, 0, 0); \ | 289 | 3.61k | PUTFUNC(2, 0, 0 + 8); \ | 290 | 3.61k | \ | 291 | 3.61k | LOADCHROMA(1, 1); \ | 292 | 3.61k | PUTFUNC(2, 1, 2 + 8); \ | 293 | 3.61k | PUTFUNC(1, 1, 2); \ | 294 | 3.61k | \ | 295 | 3.61k | LOADCHROMA(1, 2); \ | 296 | 3.61k | PUTFUNC(1, 2, 4); \ | 297 | 3.61k | PUTFUNC(2, 2, 4 + 8); \ | 298 | 3.61k | \ | 299 | 3.61k | LOADCHROMA(1, 3); \ | 300 | 3.61k | PUTFUNC(2, 3, 6 + 8); \ | 301 | 3.61k | PUTFUNC(1, 3, 6); \ | 302 | 3.61k | ENDYUV2RGBLINE(dst_delta, 0, 0, 0, 1) \ | 303 | 248 | LOADDITHER \ | 304 | 248 | \ | 305 | 248 | LOADCHROMA(1, 0); \ | 306 | 248 | PUTFUNC(1, 0, 0); \ | 307 | 248 | PUTFUNC(2, 0, 0 + 8); \ | 308 | 248 | \ | 309 | 248 | LOADCHROMA(1, 1); \ | 310 | 248 | PUTFUNC(2, 1, 2 + 8); \ | 311 | 248 | PUTFUNC(1, 1, 2); \ | 312 | 642 | ENDYUV2RGBLINE(dst_delta, 1, 0, 0, 1) \ | 313 | 642 | LOADDITHER \ | 314 | 642 | \ | 315 | 642 | LOADCHROMA(1, 0); \ | 316 | 642 | PUTFUNC(1, 0, 0); \ | 317 | 642 | PUTFUNC(2, 0, 0 + 8); \ | 318 | 642 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv2rgb_c_4b_ordered_dither Line | Count | Source | 284 | 3.17k | YUV2RGBFUNC(func_name, dst_type, 0, 0, 1) \ | 285 | 3.17k | LOADDITHER \ | 286 | 3.17k | \ | 287 | 3.17k | LOADCHROMA(1, 0); \ | 288 | 3.17k | PUTFUNC(1, 0, 0); \ | 289 | 3.17k | PUTFUNC(2, 0, 0 + 8); \ | 290 | 3.17k | \ | 291 | 3.17k | LOADCHROMA(1, 1); \ | 292 | 3.17k | PUTFUNC(2, 1, 2 + 8); \ | 293 | 3.17k | PUTFUNC(1, 1, 2); \ | 294 | 3.17k | \ | 295 | 3.17k | LOADCHROMA(1, 2); \ | 296 | 3.17k | PUTFUNC(1, 2, 4); \ | 297 | 3.17k | PUTFUNC(2, 2, 4 + 8); \ | 298 | 3.17k | \ | 299 | 3.17k | LOADCHROMA(1, 3); \ | 300 | 3.17k | PUTFUNC(2, 3, 6 + 8); \ | 301 | 3.17k | PUTFUNC(1, 3, 6); \ | 302 | 3.17k | ENDYUV2RGBLINE(dst_delta, 0, 0, 0, 1) \ | 303 | 226 | LOADDITHER \ | 304 | 226 | \ | 305 | 226 | LOADCHROMA(1, 0); \ | 306 | 226 | PUTFUNC(1, 0, 0); \ | 307 | 226 | PUTFUNC(2, 0, 0 + 8); \ | 308 | 226 | \ | 309 | 226 | LOADCHROMA(1, 1); \ | 310 | 226 | PUTFUNC(2, 1, 2 + 8); \ | 311 | 226 | PUTFUNC(1, 1, 2); \ | 312 | 588 | ENDYUV2RGBLINE(dst_delta, 1, 0, 0, 1) \ | 313 | 588 | LOADDITHER \ | 314 | 588 | \ | 315 | 588 | LOADCHROMA(1, 0); \ | 316 | 588 | PUTFUNC(1, 0, 0); \ | 317 | 588 | PUTFUNC(2, 0, 0 + 8); \ | 318 | 588 | ENDYUV2RGBFUNC() |
|
319 | | |
320 | | #define YUV422FUNC_DITHER(func_name, dst_type, LOADDITHER, PUTFUNC, dst_delta) \ |
321 | 12.3k | YUV2RGBFUNC(func_name, dst_type, 0, 1, 1) \ |
322 | 12.3k | LOADDITHER \ |
323 | 12.3k | \ |
324 | 12.3k | LOADCHROMA(1, 0); \ |
325 | 12.3k | PUTFUNC(1, 0, 0); \ |
326 | 12.3k | \ |
327 | 12.3k | LOADCHROMA(2, 0); \ |
328 | 12.3k | PUTFUNC(2, 0, 0 + 8); \ |
329 | 12.3k | \ |
330 | 12.3k | LOADCHROMA(2, 1); \ |
331 | 12.3k | PUTFUNC(2, 1, 2 + 8); \ |
332 | 12.3k | \ |
333 | 12.3k | LOADCHROMA(1, 1); \ |
334 | 12.3k | PUTFUNC(1, 1, 2); \ |
335 | 12.3k | \ |
336 | 12.3k | LOADCHROMA(1, 2); \ |
337 | 12.3k | PUTFUNC(1, 2, 4); \ |
338 | 12.3k | \ |
339 | 12.3k | LOADCHROMA(2, 2); \ |
340 | 12.3k | PUTFUNC(2, 2, 4 + 8); \ |
341 | 12.3k | \ |
342 | 12.3k | LOADCHROMA(2, 3); \ |
343 | 12.3k | PUTFUNC(2, 3, 6 + 8); \ |
344 | 12.3k | \ |
345 | 12.3k | LOADCHROMA(1, 3); \ |
346 | 12.3k | PUTFUNC(1, 3, 6); \ |
347 | 12.3k | ENDYUV2RGBLINE(dst_delta, 0, 0, 1, 1) \ |
348 | 344 | LOADDITHER \ |
349 | 344 | \ |
350 | 344 | LOADCHROMA(1, 0); \ |
351 | 344 | PUTFUNC(1, 0, 0); \ |
352 | 344 | \ |
353 | 344 | LOADCHROMA(2, 0); \ |
354 | 344 | PUTFUNC(2, 0, 0 + 8); \ |
355 | 344 | \ |
356 | 344 | LOADCHROMA(2, 1); \ |
357 | 344 | PUTFUNC(2, 1, 2 + 8); \ |
358 | 344 | \ |
359 | 344 | LOADCHROMA(1, 1); \ |
360 | 344 | PUTFUNC(1, 1, 2); \ |
361 | 2.06k | ENDYUV2RGBLINE(dst_delta, 1, 0, 1, 1) \ |
362 | 2.06k | LOADDITHER \ |
363 | 2.06k | \ |
364 | 2.06k | LOADCHROMA(1, 0); \ |
365 | 2.06k | PUTFUNC(1, 0, 0); \ |
366 | 2.06k | \ |
367 | 2.06k | LOADCHROMA(2, 0); \ |
368 | 2.06k | PUTFUNC(2, 0, 0 + 8); \ |
369 | 2.06k | ENDYUV2RGBFUNC() Line | Count | Source | 321 | 2.10k | YUV2RGBFUNC(func_name, dst_type, 0, 1, 1) \ | 322 | 2.10k | LOADDITHER \ | 323 | 2.10k | \ | 324 | 2.10k | LOADCHROMA(1, 0); \ | 325 | 2.10k | PUTFUNC(1, 0, 0); \ | 326 | 2.10k | \ | 327 | 2.10k | LOADCHROMA(2, 0); \ | 328 | 2.10k | PUTFUNC(2, 0, 0 + 8); \ | 329 | 2.10k | \ | 330 | 2.10k | LOADCHROMA(2, 1); \ | 331 | 2.10k | PUTFUNC(2, 1, 2 + 8); \ | 332 | 2.10k | \ | 333 | 2.10k | LOADCHROMA(1, 1); \ | 334 | 2.10k | PUTFUNC(1, 1, 2); \ | 335 | 2.10k | \ | 336 | 2.10k | LOADCHROMA(1, 2); \ | 337 | 2.10k | PUTFUNC(1, 2, 4); \ | 338 | 2.10k | \ | 339 | 2.10k | LOADCHROMA(2, 2); \ | 340 | 2.10k | PUTFUNC(2, 2, 4 + 8); \ | 341 | 2.10k | \ | 342 | 2.10k | LOADCHROMA(2, 3); \ | 343 | 2.10k | PUTFUNC(2, 3, 6 + 8); \ | 344 | 2.10k | \ | 345 | 2.10k | LOADCHROMA(1, 3); \ | 346 | 2.10k | PUTFUNC(1, 3, 6); \ | 347 | 2.10k | ENDYUV2RGBLINE(dst_delta, 0, 0, 1, 1) \ | 348 | 79 | LOADDITHER \ | 349 | 79 | \ | 350 | 79 | LOADCHROMA(1, 0); \ | 351 | 79 | PUTFUNC(1, 0, 0); \ | 352 | 79 | \ | 353 | 79 | LOADCHROMA(2, 0); \ | 354 | 79 | PUTFUNC(2, 0, 0 + 8); \ | 355 | 79 | \ | 356 | 79 | LOADCHROMA(2, 1); \ | 357 | 79 | PUTFUNC(2, 1, 2 + 8); \ | 358 | 79 | \ | 359 | 79 | LOADCHROMA(1, 1); \ | 360 | 79 | PUTFUNC(1, 1, 2); \ | 361 | 569 | ENDYUV2RGBLINE(dst_delta, 1, 0, 1, 1) \ | 362 | 569 | LOADDITHER \ | 363 | 569 | \ | 364 | 569 | LOADCHROMA(1, 0); \ | 365 | 569 | PUTFUNC(1, 0, 0); \ | 366 | 569 | \ | 367 | 569 | LOADCHROMA(2, 0); \ | 368 | 569 | PUTFUNC(2, 0, 0 + 8); \ | 369 | 569 | ENDYUV2RGBFUNC() |
Line | Count | Source | 321 | 1.08k | YUV2RGBFUNC(func_name, dst_type, 0, 1, 1) \ | 322 | 1.08k | LOADDITHER \ | 323 | 1.08k | \ | 324 | 1.08k | LOADCHROMA(1, 0); \ | 325 | 1.08k | PUTFUNC(1, 0, 0); \ | 326 | 1.08k | \ | 327 | 1.08k | LOADCHROMA(2, 0); \ | 328 | 1.08k | PUTFUNC(2, 0, 0 + 8); \ | 329 | 1.08k | \ | 330 | 1.08k | LOADCHROMA(2, 1); \ | 331 | 1.08k | PUTFUNC(2, 1, 2 + 8); \ | 332 | 1.08k | \ | 333 | 1.08k | LOADCHROMA(1, 1); \ | 334 | 1.08k | PUTFUNC(1, 1, 2); \ | 335 | 1.08k | \ | 336 | 1.08k | LOADCHROMA(1, 2); \ | 337 | 1.08k | PUTFUNC(1, 2, 4); \ | 338 | 1.08k | \ | 339 | 1.08k | LOADCHROMA(2, 2); \ | 340 | 1.08k | PUTFUNC(2, 2, 4 + 8); \ | 341 | 1.08k | \ | 342 | 1.08k | LOADCHROMA(2, 3); \ | 343 | 1.08k | PUTFUNC(2, 3, 6 + 8); \ | 344 | 1.08k | \ | 345 | 1.08k | LOADCHROMA(1, 3); \ | 346 | 1.08k | PUTFUNC(1, 3, 6); \ | 347 | 1.08k | ENDYUV2RGBLINE(dst_delta, 0, 0, 1, 1) \ | 348 | 10 | LOADDITHER \ | 349 | 10 | \ | 350 | 10 | LOADCHROMA(1, 0); \ | 351 | 10 | PUTFUNC(1, 0, 0); \ | 352 | 10 | \ | 353 | 10 | LOADCHROMA(2, 0); \ | 354 | 10 | PUTFUNC(2, 0, 0 + 8); \ | 355 | 10 | \ | 356 | 10 | LOADCHROMA(2, 1); \ | 357 | 10 | PUTFUNC(2, 1, 2 + 8); \ | 358 | 10 | \ | 359 | 10 | LOADCHROMA(1, 1); \ | 360 | 10 | PUTFUNC(1, 1, 2); \ | 361 | 514 | ENDYUV2RGBLINE(dst_delta, 1, 0, 1, 1) \ | 362 | 514 | LOADDITHER \ | 363 | 514 | \ | 364 | 514 | LOADCHROMA(1, 0); \ | 365 | 514 | PUTFUNC(1, 0, 0); \ | 366 | 514 | \ | 367 | 514 | LOADCHROMA(2, 0); \ | 368 | 514 | PUTFUNC(2, 0, 0 + 8); \ | 369 | 514 | ENDYUV2RGBFUNC() |
Line | Count | Source | 321 | 2.28k | YUV2RGBFUNC(func_name, dst_type, 0, 1, 1) \ | 322 | 2.28k | LOADDITHER \ | 323 | 2.28k | \ | 324 | 2.28k | LOADCHROMA(1, 0); \ | 325 | 2.28k | PUTFUNC(1, 0, 0); \ | 326 | 2.28k | \ | 327 | 2.28k | LOADCHROMA(2, 0); \ | 328 | 2.28k | PUTFUNC(2, 0, 0 + 8); \ | 329 | 2.28k | \ | 330 | 2.28k | LOADCHROMA(2, 1); \ | 331 | 2.28k | PUTFUNC(2, 1, 2 + 8); \ | 332 | 2.28k | \ | 333 | 2.28k | LOADCHROMA(1, 1); \ | 334 | 2.28k | PUTFUNC(1, 1, 2); \ | 335 | 2.28k | \ | 336 | 2.28k | LOADCHROMA(1, 2); \ | 337 | 2.28k | PUTFUNC(1, 2, 4); \ | 338 | 2.28k | \ | 339 | 2.28k | LOADCHROMA(2, 2); \ | 340 | 2.28k | PUTFUNC(2, 2, 4 + 8); \ | 341 | 2.28k | \ | 342 | 2.28k | LOADCHROMA(2, 3); \ | 343 | 2.28k | PUTFUNC(2, 3, 6 + 8); \ | 344 | 2.28k | \ | 345 | 2.28k | LOADCHROMA(1, 3); \ | 346 | 2.28k | PUTFUNC(1, 3, 6); \ | 347 | 2.28k | ENDYUV2RGBLINE(dst_delta, 0, 0, 1, 1) \ | 348 | 24 | LOADDITHER \ | 349 | 24 | \ | 350 | 24 | LOADCHROMA(1, 0); \ | 351 | 24 | PUTFUNC(1, 0, 0); \ | 352 | 24 | \ | 353 | 24 | LOADCHROMA(2, 0); \ | 354 | 24 | PUTFUNC(2, 0, 0 + 8); \ | 355 | 24 | \ | 356 | 24 | LOADCHROMA(2, 1); \ | 357 | 24 | PUTFUNC(2, 1, 2 + 8); \ | 358 | 24 | \ | 359 | 24 | LOADCHROMA(1, 1); \ | 360 | 24 | PUTFUNC(1, 1, 2); \ | 361 | 536 | ENDYUV2RGBLINE(dst_delta, 1, 0, 1, 1) \ | 362 | 536 | LOADDITHER \ | 363 | 536 | \ | 364 | 536 | LOADCHROMA(1, 0); \ | 365 | 536 | PUTFUNC(1, 0, 0); \ | 366 | 536 | \ | 367 | 536 | LOADCHROMA(2, 0); \ | 368 | 536 | PUTFUNC(2, 0, 0 + 8); \ | 369 | 536 | ENDYUV2RGBFUNC() |
Line | Count | Source | 321 | 2.97k | YUV2RGBFUNC(func_name, dst_type, 0, 1, 1) \ | 322 | 2.97k | LOADDITHER \ | 323 | 2.97k | \ | 324 | 2.97k | LOADCHROMA(1, 0); \ | 325 | 2.97k | PUTFUNC(1, 0, 0); \ | 326 | 2.97k | \ | 327 | 2.97k | LOADCHROMA(2, 0); \ | 328 | 2.97k | PUTFUNC(2, 0, 0 + 8); \ | 329 | 2.97k | \ | 330 | 2.97k | LOADCHROMA(2, 1); \ | 331 | 2.97k | PUTFUNC(2, 1, 2 + 8); \ | 332 | 2.97k | \ | 333 | 2.97k | LOADCHROMA(1, 1); \ | 334 | 2.97k | PUTFUNC(1, 1, 2); \ | 335 | 2.97k | \ | 336 | 2.97k | LOADCHROMA(1, 2); \ | 337 | 2.97k | PUTFUNC(1, 2, 4); \ | 338 | 2.97k | \ | 339 | 2.97k | LOADCHROMA(2, 2); \ | 340 | 2.97k | PUTFUNC(2, 2, 4 + 8); \ | 341 | 2.97k | \ | 342 | 2.97k | LOADCHROMA(2, 3); \ | 343 | 2.97k | PUTFUNC(2, 3, 6 + 8); \ | 344 | 2.97k | \ | 345 | 2.97k | LOADCHROMA(1, 3); \ | 346 | 2.97k | PUTFUNC(1, 3, 6); \ | 347 | 2.97k | ENDYUV2RGBLINE(dst_delta, 0, 0, 1, 1) \ | 348 | 10 | LOADDITHER \ | 349 | 10 | \ | 350 | 10 | LOADCHROMA(1, 0); \ | 351 | 10 | PUTFUNC(1, 0, 0); \ | 352 | 10 | \ | 353 | 10 | LOADCHROMA(2, 0); \ | 354 | 10 | PUTFUNC(2, 0, 0 + 8); \ | 355 | 10 | \ | 356 | 10 | LOADCHROMA(2, 1); \ | 357 | 10 | PUTFUNC(2, 1, 2 + 8); \ | 358 | 10 | \ | 359 | 10 | LOADCHROMA(1, 1); \ | 360 | 10 | PUTFUNC(1, 1, 2); \ | 361 | 183 | ENDYUV2RGBLINE(dst_delta, 1, 0, 1, 1) \ | 362 | 183 | LOADDITHER \ | 363 | 183 | \ | 364 | 183 | LOADCHROMA(1, 0); \ | 365 | 183 | PUTFUNC(1, 0, 0); \ | 366 | 183 | \ | 367 | 183 | LOADCHROMA(2, 0); \ | 368 | 183 | PUTFUNC(2, 0, 0 + 8); \ | 369 | 183 | ENDYUV2RGBFUNC() |
Line | Count | Source | 321 | 2.75k | YUV2RGBFUNC(func_name, dst_type, 0, 1, 1) \ | 322 | 2.75k | LOADDITHER \ | 323 | 2.75k | \ | 324 | 2.75k | LOADCHROMA(1, 0); \ | 325 | 2.75k | PUTFUNC(1, 0, 0); \ | 326 | 2.75k | \ | 327 | 2.75k | LOADCHROMA(2, 0); \ | 328 | 2.75k | PUTFUNC(2, 0, 0 + 8); \ | 329 | 2.75k | \ | 330 | 2.75k | LOADCHROMA(2, 1); \ | 331 | 2.75k | PUTFUNC(2, 1, 2 + 8); \ | 332 | 2.75k | \ | 333 | 2.75k | LOADCHROMA(1, 1); \ | 334 | 2.75k | PUTFUNC(1, 1, 2); \ | 335 | 2.75k | \ | 336 | 2.75k | LOADCHROMA(1, 2); \ | 337 | 2.75k | PUTFUNC(1, 2, 4); \ | 338 | 2.75k | \ | 339 | 2.75k | LOADCHROMA(2, 2); \ | 340 | 2.75k | PUTFUNC(2, 2, 4 + 8); \ | 341 | 2.75k | \ | 342 | 2.75k | LOADCHROMA(2, 3); \ | 343 | 2.75k | PUTFUNC(2, 3, 6 + 8); \ | 344 | 2.75k | \ | 345 | 2.75k | LOADCHROMA(1, 3); \ | 346 | 2.75k | PUTFUNC(1, 3, 6); \ | 347 | 2.75k | ENDYUV2RGBLINE(dst_delta, 0, 0, 1, 1) \ | 348 | 82 | LOADDITHER \ | 349 | 82 | \ | 350 | 82 | LOADCHROMA(1, 0); \ | 351 | 82 | PUTFUNC(1, 0, 0); \ | 352 | 82 | \ | 353 | 82 | LOADCHROMA(2, 0); \ | 354 | 82 | PUTFUNC(2, 0, 0 + 8); \ | 355 | 82 | \ | 356 | 82 | LOADCHROMA(2, 1); \ | 357 | 82 | PUTFUNC(2, 1, 2 + 8); \ | 358 | 82 | \ | 359 | 82 | LOADCHROMA(1, 1); \ | 360 | 82 | PUTFUNC(1, 1, 2); \ | 361 | 242 | ENDYUV2RGBLINE(dst_delta, 1, 0, 1, 1) \ | 362 | 242 | LOADDITHER \ | 363 | 242 | \ | 364 | 242 | LOADCHROMA(1, 0); \ | 365 | 242 | PUTFUNC(1, 0, 0); \ | 366 | 242 | \ | 367 | 242 | LOADCHROMA(2, 0); \ | 368 | 242 | PUTFUNC(2, 0, 0 + 8); \ | 369 | 242 | ENDYUV2RGBFUNC() |
yuv2rgb.c:yuv422p_bgr4_byte Line | Count | Source | 321 | 1.14k | YUV2RGBFUNC(func_name, dst_type, 0, 1, 1) \ | 322 | 1.14k | LOADDITHER \ | 323 | 1.14k | \ | 324 | 1.14k | LOADCHROMA(1, 0); \ | 325 | 1.14k | PUTFUNC(1, 0, 0); \ | 326 | 1.14k | \ | 327 | 1.14k | LOADCHROMA(2, 0); \ | 328 | 1.14k | PUTFUNC(2, 0, 0 + 8); \ | 329 | 1.14k | \ | 330 | 1.14k | LOADCHROMA(2, 1); \ | 331 | 1.14k | PUTFUNC(2, 1, 2 + 8); \ | 332 | 1.14k | \ | 333 | 1.14k | LOADCHROMA(1, 1); \ | 334 | 1.14k | PUTFUNC(1, 1, 2); \ | 335 | 1.14k | \ | 336 | 1.14k | LOADCHROMA(1, 2); \ | 337 | 1.14k | PUTFUNC(1, 2, 4); \ | 338 | 1.14k | \ | 339 | 1.14k | LOADCHROMA(2, 2); \ | 340 | 1.14k | PUTFUNC(2, 2, 4 + 8); \ | 341 | 1.14k | \ | 342 | 1.14k | LOADCHROMA(2, 3); \ | 343 | 1.14k | PUTFUNC(2, 3, 6 + 8); \ | 344 | 1.14k | \ | 345 | 1.14k | LOADCHROMA(1, 3); \ | 346 | 1.14k | PUTFUNC(1, 3, 6); \ | 347 | 1.14k | ENDYUV2RGBLINE(dst_delta, 0, 0, 1, 1) \ | 348 | 139 | LOADDITHER \ | 349 | 139 | \ | 350 | 139 | LOADCHROMA(1, 0); \ | 351 | 139 | PUTFUNC(1, 0, 0); \ | 352 | 139 | \ | 353 | 139 | LOADCHROMA(2, 0); \ | 354 | 139 | PUTFUNC(2, 0, 0 + 8); \ | 355 | 139 | \ | 356 | 139 | LOADCHROMA(2, 1); \ | 357 | 139 | PUTFUNC(2, 1, 2 + 8); \ | 358 | 139 | \ | 359 | 139 | LOADCHROMA(1, 1); \ | 360 | 139 | PUTFUNC(1, 1, 2); \ | 361 | 139 | ENDYUV2RGBLINE(dst_delta, 1, 0, 1, 1) \ | 362 | 22 | LOADDITHER \ | 363 | 22 | \ | 364 | 22 | LOADCHROMA(1, 0); \ | 365 | 22 | PUTFUNC(1, 0, 0); \ | 366 | 22 | \ | 367 | 22 | LOADCHROMA(2, 0); \ | 368 | 22 | PUTFUNC(2, 0, 0 + 8); \ | 369 | 22 | 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 | 33.5k | Y = py_##l[2 * i]; \ |
378 | 33.5k | dst_##l[2 * i] = r[Y + d16[0 + o]] + \ |
379 | 33.5k | g[Y + e16[0 + o]] + \ |
380 | 33.5k | b[Y + f16[0 + o]]; \ |
381 | 33.5k | Y = py_##l[2 * i + 1]; \ |
382 | 33.5k | dst_##l[2 * i + 1] = r[Y + d16[1 + o]] + \ |
383 | 33.5k | g[Y + e16[1 + o]] + \ |
384 | 33.5k | 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 | 35.9k | Y = py_##l[2 * i]; \ |
392 | 35.9k | dst_##l[2 * i] = r[Y + d16[0 + o]] + \ |
393 | 35.9k | g[Y + d16[1 + o]] + \ |
394 | 35.9k | b[Y + e16[0 + o]]; \ |
395 | 35.9k | Y = py_##l[2 * i + 1]; \ |
396 | 35.9k | dst_##l[2 * i + 1] = r[Y + d16[1 + o]] + \ |
397 | 35.9k | g[Y + d16[0 + o]] + \ |
398 | 35.9k | 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 | 41.8k | Y = py_##l[2 * i]; \ |
405 | 41.8k | dst_##l[2 * i] = r[Y + d16[0 + o]] + \ |
406 | 41.8k | g[Y + d16[0 + o]] + \ |
407 | 41.8k | b[Y + d16[0 + o]]; \ |
408 | 41.8k | Y = py_##l[2 * i + 1]; \ |
409 | 41.8k | dst_##l[2 * i + 1] = r[Y + d16[1 + o]] + \ |
410 | 41.8k | g[Y + d16[1 + o]] + \ |
411 | 41.8k | 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 | 54.7k | Y = py_##l[2 * i]; \ |
419 | 54.7k | dst_##l[2 * i] = r[Y + d32[0 + o]] + \ |
420 | 54.7k | g[Y + d32[0 + o]] + \ |
421 | 54.7k | b[Y + d64[0 + o]]; \ |
422 | 54.7k | Y = py_##l[2 * i + 1]; \ |
423 | 54.7k | dst_##l[2 * i + 1] = r[Y + d32[1 + o]] + \ |
424 | 54.7k | g[Y + d32[1 + o]] + \ |
425 | 54.7k | 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 | 54.0k | Y = py_##l[2 * i]; \ |
434 | 54.0k | acc = r[Y + d128[0 + o]] + \ |
435 | 54.0k | g[Y + d64[0 + o]] + \ |
436 | 54.0k | b[Y + d128[0 + o]]; \ |
437 | 54.0k | Y = py_##l[2 * i + 1]; \ |
438 | 54.0k | acc |= (r[Y + d128[1 + o]] + \ |
439 | 54.0k | g[Y + d64[1 + o]] + \ |
440 | 54.0k | b[Y + d128[1 + o]]) << 4; \ |
441 | 54.0k | 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 | 37.2k | Y = py_##l[2 * i]; \ |
449 | 37.2k | dst_##l[2 * i] = r[Y + d128[0 + o]] + \ |
450 | 37.2k | g[Y + d64[0 + o]] + \ |
451 | 37.2k | b[Y + d128[0 + o]]; \ |
452 | 37.2k | Y = py_##l[2 * i + 1]; \ |
453 | 37.2k | dst_##l[2 * i + 1] = r[Y + d128[1 + o]] + \ |
454 | 37.2k | g[Y + d64[1 + o]] + \ |
455 | 37.2k | b[Y + d128[1 + o]]; |
456 | | |
457 | 3.71k | YUV2RGBFUNC(yuv2rgb_c_1_ordered_dither, uint8_t, 0, 0, 1) |
458 | 3.71k | const uint8_t *d128 = ff_dither_8x8_220[yd & 7]; |
459 | 3.71k | char out_1 = 0, out_2 = 0; |
460 | 3.71k | g = c->table_gU[128 + YUVRGB_TABLE_HEADROOM] + c->table_gV[128 + YUVRGB_TABLE_HEADROOM]; |
461 | | |
462 | 3.71k | #define PUTRGB1(out, src, i, o) \ |
463 | 33.0k | Y = src[2 * i]; \ |
464 | 33.0k | out += out + g[Y + d128[0 + o]]; \ |
465 | 33.0k | Y = src[2 * i + 1]; \ |
466 | 33.0k | out += out + g[Y + d128[1 + o]]; |
467 | | |
468 | 3.71k | PUTRGB1(out_1, py_1, 0, 0); |
469 | 3.71k | PUTRGB1(out_2, py_2, 0, 0 + 8); |
470 | | |
471 | 3.71k | PUTRGB1(out_2, py_2, 1, 2 + 8); |
472 | 3.71k | PUTRGB1(out_1, py_1, 1, 2); |
473 | | |
474 | 3.71k | PUTRGB1(out_1, py_1, 2, 4); |
475 | 3.71k | PUTRGB1(out_2, py_2, 2, 4 + 8); |
476 | | |
477 | 3.71k | PUTRGB1(out_2, py_2, 3, 6 + 8); |
478 | 3.71k | PUTRGB1(out_1, py_1, 3, 6); |
479 | | |
480 | 3.71k | dst_1[0] = out_1; |
481 | 3.71k | dst_2[0] = out_2; |
482 | | |
483 | 3.71k | py_1 += 8; |
484 | 3.71k | py_2 += 8; |
485 | 3.71k | dst_1 += 1; |
486 | 3.71k | dst_2 += 1; |
487 | 3.71k | } |
488 | 1.70k | if (c->opts.dst_w & 7) { |
489 | 1.45k | int av_unused Y, U, V; |
490 | 1.45k | int pixels_left = c->opts.dst_w & 7; |
491 | 1.45k | const uint8_t *d128 = ff_dither_8x8_220[yd & 7]; |
492 | 1.45k | char out_1 = 0, out_2 = 0; |
493 | 1.45k | g = c->table_gU[128 + YUVRGB_TABLE_HEADROOM] + c->table_gV[128 + YUVRGB_TABLE_HEADROOM]; |
494 | | |
495 | 1.45k | #define PUTRGB1_OR00(out, src, i, o) \ |
496 | 11.6k | if (pixels_left) { \ |
497 | 3.32k | PUTRGB1(out, src, i, o) \ |
498 | 3.32k | pixels_left--; \ |
499 | 8.27k | } else { \ |
500 | 8.27k | out <<= 2; \ |
501 | 8.27k | } |
502 | | |
503 | 1.45k | PUTRGB1_OR00(out_1, py_1, 0, 0); |
504 | 1.45k | PUTRGB1_OR00(out_2, py_2, 0, 0 + 8); |
505 | | |
506 | 1.45k | PUTRGB1_OR00(out_2, py_2, 1, 2 + 8); |
507 | 1.45k | PUTRGB1_OR00(out_1, py_1, 1, 2); |
508 | | |
509 | 1.45k | PUTRGB1_OR00(out_1, py_1, 2, 4); |
510 | 1.45k | PUTRGB1_OR00(out_2, py_2, 2, 4 + 8); |
511 | | |
512 | 1.45k | PUTRGB1_OR00(out_2, py_2, 3, 6 + 8); |
513 | 1.45k | PUTRGB1_OR00(out_1, py_1, 3, 6); |
514 | | |
515 | 1.45k | dst_1[0] = out_1; |
516 | 1.45k | dst_2[0] = out_2; |
517 | 1.45k | ENDYUV2RGBFUNC() |
518 | | |
519 | | // YUV420 |
520 | 29.0k | YUV420FUNC(yuv2rgb_c_48, uint8_t, 0, 0, PUTRGB48, 48, 1) |
521 | 24.1k | YUV420FUNC(yuv2rgb_c_bgr48, uint8_t, 0, 0, PUTBGR48, 48, 1) |
522 | 48.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 | 12.2k | YUV420FUNC(yuva2rgba_c, uint32_t, 1, 24, PUTRGBA, 8, 1) |
528 | 31.6k | YUV420FUNC(yuva2argb_c, uint32_t, 1, 0, PUTRGBA, 8, 1) |
529 | | #endif |
530 | 23.0k | YUV420FUNC(yuv2rgb_c_24_rgb, uint8_t, 0, 0, PUTRGB24, 24, 1) |
531 | 17.7k | YUV420FUNC(yuv2rgb_c_24_bgr, uint8_t, 0, 0, PUTBGR24, 24, 1) |
532 | 29.9k | YUV420FUNC(yuv420p_gbrp_c, uint8_t, 0, 0, PUTGBRP, 8, 3) |
533 | 15.2k | YUV420FUNC_DITHER(yuv2rgb_c_16_ordered_dither, uint16_t, LOADDITHER16, PUTRGB16, 8) |
534 | 26.2k | YUV420FUNC_DITHER(yuv2rgb_c_15_ordered_dither, uint16_t, LOADDITHER15, PUTRGB15, 8) |
535 | 22.3k | YUV420FUNC_DITHER(yuv2rgb_c_12_ordered_dither, uint16_t, LOADDITHER12, PUTRGB12, 8) |
536 | 30.5k | YUV420FUNC_DITHER(yuv2rgb_c_8_ordered_dither, uint8_t, LOADDITHER8, PUTRGB8, 8) |
537 | 31.1k | YUV420FUNC_DITHER(yuv2rgb_c_4_ordered_dither, uint8_t, LOADDITHER4D, PUTRGB4D, 4) |
538 | 27.4k | YUV420FUNC_DITHER(yuv2rgb_c_4b_ordered_dither, uint8_t, LOADDITHER4DB, PUTRGB4DB, 8) |
539 | | |
540 | | // YUV422 |
541 | 24.0k | YUV422FUNC(yuv422p_rgb48_c, uint8_t, 0, 0, PUTRGB48, 48, 1) |
542 | 28.4k | YUV422FUNC(yuv422p_bgr48_c, uint8_t, 0, 0, PUTBGR48, 48, 1) |
543 | 24.3k | 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 | 33.8k | YUV422FUNC(yuv422p_rgb24_c, uint8_t, 0, 0, PUTRGB24, 24, 1) |
552 | 8.54k | YUV422FUNC(yuv422p_bgr24_c, uint8_t, 0, 0, PUTBGR24, 24, 1) |
553 | 834 | YUV422FUNC(yuv422p_gbrp_c, uint8_t, 0, 0, PUTGBRP, 8, 3) |
554 | 18.3k | YUV422FUNC_DITHER(yuv422p_bgr16, uint16_t, LOADDITHER16, PUTRGB16, 8) |
555 | 9.72k | YUV422FUNC_DITHER(yuv422p_bgr15, uint16_t, LOADDITHER15, PUTRGB15, 8) |
556 | 19.4k | YUV422FUNC_DITHER(yuv422p_bgr12, uint16_t, LOADDITHER12, PUTRGB12, 8) |
557 | 24.1k | YUV422FUNC_DITHER(yuv422p_bgr8, uint8_t, LOADDITHER8, PUTRGB8, 8) |
558 | 22.8k | YUV422FUNC_DITHER(yuv422p_bgr4, uint8_t, LOADDITHER4D, PUTRGB4D, 4) |
559 | 9.77k | YUV422FUNC_DITHER(yuv422p_bgr4_byte, uint8_t, LOADDITHER4DB, PUTRGB4DB, 8) |
560 | | |
561 | | SwsFunc ff_yuv2rgb_get_func_ptr(SwsInternal *c) |
562 | 480 | { |
563 | 480 | 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 | | #endif |
572 | | |
573 | 480 | if (t) |
574 | 0 | return t; |
575 | | |
576 | 480 | av_log(c, AV_LOG_WARNING, |
577 | 480 | "No accelerated colorspace conversion found from %s to %s.\n", |
578 | 480 | av_get_pix_fmt_name(c->opts.src_format), av_get_pix_fmt_name(c->opts.dst_format)); |
579 | | |
580 | 480 | if (c->opts.src_format == AV_PIX_FMT_YUV422P) { |
581 | 207 | switch (c->opts.dst_format) { |
582 | 4 | case AV_PIX_FMT_BGR48BE: |
583 | 18 | case AV_PIX_FMT_BGR48LE: |
584 | 18 | return yuv422p_bgr48_c; |
585 | 11 | case AV_PIX_FMT_RGB48BE: |
586 | 21 | case AV_PIX_FMT_RGB48LE: |
587 | 21 | return yuv422p_rgb48_c; |
588 | 8 | case AV_PIX_FMT_ARGB: |
589 | 15 | case AV_PIX_FMT_ABGR: |
590 | 15 | if (CONFIG_SWSCALE_ALPHA && isALPHA(c->opts.src_format)) |
591 | 0 | return yuva422p_argb_c; |
592 | 17 | case AV_PIX_FMT_RGBA: |
593 | 22 | case AV_PIX_FMT_BGRA: |
594 | 22 | return (CONFIG_SWSCALE_ALPHA && isALPHA(c->opts.src_format)) ? yuva422p_rgba_c : yuv422p_rgb32_c; |
595 | 16 | case AV_PIX_FMT_RGB24: |
596 | 16 | return yuv422p_rgb24_c; |
597 | 14 | case AV_PIX_FMT_BGR24: |
598 | 14 | return yuv422p_bgr24_c; |
599 | 6 | case AV_PIX_FMT_RGB565: |
600 | 16 | case AV_PIX_FMT_BGR565: |
601 | 16 | return yuv422p_bgr16; |
602 | 7 | case AV_PIX_FMT_RGB555: |
603 | 17 | case AV_PIX_FMT_BGR555: |
604 | 17 | return yuv422p_bgr15; |
605 | 9 | case AV_PIX_FMT_RGB444: |
606 | 18 | case AV_PIX_FMT_BGR444: |
607 | 18 | return yuv422p_bgr12; |
608 | 1 | case AV_PIX_FMT_RGB8: |
609 | 13 | case AV_PIX_FMT_BGR8: |
610 | 13 | return yuv422p_bgr8; |
611 | 11 | case AV_PIX_FMT_RGB4: |
612 | 20 | case AV_PIX_FMT_BGR4: |
613 | 20 | return yuv422p_bgr4; |
614 | 4 | case AV_PIX_FMT_RGB4_BYTE: |
615 | 10 | case AV_PIX_FMT_BGR4_BYTE: |
616 | 10 | return yuv422p_bgr4_byte; |
617 | 9 | case AV_PIX_FMT_MONOBLACK: |
618 | 9 | return yuv2rgb_c_1_ordered_dither; |
619 | 9 | case AV_PIX_FMT_GBRP: |
620 | 9 | return yuv422p_gbrp_c; |
621 | 207 | } |
622 | 273 | } else { |
623 | 273 | switch (c->opts.dst_format) { |
624 | 11 | case AV_PIX_FMT_BGR48BE: |
625 | 21 | case AV_PIX_FMT_BGR48LE: |
626 | 21 | return yuv2rgb_c_bgr48; |
627 | 9 | case AV_PIX_FMT_RGB48BE: |
628 | 22 | case AV_PIX_FMT_RGB48LE: |
629 | 22 | return yuv2rgb_c_48; |
630 | 7 | case AV_PIX_FMT_ARGB: |
631 | 19 | case AV_PIX_FMT_ABGR: |
632 | 19 | if (CONFIG_SWSCALE_ALPHA && isALPHA(c->opts.src_format)) |
633 | 11 | return yuva2argb_c; |
634 | 19 | case AV_PIX_FMT_RGBA: |
635 | 32 | case AV_PIX_FMT_BGRA: |
636 | 32 | return (CONFIG_SWSCALE_ALPHA && isALPHA(c->opts.src_format)) ? yuva2rgba_c : yuv2rgb_c_32; |
637 | 20 | case AV_PIX_FMT_RGB24: |
638 | 20 | return yuv2rgb_c_24_rgb; |
639 | 20 | case AV_PIX_FMT_BGR24: |
640 | 20 | return yuv2rgb_c_24_bgr; |
641 | 9 | case AV_PIX_FMT_RGB565: |
642 | 18 | case AV_PIX_FMT_BGR565: |
643 | 18 | return yuv2rgb_c_16_ordered_dither; |
644 | 14 | case AV_PIX_FMT_RGB555: |
645 | 20 | case AV_PIX_FMT_BGR555: |
646 | 20 | return yuv2rgb_c_15_ordered_dither; |
647 | 8 | case AV_PIX_FMT_RGB444: |
648 | 20 | case AV_PIX_FMT_BGR444: |
649 | 20 | return yuv2rgb_c_12_ordered_dither; |
650 | 3 | case AV_PIX_FMT_RGB8: |
651 | 14 | case AV_PIX_FMT_BGR8: |
652 | 14 | return yuv2rgb_c_8_ordered_dither; |
653 | 11 | case AV_PIX_FMT_RGB4: |
654 | 20 | case AV_PIX_FMT_BGR4: |
655 | 20 | return yuv2rgb_c_4_ordered_dither; |
656 | 4 | case AV_PIX_FMT_RGB4_BYTE: |
657 | 13 | case AV_PIX_FMT_BGR4_BYTE: |
658 | 13 | return yuv2rgb_c_4b_ordered_dither; |
659 | 13 | case AV_PIX_FMT_MONOBLACK: |
660 | 13 | return yuv2rgb_c_1_ordered_dither; |
661 | 18 | case AV_PIX_FMT_GBRP: |
662 | 18 | return yuv420p_gbrp_c; |
663 | 273 | } |
664 | 273 | } |
665 | 15 | return NULL; |
666 | 480 | } |
667 | | |
668 | | static void fill_table(uint8_t* table[256 + 2*YUVRGB_TABLE_HEADROOM], const int elemsize, |
669 | | const int64_t inc, void *y_tab) |
670 | 35.8k | { |
671 | 35.8k | int i; |
672 | 35.8k | uint8_t *y_table = y_tab; |
673 | | |
674 | 35.8k | y_table -= elemsize * (inc >> 9); |
675 | | |
676 | 45.9M | for (i = 0; i < 256 + 2*YUVRGB_TABLE_HEADROOM; i++) { |
677 | 45.9M | int64_t cb = av_clip_uint8(i-YUVRGB_TABLE_HEADROOM)*inc; |
678 | 45.9M | table[i] = y_table + elemsize * (cb >> 16); |
679 | 45.9M | } |
680 | 35.8k | } |
681 | | |
682 | | static void fill_gv_table(int table[256 + 2*YUVRGB_TABLE_HEADROOM], const int elemsize, const int64_t inc) |
683 | 12.1k | { |
684 | 12.1k | int i; |
685 | 12.1k | int off = -(inc >> 9); |
686 | | |
687 | 15.6M | for (i = 0; i < 256 + 2*YUVRGB_TABLE_HEADROOM; i++) { |
688 | 15.5M | int64_t cb = av_clip_uint8(i-YUVRGB_TABLE_HEADROOM)*inc; |
689 | 15.5M | table[i] = elemsize * (off + (cb >> 16)); |
690 | 15.5M | } |
691 | 12.1k | } |
692 | | |
693 | | static uint16_t roundToInt16(int64_t f) |
694 | 153k | { |
695 | 153k | int r = (f + (1 << 15)) >> 16; |
696 | | |
697 | 153k | if (r < -0x7FFF) |
698 | 0 | return 0x8000; |
699 | 153k | else if (r > 0x7FFF) |
700 | 0 | return 0x7FFF; |
701 | 153k | else |
702 | 153k | return r; |
703 | 153k | } |
704 | | |
705 | | av_cold int ff_yuv2rgb_c_init_tables(SwsInternal *c, const int inv_table[4], |
706 | | int fullRange, int brightness, |
707 | | int contrast, int saturation) |
708 | 12.7k | { |
709 | 12.7k | const int isRgb = c->opts.dst_format == AV_PIX_FMT_RGB32 || |
710 | 12.7k | c->opts.dst_format == AV_PIX_FMT_RGB32_1 || |
711 | 12.7k | c->opts.dst_format == AV_PIX_FMT_BGR24 || |
712 | 12.7k | c->opts.dst_format == AV_PIX_FMT_RGB565BE || |
713 | 12.7k | c->opts.dst_format == AV_PIX_FMT_RGB565LE || |
714 | 12.7k | c->opts.dst_format == AV_PIX_FMT_RGB555BE || |
715 | 12.7k | c->opts.dst_format == AV_PIX_FMT_RGB555LE || |
716 | 12.7k | c->opts.dst_format == AV_PIX_FMT_RGB444BE || |
717 | 12.7k | c->opts.dst_format == AV_PIX_FMT_RGB444LE || |
718 | 12.7k | c->opts.dst_format == AV_PIX_FMT_X2RGB10BE || |
719 | 12.7k | c->opts.dst_format == AV_PIX_FMT_X2RGB10LE || |
720 | 12.7k | c->opts.dst_format == AV_PIX_FMT_RGB8 || |
721 | 12.7k | c->opts.dst_format == AV_PIX_FMT_RGB4 || |
722 | 12.7k | c->opts.dst_format == AV_PIX_FMT_RGB4_BYTE || |
723 | 12.7k | c->opts.dst_format == AV_PIX_FMT_MONOBLACK; |
724 | 12.7k | const int isNotNe = c->opts.dst_format == AV_PIX_FMT_NE(RGB565LE, RGB565BE) || |
725 | 12.7k | c->opts.dst_format == AV_PIX_FMT_NE(RGB555LE, RGB555BE) || |
726 | 12.7k | c->opts.dst_format == AV_PIX_FMT_NE(RGB444LE, RGB444BE) || |
727 | 12.7k | c->opts.dst_format == AV_PIX_FMT_NE(BGR565LE, BGR565BE) || |
728 | 12.7k | c->opts.dst_format == AV_PIX_FMT_NE(BGR555LE, BGR555BE) || |
729 | 12.7k | c->opts.dst_format == AV_PIX_FMT_NE(BGR444LE, BGR444BE) || |
730 | 12.7k | c->opts.dst_format == AV_PIX_FMT_NE(X2RGB10LE, X2RGB10BE) || |
731 | 12.7k | c->opts.dst_format == AV_PIX_FMT_NE(X2BGR10LE, X2BGR10BE); |
732 | 12.7k | const int bpp = c->dstFormatBpp; |
733 | 12.7k | uint8_t *y_table; |
734 | 12.7k | uint16_t *y_table16; |
735 | 12.7k | uint32_t *y_table32; |
736 | 12.7k | int i, base, rbase, gbase, bbase, av_uninit(abase), needAlpha; |
737 | 12.7k | const int yoffs = (fullRange ? 384 : 326) + YUVRGB_TABLE_LUMA_HEADROOM; |
738 | 12.7k | const int table_plane_size = 1024 + 2*YUVRGB_TABLE_LUMA_HEADROOM; |
739 | | |
740 | 12.7k | int64_t crv = inv_table[0]; |
741 | 12.7k | int64_t cbu = inv_table[1]; |
742 | 12.7k | int64_t cgu = -inv_table[2]; |
743 | 12.7k | int64_t cgv = -inv_table[3]; |
744 | 12.7k | int64_t cy = 1 << 16; |
745 | 12.7k | int64_t oy = 0; |
746 | 12.7k | int64_t yb = 0; |
747 | | |
748 | 12.7k | if (!fullRange) { |
749 | 12.2k | cy = (cy * 255) / 219; |
750 | 12.2k | oy = 16 << 16; |
751 | 12.2k | } else { |
752 | 487 | crv = (crv * 224) / 255; |
753 | 487 | cbu = (cbu * 224) / 255; |
754 | 487 | cgu = (cgu * 224) / 255; |
755 | 487 | cgv = (cgv * 224) / 255; |
756 | 487 | } |
757 | | |
758 | 12.7k | cy = (cy * contrast) >> 16; |
759 | 12.7k | crv = (crv * contrast * saturation) >> 32; |
760 | 12.7k | cbu = (cbu * contrast * saturation) >> 32; |
761 | 12.7k | cgu = (cgu * contrast * saturation) >> 32; |
762 | 12.7k | cgv = (cgv * contrast * saturation) >> 32; |
763 | 12.7k | oy -= 256LL * brightness; |
764 | | |
765 | 12.7k | c->uOffset = 0x0400040004000400LL; |
766 | 12.7k | c->vOffset = 0x0400040004000400LL; |
767 | 12.7k | c->yCoeff = roundToInt16(cy * (1 << 13)) * 0x0001000100010001ULL; |
768 | 12.7k | c->vrCoeff = roundToInt16(crv * (1 << 13)) * 0x0001000100010001ULL; |
769 | 12.7k | c->ubCoeff = roundToInt16(cbu * (1 << 13)) * 0x0001000100010001ULL; |
770 | 12.7k | c->vgCoeff = roundToInt16(cgv * (1 << 13)) * 0x0001000100010001ULL; |
771 | 12.7k | c->ugCoeff = roundToInt16(cgu * (1 << 13)) * 0x0001000100010001ULL; |
772 | 12.7k | c->yOffset = roundToInt16(oy * (1 << 3)) * 0x0001000100010001ULL; |
773 | | |
774 | 12.7k | c->yuv2rgb_y_coeff = (int16_t)roundToInt16(cy * (1 << 13)); |
775 | 12.7k | c->yuv2rgb_y_offset = (int16_t)roundToInt16(oy * (1 << 9)); |
776 | 12.7k | c->yuv2rgb_v2r_coeff = (int16_t)roundToInt16(crv * (1 << 13)); |
777 | 12.7k | c->yuv2rgb_v2g_coeff = (int16_t)roundToInt16(cgv * (1 << 13)); |
778 | 12.7k | c->yuv2rgb_u2g_coeff = (int16_t)roundToInt16(cgu * (1 << 13)); |
779 | 12.7k | c->yuv2rgb_u2b_coeff = (int16_t)roundToInt16(cbu * (1 << 13)); |
780 | | |
781 | | //scale coefficients by cy |
782 | 12.7k | crv = ((crv * (1 << 16)) + 0x8000) / FFMAX(cy, 1); |
783 | 12.7k | cbu = ((cbu * (1 << 16)) + 0x8000) / FFMAX(cy, 1); |
784 | 12.7k | cgu = ((cgu * (1 << 16)) + 0x8000) / FFMAX(cy, 1); |
785 | 12.7k | cgv = ((cgv * (1 << 16)) + 0x8000) / FFMAX(cy, 1); |
786 | | |
787 | 12.7k | av_freep(&c->yuvTable); |
788 | | |
789 | 12.7k | #define ALLOC_YUV_TABLE(x) \ |
790 | 12.7k | c->yuvTable = av_malloc(x); \ |
791 | 12.1k | if (!c->yuvTable) \ |
792 | 12.1k | return AVERROR(ENOMEM); |
793 | 12.7k | switch (bpp) { |
794 | 341 | case 1: |
795 | 341 | ALLOC_YUV_TABLE(table_plane_size); |
796 | 341 | y_table = c->yuvTable; |
797 | 341 | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
798 | 661k | for (i = 0; i < table_plane_size - 110; i++) { |
799 | 660k | y_table[i + 110] = av_clip_uint8((yb + 0x8000) >> 16) >> 7; |
800 | 660k | yb += cy; |
801 | 660k | } |
802 | 341 | fill_table(c->table_gU, 1, cgu, y_table + yoffs); |
803 | 341 | fill_gv_table(c->table_gV, 1, cgv); |
804 | 341 | break; |
805 | 805 | case 4: |
806 | 805 | case 4 | 128: |
807 | 805 | rbase = isRgb ? 3 : 0; |
808 | 805 | gbase = 1; |
809 | 805 | bbase = isRgb ? 0 : 3; |
810 | 805 | ALLOC_YUV_TABLE(table_plane_size * 3); |
811 | 805 | y_table = c->yuvTable; |
812 | 805 | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
813 | 1.56M | for (i = 0; i < table_plane_size - 110; i++) { |
814 | 1.56M | int yval = av_clip_uint8((yb + 0x8000) >> 16); |
815 | 1.56M | y_table[i + 110] = (yval >> 7) << rbase; |
816 | 1.56M | y_table[i + 37 + table_plane_size] = ((yval + 43) / 85) << gbase; |
817 | 1.56M | y_table[i + 110 + 2*table_plane_size] = (yval >> 7) << bbase; |
818 | 1.56M | yb += cy; |
819 | 1.56M | } |
820 | 805 | fill_table(c->table_rV, 1, crv, y_table + yoffs); |
821 | 805 | fill_table(c->table_gU, 1, cgu, y_table + yoffs + table_plane_size); |
822 | 805 | fill_table(c->table_bU, 1, cbu, y_table + yoffs + 2*table_plane_size); |
823 | 805 | fill_gv_table(c->table_gV, 1, cgv); |
824 | 805 | break; |
825 | 671 | case 8: |
826 | 671 | rbase = isRgb ? 5 : 0; |
827 | 671 | gbase = isRgb ? 2 : 3; |
828 | 671 | bbase = isRgb ? 0 : 6; |
829 | 671 | ALLOC_YUV_TABLE(table_plane_size * 3); |
830 | 671 | y_table = c->yuvTable; |
831 | 671 | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
832 | 1.34M | for (i = 0; i < table_plane_size - 38; i++) { |
833 | 1.34M | int yval = av_clip_uint8((yb + 0x8000) >> 16); |
834 | 1.34M | y_table[i + 16] = ((yval + 18) / 36) << rbase; |
835 | 1.34M | y_table[i + 16 + table_plane_size] = ((yval + 18) / 36) << gbase; |
836 | 1.34M | y_table[i + 37 + 2*table_plane_size] = ((yval + 43) / 85) << bbase; |
837 | 1.34M | yb += cy; |
838 | 1.34M | } |
839 | 671 | fill_table(c->table_rV, 1, crv, y_table + yoffs); |
840 | 671 | fill_table(c->table_gU, 1, cgu, y_table + yoffs + table_plane_size); |
841 | 671 | fill_table(c->table_bU, 1, cbu, y_table + yoffs + 2*table_plane_size); |
842 | 671 | fill_gv_table(c->table_gV, 1, cgv); |
843 | 671 | break; |
844 | 171 | case 12: |
845 | 171 | rbase = isRgb ? 8 : 0; |
846 | 171 | gbase = 4; |
847 | 171 | bbase = isRgb ? 0 : 8; |
848 | 171 | ALLOC_YUV_TABLE(table_plane_size * 3 * 2); |
849 | 171 | y_table16 = c->yuvTable; |
850 | 171 | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
851 | 350k | for (i = 0; i < table_plane_size; i++) { |
852 | 350k | uint8_t yval = av_clip_uint8((yb + 0x8000) >> 16); |
853 | 350k | y_table16[i] = (yval >> 4) << rbase; |
854 | 350k | y_table16[i + table_plane_size] = (yval >> 4) << gbase; |
855 | 350k | y_table16[i + 2*table_plane_size] = (yval >> 4) << bbase; |
856 | 350k | yb += cy; |
857 | 350k | } |
858 | 171 | if (isNotNe) |
859 | 380k | for (i = 0; i < table_plane_size * 3; i++) |
860 | 380k | y_table16[i] = av_bswap16(y_table16[i]); |
861 | 171 | fill_table(c->table_rV, 2, crv, y_table16 + yoffs); |
862 | 171 | fill_table(c->table_gU, 2, cgu, y_table16 + yoffs + table_plane_size); |
863 | 171 | fill_table(c->table_bU, 2, cbu, y_table16 + yoffs + 2*table_plane_size); |
864 | 171 | fill_gv_table(c->table_gV, 2, cgv); |
865 | 171 | break; |
866 | 259 | case 15: |
867 | 519 | case 16: |
868 | 519 | rbase = isRgb ? bpp - 5 : 0; |
869 | 519 | gbase = 5; |
870 | 519 | bbase = isRgb ? 0 : (bpp - 5); |
871 | 519 | ALLOC_YUV_TABLE(table_plane_size * 3 * 2); |
872 | 519 | y_table16 = c->yuvTable; |
873 | 519 | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
874 | 1.06M | for (i = 0; i < table_plane_size; i++) { |
875 | 1.06M | uint8_t yval = av_clip_uint8((yb + 0x8000) >> 16); |
876 | 1.06M | y_table16[i] = (yval >> 3) << rbase; |
877 | 1.06M | y_table16[i + table_plane_size] = (yval >> (18 - bpp)) << gbase; |
878 | 1.06M | y_table16[i + 2*table_plane_size] = (yval >> 3) << bbase; |
879 | 1.06M | yb += cy; |
880 | 1.06M | } |
881 | 519 | if (isNotNe) |
882 | 1.52M | for (i = 0; i < table_plane_size * 3; i++) |
883 | 1.52M | y_table16[i] = av_bswap16(y_table16[i]); |
884 | 519 | fill_table(c->table_rV, 2, crv, y_table16 + yoffs); |
885 | 519 | fill_table(c->table_gU, 2, cgu, y_table16 + yoffs + table_plane_size); |
886 | 519 | fill_table(c->table_bU, 2, cbu, y_table16 + yoffs + 2*table_plane_size); |
887 | 519 | fill_gv_table(c->table_gV, 2, cgv); |
888 | 519 | break; |
889 | 1.23k | case 24: |
890 | 3.46k | case 48: |
891 | 3.46k | ALLOC_YUV_TABLE(table_plane_size); |
892 | 3.46k | y_table = c->yuvTable; |
893 | 3.46k | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
894 | 7.09M | for (i = 0; i < table_plane_size; i++) { |
895 | 7.09M | y_table[i] = av_clip_uint8((yb + 0x8000) >> 16); |
896 | 7.09M | yb += cy; |
897 | 7.09M | } |
898 | 3.46k | fill_table(c->table_rV, 1, crv, y_table + yoffs); |
899 | 3.46k | fill_table(c->table_gU, 1, cgu, y_table + yoffs); |
900 | 3.46k | fill_table(c->table_bU, 1, cbu, y_table + yoffs); |
901 | 3.46k | fill_gv_table(c->table_gV, 1, cgv); |
902 | 3.46k | break; |
903 | 621 | case 30: |
904 | 621 | rbase = isRgb ? 20 : 0; |
905 | 621 | gbase = 10; |
906 | 621 | bbase = isRgb ? 0 : 20; |
907 | 621 | needAlpha = CONFIG_SWSCALE_ALPHA && isALPHA(c->opts.src_format); |
908 | 621 | if (!needAlpha) |
909 | 480 | abase = 30; |
910 | 621 | ALLOC_YUV_TABLE(table_plane_size * 3 * 4); |
911 | 621 | y_table32 = c->yuvTable; |
912 | 621 | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
913 | 1.27M | for (i = 0; i < table_plane_size; i++) { |
914 | 1.27M | unsigned yval = av_clip_uintp2((yb + 0x8000) >> 14, 10); |
915 | 1.27M | y_table32[i]= (yval << rbase) + (needAlpha ? 0 : (255u << abase)); |
916 | 1.27M | y_table32[i + table_plane_size] = yval << gbase; |
917 | 1.27M | y_table32[i + 2 * table_plane_size] = yval << bbase; |
918 | 1.27M | yb += cy; |
919 | 1.27M | } |
920 | 621 | if (isNotNe) { |
921 | 6.14k | for (i = 0; i < table_plane_size * 3; i++) |
922 | 6.14k | y_table32[i] = av_bswap32(y_table32[i]); |
923 | 1 | } |
924 | 621 | fill_table(c->table_rV, 4, crv, y_table32 + yoffs); |
925 | 621 | fill_table(c->table_gU, 4, cgu, y_table32 + yoffs + table_plane_size); |
926 | 621 | fill_table(c->table_bU, 4, cbu, y_table32 + yoffs + 2 * table_plane_size); |
927 | 621 | fill_gv_table(c->table_gV, 4, cgv); |
928 | 621 | break; |
929 | 2.41k | case 32: |
930 | 5.58k | case 64: |
931 | 5.58k | base = (c->opts.dst_format == AV_PIX_FMT_RGB32_1 || |
932 | 5.58k | c->opts.dst_format == AV_PIX_FMT_BGR32_1) ? 8 : 0; |
933 | 5.58k | rbase = base + (isRgb ? 16 : 0); |
934 | 5.58k | gbase = base + 8; |
935 | 5.58k | bbase = base + (isRgb ? 0 : 16); |
936 | 5.58k | needAlpha = CONFIG_SWSCALE_ALPHA && isALPHA(c->opts.src_format); |
937 | 5.58k | if (!needAlpha) |
938 | 2.69k | abase = (base + 24) & 31; |
939 | 5.58k | ALLOC_YUV_TABLE(table_plane_size * 3 * 4); |
940 | 5.58k | y_table32 = c->yuvTable; |
941 | 5.58k | yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; |
942 | 11.4M | for (i = 0; i < table_plane_size; i++) { |
943 | 11.4M | unsigned yval = av_clip_uint8((yb + 0x8000) >> 16); |
944 | 11.4M | y_table32[i] = (yval << rbase) + |
945 | 11.4M | (needAlpha ? 0 : (255u << abase)); |
946 | 11.4M | y_table32[i + table_plane_size] = yval << gbase; |
947 | 11.4M | y_table32[i + 2*table_plane_size] = yval << bbase; |
948 | 11.4M | yb += cy; |
949 | 11.4M | } |
950 | 5.58k | fill_table(c->table_rV, 4, crv, y_table32 + yoffs); |
951 | 5.58k | fill_table(c->table_gU, 4, cgu, y_table32 + yoffs + table_plane_size); |
952 | 5.58k | fill_table(c->table_bU, 4, cbu, y_table32 + yoffs + 2*table_plane_size); |
953 | 5.58k | fill_gv_table(c->table_gV, 4, cgv); |
954 | 5.58k | break; |
955 | 584 | default: |
956 | 584 | if(!isPlanar(c->opts.dst_format) || bpp <= 24) |
957 | 1 | av_log(c, AV_LOG_ERROR, "%ibpp not supported by yuv2rgb\n", bpp); |
958 | 584 | return AVERROR(EINVAL); |
959 | 12.7k | } |
960 | 12.1k | return 0; |
961 | 12.7k | } |