Coverage Report

Created: 2026-01-25 07:18

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