Coverage Report

Created: 2025-08-28 07:12

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