Coverage Report

Created: 2026-04-29 07:00

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