Coverage Report

Created: 2026-05-23 07:06

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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()
yuv2rgb.c:yuv2rgb_c_48
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()
yuv2rgb.c:yuva2argb_c
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()
yuv2rgb.c:yuva2rgba_c
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()
yuv2rgb.c:yuv2rgb_c_32
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()
yuv2rgb.c:yuv420p_gbrp_c
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()
yuv2rgb.c:yuv422p_gbrp_c
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()
yuv2rgb.c:yuv422p_bgr16
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()
yuv2rgb.c:yuv422p_bgr15
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()
yuv2rgb.c:yuv422p_bgr12
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()
yuv2rgb.c:yuv422p_bgr8
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()
yuv2rgb.c:yuv422p_bgr4
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
}