Coverage Report

Created: 2026-07-15 07:31

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ffmpeg/libswscale/input.c
Line
Count
Source
1
/*
2
 * Copyright (C) 2001-2012 Michael Niedermayer <michaelni@gmx.at>
3
 *
4
 * This file is part of FFmpeg.
5
 *
6
 * FFmpeg is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU Lesser General Public
8
 * License as published by the Free Software Foundation; either
9
 * version 2.1 of the License, or (at your option) any later version.
10
 *
11
 * FFmpeg is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
 * Lesser General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU Lesser General Public
17
 * License along with FFmpeg; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
 */
20
21
#include <math.h>
22
#include <stddef.h>
23
#include <stdint.h>
24
25
#include "libavutil/attributes.h"
26
#include "libavutil/bswap.h"
27
#include "libavutil/intreadwrite.h"
28
#include "libavutil/avassert.h"
29
#include "libavutil/intfloat.h"
30
#include "config.h"
31
#include "swscale_internal.h"
32
33
0
#define input_pixel(pos) (is_be ? AV_RB16(pos) : AV_RL16(pos))
34
35
#define IS_BE_LE 0
36
#define IS_BE_BE 1
37
#define IS_BE_   0
38
/* ENDIAN_IDENTIFIER needs to be "BE", "LE" or "". The latter is intended
39
 * for single-byte cases where the concept of endianness does not apply. */
40
#define IS_BE(ENDIAN_IDENTIFIER) IS_BE_ ## ENDIAN_IDENTIFIER
41
42
0
#define r ((origin == AV_PIX_FMT_BGR48BE || origin == AV_PIX_FMT_BGR48LE || origin == AV_PIX_FMT_BGRA64BE || origin == AV_PIX_FMT_BGRA64LE) ? b_r : r_b)
43
0
#define b ((origin == AV_PIX_FMT_BGR48BE || origin == AV_PIX_FMT_BGR48LE || origin == AV_PIX_FMT_BGRA64BE || origin == AV_PIX_FMT_BGRA64LE) ? r_b : b_r)
44
45
static av_always_inline void
46
rgb64ToY_c_template(uint16_t *dst, const uint16_t *src, int width,
47
                    enum AVPixelFormat origin, int32_t *rgb2yuv, int is_be)
48
0
{
49
0
    int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
50
0
    int i;
51
0
    for (i = 0; i < width; i++) {
52
0
        unsigned int r_b = input_pixel(&src[i*4+0]);
53
0
        unsigned int   g = input_pixel(&src[i*4+1]);
54
0
        unsigned int b_r = input_pixel(&src[i*4+2]);
55
56
0
        dst[i] = (ry*r + gy*g + by*b + (0x2001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
57
0
    }
58
0
}
59
60
static av_always_inline void
61
rgb64ToUV_c_template(uint16_t *dstU, uint16_t *dstV,
62
                    const uint16_t *src1, const uint16_t *src2,
63
                    int width, enum AVPixelFormat origin, int32_t *rgb2yuv, int is_be)
64
0
{
65
0
    int i;
66
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
67
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
68
0
    av_assert1(src1==src2);
69
0
    for (i = 0; i < width; i++) {
70
0
        unsigned int r_b = input_pixel(&src1[i*4+0]);
71
0
        unsigned int   g = input_pixel(&src1[i*4+1]);
72
0
        unsigned int b_r = input_pixel(&src1[i*4+2]);
73
74
0
        dstU[i] = (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
75
0
        dstV[i] = (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
76
0
    }
77
0
}
78
79
static av_always_inline void
80
rgb64ToUV_half_c_template(uint16_t *dstU, uint16_t *dstV,
81
                          const uint16_t *src1, const uint16_t *src2,
82
                          int width, enum AVPixelFormat origin, int32_t *rgb2yuv, int is_be)
83
0
{
84
0
    int i;
85
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
86
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
87
0
    av_assert1(src1==src2);
88
0
    for (i = 0; i < width; i++) {
89
0
        unsigned r_b = (input_pixel(&src1[8 * i + 0]) + input_pixel(&src1[8 * i + 4]) + 1) >> 1;
90
0
        unsigned   g = (input_pixel(&src1[8 * i + 1]) + input_pixel(&src1[8 * i + 5]) + 1) >> 1;
91
0
        unsigned b_r = (input_pixel(&src1[8 * i + 2]) + input_pixel(&src1[8 * i + 6]) + 1) >> 1;
92
93
0
        dstU[i]= (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
94
0
        dstV[i]= (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
95
0
    }
96
0
}
97
98
#define RGB64FUNCS_EXT(pattern, BE_LE, origin, is_be) \
99
static void pattern ## 64 ## BE_LE ## ToY_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused0, const uint8_t *unused1,\
100
0
                                    int width, uint32_t *rgb2yuv, void *opq) \
101
0
{ \
102
0
    const uint16_t *src = (const uint16_t *) _src; \
103
0
    uint16_t *dst = (uint16_t *) _dst; \
104
0
    rgb64ToY_c_template(dst, src, width, origin, rgb2yuv, is_be); \
105
0
} \
Unexecuted instantiation: input.c:rgb64BEToY_c
Unexecuted instantiation: input.c:rgb64LEToY_c
Unexecuted instantiation: input.c:bgr64BEToY_c
Unexecuted instantiation: input.c:bgr64LEToY_c
106
 \
107
static void pattern ## 64 ## BE_LE ## ToUV_c(uint8_t *_dstU, uint8_t *_dstV, \
108
                                    const uint8_t *unused0, const uint8_t *_src1, const uint8_t *_src2, \
109
0
                                    int width, uint32_t *rgb2yuv, void *opq) \
110
0
{ \
111
0
    const uint16_t *src1 = (const uint16_t *) _src1, \
112
0
                   *src2 = (const uint16_t *) _src2; \
113
0
    uint16_t *dstU = (uint16_t *) _dstU, *dstV = (uint16_t *) _dstV; \
114
0
    rgb64ToUV_c_template(dstU, dstV, src1, src2, width, origin, rgb2yuv, is_be); \
115
0
} \
Unexecuted instantiation: input.c:rgb64BEToUV_c
Unexecuted instantiation: input.c:rgb64LEToUV_c
Unexecuted instantiation: input.c:bgr64BEToUV_c
Unexecuted instantiation: input.c:bgr64LEToUV_c
116
 \
117
static void pattern ## 64 ## BE_LE ## ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, \
118
                                    const uint8_t *unused0, const uint8_t *_src1, const uint8_t *_src2, \
119
0
                                    int width, uint32_t *rgb2yuv, void *opq) \
120
0
{ \
121
0
    const uint16_t *src1 = (const uint16_t *) _src1, \
122
0
                   *src2 = (const uint16_t *) _src2; \
123
0
    uint16_t *dstU = (uint16_t *) _dstU, *dstV = (uint16_t *) _dstV; \
124
0
    rgb64ToUV_half_c_template(dstU, dstV, src1, src2, width, origin, rgb2yuv, is_be); \
125
0
}
Unexecuted instantiation: input.c:rgb64BEToUV_half_c
Unexecuted instantiation: input.c:rgb64LEToUV_half_c
Unexecuted instantiation: input.c:bgr64BEToUV_half_c
Unexecuted instantiation: input.c:bgr64LEToUV_half_c
126
#define RGB64FUNCS(pattern, endianness, base_fmt) \
127
        RGB64FUNCS_EXT(pattern, endianness, base_fmt ## endianness, IS_BE(endianness))
128
129
RGB64FUNCS(rgb, LE, AV_PIX_FMT_RGBA64)
130
RGB64FUNCS(rgb, BE, AV_PIX_FMT_RGBA64)
131
RGB64FUNCS(bgr, LE, AV_PIX_FMT_BGRA64)
132
RGB64FUNCS(bgr, BE, AV_PIX_FMT_BGRA64)
133
134
static av_always_inline void rgb48ToY_c_template(uint16_t *dst,
135
                                                 const uint16_t *src, int width,
136
                                                 enum AVPixelFormat origin,
137
                                                 int32_t *rgb2yuv, int is_be)
138
0
{
139
0
    int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
140
0
    int i;
141
0
    for (i = 0; i < width; i++) {
142
0
        unsigned int r_b = input_pixel(&src[i * 3 + 0]);
143
0
        unsigned int g   = input_pixel(&src[i * 3 + 1]);
144
0
        unsigned int b_r = input_pixel(&src[i * 3 + 2]);
145
146
0
        dst[i] = (ry*r + gy*g + by*b + (0x2001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
147
0
    }
148
0
}
149
150
static av_always_inline void rgb48ToUV_c_template(uint16_t *dstU,
151
                                                  uint16_t *dstV,
152
                                                  const uint16_t *src1,
153
                                                  const uint16_t *src2,
154
                                                  int width,
155
                                                  enum AVPixelFormat origin,
156
                                                  int32_t *rgb2yuv, int is_be)
157
0
{
158
0
    int i;
159
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
160
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
161
0
    av_assert1(src1 == src2);
162
0
    for (i = 0; i < width; i++) {
163
0
        unsigned r_b = input_pixel(&src1[i * 3 + 0]);
164
0
        unsigned g   = input_pixel(&src1[i * 3 + 1]);
165
0
        unsigned b_r = input_pixel(&src1[i * 3 + 2]);
166
167
0
        dstU[i] = (ru*r + gu*g + bu*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
168
0
        dstV[i] = (rv*r + gv*g + bv*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
169
0
    }
170
0
}
171
172
static av_always_inline void rgb48ToUV_half_c_template(uint16_t *dstU,
173
                                                       uint16_t *dstV,
174
                                                       const uint16_t *src1,
175
                                                       const uint16_t *src2,
176
                                                       int width,
177
                                                       enum AVPixelFormat origin,
178
                                                       int32_t *rgb2yuv, int is_be)
179
0
{
180
0
    int i;
181
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
182
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
183
0
    av_assert1(src1 == src2);
184
0
    for (i = 0; i < width; i++) {
185
0
        unsigned r_b = (input_pixel(&src1[6 * i + 0]) +
186
0
                        input_pixel(&src1[6 * i + 3]) + 1) >> 1;
187
0
        unsigned g   = (input_pixel(&src1[6 * i + 1]) +
188
0
                        input_pixel(&src1[6 * i + 4]) + 1) >> 1;
189
0
        unsigned b_r = (input_pixel(&src1[6 * i + 2]) +
190
0
                        input_pixel(&src1[6 * i + 5]) + 1) >> 1;
191
192
0
        dstU[i] = (ru*r + gu*g + bu*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
193
0
        dstV[i] = (rv*r + gv*g + bv*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
194
0
    }
195
0
}
196
197
#undef r
198
#undef b
199
#undef input_pixel
200
201
#define RGB48FUNCS_EXT(pattern, BE_LE, origin, is_be)                   \
202
static void pattern ## 48 ## BE_LE ## ToY_c(uint8_t *_dst,              \
203
                                            const uint8_t *_src,        \
204
                                            const uint8_t *unused0, const uint8_t *unused1,\
205
                                            int width,                  \
206
                                            uint32_t *rgb2yuv,          \
207
0
                                            void *opq)                  \
208
0
{                                                                       \
209
0
    const uint16_t *src = (const uint16_t *)_src;                       \
210
0
    uint16_t *dst       = (uint16_t *)_dst;                             \
211
0
    rgb48ToY_c_template(dst, src, width, origin, rgb2yuv, is_be);       \
212
0
}                                                                       \
Unexecuted instantiation: input.c:rgb48BEToY_c
Unexecuted instantiation: input.c:rgb48LEToY_c
Unexecuted instantiation: input.c:bgr48BEToY_c
Unexecuted instantiation: input.c:bgr48LEToY_c
213
                                                                        \
214
static void pattern ## 48 ## BE_LE ## ToUV_c(uint8_t *_dstU,            \
215
                                             uint8_t *_dstV,            \
216
                                             const uint8_t *unused0,    \
217
                                             const uint8_t *_src1,      \
218
                                             const uint8_t *_src2,      \
219
                                             int width,                 \
220
                                             uint32_t *rgb2yuv,         \
221
0
                                             void *opq)                 \
222
0
{                                                                       \
223
0
    const uint16_t *src1 = (const uint16_t *)_src1,                     \
224
0
                   *src2 = (const uint16_t *)_src2;                     \
225
0
    uint16_t *dstU = (uint16_t *)_dstU,                                 \
226
0
             *dstV = (uint16_t *)_dstV;                                 \
227
0
    rgb48ToUV_c_template(dstU, dstV, src1, src2, width, origin, rgb2yuv, is_be); \
228
0
}                                                                       \
Unexecuted instantiation: input.c:rgb48BEToUV_c
Unexecuted instantiation: input.c:rgb48LEToUV_c
Unexecuted instantiation: input.c:bgr48BEToUV_c
Unexecuted instantiation: input.c:bgr48LEToUV_c
229
                                                                        \
230
static void pattern ## 48 ## BE_LE ## ToUV_half_c(uint8_t *_dstU,       \
231
                                                  uint8_t *_dstV,       \
232
                                                  const uint8_t *unused0,    \
233
                                                  const uint8_t *_src1, \
234
                                                  const uint8_t *_src2, \
235
                                                  int width,            \
236
                                                  uint32_t *rgb2yuv,    \
237
0
                                                  void *opq)            \
238
0
{                                                                       \
239
0
    const uint16_t *src1 = (const uint16_t *)_src1,                     \
240
0
                   *src2 = (const uint16_t *)_src2;                     \
241
0
    uint16_t *dstU = (uint16_t *)_dstU,                                 \
242
0
             *dstV = (uint16_t *)_dstV;                                 \
243
0
    rgb48ToUV_half_c_template(dstU, dstV, src1, src2, width, origin, rgb2yuv, is_be); \
244
0
}
Unexecuted instantiation: input.c:rgb48BEToUV_half_c
Unexecuted instantiation: input.c:rgb48LEToUV_half_c
Unexecuted instantiation: input.c:bgr48BEToUV_half_c
Unexecuted instantiation: input.c:bgr48LEToUV_half_c
245
#define RGB48FUNCS(pattern, endianness, base_fmt) \
246
        RGB48FUNCS_EXT(pattern, endianness, base_fmt ## endianness, IS_BE(endianness))
247
248
RGB48FUNCS(rgb, LE, AV_PIX_FMT_RGB48)
249
RGB48FUNCS(rgb, BE, AV_PIX_FMT_RGB48)
250
RGB48FUNCS(bgr, LE, AV_PIX_FMT_BGR48)
251
RGB48FUNCS(bgr, BE, AV_PIX_FMT_BGR48)
252
253
0
#define input_pixel(i) ((origin == AV_PIX_FMT_RGBA ||                      \
254
0
                         origin == AV_PIX_FMT_BGRA ||                      \
255
0
                         origin == AV_PIX_FMT_ARGB ||                      \
256
0
                         origin == AV_PIX_FMT_ABGR)                        \
257
0
                        ? AV_RN32A(&src[(i) * 4])                          \
258
0
                        : ((origin == AV_PIX_FMT_X2RGB10LE ||              \
259
0
                            origin == AV_PIX_FMT_X2BGR10LE)                \
260
0
                           ? AV_RL32(&src[(i) * 4])                        \
261
0
                           : (is_be ? AV_RB16(&src[(i) * 2])               \
262
0
                              : AV_RL16(&src[(i) * 2]))))
263
264
static av_always_inline void rgb16_32ToY_c_template(int16_t *dst,
265
                                                    const uint8_t *src,
266
                                                    int width,
267
                                                    enum AVPixelFormat origin,
268
                                                    int shr, int shg,
269
                                                    int shb, int shp,
270
                                                    int maskr, int maskg,
271
                                                    int maskb, int rsh,
272
                                                    int gsh, int bsh, int S,
273
                                                    int32_t *rgb2yuv, int is_be)
274
0
{
275
0
    const int ry       = rgb2yuv[RY_IDX]<<rsh, gy = rgb2yuv[GY_IDX]<<gsh, by = rgb2yuv[BY_IDX]<<bsh;
276
0
    const unsigned rnd = (32<<((S)-1)) + (1<<(S-7));
277
0
    int i;
278
279
0
    for (i = 0; i < width; i++) {
280
0
        int px = input_pixel(i) >> shp;
281
0
        int b  = (px & maskb) >> shb;
282
0
        int g  = (px & maskg) >> shg;
283
0
        int r  = (px & maskr) >> shr;
284
285
0
        dst[i] = (ry * r + gy * g + by * b + rnd) >> ((S)-6);
286
0
    }
287
0
}
288
289
static av_always_inline void rgb16_32ToUV_c_template(int16_t *dstU,
290
                                                     int16_t *dstV,
291
                                                     const uint8_t *src,
292
                                                     int width,
293
                                                     enum AVPixelFormat origin,
294
                                                     int shr, int shg,
295
                                                     int shb, int shp,
296
                                                     int maskr, int maskg,
297
                                                     int maskb, int rsh,
298
                                                     int gsh, int bsh, int S,
299
                                                     int32_t *rgb2yuv, int is_be)
300
0
{
301
0
    const int ru       = rgb2yuv[RU_IDX] * (1 << rsh), gu = rgb2yuv[GU_IDX] * (1 << gsh), bu = rgb2yuv[BU_IDX] * (1 << bsh),
302
0
              rv       = rgb2yuv[RV_IDX] * (1 << rsh), gv = rgb2yuv[GV_IDX] * (1 << gsh), bv = rgb2yuv[BV_IDX] * (1 << bsh);
303
0
    const unsigned rnd = (256u<<((S)-1)) + (1<<(S-7));
304
0
    int i;
305
306
0
    for (i = 0; i < width; i++) {
307
0
        int px = input_pixel(i) >> shp;
308
0
        int b  = (px & maskb)   >> shb;
309
0
        int g  = (px & maskg)   >> shg;
310
0
        int r  = (px & maskr)   >> shr;
311
312
0
        dstU[i] = (ru * r + gu * g + bu * b + rnd) >> ((S)-6);
313
0
        dstV[i] = (rv * r + gv * g + bv * b + rnd) >> ((S)-6);
314
0
    }
315
0
}
316
317
static av_always_inline void rgb16_32ToUV_half_c_template(int16_t *dstU,
318
                                                          int16_t *dstV,
319
                                                          const uint8_t *src,
320
                                                          int width,
321
                                                          enum AVPixelFormat origin,
322
                                                          int shr, int shg,
323
                                                          int shb, int shp,
324
                                                          int maskr, int maskg,
325
                                                          int maskb, int rsh,
326
                                                          int gsh, int bsh, int S,
327
                                                          int32_t *rgb2yuv, int is_be)
328
0
{
329
0
    const int ru       = rgb2yuv[RU_IDX] * (1 << rsh), gu = rgb2yuv[GU_IDX] * (1 << gsh), bu = rgb2yuv[BU_IDX] * (1 << bsh),
330
0
              rv       = rgb2yuv[RV_IDX] * (1 << rsh), gv = rgb2yuv[GV_IDX] * (1 << gsh), bv = rgb2yuv[BV_IDX] * (1 << bsh),
331
0
              maskgx   = ~(maskr | maskb);
332
0
    const unsigned rnd = (256U<<(S)) + (1<<(S-6));
333
0
    int i;
334
335
0
    maskr |= maskr << 1;
336
0
    maskb |= maskb << 1;
337
0
    maskg |= maskg << 1;
338
0
    for (i = 0; i < width; i++) {
339
0
        unsigned px0 = input_pixel(2 * i + 0) >> shp;
340
0
        unsigned px1 = input_pixel(2 * i + 1) >> shp;
341
0
        int b, r, g = (px0 & maskgx) + (px1 & maskgx);
342
0
        int rb = px0 + px1 - g;
343
344
0
        b = (rb & maskb) >> shb;
345
0
        if (shp ||
346
0
            origin == AV_PIX_FMT_BGR565LE || origin == AV_PIX_FMT_BGR565BE ||
347
0
            origin == AV_PIX_FMT_RGB565LE || origin == AV_PIX_FMT_RGB565BE) {
348
0
            g >>= shg;
349
0
        } else {
350
0
            g = (g & maskg) >> shg;
351
0
        }
352
0
        r = (rb & maskr) >> shr;
353
354
0
        dstU[i] = (ru * r + gu * g + bu * b + (unsigned)rnd) >> ((S)-6+1);
355
0
        dstV[i] = (rv * r + gv * g + bv * b + (unsigned)rnd) >> ((S)-6+1);
356
0
    }
357
0
}
358
359
#undef input_pixel
360
361
#define RGB16_32FUNCS_EXT(fmt, name, shr, shg, shb, shp, maskr,         \
362
                          maskg, maskb, rsh, gsh, bsh, S, is_be)        \
363
static void name ## ToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2,            \
364
0
                          int width, uint32_t *tab, void *opq)          \
365
0
{                                                                       \
366
0
    rgb16_32ToY_c_template((int16_t*)dst, src, width, fmt, shr, shg, shb, shp,    \
367
0
                           maskr, maskg, maskb, rsh, gsh, bsh, S, tab, is_be); \
368
0
}                                                                       \
Unexecuted instantiation: input.c:bgr16leToY_c
Unexecuted instantiation: input.c:bgr16beToY_c
Unexecuted instantiation: input.c:bgr15leToY_c
Unexecuted instantiation: input.c:bgr15beToY_c
Unexecuted instantiation: input.c:bgr12leToY_c
Unexecuted instantiation: input.c:bgr12beToY_c
Unexecuted instantiation: input.c:rgb16leToY_c
Unexecuted instantiation: input.c:rgb16beToY_c
Unexecuted instantiation: input.c:rgb15leToY_c
Unexecuted instantiation: input.c:rgb15beToY_c
Unexecuted instantiation: input.c:rgb12leToY_c
Unexecuted instantiation: input.c:rgb12beToY_c
Unexecuted instantiation: input.c:bgr32ToY_c
Unexecuted instantiation: input.c:bgr321ToY_c
Unexecuted instantiation: input.c:rgb32ToY_c
Unexecuted instantiation: input.c:rgb321ToY_c
Unexecuted instantiation: input.c:rgb30leToY_c
Unexecuted instantiation: input.c:bgr30leToY_c
369
                                                                        \
370
static void name ## ToUV_c(uint8_t *dstU, uint8_t *dstV,                \
371
                           const uint8_t *unused0, const uint8_t *src, const uint8_t *dummy,    \
372
0
                           int width, uint32_t *tab, void *opq)         \
373
0
{                                                                       \
374
0
    rgb16_32ToUV_c_template((int16_t*)dstU, (int16_t*)dstV, src, width, fmt,                \
375
0
                            shr, shg, shb, shp,                         \
376
0
                            maskr, maskg, maskb, rsh, gsh, bsh, S, tab, is_be); \
377
0
}                                                                       \
Unexecuted instantiation: input.c:bgr32ToUV_c
Unexecuted instantiation: input.c:bgr321ToUV_c
Unexecuted instantiation: input.c:bgr16leToUV_c
Unexecuted instantiation: input.c:bgr16beToUV_c
Unexecuted instantiation: input.c:bgr15leToUV_c
Unexecuted instantiation: input.c:bgr15beToUV_c
Unexecuted instantiation: input.c:bgr12leToUV_c
Unexecuted instantiation: input.c:bgr12beToUV_c
Unexecuted instantiation: input.c:rgb32ToUV_c
Unexecuted instantiation: input.c:rgb321ToUV_c
Unexecuted instantiation: input.c:rgb16leToUV_c
Unexecuted instantiation: input.c:rgb16beToUV_c
Unexecuted instantiation: input.c:rgb15leToUV_c
Unexecuted instantiation: input.c:rgb15beToUV_c
Unexecuted instantiation: input.c:rgb12leToUV_c
Unexecuted instantiation: input.c:rgb12beToUV_c
Unexecuted instantiation: input.c:rgb30leToUV_c
Unexecuted instantiation: input.c:bgr30leToUV_c
378
                                                                        \
379
static void name ## ToUV_half_c(uint8_t *dstU, uint8_t *dstV,           \
380
                                const uint8_t *unused0, const uint8_t *src,                     \
381
                                const uint8_t *dummy,                   \
382
0
                                int width, uint32_t *tab, void *opq)    \
383
0
{                                                                       \
384
0
    rgb16_32ToUV_half_c_template((int16_t*)dstU, (int16_t*)dstV, src, width, fmt,           \
385
0
                                 shr, shg, shb, shp,                    \
386
0
                                 maskr, maskg, maskb,                   \
387
0
                                 rsh, gsh, bsh, S, tab, is_be);         \
388
0
}
Unexecuted instantiation: input.c:bgr32ToUV_half_c
Unexecuted instantiation: input.c:bgr321ToUV_half_c
Unexecuted instantiation: input.c:bgr16leToUV_half_c
Unexecuted instantiation: input.c:bgr16beToUV_half_c
Unexecuted instantiation: input.c:bgr15leToUV_half_c
Unexecuted instantiation: input.c:bgr15beToUV_half_c
Unexecuted instantiation: input.c:bgr12leToUV_half_c
Unexecuted instantiation: input.c:bgr12beToUV_half_c
Unexecuted instantiation: input.c:rgb32ToUV_half_c
Unexecuted instantiation: input.c:rgb321ToUV_half_c
Unexecuted instantiation: input.c:rgb16leToUV_half_c
Unexecuted instantiation: input.c:rgb16beToUV_half_c
Unexecuted instantiation: input.c:rgb15leToUV_half_c
Unexecuted instantiation: input.c:rgb15beToUV_half_c
Unexecuted instantiation: input.c:rgb12leToUV_half_c
Unexecuted instantiation: input.c:rgb12beToUV_half_c
Unexecuted instantiation: input.c:rgb30leToUV_half_c
Unexecuted instantiation: input.c:bgr30leToUV_half_c
389
390
#define RGB16_32FUNCS(base_fmt, endianness, name, shr, shg, shb, shp, maskr, \
391
                      maskg, maskb, rsh, gsh, bsh, S) \
392
    RGB16_32FUNCS_EXT(base_fmt ## endianness, name, shr, shg, shb, shp, maskr, \
393
                      maskg, maskb, rsh, gsh, bsh, S, IS_BE(endianness))
394
395
RGB16_32FUNCS(AV_PIX_FMT_BGR32,     , bgr32,  16, 0,  0, 0, 0xFF0000, 0xFF00,   0x00FF,  8, 0,  8, RGB2YUV_SHIFT + 8)
396
RGB16_32FUNCS(AV_PIX_FMT_BGR32_1,   , bgr321, 16, 0,  0, 8, 0xFF0000, 0xFF00,   0x00FF,  8, 0,  8, RGB2YUV_SHIFT + 8)
397
RGB16_32FUNCS(AV_PIX_FMT_RGB32,     , rgb32,   0, 0, 16, 0,   0x00FF, 0xFF00, 0xFF0000,  8, 0,  8, RGB2YUV_SHIFT + 8)
398
RGB16_32FUNCS(AV_PIX_FMT_RGB32_1,   , rgb321,  0, 0, 16, 8,   0x00FF, 0xFF00, 0xFF0000,  8, 0,  8, RGB2YUV_SHIFT + 8)
399
RGB16_32FUNCS(AV_PIX_FMT_BGR565,  LE, bgr16le, 0, 0,  0, 0,   0x001F, 0x07E0,   0xF800, 11, 5,  0, RGB2YUV_SHIFT + 8)
400
RGB16_32FUNCS(AV_PIX_FMT_BGR555,  LE, bgr15le, 0, 0,  0, 0,   0x001F, 0x03E0,   0x7C00, 10, 5,  0, RGB2YUV_SHIFT + 7)
401
RGB16_32FUNCS(AV_PIX_FMT_BGR444,  LE, bgr12le, 0, 0,  0, 0,   0x000F, 0x00F0,   0x0F00,  8, 4,  0, RGB2YUV_SHIFT + 4)
402
RGB16_32FUNCS(AV_PIX_FMT_RGB565,  LE, rgb16le, 0, 0,  0, 0,   0xF800, 0x07E0,   0x001F,  0, 5, 11, RGB2YUV_SHIFT + 8)
403
RGB16_32FUNCS(AV_PIX_FMT_RGB555,  LE, rgb15le, 0, 0,  0, 0,   0x7C00, 0x03E0,   0x001F,  0, 5, 10, RGB2YUV_SHIFT + 7)
404
RGB16_32FUNCS(AV_PIX_FMT_RGB444,  LE, rgb12le, 0, 0,  0, 0,   0x0F00, 0x00F0,   0x000F,  0, 4,  8, RGB2YUV_SHIFT + 4)
405
RGB16_32FUNCS(AV_PIX_FMT_BGR565,  BE, bgr16be, 0, 0,  0, 0,   0x001F, 0x07E0,   0xF800, 11, 5,  0, RGB2YUV_SHIFT + 8)
406
RGB16_32FUNCS(AV_PIX_FMT_BGR555,  BE, bgr15be, 0, 0,  0, 0,   0x001F, 0x03E0,   0x7C00, 10, 5,  0, RGB2YUV_SHIFT + 7)
407
RGB16_32FUNCS(AV_PIX_FMT_BGR444,  BE, bgr12be, 0, 0,  0, 0,   0x000F, 0x00F0,   0x0F00,  8, 4,  0, RGB2YUV_SHIFT + 4)
408
RGB16_32FUNCS(AV_PIX_FMT_RGB565,  BE, rgb16be, 0, 0,  0, 0,   0xF800, 0x07E0,   0x001F,  0, 5, 11, RGB2YUV_SHIFT + 8)
409
RGB16_32FUNCS(AV_PIX_FMT_RGB555,  BE, rgb15be, 0, 0,  0, 0,   0x7C00, 0x03E0,   0x001F,  0, 5, 10, RGB2YUV_SHIFT + 7)
410
RGB16_32FUNCS(AV_PIX_FMT_RGB444,  BE, rgb12be, 0, 0,  0, 0,   0x0F00, 0x00F0,   0x000F,  0, 4,  8, RGB2YUV_SHIFT + 4)
411
RGB16_32FUNCS(AV_PIX_FMT_X2RGB10, LE, rgb30le, 16, 6, 0, 0, 0x3FF00000, 0xFFC00, 0x3FF, 0, 0, 4, RGB2YUV_SHIFT + 6)
412
RGB16_32FUNCS(AV_PIX_FMT_X2BGR10, LE, bgr30le, 0, 6, 16, 0, 0x3FF, 0xFFC00, 0x3FF00000, 4, 0, 0, RGB2YUV_SHIFT + 6)
413
414
static void gbr24pToUV_half_c(uint8_t *_dstU, uint8_t *_dstV,
415
                         const uint8_t *gsrc, const uint8_t *bsrc, const uint8_t *rsrc,
416
                         int width, uint32_t *rgb2yuv, void *opq)
417
0
{
418
0
    uint16_t *dstU = (uint16_t *)_dstU;
419
0
    uint16_t *dstV = (uint16_t *)_dstV;
420
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
421
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
422
423
0
    int i;
424
0
    for (i = 0; i < width; i++) {
425
0
        unsigned int g   = gsrc[2*i] + gsrc[2*i+1];
426
0
        unsigned int b   = bsrc[2*i] + bsrc[2*i+1];
427
0
        unsigned int r   = rsrc[2*i] + rsrc[2*i+1];
428
429
0
        dstU[i] = (ru*r + gu*g + bu*b + (0x4001<<(RGB2YUV_SHIFT-6))) >> (RGB2YUV_SHIFT-6+1);
430
0
        dstV[i] = (rv*r + gv*g + bv*b + (0x4001<<(RGB2YUV_SHIFT-6))) >> (RGB2YUV_SHIFT-6+1);
431
0
    }
432
0
}
433
434
static void rgba64leToA_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1,
435
                          const uint8_t *unused2, int width, uint32_t *unused, void *opq)
436
0
{
437
0
    int16_t *dst = (int16_t *)_dst;
438
0
    const uint16_t *src = (const uint16_t *)_src;
439
0
    int i;
440
0
    for (i = 0; i < width; i++)
441
0
        dst[i] = AV_RL16(src + 4 * i + 3);
442
0
}
443
444
static void rgba64beToA_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1,
445
                          const uint8_t *unused2, int width, uint32_t *unused, void *opq)
446
0
{
447
0
    int16_t *dst = (int16_t *)_dst;
448
0
    const uint16_t *src = (const uint16_t *)_src;
449
0
    int i;
450
0
    for (i = 0; i < width; i++)
451
0
        dst[i] = AV_RB16(src + 4 * i + 3);
452
0
}
453
454
static void abgrToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1,
455
                      const uint8_t *unused2, int width, uint32_t *unused, void *opq)
456
0
{
457
0
    int16_t *dst = (int16_t *)_dst;
458
0
    int i;
459
0
    for (i=0; i<width; i++) {
460
0
        dst[i]= src[4*i]<<6 | src[4*i]>>2;
461
0
    }
462
0
}
463
464
static void rgbaToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1,
465
                      const uint8_t *unused2, int width, uint32_t *unused, void *opq)
466
0
{
467
0
    int16_t *dst = (int16_t *)_dst;
468
0
    int i;
469
0
    for (i=0; i<width; i++) {
470
0
        dst[i]= src[4*i+3]<<6 | src[4*i+3]>>2;
471
0
    }
472
0
}
473
474
static void palToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1,
475
                     const uint8_t *unused2, int width, uint32_t *pal, void *opq)
476
0
{
477
0
    int16_t *dst = (int16_t *)_dst;
478
0
    int i;
479
0
    for (i=0; i<width; i++) {
480
0
        int d= src[i];
481
482
0
        dst[i]= (pal[d] >> 24)<<6 | pal[d]>>26;
483
0
    }
484
0
}
485
486
static void palToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1,
487
                     const uint8_t *unused2, int width, uint32_t *pal, void *opq)
488
0
{
489
0
    int16_t *dst = (int16_t *)_dst;
490
0
    int i;
491
0
    for (i = 0; i < width; i++) {
492
0
        int d = src[i];
493
494
0
        dst[i] = (pal[d] & 0xFF)<<6;
495
0
    }
496
0
}
497
498
static void palToUV_c(uint8_t *_dstU, uint8_t *_dstV,
499
                      const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2,
500
                      int width, uint32_t *pal, void *opq)
501
0
{
502
0
    uint16_t *dstU = (uint16_t *)_dstU;
503
0
    int16_t *dstV = (int16_t *)_dstV;
504
0
    int i;
505
0
    av_assert1(src1 == src2);
506
0
    for (i = 0; i < width; i++) {
507
0
        int p = pal[src1[i]];
508
509
0
        dstU[i] = (uint8_t)(p>> 8)<<6;
510
0
        dstV[i] = (uint8_t)(p>>16)<<6;
511
0
    }
512
0
}
513
514
static void monowhite2Y_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1,
515
                          const uint8_t *unused2,  int width, uint32_t *unused, void *opq)
516
0
{
517
0
    int16_t *dst = (int16_t *)_dst;
518
0
    int i, j;
519
0
    width = (width + 7) >> 3;
520
0
    for (i = 0; i < width; i++) {
521
0
        int d = ~src[i];
522
0
        for (j = 0; j < 8; j++)
523
0
            dst[8*i+j]= ((d>>(7-j))&1) * 16383;
524
0
    }
525
0
    if(width&7){
526
0
        int d= ~src[i];
527
0
        for (j = 0; j < (width&7); j++)
528
0
            dst[8*i+j]= ((d>>(7-j))&1) * 16383;
529
0
    }
530
0
}
531
532
static void monoblack2Y_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1,
533
                          const uint8_t *unused2,  int width, uint32_t *unused, void *opq)
534
0
{
535
0
    int16_t *dst = (int16_t *)_dst;
536
0
    int i, j;
537
0
    width = (width + 7) >> 3;
538
0
    for (i = 0; i < width; i++) {
539
0
        int d = src[i];
540
0
        for (j = 0; j < 8; j++)
541
0
            dst[8*i+j]= ((d>>(7-j))&1) * 16383;
542
0
    }
543
0
    if(width&7){
544
0
        int d = src[i];
545
0
        for (j = 0; j < (width&7); j++)
546
0
            dst[8*i+j] = ((d>>(7-j))&1) * 16383;
547
0
    }
548
0
}
549
550
static void yuy2ToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width,
551
                      uint32_t *unused, void *opq)
552
0
{
553
0
    int i;
554
0
    for (i = 0; i < width; i++)
555
0
        dst[i] = src[2 * i];
556
0
}
557
558
static void yuy2ToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1,
559
                       const uint8_t *src2, int width, uint32_t *unused, void *opq)
560
0
{
561
0
    int i;
562
0
    for (i = 0; i < width; i++) {
563
0
        dstU[i] = src1[4 * i + 1];
564
0
        dstV[i] = src1[4 * i + 3];
565
0
    }
566
0
    av_assert1(src1 == src2);
567
0
}
568
569
static void yvy2ToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1,
570
                       const uint8_t *src2, int width, uint32_t *unused, void *opq)
571
0
{
572
0
    int i;
573
0
    for (i = 0; i < width; i++) {
574
0
        dstV[i] = src1[4 * i + 1];
575
0
        dstU[i] = src1[4 * i + 3];
576
0
    }
577
0
    av_assert1(src1 == src2);
578
0
}
579
580
#define y21xle_wrapper(bits, shift) \
581
    static void y2 ## bits ## le_UV_c(uint8_t *dstU, uint8_t *dstV,      \
582
                                      const uint8_t *unused0,            \
583
                                      const uint8_t *src,                \
584
                                      const uint8_t *unused1, int width, \
585
                                      uint32_t *unused2, void *opq)      \
586
0
    {                                                                    \
587
0
        int i;                                                           \
588
0
        for (i = 0; i < width; i++) {                                    \
589
0
            AV_WN16(dstU + i * 2, AV_RL16(src + i * 8 + 2) >> shift);    \
590
0
            AV_WN16(dstV + i * 2, AV_RL16(src + i * 8 + 6) >> shift);    \
591
0
        }                                                                \
592
0
    }                                                                    \
Unexecuted instantiation: input.c:y210le_UV_c
Unexecuted instantiation: input.c:y212le_UV_c
Unexecuted instantiation: input.c:y216le_UV_c
593
                                                                         \
594
    static void y2 ## bits ## le_Y_c(uint8_t *dst, const uint8_t *src,   \
595
                                     const uint8_t *unused0,             \
596
                                     const uint8_t *unused1, int width,  \
597
                                     uint32_t *unused2, void *opq)       \
598
0
    {                                                                    \
599
0
        int i;                                                           \
600
0
        for (i = 0; i < width; i++)                                      \
601
0
            AV_WN16(dst + i * 2, AV_RL16(src + i * 4) >> shift);         \
602
0
    }
Unexecuted instantiation: input.c:y210le_Y_c
Unexecuted instantiation: input.c:y212le_Y_c
Unexecuted instantiation: input.c:y216le_Y_c
603
604
y21xle_wrapper(10, 6)
605
y21xle_wrapper(12, 4)
606
y21xle_wrapper(16, 0)
607
608
static void bswap16Y_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1, const uint8_t *unused2, int width,
609
                       uint32_t *unused, void *opq)
610
0
{
611
0
    int i;
612
0
    const uint16_t *src = (const uint16_t *)_src;
613
0
    uint16_t *dst       = (uint16_t *)_dst;
614
0
    for (i = 0; i < width; i++)
615
0
        dst[i] = av_bswap16(src[i]);
616
0
}
617
618
static void bswap16UV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *_src1,
619
                        const uint8_t *_src2, int width, uint32_t *unused, void *opq)
620
0
{
621
0
    int i;
622
0
    const uint16_t *src1 = (const uint16_t *)_src1,
623
0
    *src2                = (const uint16_t *)_src2;
624
0
    uint16_t *dstU       = (uint16_t *)_dstU, *dstV = (uint16_t *)_dstV;
625
0
    for (i = 0; i < width; i++) {
626
0
        dstU[i] = av_bswap16(src1[i]);
627
0
        dstV[i] = av_bswap16(src2[i]);
628
0
    }
629
0
}
630
631
static void read_ya16le_gray_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width,
632
                               uint32_t *unused, void *opq)
633
0
{
634
0
    int i;
635
0
    for (i = 0; i < width; i++)
636
0
        AV_WN16(dst + i * 2, AV_RL16(src + i * 4));
637
0
}
638
639
static void read_ya16le_alpha_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width,
640
                                uint32_t *unused, void *opq)
641
0
{
642
0
    int i;
643
0
    for (i = 0; i < width; i++)
644
0
        AV_WN16(dst + i * 2, AV_RL16(src + i * 4 + 2));
645
0
}
646
647
static void read_ya16be_gray_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width,
648
                               uint32_t *unused, void *opq)
649
0
{
650
0
    int i;
651
0
    for (i = 0; i < width; i++)
652
0
        AV_WN16(dst + i * 2, AV_RB16(src + i * 4));
653
0
}
654
655
static void read_ya16be_alpha_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width,
656
                                uint32_t *unused, void *opq)
657
0
{
658
0
    int i;
659
0
    for (i = 0; i < width; i++)
660
0
        AV_WN16(dst + i * 2, AV_RB16(src + i * 4 + 2));
661
0
}
662
663
static void read_ayuv64le_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width,
664
                               uint32_t *unused2, void *opq)
665
0
{
666
0
    int i;
667
0
    for (i = 0; i < width; i++)
668
0
        AV_WN16(dst + i * 2, AV_RL16(src + i * 8 + 2));
669
0
}
670
671
static void read_ayuv64be_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width,
672
                               uint32_t *unused2, void *opq)
673
0
{
674
0
    int i;
675
0
    for (i = 0; i < width; i++)
676
0
        AV_WN16(dst + i * 2, AV_RB16(src + i * 8 + 2));
677
0
}
678
679
static av_always_inline void ayuv64le_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *src, int width,
680
                                           int u_offset, int v_offset)
681
0
{
682
0
    int i;
683
0
    for (i = 0; i < width; i++) {
684
0
        AV_WN16(dstU + i * 2, AV_RL16(src + i * 8 + u_offset));
685
0
        AV_WN16(dstV + i * 2, AV_RL16(src + i * 8 + v_offset));
686
0
    }
687
0
}
688
689
static av_always_inline void ayuv64be_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *src, int width,
690
                                           int u_offset, int v_offset)
691
0
{
692
0
    int i;
693
0
    for (i = 0; i < width; i++) {
694
0
        AV_WN16(dstU + i * 2, AV_RB16(src + i * 8 + u_offset));
695
0
        AV_WN16(dstV + i * 2, AV_RB16(src + i * 8 + v_offset));
696
0
    }
697
0
}
698
699
#define ayuv64_UV_funcs(pixfmt, U, V) \
700
static void read_ ## pixfmt ## le_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, \
701
0
                                       const uint8_t *unused1, int width, uint32_t *unused2, void *opq) \
702
0
{ \
703
0
    ayuv64le_UV_c(dstU, dstV, src, width, U, V); \
704
0
} \
Unexecuted instantiation: input.c:read_ayuv64le_UV_c
Unexecuted instantiation: input.c:read_xv48le_UV_c
705
 \
706
static void read_ ## pixfmt ## be_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, \
707
0
                                       const uint8_t *unused1, int width, uint32_t *unused2, void *opq) \
708
0
{ \
709
0
    ayuv64be_UV_c(dstU, dstV, src, width, U, V); \
710
0
}
Unexecuted instantiation: input.c:read_ayuv64be_UV_c
Unexecuted instantiation: input.c:read_xv48be_UV_c
711
712
ayuv64_UV_funcs(ayuv64, 4, 6)
713
ayuv64_UV_funcs(xv48, 0, 4)
714
715
static void read_ayuv64le_A_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width,
716
                              uint32_t *unused2, void *opq)
717
0
{
718
0
    int i;
719
0
    for (i = 0; i < width; i++)
720
0
        AV_WN16(dst + i * 2, AV_RL16(src + i * 8));
721
0
}
722
723
static void read_ayuv64be_A_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width,
724
                              uint32_t *unused2, void *opq)
725
0
{
726
0
    int i;
727
0
    for (i = 0; i < width; i++)
728
0
        AV_WN16(dst + i * 2, AV_RB16(src + i * 8));
729
0
}
730
731
static void read_vuyx_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src,
732
                           const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
733
0
{
734
0
    int i;
735
0
    for (i = 0; i < width; i++) {
736
0
        dstU[i] = src[i * 4 + 1];
737
0
        dstV[i] = src[i * 4];
738
0
    }
739
0
}
740
741
static void read_vuyx_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width,
742
                          uint32_t *unused2, void *opq)
743
0
{
744
0
    int i;
745
0
    for (i = 0; i < width; i++)
746
0
        dst[i] = src[i * 4 + 2];
747
0
}
748
749
static void read_vuya_A_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width,
750
                          uint32_t *unused2, void *opq)
751
0
{
752
0
    int i;
753
0
    for (i = 0; i < width; i++)
754
0
        dst[i] = src[i * 4 + 3];
755
0
}
756
757
static void read_ayuv_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src,
758
                           const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
759
0
{
760
0
    int i;
761
0
    for (i = 0; i < width; i++) {
762
0
        dstU[i] = src[i * 4 + 2];
763
0
        dstV[i] = src[i * 4 + 3];
764
0
    }
765
0
}
766
767
static void read_ayuv_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width,
768
                          uint32_t *unused2, void *opq)
769
0
{
770
0
    int i;
771
0
    for (i = 0; i < width; i++)
772
0
        dst[i] = src[i * 4 + 1];
773
0
}
774
775
static void read_ayuv_A_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width,
776
                          uint32_t *unused2, void *opq)
777
0
{
778
0
    int i;
779
0
    for (i = 0; i < width; i++)
780
0
        dst[i] = src[i * 4];
781
0
}
782
783
static void read_uyva_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src,
784
                           const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
785
0
{
786
0
    int i;
787
0
    for (i = 0; i < width; i++) {
788
0
        dstU[i] = src[i * 4];
789
0
        dstV[i] = src[i * 4 + 2];
790
0
    }
791
0
}
792
793
static void vyuToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width,
794
                     uint32_t *unused2, void *opq)
795
0
{
796
0
    int i;
797
0
    for (i = 0; i < width; i++)
798
0
        dst[i] = src[i * 3 + 1];
799
0
}
800
801
static void vyuToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src,
802
                      const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
803
0
{
804
0
    int i;
805
0
    for (i = 0; i < width; i++) {
806
0
        dstU[i] = src[i * 3 + 2];
807
0
        dstV[i] = src[i * 3];
808
0
    }
809
0
}
810
811
static void read_v30xle_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width,
812
                               uint32_t *unused2, void *opq)
813
0
{
814
0
    int i;
815
0
    for (i = 0; i < width; i++)
816
0
        AV_WN16(dst + i * 2, (AV_RL32(src + i * 4) >> 12) & 0x3FFu);
817
0
}
818
819
820
static void read_v30xle_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src,
821
                               const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
822
0
{
823
0
    int i;
824
0
    for (i = 0; i < width; i++) {
825
0
        unsigned int uv = AV_RL32(src + i * 4);
826
0
        AV_WN16(dstU + i * 2, (uv >>  2) & 0x3FFu);
827
0
        AV_WN16(dstV + i * 2, (uv >> 22) & 0x3FFu);
828
0
    }
829
0
}
830
831
static void read_xv30le_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width,
832
                               uint32_t *unused2, void *opq)
833
0
{
834
0
    int i;
835
0
    for (i = 0; i < width; i++)
836
0
        AV_WN16(dst + i * 2, (AV_RL32(src + i * 4) >> 10) & 0x3FFu);
837
0
}
838
839
840
static void read_xv30le_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src,
841
                               const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
842
0
{
843
0
    int i;
844
0
    for (i = 0; i < width; i++) {
845
0
        AV_WN16(dstU + i * 2, AV_RL32(src + i * 4) & 0x3FFu);
846
0
        AV_WN16(dstV + i * 2, (AV_RL32(src + i * 4) >> 20) & 0x3FFu);
847
0
    }
848
0
}
849
850
static void read_xv36le_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width,
851
                               uint32_t *unused2, void *opq)
852
0
{
853
0
    int i;
854
0
    for (i = 0; i < width; i++)
855
0
        AV_WN16(dst + i * 2, AV_RL16(src + i * 8 + 2) >> 4);
856
0
}
857
858
859
static void read_xv36le_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src,
860
                               const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
861
0
{
862
0
    int i;
863
0
    for (i = 0; i < width; i++) {
864
0
        AV_WN16(dstU + i * 2, AV_RL16(src + i * 8 + 0) >> 4);
865
0
        AV_WN16(dstV + i * 2, AV_RL16(src + i * 8 + 4) >> 4);
866
0
    }
867
0
}
868
869
static void read_xv36be_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width,
870
                               uint32_t *unused2, void *opq)
871
0
{
872
0
    int i;
873
0
    for (i = 0; i < width; i++)
874
0
        AV_WN16(dst + i * 2, AV_RB16(src + i * 8 + 2) >> 4);
875
0
}
876
877
878
static void read_xv36be_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src,
879
                               const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
880
0
{
881
0
    int i;
882
0
    for (i = 0; i < width; i++) {
883
0
        AV_WN16(dstU + i * 2, AV_RB16(src + i * 8 + 0) >> 4);
884
0
        AV_WN16(dstV + i * 2, AV_RB16(src + i * 8 + 4) >> 4);
885
0
    }
886
0
}
887
888
/* This is almost identical to the previous, end exists only because
889
 * yuy2ToY/UV)(dst, src + 1, ...) would have 100% unaligned accesses. */
890
static void uyvyToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2,  int width,
891
                      uint32_t *unused, void *opq)
892
0
{
893
0
    int i;
894
0
    for (i = 0; i < width; i++)
895
0
        dst[i] = src[2 * i + 1];
896
0
}
897
898
static void uyvyToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1,
899
                       const uint8_t *src2, int width, uint32_t *unused, void *opq)
900
0
{
901
0
    int i;
902
0
    for (i = 0; i < width; i++) {
903
0
        dstU[i] = src1[4 * i + 0];
904
0
        dstV[i] = src1[4 * i + 2];
905
0
    }
906
0
    av_assert1(src1 == src2);
907
0
}
908
909
static void uyyvyyToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2,
910
                        int width, uint32_t *unused, void *opq)
911
0
{
912
0
    for (int i = 0; i < width; i++)
913
0
        dst[i]  = src[3 * (i >> 1) + 1 + (i & 1)];
914
0
}
915
916
static void uyyvyyToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1,
917
                         const uint8_t *src2, int width, uint32_t *unused, void *opq)
918
0
{
919
0
    for (int i = 0; i < width; i++) {
920
0
        dstU[i] = src1[6 * i + 0];
921
0
        dstV[i] = src1[6 * i + 3];
922
0
    }
923
0
    av_assert1(src1 == src2);
924
0
}
925
926
static av_always_inline void nvXXtoUV_c(uint8_t *dst1, uint8_t *dst2,
927
                                        const uint8_t *src, int width)
928
0
{
929
0
    int i;
930
0
    for (i = 0; i < width; i++) {
931
0
        dst1[i] = src[2 * i + 0];
932
0
        dst2[i] = src[2 * i + 1];
933
0
    }
934
0
}
935
936
static void nv12ToUV_c(uint8_t *dstU, uint8_t *dstV,
937
                       const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2,
938
                       int width, uint32_t *unused, void *opq)
939
0
{
940
0
    nvXXtoUV_c(dstU, dstV, src1, width);
941
0
}
942
943
static void nv21ToUV_c(uint8_t *dstU, uint8_t *dstV,
944
                       const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2,
945
                       int width, uint32_t *unused, void *opq)
946
0
{
947
0
    nvXXtoUV_c(dstV, dstU, src1, width);
948
0
}
949
950
#define p01x_uv_wrapper(fmt, shift) \
951
    static void fmt ## LEToUV ## _c(uint8_t *dstU,                       \
952
                                       uint8_t *dstV,                    \
953
                                       const uint8_t *unused0,           \
954
                                       const uint8_t *src1,              \
955
                                       const uint8_t *src2, int width,   \
956
                                       uint32_t *unused, void *opq)      \
957
0
    {                                                                    \
958
0
        int i;                                                           \
959
0
        for (i = 0; i < width; i++) {                                    \
960
0
            AV_WN16(dstU + i * 2, AV_RL16(src1 + i * 4 + 0) >> shift);   \
961
0
            AV_WN16(dstV + i * 2, AV_RL16(src1 + i * 4 + 2) >> shift);   \
962
0
        }                                                                \
963
0
    }                                                                    \
Unexecuted instantiation: input.c:nv20LEToUV_c
Unexecuted instantiation: input.c:p010LEToUV_c
Unexecuted instantiation: input.c:p012LEToUV_c
Unexecuted instantiation: input.c:p016LEToUV_c
964
                                                                         \
965
    static void fmt ## BEToUV ## _c(uint8_t *dstU,                       \
966
                                       uint8_t *dstV,                    \
967
                                       const uint8_t *unused0,           \
968
                                       const uint8_t *src1,              \
969
                                       const uint8_t *src2, int width,   \
970
                                       uint32_t *unused, void *opq)      \
971
0
    {                                                                    \
972
0
        int i;                                                           \
973
0
        for (i = 0; i < width; i++) {                                    \
974
0
            AV_WN16(dstU + i * 2, AV_RB16(src1 + i * 4 + 0) >> shift);   \
975
0
            AV_WN16(dstV + i * 2, AV_RB16(src1 + i * 4 + 2) >> shift);   \
976
0
        }                                                                \
977
0
    }
Unexecuted instantiation: input.c:nv20BEToUV_c
Unexecuted instantiation: input.c:p010BEToUV_c
Unexecuted instantiation: input.c:p012BEToUV_c
Unexecuted instantiation: input.c:p016BEToUV_c
978
979
#define p01x_wrapper(fmt, shift) \
980
    static void fmt ## LEToY ## _c(uint8_t *dst,                         \
981
                                      const uint8_t *src,                \
982
                                      const uint8_t *unused1,            \
983
                                      const uint8_t *unused2, int width, \
984
                                      uint32_t *unused, void *opq)       \
985
0
    {                                                                    \
986
0
        int i;                                                           \
987
0
        for (i = 0; i < width; i++) {                                    \
988
0
            AV_WN16(dst + i * 2, AV_RL16(src + i * 2) >> shift);         \
989
0
        }                                                                \
990
0
    }                                                                    \
Unexecuted instantiation: input.c:nv20LEToY_c
Unexecuted instantiation: input.c:p010LEToY_c
Unexecuted instantiation: input.c:p012LEToY_c
991
                                                                         \
992
    static void fmt ## BEToY ## _c(uint8_t *dst,                         \
993
                                      const uint8_t *src,                \
994
                                      const uint8_t *unused1,            \
995
                                      const uint8_t *unused2, int width, \
996
                                      uint32_t *unused, void *opq)       \
997
0
    {                                                                    \
998
0
        int i;                                                           \
999
0
        for (i = 0; i < width; i++) {                                    \
1000
0
            AV_WN16(dst + i * 2, AV_RB16(src + i * 2) >> shift);         \
1001
0
        }                                                                \
1002
0
    }                                                                    \
Unexecuted instantiation: input.c:nv20BEToY_c
Unexecuted instantiation: input.c:p010BEToY_c
Unexecuted instantiation: input.c:p012BEToY_c
1003
    p01x_uv_wrapper(fmt, shift)
1004
1005
p01x_wrapper(nv20, 0)
1006
p01x_wrapper(p010, 6)
1007
p01x_wrapper(p012, 4)
1008
p01x_uv_wrapper(p016, 0)
1009
1010
#define shf16_uv_wrapper(shift) \
1011
    static void shf16_ ## shift ## LEToUV_c(uint8_t *dstU,                \
1012
                                         uint8_t *dstV,                   \
1013
                                         const uint8_t *unused0,          \
1014
                                         const uint8_t *src1,             \
1015
                                         const uint8_t *src2, int width,  \
1016
                                         uint32_t *unused, void *opq)     \
1017
0
    {                                                                     \
1018
0
        int i;                                                            \
1019
0
        for (i = 0; i < width; i++) {                                     \
1020
0
            AV_WN16(dstU + i * 2, AV_RL16(src1 + i * 2) >> (16 - shift)); \
1021
0
            AV_WN16(dstV + i * 2, AV_RL16(src2 + i * 2) >> (16 - shift)); \
1022
0
        }                                                                 \
1023
0
    }                                                                     \
Unexecuted instantiation: input.c:shf16_10LEToUV_c
Unexecuted instantiation: input.c:shf16_12LEToUV_c
1024
                                                                          \
1025
    static void shf16_ ## shift ## BEToUV_c(uint8_t *dstU,                \
1026
                                         uint8_t *dstV,                   \
1027
                                         const uint8_t *unused0,          \
1028
                                         const uint8_t *src1,             \
1029
                                         const uint8_t *src2, int width,  \
1030
                                         uint32_t *unused, void *opq)     \
1031
0
    {                                                                     \
1032
0
        int i;                                                            \
1033
0
        for (i = 0; i < width; i++) {                                     \
1034
0
            AV_WN16(dstU + i * 2, AV_RB16(src1 + i * 2) >> (16 - shift)); \
1035
0
            AV_WN16(dstV + i * 2, AV_RB16(src2 + i * 2) >> (16 - shift)); \
1036
0
        }                                                                 \
1037
0
    }
Unexecuted instantiation: input.c:shf16_10BEToUV_c
Unexecuted instantiation: input.c:shf16_12BEToUV_c
1038
1039
#define shf16_wrapper(shift) \
1040
    static void shf16_ ## shift ## LEToY_c(uint8_t *dst,                      \
1041
                                           const uint8_t *src,                \
1042
                                           const uint8_t *unused1,            \
1043
                                           const uint8_t *unused2, int width, \
1044
                                           uint32_t *unused, void *opq)       \
1045
0
    {                                                                         \
1046
0
        int i;                                                                \
1047
0
        for (i = 0; i < width; i++) {                                         \
1048
0
            AV_WN16(dst + i * 2, AV_RL16(src + i * 2) >> (16 - shift));       \
1049
0
        }                                                                     \
1050
0
    }                                                                         \
Unexecuted instantiation: input.c:shf16_10LEToY_c
Unexecuted instantiation: input.c:shf16_12LEToY_c
1051
                                                                              \
1052
    static void shf16_ ## shift ## BEToY_c(uint8_t *dst,                      \
1053
                                           const uint8_t *src,                \
1054
                                           const uint8_t *unused1,            \
1055
                                           const uint8_t *unused2, int width, \
1056
                                           uint32_t *unused, void *opq)       \
1057
0
    {                                                                         \
1058
0
        int i;                                                                \
1059
0
        for (i = 0; i < width; i++) {                                         \
1060
0
            AV_WN16(dst + i * 2, AV_RB16(src + i * 2) >> (16 - shift));       \
1061
0
        }                                                                     \
1062
0
    }                                                                         \
Unexecuted instantiation: input.c:shf16_10BEToY_c
Unexecuted instantiation: input.c:shf16_12BEToY_c
1063
    shf16_uv_wrapper(shift)
1064
1065
shf16_wrapper(10)
1066
shf16_wrapper(12)
1067
1068
static void bgr24ToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2,
1069
                       int width, uint32_t *rgb2yuv, void *opq)
1070
0
{
1071
0
    int16_t *dst = (int16_t *)_dst;
1072
0
    int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1073
0
    int i;
1074
0
    for (i = 0; i < width; i++) {
1075
0
        int b = src[i * 3 + 0];
1076
0
        int g = src[i * 3 + 1];
1077
0
        int r = src[i * 3 + 2];
1078
1079
0
        dst[i] = ((ry*r + gy*g + by*b + (32<<(RGB2YUV_SHIFT-1)) + (1<<(RGB2YUV_SHIFT-7)))>>(RGB2YUV_SHIFT-6));
1080
0
    }
1081
0
}
1082
1083
static void bgr24ToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *src1,
1084
                        const uint8_t *src2, int width, uint32_t *rgb2yuv, void *opq)
1085
0
{
1086
0
    int16_t *dstU = (int16_t *)_dstU;
1087
0
    int16_t *dstV = (int16_t *)_dstV;
1088
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1089
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1090
0
    int i;
1091
0
    for (i = 0; i < width; i++) {
1092
0
        int b = src1[3 * i + 0];
1093
0
        int g = src1[3 * i + 1];
1094
0
        int r = src1[3 * i + 2];
1095
1096
0
        dstU[i] = (ru*r + gu*g + bu*b + (256<<(RGB2YUV_SHIFT-1)) + (1<<(RGB2YUV_SHIFT-7)))>>(RGB2YUV_SHIFT-6);
1097
0
        dstV[i] = (rv*r + gv*g + bv*b + (256<<(RGB2YUV_SHIFT-1)) + (1<<(RGB2YUV_SHIFT-7)))>>(RGB2YUV_SHIFT-6);
1098
0
    }
1099
0
    av_assert1(src1 == src2);
1100
0
}
1101
1102
static void bgr24ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *src1,
1103
                             const uint8_t *src2, int width, uint32_t *rgb2yuv, void *opq)
1104
0
{
1105
0
    int16_t *dstU = (int16_t *)_dstU;
1106
0
    int16_t *dstV = (int16_t *)_dstV;
1107
0
    int i;
1108
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1109
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1110
0
    for (i = 0; i < width; i++) {
1111
0
        int b = src1[6 * i + 0] + src1[6 * i + 3];
1112
0
        int g = src1[6 * i + 1] + src1[6 * i + 4];
1113
0
        int r = src1[6 * i + 2] + src1[6 * i + 5];
1114
1115
0
        dstU[i] = (ru*r + gu*g + bu*b + (256<<RGB2YUV_SHIFT) + (1<<(RGB2YUV_SHIFT-6)))>>(RGB2YUV_SHIFT-5);
1116
0
        dstV[i] = (rv*r + gv*g + bv*b + (256<<RGB2YUV_SHIFT) + (1<<(RGB2YUV_SHIFT-6)))>>(RGB2YUV_SHIFT-5);
1117
0
    }
1118
0
    av_assert1(src1 == src2);
1119
0
}
1120
1121
static void rgb24ToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width,
1122
                       uint32_t *rgb2yuv, void *opq)
1123
0
{
1124
0
    int16_t *dst = (int16_t *)_dst;
1125
0
    int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1126
0
    int i;
1127
0
    for (i = 0; i < width; i++) {
1128
0
        int r = src[i * 3 + 0];
1129
0
        int g = src[i * 3 + 1];
1130
0
        int b = src[i * 3 + 2];
1131
1132
0
        dst[i] = ((ry*r + gy*g + by*b + (32<<(RGB2YUV_SHIFT-1)) + (1<<(RGB2YUV_SHIFT-7)))>>(RGB2YUV_SHIFT-6));
1133
0
    }
1134
0
}
1135
1136
static void rgb24ToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *src1,
1137
                        const uint8_t *src2, int width, uint32_t *rgb2yuv, void *opq)
1138
0
{
1139
0
    int16_t *dstU = (int16_t *)_dstU;
1140
0
    int16_t *dstV = (int16_t *)_dstV;
1141
0
    int i;
1142
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1143
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1144
0
    av_assert1(src1 == src2);
1145
0
    for (i = 0; i < width; i++) {
1146
0
        int r = src1[3 * i + 0];
1147
0
        int g = src1[3 * i + 1];
1148
0
        int b = src1[3 * i + 2];
1149
1150
0
        dstU[i] = (ru*r + gu*g + bu*b + (256<<(RGB2YUV_SHIFT-1)) + (1<<(RGB2YUV_SHIFT-7)))>>(RGB2YUV_SHIFT-6);
1151
0
        dstV[i] = (rv*r + gv*g + bv*b + (256<<(RGB2YUV_SHIFT-1)) + (1<<(RGB2YUV_SHIFT-7)))>>(RGB2YUV_SHIFT-6);
1152
0
    }
1153
0
}
1154
1155
static void rgb24ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *src1,
1156
                             const uint8_t *src2, int width, uint32_t *rgb2yuv, void *opq)
1157
0
{
1158
0
    int16_t *dstU = (int16_t *)_dstU;
1159
0
    int16_t *dstV = (int16_t *)_dstV;
1160
0
    int i;
1161
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1162
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1163
0
    av_assert1(src1 == src2);
1164
0
    for (i = 0; i < width; i++) {
1165
0
        int r = src1[6 * i + 0] + src1[6 * i + 3];
1166
0
        int g = src1[6 * i + 1] + src1[6 * i + 4];
1167
0
        int b = src1[6 * i + 2] + src1[6 * i + 5];
1168
1169
0
        dstU[i] = (ru*r + gu*g + bu*b + (256<<RGB2YUV_SHIFT) + (1<<(RGB2YUV_SHIFT-6)))>>(RGB2YUV_SHIFT-5);
1170
0
        dstV[i] = (rv*r + gv*g + bv*b + (256<<RGB2YUV_SHIFT) + (1<<(RGB2YUV_SHIFT-6)))>>(RGB2YUV_SHIFT-5);
1171
0
    }
1172
0
}
1173
1174
static void planar_rgb_to_y(uint8_t *_dst, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opq)
1175
0
{
1176
0
    uint16_t *dst = (uint16_t *)_dst;
1177
0
    int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1178
0
    int i;
1179
0
    for (i = 0; i < width; i++) {
1180
0
        int g = src[0][i];
1181
0
        int b = src[1][i];
1182
0
        int r = src[2][i];
1183
1184
0
        dst[i] = (int)((unsigned)ry*r + (unsigned)gy*g + (unsigned)by*b + (0x801<<(RGB2YUV_SHIFT-7))) >> (RGB2YUV_SHIFT-6);
1185
0
    }
1186
0
}
1187
1188
static void planar_rgb_to_a(uint8_t *_dst, const uint8_t *src[4], int width, int32_t *unused, void *opq)
1189
0
{
1190
0
    uint16_t *dst = (uint16_t *)_dst;
1191
0
    int i;
1192
0
    for (i = 0; i < width; i++)
1193
0
        dst[i] = src[3][i] << 6;
1194
0
}
1195
1196
static void planar_rgb_to_uv(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opq)
1197
0
{
1198
0
    uint16_t *dstU = (uint16_t *)_dstU;
1199
0
    uint16_t *dstV = (uint16_t *)_dstV;
1200
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1201
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1202
0
    int i;
1203
0
    for (i = 0; i < width; i++) {
1204
0
        int g = src[0][i];
1205
0
        int b = src[1][i];
1206
0
        int r = src[2][i];
1207
1208
0
        dstU[i] = (int)((unsigned)ru*r + (unsigned)gu*g + (unsigned)bu*b + (0x4001<<(RGB2YUV_SHIFT-7))) >> (RGB2YUV_SHIFT-6);
1209
0
        dstV[i] = (int)((unsigned)rv*r + (unsigned)gv*g + (unsigned)bv*b + (0x4001<<(RGB2YUV_SHIFT-7))) >> (RGB2YUV_SHIFT-6);
1210
0
    }
1211
0
}
1212
1213
#define rdpx(src) \
1214
0
    (is_be ? AV_RB16(src) : AV_RL16(src))
1215
1216
#define shifted_planar_rgb16_to_y(rdpx_shift)                                                                  \
1217
    static av_always_inline void planar_rgb16_s ## rdpx_shift ## _to_y(uint8_t *_dst, const uint8_t *_src[4],  \
1218
                                                   int width, int bpc, int is_be, int32_t *rgb2yuv)            \
1219
0
    {                                                                                                          \
1220
0
        int i;                                                                                                 \
1221
0
        const uint16_t **src = (const uint16_t **)_src;                                                        \
1222
0
        uint16_t *dst        = (uint16_t *)_dst;                                                               \
1223
0
        int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];                              \
1224
0
        int shift = bpc < 16 ? bpc : 14;                                                                       \
1225
0
        for (i = 0; i < width; i++) {                                                                          \
1226
0
            int g = rdpx(src[0] + i) >> (16 - rdpx_shift);                                                     \
1227
0
            int b = rdpx(src[1] + i) >> (16 - rdpx_shift);                                                     \
1228
0
            int r = rdpx(src[2] + i) >> (16 - rdpx_shift);                                                     \
1229
0
                                                                                                               \
1230
0
            dst[i] = (int)((unsigned)ry*r + (unsigned)gy*g + (unsigned)by*b + (16 << (RGB2YUV_SHIFT + bpc - 8))                                   \
1231
0
                     + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14);                   \
1232
0
        }                                                                                                      \
1233
0
    }
Unexecuted instantiation: input.c:planar_rgb16_s16_to_y
Unexecuted instantiation: input.c:planar_rgb16_s10_to_y
Unexecuted instantiation: input.c:planar_rgb16_s12_to_y
1234
1235
#define shifted_planar_rgb16_to_a(rdpx_shift)                                                                  \
1236
    static av_always_inline void planar_rgb16_s ## rdpx_shift ## _to_a(uint8_t *_dst, const uint8_t *_src[4],  \
1237
                                                   int width, int bpc, int is_be, int32_t *rgb2yuv)            \
1238
0
    {                                                                                                          \
1239
0
        int i;                                                                                                 \
1240
0
        const uint16_t **src = (const uint16_t **)_src;                                                        \
1241
0
        uint16_t *dst        = (uint16_t *)_dst;                                                               \
1242
0
        int shift = (bpc < 16 ? bpc : 14) + 16 - rdpx_shift;                                                   \
1243
0
                                                                                                               \
1244
0
        for (i = 0; i < width; i++) {                                                                          \
1245
0
            dst[i] = rdpx(src[3] + i) << (14 - shift);                                                         \
1246
0
        }                                                                                                      \
1247
0
    }                                                                                                          \
1248
1249
#define shifted_planar_rgb16_to_uv(rdpx_shift)                                                                 \
1250
    static av_always_inline void planar_rgb16_s ## rdpx_shift ## _to_uv(uint8_t *_dstU, uint8_t *_dstV,        \
1251
                                                    const uint8_t *_src[4], int width,                         \
1252
                                                    int bpc, int is_be, int32_t *rgb2yuv)                      \
1253
0
    {                                                                                                          \
1254
0
        int i;                                                                                                 \
1255
0
        const uint16_t **src = (const uint16_t **)_src;                                                        \
1256
0
        uint16_t *dstU       = (uint16_t *)_dstU;                                                              \
1257
0
        uint16_t *dstV       = (uint16_t *)_dstV;                                                              \
1258
0
        int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];                              \
1259
0
        int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];                              \
1260
0
        int shift = bpc < 16 ? bpc : 14;                                                                       \
1261
0
        for (i = 0; i < width; i++) {                                                                          \
1262
0
            int g = rdpx(src[0] + i) >> (16 - rdpx_shift);                                                     \
1263
0
            int b = rdpx(src[1] + i) >> (16 - rdpx_shift);                                                     \
1264
0
            int r = rdpx(src[2] + i) >> (16 - rdpx_shift);                                                     \
1265
0
                                                                                                               \
1266
0
            dstU[i] = (int)((unsigned)ru*r + (unsigned)gu*g + (unsigned)bu*b + (128 << (RGB2YUV_SHIFT + bpc - 8))                                 \
1267
0
                      + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14);                  \
1268
0
            dstV[i] = (int)((unsigned)rv*r + (unsigned)gv*g + (unsigned)bv*b + (128 << (RGB2YUV_SHIFT + bpc - 8))                                 \
1269
0
                      + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14);                  \
1270
0
        }                                                                                                      \
1271
0
    }
Unexecuted instantiation: input.c:planar_rgb16_s16_to_uv
Unexecuted instantiation: input.c:planar_rgb16_s10_to_uv
Unexecuted instantiation: input.c:planar_rgb16_s12_to_uv
1272
1273
#define shifted_planar_rgb16_to_y_uv(rdpx_shift)   \
1274
    shifted_planar_rgb16_to_y(rdpx_shift)          \
1275
    shifted_planar_rgb16_to_uv(rdpx_shift)
1276
1277
#define shifted_planar_rgb16(rdpx_shift)     \
1278
    shifted_planar_rgb16_to_y_uv(rdpx_shift) \
1279
    shifted_planar_rgb16_to_a(rdpx_shift)
1280
1281
shifted_planar_rgb16(16)
1282
shifted_planar_rgb16_to_y_uv(12)
1283
shifted_planar_rgb16_to_y_uv(10)
1284
1285
#undef rdpx
1286
1287
0
#define rdpx(src) (is_be ? av_int2float(AV_RB32(src)): av_int2float(AV_RL32(src)))
1288
1289
static av_always_inline void planar_rgbf32_to_a(uint8_t *_dst, const uint8_t *_src[4], int width, int is_be, int32_t *rgb2yuv)
1290
0
{
1291
0
    int i;
1292
0
    const float **src = (const float **)_src;
1293
0
    uint16_t *dst        = (uint16_t *)_dst;
1294
1295
0
    for (i = 0; i < width; i++) {
1296
0
        dst[i] = lrintf(av_clipf(65535.0f * rdpx(src[3] + i), 0.0f, 65535.0f));
1297
0
    }
1298
0
}
1299
1300
static av_always_inline void planar_rgbf32_to_uv(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *_src[4], int width, int is_be, int32_t *rgb2yuv)
1301
0
{
1302
0
    int i;
1303
0
    const float **src = (const float **)_src;
1304
0
    uint16_t *dstU       = (uint16_t *)_dstU;
1305
0
    uint16_t *dstV       = (uint16_t *)_dstV;
1306
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1307
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1308
1309
0
    for (i = 0; i < width; i++) {
1310
0
        int g = lrintf(av_clipf(65535.0f * rdpx(src[0] + i), 0.0f, 65535.0f));
1311
0
        int b = lrintf(av_clipf(65535.0f * rdpx(src[1] + i), 0.0f, 65535.0f));
1312
0
        int r = lrintf(av_clipf(65535.0f * rdpx(src[2] + i), 0.0f, 65535.0f));
1313
1314
0
        dstU[i] = (int)((unsigned)ru*r + (unsigned)gu*g + (unsigned)bu*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1315
0
        dstV[i] = (int)((unsigned)rv*r + (unsigned)gv*g + (unsigned)bv*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1316
0
    }
1317
0
}
1318
1319
static av_always_inline void planar_rgbf32_to_y(uint8_t *_dst, const uint8_t *_src[4], int width, int is_be, int32_t *rgb2yuv)
1320
0
{
1321
0
    int i;
1322
0
    const float **src = (const float **)_src;
1323
0
    uint16_t *dst    = (uint16_t *)_dst;
1324
1325
0
    int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1326
1327
0
    for (i = 0; i < width; i++) {
1328
0
        int g = lrintf(av_clipf(65535.0f * rdpx(src[0] + i), 0.0f, 65535.0f));
1329
0
        int b = lrintf(av_clipf(65535.0f * rdpx(src[1] + i), 0.0f, 65535.0f));
1330
0
        int r = lrintf(av_clipf(65535.0f * rdpx(src[2] + i), 0.0f, 65535.0f));
1331
1332
0
        dst[i] = (int)((unsigned)ry*r + (unsigned)gy*g + (unsigned)by*b + (0x2001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1333
0
    }
1334
0
}
1335
1336
static av_always_inline void rgbf32_to_uv_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused1,
1337
                                            const uint8_t *_src, const uint8_t *unused2,
1338
                                            int width, int is_be, int32_t *rgb2yuv)
1339
0
{
1340
0
    int i;
1341
0
    const float *src = (const float *)_src;
1342
0
    uint16_t *dstU       = (uint16_t *)_dstU;
1343
0
    uint16_t *dstV       = (uint16_t *)_dstV;
1344
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1345
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1346
1347
0
    for (i = 0; i < width; i++) {
1348
0
        int r = lrintf(av_clipf(65535.0f * rdpx(&src[3*i]), 0.0f, 65535.0f));
1349
0
        int g = lrintf(av_clipf(65535.0f * rdpx(&src[3*i + 1]), 0.0f, 65535.0f));
1350
0
        int b = lrintf(av_clipf(65535.0f * rdpx(&src[3*i + 2]), 0.0f, 65535.0f));
1351
1352
0
        dstU[i] = (ru*r + gu*g + bu*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1353
0
        dstV[i] = (rv*r + gv*g + bv*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1354
0
    }
1355
0
}
1356
1357
static av_always_inline void rgbf32_to_uv_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused1,
1358
                                                 const uint8_t *_src, const uint8_t *unused2,
1359
                                                 int width, int is_be, int32_t *rgb2yuv)
1360
0
{
1361
0
    const float *src = (const float *) _src;
1362
0
    uint16_t *dstU   = (uint16_t *) _dstU;
1363
0
    uint16_t *dstV   = (uint16_t *) _dstV;
1364
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1365
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1366
1367
0
    for (int i = 0; i < width; i++) {
1368
0
        int r = (lrintf(av_clipf(65535.0f * rdpx(&src[6 * i + 0]), 0.0f, 65535.0f)) +
1369
0
                 lrintf(av_clipf(65535.0f * rdpx(&src[6 * i + 3]), 0.0f, 65535.0f))) >> 1;
1370
0
        int g = (lrintf(av_clipf(65535.0f * rdpx(&src[6 * i + 1]), 0.0f, 65535.0f)) +
1371
0
                 lrintf(av_clipf(65535.0f * rdpx(&src[6 * i + 4]), 0.0f, 65535.0f))) >> 1;
1372
0
        int b = (lrintf(av_clipf(65535.0f * rdpx(&src[6 * i + 2]), 0.0f, 65535.0f)) +
1373
0
                 lrintf(av_clipf(65535.0f * rdpx(&src[6 * i + 5]), 0.0f, 65535.0f))) >> 1;
1374
1375
0
        dstU[i] = (ru*r + gu*g + bu*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1376
0
        dstV[i] = (rv*r + gv*g + bv*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1377
0
    }
1378
0
}
1379
1380
static av_always_inline void rgbf32_to_y_c(uint8_t *_dst, const uint8_t *_src,
1381
                                           const uint8_t *unused1, const uint8_t *unused2,
1382
                                           int width, int is_be, int32_t *rgb2yuv)
1383
0
{
1384
0
    int i;
1385
0
    const float *src = (const float *)_src;
1386
0
    uint16_t *dst    = (uint16_t *)_dst;
1387
1388
0
    int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1389
1390
0
    for (i = 0; i < width; i++) {
1391
0
        int r = lrintf(av_clipf(65535.0f * rdpx(&src[3*i]), 0.0f, 65535.0f));
1392
0
        int g = lrintf(av_clipf(65535.0f * rdpx(&src[3*i + 1]), 0.0f, 65535.0f));
1393
0
        int b = lrintf(av_clipf(65535.0f * rdpx(&src[3*i + 2]), 0.0f, 65535.0f));
1394
1395
0
        dst[i] = (ry*r + gy*g + by*b + (0x2001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1396
0
    }
1397
0
}
1398
1399
static av_always_inline void grayf32ToY16_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1,
1400
                                            const uint8_t *unused2, int width, int is_be, uint32_t *unused)
1401
0
{
1402
0
    int i;
1403
0
    const float *src = (const float *)_src;
1404
0
    uint16_t *dst    = (uint16_t *)_dst;
1405
1406
0
    for (i = 0; i < width; ++i){
1407
0
        dst[i] = lrintf(av_clipf(65535.0f * rdpx(src + i), 0.0f,  65535.0f));
1408
0
    }
1409
0
}
1410
1411
static av_always_inline void read_yaf32_gray_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1,
1412
                                               const uint8_t *unused2, int width, int is_be, uint32_t *unused)
1413
0
{
1414
0
    int i;
1415
0
    const float *src = (const float *)_src;
1416
0
    uint16_t *dst    = (uint16_t *)_dst;
1417
1418
0
    for (i = 0; i < width; ++i)
1419
0
        dst[i] = lrintf(av_clipf(65535.0f * rdpx(src + i*2), 0.0f,  65535.0f));
1420
0
}
1421
1422
static av_always_inline void read_yaf32_alpha_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1,
1423
                                                const uint8_t *unused2, int width, int is_be, uint32_t *unused)
1424
0
{
1425
0
    int i;
1426
0
    const float *src = (const float *)_src;
1427
0
    uint16_t *dst    = (uint16_t *)_dst;
1428
1429
0
    for (i = 0; i < width; ++i)
1430
0
        dst[i] = lrintf(av_clipf(65535.0f * rdpx(src + i*2 + 1), 0.0f,  65535.0f));
1431
0
}
1432
1433
#undef rdpx
1434
1435
#define rgb9plus_planar_funcs_endian(nbits, endian_name, endian)                                    \
1436
static void planar_rgb##nbits##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4],              \
1437
0
                                                  int w, int32_t *rgb2yuv, void *opq)               \
1438
0
{                                                                                                   \
1439
0
    planar_rgb16_s16_to_y(dst, src, w, nbits, endian, rgb2yuv);                                     \
1440
0
}                                                                                                   \
Unexecuted instantiation: input.c:planar_rgb9le_to_y
Unexecuted instantiation: input.c:planar_rgb10le_to_y
Unexecuted instantiation: input.c:planar_rgb12le_to_y
Unexecuted instantiation: input.c:planar_rgb14le_to_y
Unexecuted instantiation: input.c:planar_rgb16le_to_y
Unexecuted instantiation: input.c:planar_rgb9be_to_y
Unexecuted instantiation: input.c:planar_rgb10be_to_y
Unexecuted instantiation: input.c:planar_rgb12be_to_y
Unexecuted instantiation: input.c:planar_rgb14be_to_y
Unexecuted instantiation: input.c:planar_rgb16be_to_y
1441
static void planar_rgb##nbits##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV,                    \
1442
                                                   const uint8_t *src[4], int w, int32_t *rgb2yuv,  \
1443
0
                                                   void *opq)                                       \
1444
0
{                                                                                                   \
1445
0
    planar_rgb16_s16_to_uv(dstU, dstV, src, w, nbits, endian, rgb2yuv);                             \
1446
0
}                                                                                                   \
Unexecuted instantiation: input.c:planar_rgb9le_to_uv
Unexecuted instantiation: input.c:planar_rgb10le_to_uv
Unexecuted instantiation: input.c:planar_rgb12le_to_uv
Unexecuted instantiation: input.c:planar_rgb14le_to_uv
Unexecuted instantiation: input.c:planar_rgb16le_to_uv
Unexecuted instantiation: input.c:planar_rgb9be_to_uv
Unexecuted instantiation: input.c:planar_rgb10be_to_uv
Unexecuted instantiation: input.c:planar_rgb12be_to_uv
Unexecuted instantiation: input.c:planar_rgb14be_to_uv
Unexecuted instantiation: input.c:planar_rgb16be_to_uv
1447
1448
#define rgb9plus_planar_transparency_funcs(nbits)                           \
1449
static void planar_rgb##nbits##le_to_a(uint8_t *dst, const uint8_t *src[4], \
1450
                                       int w, int32_t *rgb2yuv,             \
1451
0
                                       void *opq)                           \
1452
0
{                                                                           \
1453
0
    planar_rgb16_s16_to_a(dst, src, w, nbits, 0, rgb2yuv);                  \
1454
0
}                                                                           \
Unexecuted instantiation: input.c:planar_rgb10le_to_a
Unexecuted instantiation: input.c:planar_rgb12le_to_a
Unexecuted instantiation: input.c:planar_rgb14le_to_a
Unexecuted instantiation: input.c:planar_rgb16le_to_a
1455
static void planar_rgb##nbits##be_to_a(uint8_t *dst, const uint8_t *src[4], \
1456
                                       int w, int32_t *rgb2yuv,             \
1457
0
                                       void *opq)                           \
1458
0
{                                                                           \
1459
0
    planar_rgb16_s16_to_a(dst, src, w, nbits, 1, rgb2yuv);                  \
1460
0
}
Unexecuted instantiation: input.c:planar_rgb10be_to_a
Unexecuted instantiation: input.c:planar_rgb12be_to_a
Unexecuted instantiation: input.c:planar_rgb14be_to_a
Unexecuted instantiation: input.c:planar_rgb16be_to_a
1461
1462
#define rgb9plus_msb_planar_funcs_endian(nbits, endian_name, endian)                                   \
1463
static void msb_planar_rgb##nbits##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4],             \
1464
0
                                                      int w, int32_t *rgb2yuv, void *opq)              \
1465
0
{                                                                                                      \
1466
0
    planar_rgb16_s##nbits##_to_y(dst, src, w, nbits, endian, rgb2yuv);                                 \
1467
0
}                                                                                                      \
Unexecuted instantiation: input.c:msb_planar_rgb10le_to_y
Unexecuted instantiation: input.c:msb_planar_rgb12le_to_y
Unexecuted instantiation: input.c:msb_planar_rgb10be_to_y
Unexecuted instantiation: input.c:msb_planar_rgb12be_to_y
1468
static void msb_planar_rgb##nbits##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV,                   \
1469
                                                       const uint8_t *src[4], int w, int32_t *rgb2yuv, \
1470
0
                                                       void *opq)                                      \
1471
0
{                                                                                                      \
1472
0
    planar_rgb16_s##nbits##_to_uv(dstU, dstV, src, w, nbits, endian, rgb2yuv);                         \
1473
0
}
Unexecuted instantiation: input.c:msb_planar_rgb10le_to_uv
Unexecuted instantiation: input.c:msb_planar_rgb12le_to_uv
Unexecuted instantiation: input.c:msb_planar_rgb10be_to_uv
Unexecuted instantiation: input.c:msb_planar_rgb12be_to_uv
1474
1475
#define rgb9plus_planar_funcs(nbits)            \
1476
    rgb9plus_planar_funcs_endian(nbits, le, 0)  \
1477
    rgb9plus_planar_funcs_endian(nbits, be, 1)
1478
1479
#define rgb9plus_msb_planar_funcs(nbits)           \
1480
    rgb9plus_msb_planar_funcs_endian(nbits, le, 0) \
1481
    rgb9plus_msb_planar_funcs_endian(nbits, be, 1)
1482
1483
rgb9plus_planar_funcs(9)
1484
rgb9plus_planar_funcs(10)
1485
rgb9plus_planar_funcs(12)
1486
rgb9plus_planar_funcs(14)
1487
rgb9plus_planar_funcs(16)
1488
1489
rgb9plus_planar_transparency_funcs(10)
1490
rgb9plus_planar_transparency_funcs(12)
1491
rgb9plus_planar_transparency_funcs(14)
1492
rgb9plus_planar_transparency_funcs(16)
1493
1494
rgb9plus_msb_planar_funcs(10)
1495
rgb9plus_msb_planar_funcs(12)
1496
1497
#define rgbf32_funcs_endian(endian_name, endian)                                                    \
1498
static void planar_rgbf32##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4],                  \
1499
0
                                                  int w, int32_t *rgb2yuv, void *opq)               \
1500
0
{                                                                                                   \
1501
0
    planar_rgbf32_to_y(dst, src, w, endian, rgb2yuv);                                               \
1502
0
}                                                                                                   \
Unexecuted instantiation: input.c:planar_rgbf32le_to_y
Unexecuted instantiation: input.c:planar_rgbf32be_to_y
1503
static void planar_rgbf32##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV,                        \
1504
                                               const uint8_t *src[4], int w, int32_t *rgb2yuv,      \
1505
0
                                               void *opq)                                           \
1506
0
{                                                                                                   \
1507
0
    planar_rgbf32_to_uv(dstU, dstV, src, w, endian, rgb2yuv);                                       \
1508
0
}                                                                                                   \
Unexecuted instantiation: input.c:planar_rgbf32le_to_uv
Unexecuted instantiation: input.c:planar_rgbf32be_to_uv
1509
static void planar_rgbf32##endian_name##_to_a(uint8_t *dst, const uint8_t *src[4],                  \
1510
0
                                              int w, int32_t *rgb2yuv, void *opq)                   \
1511
0
{                                                                                                   \
1512
0
    planar_rgbf32_to_a(dst, src, w, endian, rgb2yuv);                                               \
1513
0
}                                                                                                   \
Unexecuted instantiation: input.c:planar_rgbf32le_to_a
Unexecuted instantiation: input.c:planar_rgbf32be_to_a
1514
static void rgbf32##endian_name##_to_y_c(uint8_t *dst, const uint8_t *src,                          \
1515
                                         const uint8_t *unused1, const uint8_t *unused2,            \
1516
0
                                         int w, uint32_t *rgb2yuv, void *opq)                       \
1517
0
{                                                                                                   \
1518
0
    rgbf32_to_y_c(dst, src, unused1, unused2, w, endian, rgb2yuv);                                  \
1519
0
}                                                                                                   \
Unexecuted instantiation: input.c:rgbf32le_to_y_c
Unexecuted instantiation: input.c:rgbf32be_to_y_c
1520
static void rgbf32##endian_name##_to_uv_c(uint8_t *dstU, uint8_t *dstV,                             \
1521
                                        const uint8_t *unused1,                                     \
1522
                                        const uint8_t *src, const uint8_t *unused2,                 \
1523
                                        int w, uint32_t *rgb2yuv,                                   \
1524
0
                                        void *opq)                                                  \
1525
0
{                                                                                                   \
1526
0
    rgbf32_to_uv_c(dstU, dstV, unused1, src, unused2, w, endian, rgb2yuv);                          \
1527
0
}                                                                                                   \
Unexecuted instantiation: input.c:rgbf32le_to_uv_c
Unexecuted instantiation: input.c:rgbf32be_to_uv_c
1528
static void rgbf32##endian_name##_to_uv_half_c(uint8_t *dstU, uint8_t *dstV,                        \
1529
                                               const uint8_t *unused1,                              \
1530
                                               const uint8_t *src, const uint8_t *unused2,          \
1531
                                               int w, uint32_t *rgb2yuv,                            \
1532
0
                                               void *opq)                                           \
1533
0
{                                                                                                   \
1534
0
    rgbf32_to_uv_half_c(dstU, dstV, unused1, src, unused2, w, endian, rgb2yuv);                     \
1535
0
}                                                                                                   \
Unexecuted instantiation: input.c:rgbf32be_to_uv_half_c
Unexecuted instantiation: input.c:rgbf32le_to_uv_half_c
1536
static void grayf32##endian_name##ToY16_c(uint8_t *dst, const uint8_t *src,                         \
1537
                                          const uint8_t *unused1, const uint8_t *unused2,           \
1538
0
                                          int width, uint32_t *unused, void *opq)                   \
1539
0
{                                                                                                   \
1540
0
    grayf32ToY16_c(dst, src, unused1, unused2, width, endian, unused);                              \
1541
0
}                                                                                                   \
Unexecuted instantiation: input.c:grayf32leToY16_c
Unexecuted instantiation: input.c:grayf32beToY16_c
1542
static void read_yaf32##endian_name##_gray_c(uint8_t *dst, const uint8_t *src,                      \
1543
                                              const uint8_t *unused1, const uint8_t *unused2,       \
1544
0
                                              int width, uint32_t *unused, void *opq)               \
1545
0
{                                                                                                   \
1546
0
    read_yaf32_gray_c(dst, src, unused1, unused2, width, endian, unused);                           \
1547
0
}                                                                                                   \
Unexecuted instantiation: input.c:read_yaf32le_gray_c
Unexecuted instantiation: input.c:read_yaf32be_gray_c
1548
static void read_yaf32##endian_name##_alpha_c(uint8_t *dst, const uint8_t *src,                     \
1549
                                              const uint8_t *unused1, const uint8_t *unused2,       \
1550
0
                                              int width, uint32_t *unused, void *opq)               \
1551
0
{                                                                                                   \
1552
0
    read_yaf32_alpha_c(dst, src, unused1, unused2, width, endian, unused);                          \
1553
0
}
Unexecuted instantiation: input.c:read_yaf32le_alpha_c
Unexecuted instantiation: input.c:read_yaf32be_alpha_c
1554
1555
rgbf32_funcs_endian(le, 0)
1556
rgbf32_funcs_endian(be, 1)
1557
1558
0
#define rdpx(src) av_int2float(half2float(is_be ? AV_RB16(&src) : AV_RL16(&src), h2f_tbl))
1559
0
#define rdpx2(src) av_int2float(half2float(is_be ? AV_RB16(src) : AV_RL16(src), h2f_tbl))
1560
1561
static av_always_inline void planar_rgbf16_to_a(uint8_t *dst, const uint8_t *src[4], int width, int is_be, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1562
0
{
1563
0
    int i;
1564
1565
0
    for (i = 0; i < width; i++) {
1566
0
        AV_WN16(dst + 2*i, lrintf(av_clipf(65535.0f * rdpx2(src[3] + 2*i), 0.0f, 65535.0f)));
1567
0
    }
1568
0
}
1569
1570
static av_always_inline void planar_rgbf16_to_uv(uint8_t *dstU, uint8_t *dstV, const uint8_t *src[4], int width, int is_be, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1571
0
{
1572
0
    int i;
1573
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1574
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1575
1576
0
    for (i = 0; i < width; i++) {
1577
0
        int g = lrintf(av_clipf(65535.0f * rdpx2(src[0] + 2*i), 0.0f, 65535.0f));
1578
0
        int b = lrintf(av_clipf(65535.0f * rdpx2(src[1] + 2*i), 0.0f, 65535.0f));
1579
0
        int r = lrintf(av_clipf(65535.0f * rdpx2(src[2] + 2*i), 0.0f, 65535.0f));
1580
1581
0
        AV_WN16(dstU + 2*i, (ru*r + gu*g + bu*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT);
1582
0
        AV_WN16(dstV + 2*i, (rv*r + gv*g + bv*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT);
1583
0
    }
1584
0
}
1585
1586
static av_always_inline void planar_rgbf16_to_y(uint8_t *dst, const uint8_t *src[4], int width, int is_be, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1587
0
{
1588
0
    int i;
1589
1590
0
    int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1591
1592
0
    for (i = 0; i < width; i++) {
1593
0
        int g = lrintf(av_clipf(65535.0f * rdpx2(src[0] + 2*i), 0.0f, 65535.0f));
1594
0
        int b = lrintf(av_clipf(65535.0f * rdpx2(src[1] + 2*i), 0.0f, 65535.0f));
1595
0
        int r = lrintf(av_clipf(65535.0f * rdpx2(src[2] + 2*i), 0.0f, 65535.0f));
1596
1597
0
        AV_WN16(dst + 2*i, (ry*r + gy*g + by*b + (0x2001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT);
1598
0
    }
1599
0
}
1600
1601
static av_always_inline void grayf16ToY16_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1,
1602
                                            const uint8_t *unused2, int width, int is_be, uint32_t *unused, Half2FloatTables *h2f_tbl)
1603
0
{
1604
0
    int i;
1605
1606
0
    for (i = 0; i < width; ++i){
1607
0
        AV_WN16(dst + 2*i, lrintf(av_clipf(65535.0f * rdpx2(src + 2*i), 0.0f,  65535.0f)));
1608
0
    }
1609
0
}
1610
1611
static av_always_inline void read_yaf16_gray_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1,
1612
                                               const uint8_t *unused2, int width, int is_be, uint32_t *unused, Half2FloatTables *h2f_tbl)
1613
0
{
1614
0
    uint16_t *dst = (uint16_t *)_dst;
1615
1616
0
    for (int i = 0; i < width; i++)
1617
0
        dst[i] = lrintf(av_clipf(65535.0f * rdpx2(src + 4*i), 0.0f,  65535.0f));
1618
0
}
1619
1620
static av_always_inline void read_yaf16_alpha_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1,
1621
                                               const uint8_t *unused2, int width, int is_be, uint32_t *unused, Half2FloatTables *h2f_tbl)
1622
0
{
1623
0
    uint16_t *dst = (uint16_t *)_dst;
1624
1625
0
    for (int i = 0; i < width; i++)
1626
0
        dst[i] = lrintf(av_clipf(65535.0f * rdpx2(src + 4*i + 2), 0.0f,  65535.0f));
1627
0
}
1628
1629
static av_always_inline void rgbaf16ToUV_half_endian(uint16_t *dstU, uint16_t *dstV, int is_be,
1630
                                                     const uint16_t *src, int width,
1631
                                                     int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1632
0
{
1633
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1634
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1635
0
    int i;
1636
0
    for (i = 0; i < width; i++) {
1637
0
        int r = (lrintf(av_clipf(65535.0f * rdpx(src[i*8+0]), 0.0f, 65535.0f)) +
1638
0
                 lrintf(av_clipf(65535.0f * rdpx(src[i*8+4]), 0.0f, 65535.0f))) >> 1;
1639
0
        int g = (lrintf(av_clipf(65535.0f * rdpx(src[i*8+1]), 0.0f, 65535.0f)) +
1640
0
                 lrintf(av_clipf(65535.0f * rdpx(src[i*8+5]), 0.0f, 65535.0f))) >> 1;
1641
0
        int b = (lrintf(av_clipf(65535.0f * rdpx(src[i*8+2]), 0.0f, 65535.0f)) +
1642
0
                 lrintf(av_clipf(65535.0f * rdpx(src[i*8+6]), 0.0f, 65535.0f))) >> 1;
1643
1644
0
        dstU[i] = (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1645
0
        dstV[i] = (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1646
0
    }
1647
0
}
1648
1649
static av_always_inline void rgbaf16ToUV_endian(uint16_t *dstU, uint16_t *dstV, int is_be,
1650
                                                const uint16_t *src, int width,
1651
                                                int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1652
0
{
1653
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1654
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1655
0
    int i;
1656
0
    for (i = 0; i < width; i++) {
1657
0
        int r = lrintf(av_clipf(65535.0f * rdpx(src[i*4+0]), 0.0f, 65535.0f));
1658
0
        int g = lrintf(av_clipf(65535.0f * rdpx(src[i*4+1]), 0.0f, 65535.0f));
1659
0
        int b = lrintf(av_clipf(65535.0f * rdpx(src[i*4+2]), 0.0f, 65535.0f));
1660
1661
0
        dstU[i] = (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1662
0
        dstV[i] = (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1663
0
    }
1664
0
}
1665
1666
static av_always_inline void rgbaf16ToY_endian(uint16_t *dst, const uint16_t *src, int is_be,
1667
                                               int width, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1668
0
{
1669
0
    int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1670
0
    int i;
1671
0
    for (i = 0; i < width; i++) {
1672
0
        int r = lrintf(av_clipf(65535.0f * rdpx(src[i*4+0]), 0.0f, 65535.0f));
1673
0
        int g = lrintf(av_clipf(65535.0f * rdpx(src[i*4+1]), 0.0f, 65535.0f));
1674
0
        int b = lrintf(av_clipf(65535.0f * rdpx(src[i*4+2]), 0.0f, 65535.0f));
1675
1676
0
        dst[i] = (ry*r + gy*g + by*b + (0x2001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1677
0
    }
1678
0
}
1679
1680
static av_always_inline void rgbaf16ToA_endian(uint16_t *dst, const uint16_t *src, int is_be,
1681
                                               int width, Half2FloatTables *h2f_tbl)
1682
0
{
1683
0
    int i;
1684
0
    for (i=0; i<width; i++) {
1685
0
        dst[i] = lrintf(av_clipf(65535.0f * rdpx(src[i*4+3]), 0.0f, 65535.0f));
1686
0
    }
1687
0
}
1688
1689
static av_always_inline void rgbf16ToUV_half_endian(uint16_t *dstU, uint16_t *dstV, int is_be,
1690
                                                    const uint16_t *src, int width,
1691
                                                    int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1692
0
{
1693
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1694
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1695
0
    int i;
1696
0
    for (i = 0; i < width; i++) {
1697
0
        int r = (lrintf(av_clipf(65535.0f * rdpx(src[i*6+0]), 0.0f, 65535.0f)) +
1698
0
                 lrintf(av_clipf(65535.0f * rdpx(src[i*6+3]), 0.0f, 65535.0f))) >> 1;
1699
0
        int g = (lrintf(av_clipf(65535.0f * rdpx(src[i*6+1]), 0.0f, 65535.0f)) +
1700
0
                 lrintf(av_clipf(65535.0f * rdpx(src[i*6+4]), 0.0f, 65535.0f))) >> 1;
1701
0
        int b = (lrintf(av_clipf(65535.0f * rdpx(src[i*6+2]), 0.0f, 65535.0f)) +
1702
0
                 lrintf(av_clipf(65535.0f * rdpx(src[i*6+5]), 0.0f, 65535.0f))) >> 1;
1703
1704
0
        dstU[i] = (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1705
0
        dstV[i] = (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1706
0
    }
1707
0
}
1708
1709
static av_always_inline void rgbf16ToUV_endian(uint16_t *dstU, uint16_t *dstV, int is_be,
1710
                                               const uint16_t *src, int width,
1711
                                               int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1712
0
{
1713
0
    int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1714
0
    int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1715
0
    int i;
1716
0
    for (i = 0; i < width; i++) {
1717
0
        int r = lrintf(av_clipf(65535.0f * rdpx(src[i*3+0]), 0.0f, 65535.0f));
1718
0
        int g = lrintf(av_clipf(65535.0f * rdpx(src[i*3+1]), 0.0f, 65535.0f));
1719
0
        int b = lrintf(av_clipf(65535.0f * rdpx(src[i*3+2]), 0.0f, 65535.0f));
1720
1721
0
        dstU[i] = (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1722
0
        dstV[i] = (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1723
0
    }
1724
0
}
1725
1726
static av_always_inline void rgbf16ToY_endian(uint16_t *dst, const uint16_t *src, int is_be,
1727
                                              int width, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1728
0
{
1729
0
    int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1730
0
    int i;
1731
0
    for (i = 0; i < width; i++) {
1732
0
        int r = lrintf(av_clipf(65535.0f * rdpx(src[i*3+0]), 0.0f, 65535.0f));
1733
0
        int g = lrintf(av_clipf(65535.0f * rdpx(src[i*3+1]), 0.0f, 65535.0f));
1734
0
        int b = lrintf(av_clipf(65535.0f * rdpx(src[i*3+2]), 0.0f, 65535.0f));
1735
1736
0
        dst[i] = (ry*r + gy*g + by*b + (0x2001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1737
0
    }
1738
0
}
1739
1740
#undef rdpx
1741
1742
#define rgbaf16_funcs_endian(endian_name, endian)                                                         \
1743
static void planar_rgbf16##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4],                  \
1744
0
                                                  int w, int32_t *rgb2yuv, void *opq)               \
1745
0
{                                                                                                   \
1746
0
    planar_rgbf16_to_y(dst, src, w, endian, rgb2yuv, opq);                                          \
1747
0
}                                                                                                   \
Unexecuted instantiation: input.c:planar_rgbf16le_to_y
Unexecuted instantiation: input.c:planar_rgbf16be_to_y
1748
static void planar_rgbf16##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV,                        \
1749
                                               const uint8_t *src[4], int w, int32_t *rgb2yuv,      \
1750
0
                                               void *opq)                                           \
1751
0
{                                                                                                   \
1752
0
    planar_rgbf16_to_uv(dstU, dstV, src, w, endian, rgb2yuv, opq);                                  \
1753
0
}                                                                                                   \
Unexecuted instantiation: input.c:planar_rgbf16le_to_uv
Unexecuted instantiation: input.c:planar_rgbf16be_to_uv
1754
static void planar_rgbf16##endian_name##_to_a(uint8_t *dst, const uint8_t *src[4],                  \
1755
0
                                              int w, int32_t *rgb2yuv, void *opq)                   \
1756
0
{                                                                                                   \
1757
0
    planar_rgbf16_to_a(dst, src, w, endian, rgb2yuv, opq);                                          \
1758
0
}                                                                                                   \
Unexecuted instantiation: input.c:planar_rgbf16le_to_a
Unexecuted instantiation: input.c:planar_rgbf16be_to_a
1759
static void grayf16##endian_name##ToY16_c(uint8_t *dst, const uint8_t *src,                         \
1760
                                          const uint8_t *unused1, const uint8_t *unused2,           \
1761
0
                                          int width, uint32_t *unused, void *opq)                   \
1762
0
{                                                                                                   \
1763
0
    grayf16ToY16_c(dst, src, unused1, unused2, width, endian, unused, opq);                         \
1764
0
}                                                                                                   \
Unexecuted instantiation: input.c:grayf16leToY16_c
Unexecuted instantiation: input.c:grayf16beToY16_c
1765
static void read_yaf16##endian_name##_gray_c(uint8_t *dst, const uint8_t *src,                      \
1766
                                            const uint8_t *unused1, const uint8_t *unused2,         \
1767
0
                                            int width, uint32_t *unused, void *opq)                 \
1768
0
{                                                                                                   \
1769
0
    read_yaf16_gray_c(dst, src, unused1, unused2, width, endian, unused, opq);                      \
1770
0
}                                                                                                   \
Unexecuted instantiation: input.c:read_yaf16le_gray_c
Unexecuted instantiation: input.c:read_yaf16be_gray_c
1771
static void read_yaf16##endian_name##_alpha_c(uint8_t *dst, const uint8_t *src,                     \
1772
                                              const uint8_t *unused1, const uint8_t *unused2,       \
1773
0
                                              int width, uint32_t *unused, void *opq)               \
1774
0
{                                                                                                   \
1775
0
    read_yaf16_alpha_c(dst, src, unused1, unused2, width, endian, unused, opq);                     \
1776
0
}                                                                                                   \
Unexecuted instantiation: input.c:read_yaf16le_alpha_c
Unexecuted instantiation: input.c:read_yaf16be_alpha_c
1777
                                                                                                    \
1778
static void rgbaf16##endian_name##ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused,      \
1779
                                              const uint8_t *src1, const uint8_t *src2,                   \
1780
0
                                              int width, uint32_t *_rgb2yuv, void *opq)                   \
1781
0
{                                                                                                         \
1782
0
    const uint16_t *src = (const uint16_t*)src1;                                                          \
1783
0
    uint16_t *dstU = (uint16_t*)_dstU;                                                                    \
1784
0
    uint16_t *dstV = (uint16_t*)_dstV;                                                                    \
1785
0
    int32_t *rgb2yuv = (int32_t*)_rgb2yuv;                                                                \
1786
0
    av_assert1(src1==src2);                                                                               \
1787
0
    rgbaf16ToUV_half_endian(dstU, dstV, endian, src, width, rgb2yuv, opq);                                \
1788
0
}                                                                                                         \
Unexecuted instantiation: input.c:rgbaf16beToUV_half_c
Unexecuted instantiation: input.c:rgbaf16leToUV_half_c
1789
static void rgbaf16##endian_name##ToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused,           \
1790
                                         const uint8_t *src1, const uint8_t *src2,                        \
1791
0
                                         int width, uint32_t *_rgb2yuv, void *opq)                        \
1792
0
{                                                                                                         \
1793
0
    const uint16_t *src = (const uint16_t*)src1;                                                          \
1794
0
    uint16_t *dstU = (uint16_t*)_dstU;                                                                    \
1795
0
    uint16_t *dstV = (uint16_t*)_dstV;                                                                    \
1796
0
    int32_t *rgb2yuv = (int32_t*)_rgb2yuv;                                                                \
1797
0
    av_assert1(src1==src2);                                                                               \
1798
0
    rgbaf16ToUV_endian(dstU, dstV, endian, src, width, rgb2yuv, opq);                                \
1799
0
}                                                                                                         \
Unexecuted instantiation: input.c:rgbaf16beToUV_c
Unexecuted instantiation: input.c:rgbaf16leToUV_c
1800
static void rgbaf16##endian_name##ToY_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused0,       \
1801
0
                                        const uint8_t *unused1, int width, uint32_t *_rgb2yuv, void *opq) \
1802
0
{                                                                                                         \
1803
0
    const uint16_t *src = (const uint16_t*)_src;                                                          \
1804
0
    uint16_t *dst = (uint16_t*)_dst;                                                                      \
1805
0
    int32_t *rgb2yuv = (int32_t*)_rgb2yuv;                                                                \
1806
0
    rgbaf16ToY_endian(dst, src, endian, width, rgb2yuv, opq);                                             \
1807
0
}                                                                                                         \
Unexecuted instantiation: input.c:rgbaf16beToY_c
Unexecuted instantiation: input.c:rgbaf16leToY_c
1808
static void rgbaf16##endian_name##ToA_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused0,       \
1809
0
                                        const uint8_t *unused1, int width, uint32_t *unused2, void *opq)  \
1810
0
{                                                                                                         \
1811
0
    const uint16_t *src = (const uint16_t*)_src;                                                          \
1812
0
    uint16_t *dst = (uint16_t*)_dst;                                                                      \
1813
0
    rgbaf16ToA_endian(dst, src, endian, width, opq);                                                      \
1814
0
}                                                                                                         \
Unexecuted instantiation: input.c:rgbaf16beToA_c
Unexecuted instantiation: input.c:rgbaf16leToA_c
1815
static void rgbf16##endian_name##ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused,       \
1816
                                              const uint8_t *src1, const uint8_t *src2,                   \
1817
0
                                              int width, uint32_t *_rgb2yuv, void *opq)                   \
1818
0
{                                                                                                         \
1819
0
    const uint16_t *src = (const uint16_t*)src1;                                                          \
1820
0
    uint16_t *dstU = (uint16_t*)_dstU;                                                                    \
1821
0
    uint16_t *dstV = (uint16_t*)_dstV;                                                                    \
1822
0
    int32_t *rgb2yuv = (int32_t*)_rgb2yuv;                                                                \
1823
0
    av_assert1(src1==src2);                                                                               \
1824
0
    rgbf16ToUV_half_endian(dstU, dstV, endian, src, width, rgb2yuv, opq);                                 \
1825
0
}                                                                                                         \
Unexecuted instantiation: input.c:rgbf16beToUV_half_c
Unexecuted instantiation: input.c:rgbf16leToUV_half_c
1826
static void rgbf16##endian_name##ToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused,            \
1827
                                         const uint8_t *src1, const uint8_t *src2,                        \
1828
0
                                         int width, uint32_t *_rgb2yuv, void *opq)                        \
1829
0
{                                                                                                         \
1830
0
    const uint16_t *src = (const uint16_t*)src1;                                                          \
1831
0
    uint16_t *dstU = (uint16_t*)_dstU;                                                                    \
1832
0
    uint16_t *dstV = (uint16_t*)_dstV;                                                                    \
1833
0
    int32_t *rgb2yuv = (int32_t*)_rgb2yuv;                                                                \
1834
0
    av_assert1(src1==src2);                                                                               \
1835
0
    rgbf16ToUV_endian(dstU, dstV, endian, src, width, rgb2yuv, opq);                                      \
1836
0
}                                                                                                         \
Unexecuted instantiation: input.c:rgbf16beToUV_c
Unexecuted instantiation: input.c:rgbf16leToUV_c
1837
static void rgbf16##endian_name##ToY_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused0,        \
1838
0
                                        const uint8_t *unused1, int width, uint32_t *_rgb2yuv, void *opq) \
1839
0
{                                                                                                         \
1840
0
    const uint16_t *src = (const uint16_t*)_src;                                                          \
1841
0
    uint16_t *dst = (uint16_t*)_dst;                                                                      \
1842
0
    int32_t *rgb2yuv = (int32_t*)_rgb2yuv;                                                                \
1843
0
    rgbf16ToY_endian(dst, src, endian, width, rgb2yuv, opq);                                              \
1844
0
}                                                                                                         \
Unexecuted instantiation: input.c:rgbf16beToY_c
Unexecuted instantiation: input.c:rgbf16leToY_c
1845
1846
rgbaf16_funcs_endian(le, 0)
1847
rgbaf16_funcs_endian(be, 1)
1848
1849
av_cold void ff_sws_init_input_funcs(SwsInternal *c,
1850
                                     planar1_YV12_fn *lumToYV12,
1851
                                     planar1_YV12_fn *alpToYV12,
1852
                                     planar2_YV12_fn *chrToYV12,
1853
                                     planarX_YV12_fn *readLumPlanar,
1854
                                     planarX_YV12_fn *readAlpPlanar,
1855
                                     planarX2_YV12_fn *readChrPlanar)
1856
0
{
1857
0
    enum AVPixelFormat srcFormat = c->opts.src_format;
1858
1859
0
    *chrToYV12 = NULL;
1860
0
    switch (srcFormat) {
1861
0
    case AV_PIX_FMT_YUYV422:
1862
0
        *chrToYV12 = yuy2ToUV_c;
1863
0
        break;
1864
0
    case AV_PIX_FMT_YVYU422:
1865
0
        *chrToYV12 = yvy2ToUV_c;
1866
0
        break;
1867
0
    case AV_PIX_FMT_UYVY422:
1868
0
        *chrToYV12 = uyvyToUV_c;
1869
0
        break;
1870
0
    case AV_PIX_FMT_UYYVYY411:
1871
0
        *chrToYV12 = uyyvyyToUV_c;
1872
0
        break;
1873
0
    case AV_PIX_FMT_VYU444:
1874
0
        *chrToYV12 = vyuToUV_c;
1875
0
        break;
1876
0
    case AV_PIX_FMT_NV12:
1877
0
    case AV_PIX_FMT_NV16:
1878
0
    case AV_PIX_FMT_NV24:
1879
0
        *chrToYV12 = nv12ToUV_c;
1880
0
        break;
1881
0
    case AV_PIX_FMT_NV21:
1882
0
    case AV_PIX_FMT_NV42:
1883
0
        *chrToYV12 = nv21ToUV_c;
1884
0
        break;
1885
0
    case AV_PIX_FMT_RGB8:
1886
0
    case AV_PIX_FMT_BGR8:
1887
0
    case AV_PIX_FMT_PAL8:
1888
0
    case AV_PIX_FMT_BGR4_BYTE:
1889
0
    case AV_PIX_FMT_RGB4_BYTE:
1890
0
        *chrToYV12 = palToUV_c;
1891
0
        break;
1892
0
    case AV_PIX_FMT_GBRP9LE:
1893
0
        *readChrPlanar = planar_rgb9le_to_uv;
1894
0
        break;
1895
0
    case AV_PIX_FMT_GBRAP10LE:
1896
0
    case AV_PIX_FMT_GBRP10LE:
1897
0
        *readChrPlanar = planar_rgb10le_to_uv;
1898
0
        break;
1899
0
    case AV_PIX_FMT_GBRAP12LE:
1900
0
    case AV_PIX_FMT_GBRP12LE:
1901
0
        *readChrPlanar = planar_rgb12le_to_uv;
1902
0
        break;
1903
0
    case AV_PIX_FMT_GBRAP14LE:
1904
0
    case AV_PIX_FMT_GBRP14LE:
1905
0
        *readChrPlanar = planar_rgb14le_to_uv;
1906
0
        break;
1907
0
    case AV_PIX_FMT_GBRAP16LE:
1908
0
    case AV_PIX_FMT_GBRP16LE:
1909
0
        *readChrPlanar = planar_rgb16le_to_uv;
1910
0
        break;
1911
0
    case AV_PIX_FMT_GBRAPF32LE:
1912
0
    case AV_PIX_FMT_GBRPF32LE:
1913
0
        *readChrPlanar = planar_rgbf32le_to_uv;
1914
0
        break;
1915
0
    case AV_PIX_FMT_GBRAPF16LE:
1916
0
    case AV_PIX_FMT_GBRPF16LE:
1917
0
        *readChrPlanar = planar_rgbf16le_to_uv;
1918
0
        break;
1919
0
    case AV_PIX_FMT_GBRP10MSBLE:
1920
0
        *readChrPlanar = msb_planar_rgb10le_to_uv;
1921
0
        break;
1922
0
    case AV_PIX_FMT_GBRP12MSBLE:
1923
0
        *readChrPlanar = msb_planar_rgb12le_to_uv;
1924
0
        break;
1925
0
    case AV_PIX_FMT_GBRP9BE:
1926
0
        *readChrPlanar = planar_rgb9be_to_uv;
1927
0
        break;
1928
0
    case AV_PIX_FMT_GBRAP10BE:
1929
0
    case AV_PIX_FMT_GBRP10BE:
1930
0
        *readChrPlanar = planar_rgb10be_to_uv;
1931
0
        break;
1932
0
    case AV_PIX_FMT_GBRAP12BE:
1933
0
    case AV_PIX_FMT_GBRP12BE:
1934
0
        *readChrPlanar = planar_rgb12be_to_uv;
1935
0
        break;
1936
0
    case AV_PIX_FMT_GBRAP14BE:
1937
0
    case AV_PIX_FMT_GBRP14BE:
1938
0
        *readChrPlanar = planar_rgb14be_to_uv;
1939
0
        break;
1940
0
    case AV_PIX_FMT_GBRAP16BE:
1941
0
    case AV_PIX_FMT_GBRP16BE:
1942
0
        *readChrPlanar = planar_rgb16be_to_uv;
1943
0
        break;
1944
0
    case AV_PIX_FMT_GBRAPF32BE:
1945
0
    case AV_PIX_FMT_GBRPF32BE:
1946
0
        *readChrPlanar = planar_rgbf32be_to_uv;
1947
0
        break;
1948
0
    case AV_PIX_FMT_GBRAPF16BE:
1949
0
    case AV_PIX_FMT_GBRPF16BE:
1950
0
        *readChrPlanar = planar_rgbf16be_to_uv;
1951
0
        break;
1952
0
    case AV_PIX_FMT_GBRP10MSBBE:
1953
0
        *readChrPlanar = msb_planar_rgb10be_to_uv;
1954
0
        break;
1955
0
    case AV_PIX_FMT_GBRP12MSBBE:
1956
0
        *readChrPlanar = msb_planar_rgb12be_to_uv;
1957
0
        break;
1958
0
    case AV_PIX_FMT_GBRAP:
1959
0
    case AV_PIX_FMT_GBRP:
1960
0
        *readChrPlanar = planar_rgb_to_uv;
1961
0
        break;
1962
#if HAVE_BIGENDIAN
1963
    case AV_PIX_FMT_YUV420P9LE:
1964
    case AV_PIX_FMT_YUV422P9LE:
1965
    case AV_PIX_FMT_YUV444P9LE:
1966
    case AV_PIX_FMT_YUV420P10LE:
1967
    case AV_PIX_FMT_YUV422P10LE:
1968
    case AV_PIX_FMT_YUV440P10LE:
1969
    case AV_PIX_FMT_YUV444P10LE:
1970
    case AV_PIX_FMT_YUV420P12LE:
1971
    case AV_PIX_FMT_YUV422P12LE:
1972
    case AV_PIX_FMT_YUV440P12LE:
1973
    case AV_PIX_FMT_YUV444P12LE:
1974
    case AV_PIX_FMT_YUV420P14LE:
1975
    case AV_PIX_FMT_YUV422P14LE:
1976
    case AV_PIX_FMT_YUV444P14LE:
1977
    case AV_PIX_FMT_YUV420P16LE:
1978
    case AV_PIX_FMT_YUV422P16LE:
1979
    case AV_PIX_FMT_YUV444P16LE:
1980
1981
    case AV_PIX_FMT_YUVA420P9LE:
1982
    case AV_PIX_FMT_YUVA422P9LE:
1983
    case AV_PIX_FMT_YUVA444P9LE:
1984
    case AV_PIX_FMT_YUVA420P10LE:
1985
    case AV_PIX_FMT_YUVA422P10LE:
1986
    case AV_PIX_FMT_YUVA444P10LE:
1987
    case AV_PIX_FMT_YUVA422P12LE:
1988
    case AV_PIX_FMT_YUVA444P12LE:
1989
    case AV_PIX_FMT_YUVA420P16LE:
1990
    case AV_PIX_FMT_YUVA422P16LE:
1991
    case AV_PIX_FMT_YUVA444P16LE:
1992
        *chrToYV12 = bswap16UV_c;
1993
        break;
1994
#else
1995
0
    case AV_PIX_FMT_YUV420P9BE:
1996
0
    case AV_PIX_FMT_YUV422P9BE:
1997
0
    case AV_PIX_FMT_YUV444P9BE:
1998
0
    case AV_PIX_FMT_YUV420P10BE:
1999
0
    case AV_PIX_FMT_YUV422P10BE:
2000
0
    case AV_PIX_FMT_YUV440P10BE:
2001
0
    case AV_PIX_FMT_YUV444P10BE:
2002
0
    case AV_PIX_FMT_YUV420P12BE:
2003
0
    case AV_PIX_FMT_YUV422P12BE:
2004
0
    case AV_PIX_FMT_YUV440P12BE:
2005
0
    case AV_PIX_FMT_YUV444P12BE:
2006
0
    case AV_PIX_FMT_YUV420P14BE:
2007
0
    case AV_PIX_FMT_YUV422P14BE:
2008
0
    case AV_PIX_FMT_YUV444P14BE:
2009
0
    case AV_PIX_FMT_YUV420P16BE:
2010
0
    case AV_PIX_FMT_YUV422P16BE:
2011
0
    case AV_PIX_FMT_YUV444P16BE:
2012
2013
0
    case AV_PIX_FMT_YUVA420P9BE:
2014
0
    case AV_PIX_FMT_YUVA422P9BE:
2015
0
    case AV_PIX_FMT_YUVA444P9BE:
2016
0
    case AV_PIX_FMT_YUVA420P10BE:
2017
0
    case AV_PIX_FMT_YUVA422P10BE:
2018
0
    case AV_PIX_FMT_YUVA444P10BE:
2019
0
    case AV_PIX_FMT_YUVA422P12BE:
2020
0
    case AV_PIX_FMT_YUVA444P12BE:
2021
0
    case AV_PIX_FMT_YUVA420P16BE:
2022
0
    case AV_PIX_FMT_YUVA422P16BE:
2023
0
    case AV_PIX_FMT_YUVA444P16BE:
2024
0
        *chrToYV12 = bswap16UV_c;
2025
0
        break;
2026
0
#endif
2027
0
    case AV_PIX_FMT_YUV444P10MSBLE:
2028
0
        *chrToYV12 = shf16_10LEToUV_c;
2029
0
        break;
2030
0
    case AV_PIX_FMT_YUV444P12MSBLE:
2031
0
        *chrToYV12 = shf16_12LEToUV_c;
2032
0
        break;
2033
0
    case AV_PIX_FMT_YUV444P10MSBBE:
2034
0
        *chrToYV12 = shf16_10BEToUV_c;
2035
0
        break;
2036
0
    case AV_PIX_FMT_YUV444P12MSBBE:
2037
0
        *chrToYV12 = shf16_12BEToUV_c;
2038
0
        break;
2039
0
    case AV_PIX_FMT_VUYA:
2040
0
    case AV_PIX_FMT_VUYX:
2041
0
        *chrToYV12 = read_vuyx_UV_c;
2042
0
        break;
2043
0
    case AV_PIX_FMT_XV30LE:
2044
0
        *chrToYV12 = read_xv30le_UV_c;
2045
0
        break;
2046
0
    case AV_PIX_FMT_V30XLE:
2047
0
        *chrToYV12 = read_v30xle_UV_c;
2048
0
        break;
2049
0
    case AV_PIX_FMT_AYUV:
2050
0
        *chrToYV12 = read_ayuv_UV_c;
2051
0
        break;
2052
0
    case AV_PIX_FMT_AYUV64LE:
2053
0
        *chrToYV12 = read_ayuv64le_UV_c;
2054
0
        break;
2055
0
    case AV_PIX_FMT_AYUV64BE:
2056
0
        *chrToYV12 = read_ayuv64be_UV_c;
2057
0
        break;
2058
0
    case AV_PIX_FMT_UYVA:
2059
0
        *chrToYV12 = read_uyva_UV_c;
2060
0
        break;
2061
0
    case AV_PIX_FMT_XV36LE:
2062
0
        *chrToYV12 = read_xv36le_UV_c;
2063
0
        break;
2064
0
    case AV_PIX_FMT_XV36BE:
2065
0
        *chrToYV12 = read_xv36be_UV_c;
2066
0
        break;
2067
0
    case AV_PIX_FMT_XV48LE:
2068
0
        *chrToYV12 = read_xv48le_UV_c;
2069
0
        break;
2070
0
    case AV_PIX_FMT_XV48BE:
2071
0
        *chrToYV12 = read_xv48be_UV_c;
2072
0
        break;
2073
0
    case AV_PIX_FMT_NV20LE:
2074
0
        *chrToYV12 = nv20LEToUV_c;
2075
0
        break;
2076
0
    case AV_PIX_FMT_P010LE:
2077
0
    case AV_PIX_FMT_P210LE:
2078
0
    case AV_PIX_FMT_P410LE:
2079
0
        *chrToYV12 = p010LEToUV_c;
2080
0
        break;
2081
0
    case AV_PIX_FMT_NV20BE:
2082
0
        *chrToYV12 = nv20BEToUV_c;
2083
0
        break;
2084
0
    case AV_PIX_FMT_P010BE:
2085
0
    case AV_PIX_FMT_P210BE:
2086
0
    case AV_PIX_FMT_P410BE:
2087
0
        *chrToYV12 = p010BEToUV_c;
2088
0
        break;
2089
0
    case AV_PIX_FMT_P012LE:
2090
0
    case AV_PIX_FMT_P212LE:
2091
0
    case AV_PIX_FMT_P412LE:
2092
0
        *chrToYV12 = p012LEToUV_c;
2093
0
        break;
2094
0
    case AV_PIX_FMT_P012BE:
2095
0
    case AV_PIX_FMT_P212BE:
2096
0
    case AV_PIX_FMT_P412BE:
2097
0
        *chrToYV12 = p012BEToUV_c;
2098
0
        break;
2099
0
    case AV_PIX_FMT_P016LE:
2100
0
    case AV_PIX_FMT_P216LE:
2101
0
    case AV_PIX_FMT_P416LE:
2102
0
        *chrToYV12 = p016LEToUV_c;
2103
0
        break;
2104
0
    case AV_PIX_FMT_P016BE:
2105
0
    case AV_PIX_FMT_P216BE:
2106
0
    case AV_PIX_FMT_P416BE:
2107
0
        *chrToYV12 = p016BEToUV_c;
2108
0
        break;
2109
0
    case AV_PIX_FMT_Y210LE:
2110
0
        *chrToYV12 = y210le_UV_c;
2111
0
        break;
2112
0
    case AV_PIX_FMT_Y212LE:
2113
0
        *chrToYV12 = y212le_UV_c;
2114
0
        break;
2115
0
    case AV_PIX_FMT_Y216LE:
2116
0
        *chrToYV12 = y216le_UV_c;
2117
0
        break;
2118
0
    case AV_PIX_FMT_RGBF32LE:
2119
0
        *chrToYV12 = rgbf32le_to_uv_c;
2120
0
        break;
2121
0
    case AV_PIX_FMT_RGBF32BE:
2122
0
        *chrToYV12 = rgbf32be_to_uv_c;
2123
0
        break;
2124
0
    }
2125
0
    if (c->chrSrcHSubSample) {
2126
0
        switch (srcFormat) {
2127
0
        case AV_PIX_FMT_RGBA64BE:
2128
0
            *chrToYV12 = rgb64BEToUV_half_c;
2129
0
            break;
2130
0
        case AV_PIX_FMT_RGBA64LE:
2131
0
            *chrToYV12 = rgb64LEToUV_half_c;
2132
0
            break;
2133
0
        case AV_PIX_FMT_BGRA64BE:
2134
0
            *chrToYV12 = bgr64BEToUV_half_c;
2135
0
            break;
2136
0
        case AV_PIX_FMT_BGRA64LE:
2137
0
            *chrToYV12 = bgr64LEToUV_half_c;
2138
0
            break;
2139
0
        case AV_PIX_FMT_RGB48BE:
2140
0
            *chrToYV12 = rgb48BEToUV_half_c;
2141
0
            break;
2142
0
        case AV_PIX_FMT_RGB48LE:
2143
0
            *chrToYV12 = rgb48LEToUV_half_c;
2144
0
            break;
2145
0
        case AV_PIX_FMT_BGR48BE:
2146
0
            *chrToYV12 = bgr48BEToUV_half_c;
2147
0
            break;
2148
0
        case AV_PIX_FMT_BGR48LE:
2149
0
            *chrToYV12 = bgr48LEToUV_half_c;
2150
0
            break;
2151
0
        case AV_PIX_FMT_RGB32:
2152
0
            *chrToYV12 = bgr32ToUV_half_c;
2153
0
            break;
2154
0
        case AV_PIX_FMT_RGB32_1:
2155
0
            *chrToYV12 = bgr321ToUV_half_c;
2156
0
            break;
2157
0
        case AV_PIX_FMT_BGR24:
2158
0
            *chrToYV12 = bgr24ToUV_half_c;
2159
0
            break;
2160
0
        case AV_PIX_FMT_BGR565LE:
2161
0
            *chrToYV12 = bgr16leToUV_half_c;
2162
0
            break;
2163
0
        case AV_PIX_FMT_BGR565BE:
2164
0
            *chrToYV12 = bgr16beToUV_half_c;
2165
0
            break;
2166
0
        case AV_PIX_FMT_BGR555LE:
2167
0
            *chrToYV12 = bgr15leToUV_half_c;
2168
0
            break;
2169
0
        case AV_PIX_FMT_BGR555BE:
2170
0
            *chrToYV12 = bgr15beToUV_half_c;
2171
0
            break;
2172
0
        case AV_PIX_FMT_GBRAP:
2173
0
        case AV_PIX_FMT_GBRP:
2174
0
            *chrToYV12 = gbr24pToUV_half_c;
2175
0
            break;
2176
0
        case AV_PIX_FMT_BGR444LE:
2177
0
            *chrToYV12 = bgr12leToUV_half_c;
2178
0
            break;
2179
0
        case AV_PIX_FMT_BGR444BE:
2180
0
            *chrToYV12 = bgr12beToUV_half_c;
2181
0
            break;
2182
0
        case AV_PIX_FMT_BGR32:
2183
0
            *chrToYV12 = rgb32ToUV_half_c;
2184
0
            break;
2185
0
        case AV_PIX_FMT_BGR32_1:
2186
0
            *chrToYV12 = rgb321ToUV_half_c;
2187
0
            break;
2188
0
        case AV_PIX_FMT_RGB24:
2189
0
            *chrToYV12 = rgb24ToUV_half_c;
2190
0
            break;
2191
0
        case AV_PIX_FMT_RGB565LE:
2192
0
            *chrToYV12 = rgb16leToUV_half_c;
2193
0
            break;
2194
0
        case AV_PIX_FMT_RGB565BE:
2195
0
            *chrToYV12 = rgb16beToUV_half_c;
2196
0
            break;
2197
0
        case AV_PIX_FMT_RGB555LE:
2198
0
            *chrToYV12 = rgb15leToUV_half_c;
2199
0
            break;
2200
0
        case AV_PIX_FMT_RGB555BE:
2201
0
            *chrToYV12 = rgb15beToUV_half_c;
2202
0
            break;
2203
0
        case AV_PIX_FMT_RGB444LE:
2204
0
            *chrToYV12 = rgb12leToUV_half_c;
2205
0
            break;
2206
0
        case AV_PIX_FMT_RGB444BE:
2207
0
            *chrToYV12 = rgb12beToUV_half_c;
2208
0
            break;
2209
0
        case AV_PIX_FMT_X2RGB10LE:
2210
0
            *chrToYV12 = rgb30leToUV_half_c;
2211
0
            break;
2212
0
        case AV_PIX_FMT_X2BGR10LE:
2213
0
            *chrToYV12 = bgr30leToUV_half_c;
2214
0
            break;
2215
0
        case AV_PIX_FMT_RGBAF16BE:
2216
0
            *chrToYV12 = rgbaf16beToUV_half_c;
2217
0
            break;
2218
0
        case AV_PIX_FMT_RGBAF16LE:
2219
0
            *chrToYV12 = rgbaf16leToUV_half_c;
2220
0
            break;
2221
0
        case AV_PIX_FMT_RGBF16BE:
2222
0
            *chrToYV12 = rgbf16beToUV_half_c;
2223
0
            break;
2224
0
        case AV_PIX_FMT_RGBF16LE:
2225
0
            *chrToYV12 = rgbf16leToUV_half_c;
2226
0
            break;
2227
0
        case AV_PIX_FMT_RGBF32BE:
2228
0
            *chrToYV12 = rgbf32be_to_uv_half_c;
2229
0
            break;
2230
0
        case AV_PIX_FMT_RGBF32LE:
2231
0
            *chrToYV12 = rgbf32le_to_uv_half_c;
2232
0
            break;
2233
0
        }
2234
0
    } else {
2235
0
        switch (srcFormat) {
2236
0
        case AV_PIX_FMT_RGBA64BE:
2237
0
            *chrToYV12 = rgb64BEToUV_c;
2238
0
            break;
2239
0
        case AV_PIX_FMT_RGBA64LE:
2240
0
            *chrToYV12 = rgb64LEToUV_c;
2241
0
            break;
2242
0
        case AV_PIX_FMT_BGRA64BE:
2243
0
            *chrToYV12 = bgr64BEToUV_c;
2244
0
            break;
2245
0
        case AV_PIX_FMT_BGRA64LE:
2246
0
            *chrToYV12 = bgr64LEToUV_c;
2247
0
            break;
2248
0
        case AV_PIX_FMT_RGB48BE:
2249
0
            *chrToYV12 = rgb48BEToUV_c;
2250
0
            break;
2251
0
        case AV_PIX_FMT_RGB48LE:
2252
0
            *chrToYV12 = rgb48LEToUV_c;
2253
0
            break;
2254
0
        case AV_PIX_FMT_BGR48BE:
2255
0
            *chrToYV12 = bgr48BEToUV_c;
2256
0
            break;
2257
0
        case AV_PIX_FMT_BGR48LE:
2258
0
            *chrToYV12 = bgr48LEToUV_c;
2259
0
            break;
2260
0
        case AV_PIX_FMT_RGB32:
2261
0
            *chrToYV12 = bgr32ToUV_c;
2262
0
            break;
2263
0
        case AV_PIX_FMT_RGB32_1:
2264
0
            *chrToYV12 = bgr321ToUV_c;
2265
0
            break;
2266
0
        case AV_PIX_FMT_BGR24:
2267
0
            *chrToYV12 = bgr24ToUV_c;
2268
0
            break;
2269
0
        case AV_PIX_FMT_BGR565LE:
2270
0
            *chrToYV12 = bgr16leToUV_c;
2271
0
            break;
2272
0
        case AV_PIX_FMT_BGR565BE:
2273
0
            *chrToYV12 = bgr16beToUV_c;
2274
0
            break;
2275
0
        case AV_PIX_FMT_BGR555LE:
2276
0
            *chrToYV12 = bgr15leToUV_c;
2277
0
            break;
2278
0
        case AV_PIX_FMT_BGR555BE:
2279
0
            *chrToYV12 = bgr15beToUV_c;
2280
0
            break;
2281
0
        case AV_PIX_FMT_BGR444LE:
2282
0
            *chrToYV12 = bgr12leToUV_c;
2283
0
            break;
2284
0
        case AV_PIX_FMT_BGR444BE:
2285
0
            *chrToYV12 = bgr12beToUV_c;
2286
0
            break;
2287
0
        case AV_PIX_FMT_BGR32:
2288
0
            *chrToYV12 = rgb32ToUV_c;
2289
0
            break;
2290
0
        case AV_PIX_FMT_BGR32_1:
2291
0
            *chrToYV12 = rgb321ToUV_c;
2292
0
            break;
2293
0
        case AV_PIX_FMT_RGB24:
2294
0
            *chrToYV12 = rgb24ToUV_c;
2295
0
            break;
2296
0
        case AV_PIX_FMT_RGB565LE:
2297
0
            *chrToYV12 = rgb16leToUV_c;
2298
0
            break;
2299
0
        case AV_PIX_FMT_RGB565BE:
2300
0
            *chrToYV12 = rgb16beToUV_c;
2301
0
            break;
2302
0
        case AV_PIX_FMT_RGB555LE:
2303
0
            *chrToYV12 = rgb15leToUV_c;
2304
0
            break;
2305
0
        case AV_PIX_FMT_RGB555BE:
2306
0
            *chrToYV12 = rgb15beToUV_c;
2307
0
            break;
2308
0
        case AV_PIX_FMT_RGB444LE:
2309
0
            *chrToYV12 = rgb12leToUV_c;
2310
0
            break;
2311
0
        case AV_PIX_FMT_RGB444BE:
2312
0
            *chrToYV12 = rgb12beToUV_c;
2313
0
            break;
2314
0
        case AV_PIX_FMT_X2RGB10LE:
2315
0
            *chrToYV12 = rgb30leToUV_c;
2316
0
            break;
2317
0
        case AV_PIX_FMT_X2BGR10LE:
2318
0
            *chrToYV12 = bgr30leToUV_c;
2319
0
            break;
2320
0
        case AV_PIX_FMT_RGBAF16BE:
2321
0
            *chrToYV12 = rgbaf16beToUV_c;
2322
0
            break;
2323
0
        case AV_PIX_FMT_RGBAF16LE:
2324
0
            *chrToYV12 = rgbaf16leToUV_c;
2325
0
            break;
2326
0
        case AV_PIX_FMT_RGBF16BE:
2327
0
            *chrToYV12 = rgbf16beToUV_c;
2328
0
            break;
2329
0
        case AV_PIX_FMT_RGBF16LE:
2330
0
            *chrToYV12 = rgbf16leToUV_c;
2331
0
            break;
2332
0
        }
2333
0
    }
2334
2335
0
    *lumToYV12 = NULL;
2336
0
    *alpToYV12 = NULL;
2337
0
    switch (srcFormat) {
2338
0
    case AV_PIX_FMT_GBRP9LE:
2339
0
        *readLumPlanar = planar_rgb9le_to_y;
2340
0
        break;
2341
0
    case AV_PIX_FMT_GBRAP10LE:
2342
0
        *readAlpPlanar = planar_rgb10le_to_a;
2343
0
        av_fallthrough;
2344
0
    case AV_PIX_FMT_GBRP10LE:
2345
0
        *readLumPlanar = planar_rgb10le_to_y;
2346
0
        break;
2347
0
    case AV_PIX_FMT_GBRAP12LE:
2348
0
        *readAlpPlanar = planar_rgb12le_to_a;
2349
0
        av_fallthrough;
2350
0
    case AV_PIX_FMT_GBRP12LE:
2351
0
        *readLumPlanar = planar_rgb12le_to_y;
2352
0
        break;
2353
0
    case AV_PIX_FMT_GBRAP14LE:
2354
0
        *readAlpPlanar = planar_rgb14le_to_a;
2355
0
        av_fallthrough;
2356
0
    case AV_PIX_FMT_GBRP14LE:
2357
0
        *readLumPlanar = planar_rgb14le_to_y;
2358
0
        break;
2359
0
    case AV_PIX_FMT_GBRAP16LE:
2360
0
        *readAlpPlanar = planar_rgb16le_to_a;
2361
0
        av_fallthrough;
2362
0
    case AV_PIX_FMT_GBRP16LE:
2363
0
        *readLumPlanar = planar_rgb16le_to_y;
2364
0
        break;
2365
0
    case AV_PIX_FMT_GBRAPF32LE:
2366
0
        *readAlpPlanar = planar_rgbf32le_to_a;
2367
0
        av_fallthrough;
2368
0
    case AV_PIX_FMT_GBRPF32LE:
2369
0
        *readLumPlanar = planar_rgbf32le_to_y;
2370
0
        break;
2371
0
    case AV_PIX_FMT_GBRAPF16LE:
2372
0
        *readAlpPlanar = planar_rgbf16le_to_a;
2373
0
        av_fallthrough;
2374
0
    case AV_PIX_FMT_GBRPF16LE:
2375
0
        *readLumPlanar = planar_rgbf16le_to_y;
2376
0
        break;
2377
0
    case AV_PIX_FMT_GBRP10MSBLE:
2378
0
        *readLumPlanar = msb_planar_rgb10le_to_y;
2379
0
        break;
2380
0
    case AV_PIX_FMT_GBRP12MSBLE:
2381
0
        *readLumPlanar = msb_planar_rgb12le_to_y;
2382
0
        break;
2383
0
    case AV_PIX_FMT_GBRP9BE:
2384
0
        *readLumPlanar = planar_rgb9be_to_y;
2385
0
        break;
2386
0
    case AV_PIX_FMT_GBRAP10BE:
2387
0
        *readAlpPlanar = planar_rgb10be_to_a;
2388
0
        av_fallthrough;
2389
0
    case AV_PIX_FMT_GBRP10BE:
2390
0
        *readLumPlanar = planar_rgb10be_to_y;
2391
0
        break;
2392
0
    case AV_PIX_FMT_GBRAP12BE:
2393
0
        *readAlpPlanar = planar_rgb12be_to_a;
2394
0
        av_fallthrough;
2395
0
    case AV_PIX_FMT_GBRP12BE:
2396
0
        *readLumPlanar = planar_rgb12be_to_y;
2397
0
        break;
2398
0
    case AV_PIX_FMT_GBRAP14BE:
2399
0
        *readAlpPlanar = planar_rgb14be_to_a;
2400
0
        av_fallthrough;
2401
0
    case AV_PIX_FMT_GBRP14BE:
2402
0
        *readLumPlanar = planar_rgb14be_to_y;
2403
0
        break;
2404
0
    case AV_PIX_FMT_GBRAP16BE:
2405
0
        *readAlpPlanar = planar_rgb16be_to_a;
2406
0
        av_fallthrough;
2407
0
    case AV_PIX_FMT_GBRP16BE:
2408
0
        *readLumPlanar = planar_rgb16be_to_y;
2409
0
        break;
2410
0
    case AV_PIX_FMT_GBRAPF32BE:
2411
0
        *readAlpPlanar = planar_rgbf32be_to_a;
2412
0
        av_fallthrough;
2413
0
    case AV_PIX_FMT_GBRPF32BE:
2414
0
        *readLumPlanar = planar_rgbf32be_to_y;
2415
0
        break;
2416
0
    case AV_PIX_FMT_GBRAPF16BE:
2417
0
        *readAlpPlanar = planar_rgbf16be_to_a;
2418
0
        av_fallthrough;
2419
0
    case AV_PIX_FMT_GBRPF16BE:
2420
0
        *readLumPlanar = planar_rgbf16be_to_y;
2421
0
        break;
2422
0
    case AV_PIX_FMT_GBRP10MSBBE:
2423
0
        *readLumPlanar = msb_planar_rgb10be_to_y;
2424
0
        break;
2425
0
    case AV_PIX_FMT_GBRP12MSBBE:
2426
0
        *readLumPlanar = msb_planar_rgb12be_to_y;
2427
0
        break;
2428
0
    case AV_PIX_FMT_GBRAP:
2429
0
        *readAlpPlanar = planar_rgb_to_a;
2430
0
        av_fallthrough;
2431
0
    case AV_PIX_FMT_GBRP:
2432
0
        *readLumPlanar = planar_rgb_to_y;
2433
0
        break;
2434
#if HAVE_BIGENDIAN
2435
    case AV_PIX_FMT_YUV420P9LE:
2436
    case AV_PIX_FMT_YUV422P9LE:
2437
    case AV_PIX_FMT_YUV444P9LE:
2438
    case AV_PIX_FMT_YUV420P10LE:
2439
    case AV_PIX_FMT_YUV422P10LE:
2440
    case AV_PIX_FMT_YUV440P10LE:
2441
    case AV_PIX_FMT_YUV444P10LE:
2442
    case AV_PIX_FMT_YUV420P12LE:
2443
    case AV_PIX_FMT_YUV422P12LE:
2444
    case AV_PIX_FMT_YUV440P12LE:
2445
    case AV_PIX_FMT_YUV444P12LE:
2446
    case AV_PIX_FMT_YUV420P14LE:
2447
    case AV_PIX_FMT_YUV422P14LE:
2448
    case AV_PIX_FMT_YUV444P14LE:
2449
    case AV_PIX_FMT_YUV420P16LE:
2450
    case AV_PIX_FMT_YUV422P16LE:
2451
    case AV_PIX_FMT_YUV444P16LE:
2452
2453
    case AV_PIX_FMT_GRAY9LE:
2454
    case AV_PIX_FMT_GRAY10LE:
2455
    case AV_PIX_FMT_GRAY12LE:
2456
    case AV_PIX_FMT_GRAY14LE:
2457
    case AV_PIX_FMT_GRAY16LE:
2458
2459
    case AV_PIX_FMT_P016LE:
2460
    case AV_PIX_FMT_P216LE:
2461
    case AV_PIX_FMT_P416LE:
2462
        *lumToYV12 = bswap16Y_c;
2463
        break;
2464
    case AV_PIX_FMT_YUVA420P9LE:
2465
    case AV_PIX_FMT_YUVA422P9LE:
2466
    case AV_PIX_FMT_YUVA444P9LE:
2467
    case AV_PIX_FMT_YUVA420P10LE:
2468
    case AV_PIX_FMT_YUVA422P10LE:
2469
    case AV_PIX_FMT_YUVA444P10LE:
2470
    case AV_PIX_FMT_YUVA422P12LE:
2471
    case AV_PIX_FMT_YUVA444P12LE:
2472
    case AV_PIX_FMT_YUVA420P16LE:
2473
    case AV_PIX_FMT_YUVA422P16LE:
2474
    case AV_PIX_FMT_YUVA444P16LE:
2475
        *lumToYV12 = bswap16Y_c;
2476
        *alpToYV12 = bswap16Y_c;
2477
        break;
2478
#else
2479
0
    case AV_PIX_FMT_YUV420P9BE:
2480
0
    case AV_PIX_FMT_YUV422P9BE:
2481
0
    case AV_PIX_FMT_YUV444P9BE:
2482
0
    case AV_PIX_FMT_YUV420P10BE:
2483
0
    case AV_PIX_FMT_YUV422P10BE:
2484
0
    case AV_PIX_FMT_YUV440P10BE:
2485
0
    case AV_PIX_FMT_YUV444P10BE:
2486
0
    case AV_PIX_FMT_YUV420P12BE:
2487
0
    case AV_PIX_FMT_YUV422P12BE:
2488
0
    case AV_PIX_FMT_YUV440P12BE:
2489
0
    case AV_PIX_FMT_YUV444P12BE:
2490
0
    case AV_PIX_FMT_YUV420P14BE:
2491
0
    case AV_PIX_FMT_YUV422P14BE:
2492
0
    case AV_PIX_FMT_YUV444P14BE:
2493
0
    case AV_PIX_FMT_YUV420P16BE:
2494
0
    case AV_PIX_FMT_YUV422P16BE:
2495
0
    case AV_PIX_FMT_YUV444P16BE:
2496
2497
0
    case AV_PIX_FMT_GRAY9BE:
2498
0
    case AV_PIX_FMT_GRAY10BE:
2499
0
    case AV_PIX_FMT_GRAY12BE:
2500
0
    case AV_PIX_FMT_GRAY14BE:
2501
0
    case AV_PIX_FMT_GRAY16BE:
2502
2503
0
    case AV_PIX_FMT_P016BE:
2504
0
    case AV_PIX_FMT_P216BE:
2505
0
    case AV_PIX_FMT_P416BE:
2506
0
        *lumToYV12 = bswap16Y_c;
2507
0
        break;
2508
0
    case AV_PIX_FMT_YUVA420P9BE:
2509
0
    case AV_PIX_FMT_YUVA422P9BE:
2510
0
    case AV_PIX_FMT_YUVA444P9BE:
2511
0
    case AV_PIX_FMT_YUVA420P10BE:
2512
0
    case AV_PIX_FMT_YUVA422P10BE:
2513
0
    case AV_PIX_FMT_YUVA444P10BE:
2514
0
    case AV_PIX_FMT_YUVA422P12BE:
2515
0
    case AV_PIX_FMT_YUVA444P12BE:
2516
0
    case AV_PIX_FMT_YUVA420P16BE:
2517
0
    case AV_PIX_FMT_YUVA422P16BE:
2518
0
    case AV_PIX_FMT_YUVA444P16BE:
2519
0
        *lumToYV12 = bswap16Y_c;
2520
0
        *alpToYV12 = bswap16Y_c;
2521
0
        break;
2522
0
#endif
2523
0
    case AV_PIX_FMT_YUV444P10MSBLE:
2524
0
        *lumToYV12 = shf16_10LEToY_c;
2525
0
        break;
2526
0
    case AV_PIX_FMT_YUV444P12MSBLE:
2527
0
        *lumToYV12 = shf16_12LEToY_c;
2528
0
        break;
2529
0
    case AV_PIX_FMT_YUV444P10MSBBE:
2530
0
        *lumToYV12 = shf16_10BEToY_c;
2531
0
        break;
2532
0
    case AV_PIX_FMT_YUV444P12MSBBE:
2533
0
        *lumToYV12 = shf16_12BEToY_c;
2534
0
        break;
2535
0
    case AV_PIX_FMT_YA16LE:
2536
0
        *lumToYV12 = read_ya16le_gray_c;
2537
0
        break;
2538
0
    case AV_PIX_FMT_YA16BE:
2539
0
        *lumToYV12 = read_ya16be_gray_c;
2540
0
        break;
2541
0
    case AV_PIX_FMT_YAF16LE:
2542
0
        *lumToYV12 = read_yaf16le_gray_c;
2543
0
        break;
2544
0
    case AV_PIX_FMT_YAF16BE:
2545
0
        *lumToYV12 = read_yaf16be_gray_c;
2546
0
        break;
2547
0
    case AV_PIX_FMT_VUYA:
2548
0
    case AV_PIX_FMT_VUYX:
2549
0
        *lumToYV12 = read_vuyx_Y_c;
2550
0
        break;
2551
0
    case AV_PIX_FMT_XV30LE:
2552
0
        *lumToYV12 = read_xv30le_Y_c;
2553
0
        break;
2554
0
    case AV_PIX_FMT_V30XLE:
2555
0
        *lumToYV12 = read_v30xle_Y_c;
2556
0
        break;
2557
0
    case AV_PIX_FMT_AYUV:
2558
0
    case AV_PIX_FMT_UYVA:
2559
0
        *lumToYV12 = read_ayuv_Y_c;
2560
0
        break;
2561
0
    case AV_PIX_FMT_AYUV64LE:
2562
0
    case AV_PIX_FMT_XV48LE:
2563
0
        *lumToYV12 = read_ayuv64le_Y_c;
2564
0
        break;
2565
0
    case AV_PIX_FMT_AYUV64BE:
2566
0
    case AV_PIX_FMT_XV48BE:
2567
0
        *lumToYV12 = read_ayuv64be_Y_c;
2568
0
        break;
2569
0
    case AV_PIX_FMT_XV36LE:
2570
0
        *lumToYV12 = read_xv36le_Y_c;
2571
0
        break;
2572
0
    case AV_PIX_FMT_XV36BE:
2573
0
        *lumToYV12 = read_xv36be_Y_c;
2574
0
        break;
2575
0
    case AV_PIX_FMT_YUYV422:
2576
0
    case AV_PIX_FMT_YVYU422:
2577
0
    case AV_PIX_FMT_YA8:
2578
0
        *lumToYV12 = yuy2ToY_c;
2579
0
        break;
2580
0
    case AV_PIX_FMT_UYVY422:
2581
0
        *lumToYV12 = uyvyToY_c;
2582
0
        break;
2583
0
    case AV_PIX_FMT_UYYVYY411:
2584
0
        *lumToYV12 = uyyvyyToY_c;
2585
0
        break;
2586
0
    case AV_PIX_FMT_VYU444:
2587
0
        *lumToYV12 = vyuToY_c;
2588
0
        break;
2589
0
    case AV_PIX_FMT_BGR24:
2590
0
        *lumToYV12 = bgr24ToY_c;
2591
0
        break;
2592
0
    case AV_PIX_FMT_BGR565LE:
2593
0
        *lumToYV12 = bgr16leToY_c;
2594
0
        break;
2595
0
    case AV_PIX_FMT_BGR565BE:
2596
0
        *lumToYV12 = bgr16beToY_c;
2597
0
        break;
2598
0
    case AV_PIX_FMT_BGR555LE:
2599
0
        *lumToYV12 = bgr15leToY_c;
2600
0
        break;
2601
0
    case AV_PIX_FMT_BGR555BE:
2602
0
        *lumToYV12 = bgr15beToY_c;
2603
0
        break;
2604
0
    case AV_PIX_FMT_BGR444LE:
2605
0
        *lumToYV12 = bgr12leToY_c;
2606
0
        break;
2607
0
    case AV_PIX_FMT_BGR444BE:
2608
0
        *lumToYV12 = bgr12beToY_c;
2609
0
        break;
2610
0
    case AV_PIX_FMT_RGB24:
2611
0
        *lumToYV12 = rgb24ToY_c;
2612
0
        break;
2613
0
    case AV_PIX_FMT_RGB565LE:
2614
0
        *lumToYV12 = rgb16leToY_c;
2615
0
        break;
2616
0
    case AV_PIX_FMT_RGB565BE:
2617
0
        *lumToYV12 = rgb16beToY_c;
2618
0
        break;
2619
0
    case AV_PIX_FMT_RGB555LE:
2620
0
        *lumToYV12 = rgb15leToY_c;
2621
0
        break;
2622
0
    case AV_PIX_FMT_RGB555BE:
2623
0
        *lumToYV12 = rgb15beToY_c;
2624
0
        break;
2625
0
    case AV_PIX_FMT_RGB444LE:
2626
0
        *lumToYV12 = rgb12leToY_c;
2627
0
        break;
2628
0
    case AV_PIX_FMT_RGB444BE:
2629
0
        *lumToYV12 = rgb12beToY_c;
2630
0
        break;
2631
0
    case AV_PIX_FMT_RGB8:
2632
0
    case AV_PIX_FMT_BGR8:
2633
0
    case AV_PIX_FMT_PAL8:
2634
0
    case AV_PIX_FMT_BGR4_BYTE:
2635
0
    case AV_PIX_FMT_RGB4_BYTE:
2636
0
        *lumToYV12 = palToY_c;
2637
0
        break;
2638
0
    case AV_PIX_FMT_MONOBLACK:
2639
0
        *lumToYV12 = monoblack2Y_c;
2640
0
        break;
2641
0
    case AV_PIX_FMT_MONOWHITE:
2642
0
        *lumToYV12 = monowhite2Y_c;
2643
0
        break;
2644
0
    case AV_PIX_FMT_RGB32:
2645
0
        *lumToYV12 = bgr32ToY_c;
2646
0
        break;
2647
0
    case AV_PIX_FMT_RGB32_1:
2648
0
        *lumToYV12 = bgr321ToY_c;
2649
0
        break;
2650
0
    case AV_PIX_FMT_BGR32:
2651
0
        *lumToYV12 = rgb32ToY_c;
2652
0
        break;
2653
0
    case AV_PIX_FMT_BGR32_1:
2654
0
        *lumToYV12 = rgb321ToY_c;
2655
0
        break;
2656
0
    case AV_PIX_FMT_RGB48BE:
2657
0
        *lumToYV12 = rgb48BEToY_c;
2658
0
        break;
2659
0
    case AV_PIX_FMT_RGB48LE:
2660
0
        *lumToYV12 = rgb48LEToY_c;
2661
0
        break;
2662
0
    case AV_PIX_FMT_BGR48BE:
2663
0
        *lumToYV12 = bgr48BEToY_c;
2664
0
        break;
2665
0
    case AV_PIX_FMT_BGR48LE:
2666
0
        *lumToYV12 = bgr48LEToY_c;
2667
0
        break;
2668
0
    case AV_PIX_FMT_RGBA64BE:
2669
0
        *lumToYV12 = rgb64BEToY_c;
2670
0
        break;
2671
0
    case AV_PIX_FMT_RGBA64LE:
2672
0
        *lumToYV12 = rgb64LEToY_c;
2673
0
        break;
2674
0
    case AV_PIX_FMT_BGRA64BE:
2675
0
        *lumToYV12 = bgr64BEToY_c;
2676
0
        break;
2677
0
    case AV_PIX_FMT_BGRA64LE:
2678
0
        *lumToYV12 = bgr64LEToY_c;
2679
0
        break;
2680
0
    case AV_PIX_FMT_NV20LE:
2681
0
        *lumToYV12 = nv20LEToY_c;
2682
0
        break;
2683
0
    case AV_PIX_FMT_P010LE:
2684
0
    case AV_PIX_FMT_P210LE:
2685
0
    case AV_PIX_FMT_P410LE:
2686
0
        *lumToYV12 = p010LEToY_c;
2687
0
        break;
2688
0
    case AV_PIX_FMT_NV20BE:
2689
0
        *lumToYV12 = nv20BEToY_c;
2690
0
        break;
2691
0
    case AV_PIX_FMT_P010BE:
2692
0
    case AV_PIX_FMT_P210BE:
2693
0
    case AV_PIX_FMT_P410BE:
2694
0
        *lumToYV12 = p010BEToY_c;
2695
0
        break;
2696
0
    case AV_PIX_FMT_P012LE:
2697
0
    case AV_PIX_FMT_P212LE:
2698
0
    case AV_PIX_FMT_P412LE:
2699
0
        *lumToYV12 = p012LEToY_c;
2700
0
        break;
2701
0
    case AV_PIX_FMT_P012BE:
2702
0
    case AV_PIX_FMT_P212BE:
2703
0
    case AV_PIX_FMT_P412BE:
2704
0
        *lumToYV12 = p012BEToY_c;
2705
0
        break;
2706
0
    case AV_PIX_FMT_GRAYF32LE:
2707
0
        *lumToYV12 = grayf32leToY16_c;
2708
0
        break;
2709
0
    case AV_PIX_FMT_GRAYF32BE:
2710
0
        *lumToYV12 = grayf32beToY16_c;
2711
0
        break;
2712
0
    case AV_PIX_FMT_YAF32LE:
2713
0
        *lumToYV12 = read_yaf32le_gray_c;
2714
0
        break;
2715
0
    case AV_PIX_FMT_YAF32BE:
2716
0
        *lumToYV12 = read_yaf32be_gray_c;
2717
0
        break;
2718
0
    case AV_PIX_FMT_GRAYF16LE:
2719
0
        *lumToYV12 = grayf16leToY16_c;
2720
0
        break;
2721
0
    case AV_PIX_FMT_GRAYF16BE:
2722
0
        *lumToYV12 = grayf16beToY16_c;
2723
0
        break;
2724
0
    case AV_PIX_FMT_Y210LE:
2725
0
        *lumToYV12 = y210le_Y_c;
2726
0
        break;
2727
0
    case AV_PIX_FMT_Y212LE:
2728
0
        *lumToYV12 = y212le_Y_c;
2729
0
        break;
2730
0
    case AV_PIX_FMT_Y216LE:
2731
0
        *lumToYV12 = y216le_Y_c;
2732
0
        break;
2733
0
    case AV_PIX_FMT_X2RGB10LE:
2734
0
        *lumToYV12 = rgb30leToY_c;
2735
0
        break;
2736
0
    case AV_PIX_FMT_X2BGR10LE:
2737
0
        *lumToYV12 = bgr30leToY_c;
2738
0
        break;
2739
0
    case AV_PIX_FMT_RGBAF16BE:
2740
0
        *lumToYV12 = rgbaf16beToY_c;
2741
0
        break;
2742
0
    case AV_PIX_FMT_RGBAF16LE:
2743
0
        *lumToYV12 = rgbaf16leToY_c;
2744
0
        break;
2745
0
    case AV_PIX_FMT_RGBF16BE:
2746
0
        *lumToYV12 = rgbf16beToY_c;
2747
0
        break;
2748
0
    case AV_PIX_FMT_RGBF16LE:
2749
0
        *lumToYV12 = rgbf16leToY_c;
2750
0
        break;
2751
0
    case AV_PIX_FMT_RGBF32LE:
2752
0
        *lumToYV12 = rgbf32le_to_y_c;
2753
0
        break;
2754
0
    case AV_PIX_FMT_RGBF32BE:
2755
0
        *lumToYV12 = rgbf32be_to_y_c;
2756
0
        break;
2757
0
    }
2758
0
    if (c->needAlpha) {
2759
0
        if (is16BPS(srcFormat) || isNBPS(srcFormat)) {
2760
0
            if (HAVE_BIGENDIAN == !isBE(srcFormat) && !*readAlpPlanar)
2761
0
                *alpToYV12 = bswap16Y_c;
2762
0
        }
2763
0
        switch (srcFormat) {
2764
0
        case AV_PIX_FMT_BGRA64LE:
2765
0
        case AV_PIX_FMT_RGBA64LE:  *alpToYV12 = rgba64leToA_c; break;
2766
0
        case AV_PIX_FMT_BGRA64BE:
2767
0
        case AV_PIX_FMT_RGBA64BE:  *alpToYV12 = rgba64beToA_c; break;
2768
0
        case AV_PIX_FMT_BGRA:
2769
0
        case AV_PIX_FMT_RGBA:
2770
0
            *alpToYV12 = rgbaToA_c;
2771
0
            break;
2772
0
        case AV_PIX_FMT_ABGR:
2773
0
        case AV_PIX_FMT_ARGB:
2774
0
            *alpToYV12 = abgrToA_c;
2775
0
            break;
2776
0
        case AV_PIX_FMT_RGBAF16BE:
2777
0
            *alpToYV12 = rgbaf16beToA_c;
2778
0
            break;
2779
0
        case AV_PIX_FMT_RGBAF16LE:
2780
0
            *alpToYV12 = rgbaf16leToA_c;
2781
0
            break;
2782
0
        case AV_PIX_FMT_YA8:
2783
0
            *alpToYV12 = uyvyToY_c;
2784
0
            break;
2785
0
        case AV_PIX_FMT_YA16LE:
2786
0
            *alpToYV12 = read_ya16le_alpha_c;
2787
0
            break;
2788
0
        case AV_PIX_FMT_YA16BE:
2789
0
            *alpToYV12 = read_ya16be_alpha_c;
2790
0
            break;
2791
0
        case AV_PIX_FMT_YAF16LE:
2792
0
            *alpToYV12 = read_yaf16le_alpha_c;
2793
0
            break;
2794
0
        case AV_PIX_FMT_YAF16BE:
2795
0
            *alpToYV12 = read_yaf16be_alpha_c;
2796
0
            break;
2797
0
        case AV_PIX_FMT_YAF32LE:
2798
0
            *alpToYV12 = read_yaf32le_alpha_c;
2799
0
            break;
2800
0
        case AV_PIX_FMT_YAF32BE:
2801
0
            *alpToYV12 = read_yaf32be_alpha_c;
2802
0
            break;
2803
0
        case AV_PIX_FMT_VUYA:
2804
0
        case AV_PIX_FMT_UYVA:
2805
0
            *alpToYV12 = read_vuya_A_c;
2806
0
            break;
2807
0
        case AV_PIX_FMT_AYUV:
2808
0
            *alpToYV12 = read_ayuv_A_c;
2809
0
            break;
2810
0
        case AV_PIX_FMT_AYUV64LE:
2811
0
            *alpToYV12 = read_ayuv64le_A_c;
2812
0
            break;
2813
0
        case AV_PIX_FMT_AYUV64BE:
2814
0
            *alpToYV12 = read_ayuv64be_A_c;
2815
0
            break;
2816
0
        case AV_PIX_FMT_PAL8 :
2817
0
            *alpToYV12 = palToA_c;
2818
0
            break;
2819
0
        }
2820
0
    }
2821
0
}