FFmpeg
Loading...
Searching...
No Matches
input.c
Go to the documentation of this file.
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
26#include "libavutil/bswap.h"
28#include "libavutil/avassert.h"
29#include "libavutil/intfloat.h"
30#include "config.h"
31#include "swscale_internal.h"
32
33#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#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#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
45static av_always_inline void
46rgb64ToY_c_template(uint16_t *dst, const uint16_t *src, int width,
47 enum AVPixelFormat origin, int32_t *rgb2yuv, int is_be)
48{
49 int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
50 int i;
51 for (i = 0; i < width; i++) {
52 unsigned int r_b = input_pixel(&src[i*4+0]);
53 unsigned int g = input_pixel(&src[i*4+1]);
54 unsigned int b_r = input_pixel(&src[i*4+2]);
55
56 dst[i] = (ry*r + gy*g + by*b + (0x2001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
57 }
58}
59
60static av_always_inline void
61rgb64ToUV_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{
65 int i;
66 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
67 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
69 for (i = 0; i < width; i++) {
70 unsigned int r_b = input_pixel(&src1[i*4+0]);
71 unsigned int g = input_pixel(&src1[i*4+1]);
72 unsigned int b_r = input_pixel(&src1[i*4+2]);
73
74 dstU[i] = (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
75 dstV[i] = (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
76 }
77}
78
79static av_always_inline void
80rgb64ToUV_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{
84 int i;
85 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
86 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
88 for (i = 0; i < width; i++) {
89 unsigned r_b = (input_pixel(&src1[8 * i + 0]) + input_pixel(&src1[8 * i + 4]) + 1) >> 1;
90 unsigned g = (input_pixel(&src1[8 * i + 1]) + input_pixel(&src1[8 * i + 5]) + 1) >> 1;
91 unsigned b_r = (input_pixel(&src1[8 * i + 2]) + input_pixel(&src1[8 * i + 6]) + 1) >> 1;
92
93 dstU[i]= (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
94 dstV[i]= (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
95 }
96}
97
98#define RGB64FUNCS_EXT(pattern, BE_LE, origin, is_be) \
99static void pattern ## 64 ## BE_LE ## ToY_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused0, const uint8_t *unused1,\
100 int width, uint32_t *rgb2yuv, void *opq) \
101{ \
102 const uint16_t *src = (const uint16_t *) _src; \
103 uint16_t *dst = (uint16_t *) _dst; \
104 rgb64ToY_c_template(dst, src, width, origin, rgb2yuv, is_be); \
105} \
106 \
107static 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 int width, uint32_t *rgb2yuv, void *opq) \
110{ \
111 const uint16_t *src1 = (const uint16_t *) _src1, \
112 *src2 = (const uint16_t *) _src2; \
113 uint16_t *dstU = (uint16_t *) _dstU, *dstV = (uint16_t *) _dstV; \
114 rgb64ToUV_c_template(dstU, dstV, src1, src2, width, origin, rgb2yuv, is_be); \
115} \
116 \
117static 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 int width, uint32_t *rgb2yuv, void *opq) \
120{ \
121 const uint16_t *src1 = (const uint16_t *) _src1, \
122 *src2 = (const uint16_t *) _src2; \
123 uint16_t *dstU = (uint16_t *) _dstU, *dstV = (uint16_t *) _dstV; \
124 rgb64ToUV_half_c_template(dstU, dstV, src1, src2, width, origin, rgb2yuv, is_be); \
125}
126#define RGB64FUNCS(pattern, endianness, base_fmt) \
127 RGB64FUNCS_EXT(pattern, endianness, base_fmt ## endianness, IS_BE(endianness))
128
133
135 const uint16_t *src, int width,
136 enum AVPixelFormat origin,
137 int32_t *rgb2yuv, int is_be)
138{
139 int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
140 int i;
141 for (i = 0; i < width; i++) {
142 unsigned int r_b = input_pixel(&src[i * 3 + 0]);
143 unsigned int g = input_pixel(&src[i * 3 + 1]);
144 unsigned int b_r = input_pixel(&src[i * 3 + 2]);
145
146 dst[i] = (ry*r + gy*g + by*b + (0x2001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
147 }
148}
149
150static 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{
158 int i;
159 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
160 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
161 av_assert1(src1 == src2);
162 for (i = 0; i < width; i++) {
163 unsigned r_b = input_pixel(&src1[i * 3 + 0]);
164 unsigned g = input_pixel(&src1[i * 3 + 1]);
165 unsigned b_r = input_pixel(&src1[i * 3 + 2]);
166
167 dstU[i] = (ru*r + gu*g + bu*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
168 dstV[i] = (rv*r + gv*g + bv*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
169 }
170}
171
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{
180 int i;
181 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
182 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
183 av_assert1(src1 == src2);
184 for (i = 0; i < width; i++) {
185 unsigned r_b = (input_pixel(&src1[6 * i + 0]) +
186 input_pixel(&src1[6 * i + 3]) + 1) >> 1;
187 unsigned g = (input_pixel(&src1[6 * i + 1]) +
188 input_pixel(&src1[6 * i + 4]) + 1) >> 1;
189 unsigned b_r = (input_pixel(&src1[6 * i + 2]) +
190 input_pixel(&src1[6 * i + 5]) + 1) >> 1;
191
192 dstU[i] = (ru*r + gu*g + bu*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
193 dstV[i] = (rv*r + gv*g + bv*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
194 }
195}
196
197#undef r
198#undef b
199#undef input_pixel
200
201#define RGB48FUNCS_EXT(pattern, BE_LE, origin, is_be) \
202static 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 void *opq) \
208{ \
209 const uint16_t *src = (const uint16_t *)_src; \
210 uint16_t *dst = (uint16_t *)_dst; \
211 rgb48ToY_c_template(dst, src, width, origin, rgb2yuv, is_be); \
212} \
213 \
214static 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 void *opq) \
222{ \
223 const uint16_t *src1 = (const uint16_t *)_src1, \
224 *src2 = (const uint16_t *)_src2; \
225 uint16_t *dstU = (uint16_t *)_dstU, \
226 *dstV = (uint16_t *)_dstV; \
227 rgb48ToUV_c_template(dstU, dstV, src1, src2, width, origin, rgb2yuv, is_be); \
228} \
229 \
230static 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 void *opq) \
238{ \
239 const uint16_t *src1 = (const uint16_t *)_src1, \
240 *src2 = (const uint16_t *)_src2; \
241 uint16_t *dstU = (uint16_t *)_dstU, \
242 *dstV = (uint16_t *)_dstV; \
243 rgb48ToUV_half_c_template(dstU, dstV, src1, src2, width, origin, rgb2yuv, is_be); \
244}
245#define RGB48FUNCS(pattern, endianness, base_fmt) \
246 RGB48FUNCS_EXT(pattern, endianness, base_fmt ## endianness, IS_BE(endianness))
247
252
253#define input_pixel(i) ((origin == AV_PIX_FMT_RGBA || \
254 origin == AV_PIX_FMT_BGRA || \
255 origin == AV_PIX_FMT_ARGB || \
256 origin == AV_PIX_FMT_ABGR) \
257 ? AV_RN32A(&src[(i) * 4]) \
258 : ((origin == AV_PIX_FMT_X2RGB10LE || \
259 origin == AV_PIX_FMT_X2BGR10LE) \
260 ? AV_RL32(&src[(i) * 4]) \
261 : (is_be ? AV_RB16(&src[(i) * 2]) \
262 : AV_RL16(&src[(i) * 2]))))
263
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{
275 const int ry = rgb2yuv[RY_IDX]<<rsh, gy = rgb2yuv[GY_IDX]<<gsh, by = rgb2yuv[BY_IDX]<<bsh;
276 const unsigned rnd = (32<<((S)-1)) + (1<<(S-7));
277 int i;
278
279 for (i = 0; i < width; i++) {
280 int px = input_pixel(i) >> shp;
281 int b = (px & maskb) >> shb;
282 int g = (px & maskg) >> shg;
283 int r = (px & maskr) >> shr;
284
285 dst[i] = (ry * r + gy * g + by * b + rnd) >> ((S)-6);
286 }
287}
288
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{
301 const int ru = rgb2yuv[RU_IDX] * (1 << rsh), gu = rgb2yuv[GU_IDX] * (1 << gsh), bu = rgb2yuv[BU_IDX] * (1 << bsh),
302 rv = rgb2yuv[RV_IDX] * (1 << rsh), gv = rgb2yuv[GV_IDX] * (1 << gsh), bv = rgb2yuv[BV_IDX] * (1 << bsh);
303 const unsigned rnd = (256u<<((S)-1)) + (1<<(S-7));
304 int i;
305
306 for (i = 0; i < width; i++) {
307 int px = input_pixel(i) >> shp;
308 int b = (px & maskb) >> shb;
309 int g = (px & maskg) >> shg;
310 int r = (px & maskr) >> shr;
311
312 dstU[i] = (ru * r + gu * g + bu * b + rnd) >> ((S)-6);
313 dstV[i] = (rv * r + gv * g + bv * b + rnd) >> ((S)-6);
314 }
315}
316
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{
329 const int ru = rgb2yuv[RU_IDX] * (1 << rsh), gu = rgb2yuv[GU_IDX] * (1 << gsh), bu = rgb2yuv[BU_IDX] * (1 << bsh),
330 rv = rgb2yuv[RV_IDX] * (1 << rsh), gv = rgb2yuv[GV_IDX] * (1 << gsh), bv = rgb2yuv[BV_IDX] * (1 << bsh),
331 maskgx = ~(maskr | maskb);
332 const unsigned rnd = (256U<<(S)) + (1<<(S-6));
333 int i;
334
335 maskr |= maskr << 1;
336 maskb |= maskb << 1;
337 maskg |= maskg << 1;
338 for (i = 0; i < width; i++) {
339 unsigned px0 = input_pixel(2 * i + 0) >> shp;
340 unsigned px1 = input_pixel(2 * i + 1) >> shp;
341 int b, r, g = (px0 & maskgx) + (px1 & maskgx);
342 int rb = px0 + px1 - g;
343
344 b = (rb & maskb) >> shb;
345 if (shp ||
346 origin == AV_PIX_FMT_BGR565LE || origin == AV_PIX_FMT_BGR565BE ||
347 origin == AV_PIX_FMT_RGB565LE || origin == AV_PIX_FMT_RGB565BE) {
348 g >>= shg;
349 } else {
350 g = (g & maskg) >> shg;
351 }
352 r = (rb & maskr) >> shr;
353
354 dstU[i] = (ru * r + gu * g + bu * b + (unsigned)rnd) >> ((S)-6+1);
355 dstV[i] = (rv * r + gv * g + bv * b + (unsigned)rnd) >> ((S)-6+1);
356 }
357}
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) \
363static void name ## ToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, \
364 int width, uint32_t *tab, void *opq) \
365{ \
366 rgb16_32ToY_c_template((int16_t*)dst, src, width, fmt, shr, shg, shb, shp, \
367 maskr, maskg, maskb, rsh, gsh, bsh, S, tab, is_be); \
368} \
369 \
370static void name ## ToUV_c(uint8_t *dstU, uint8_t *dstV, \
371 const uint8_t *unused0, const uint8_t *src, const uint8_t *dummy, \
372 int width, uint32_t *tab, void *opq) \
373{ \
374 rgb16_32ToUV_c_template((int16_t*)dstU, (int16_t*)dstV, src, width, fmt, \
375 shr, shg, shb, shp, \
376 maskr, maskg, maskb, rsh, gsh, bsh, S, tab, is_be); \
377} \
378 \
379static 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 int width, uint32_t *tab, void *opq) \
383{ \
384 rgb16_32ToUV_half_c_template((int16_t*)dstU, (int16_t*)dstV, src, width, fmt, \
385 shr, shg, shb, shp, \
386 maskr, maskg, maskb, \
387 rsh, gsh, bsh, S, tab, is_be); \
388}
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
395RGB16_32FUNCS(AV_PIX_FMT_BGR32, , bgr32, 16, 0, 0, 0, 0xFF0000, 0xFF00, 0x00FF, 8, 0, 8, RGB2YUV_SHIFT + 8)
396RGB16_32FUNCS(AV_PIX_FMT_BGR32_1, , bgr321, 16, 0, 0, 8, 0xFF0000, 0xFF00, 0x00FF, 8, 0, 8, RGB2YUV_SHIFT + 8)
397RGB16_32FUNCS(AV_PIX_FMT_RGB32, , rgb32, 0, 0, 16, 0, 0x00FF, 0xFF00, 0xFF0000, 8, 0, 8, RGB2YUV_SHIFT + 8)
398RGB16_32FUNCS(AV_PIX_FMT_RGB32_1, , rgb321, 0, 0, 16, 8, 0x00FF, 0xFF00, 0xFF0000, 8, 0, 8, RGB2YUV_SHIFT + 8)
399RGB16_32FUNCS(AV_PIX_FMT_BGR565, LE, bgr16le, 0, 0, 0, 0, 0x001F, 0x07E0, 0xF800, 11, 5, 0, RGB2YUV_SHIFT + 8)
400RGB16_32FUNCS(AV_PIX_FMT_BGR555, LE, bgr15le, 0, 0, 0, 0, 0x001F, 0x03E0, 0x7C00, 10, 5, 0, RGB2YUV_SHIFT + 7)
401RGB16_32FUNCS(AV_PIX_FMT_BGR444, LE, bgr12le, 0, 0, 0, 0, 0x000F, 0x00F0, 0x0F00, 8, 4, 0, RGB2YUV_SHIFT + 4)
402RGB16_32FUNCS(AV_PIX_FMT_RGB565, LE, rgb16le, 0, 0, 0, 0, 0xF800, 0x07E0, 0x001F, 0, 5, 11, RGB2YUV_SHIFT + 8)
403RGB16_32FUNCS(AV_PIX_FMT_RGB555, LE, rgb15le, 0, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, 0, 5, 10, RGB2YUV_SHIFT + 7)
404RGB16_32FUNCS(AV_PIX_FMT_RGB444, LE, rgb12le, 0, 0, 0, 0, 0x0F00, 0x00F0, 0x000F, 0, 4, 8, RGB2YUV_SHIFT + 4)
405RGB16_32FUNCS(AV_PIX_FMT_BGR565, BE, bgr16be, 0, 0, 0, 0, 0x001F, 0x07E0, 0xF800, 11, 5, 0, RGB2YUV_SHIFT + 8)
406RGB16_32FUNCS(AV_PIX_FMT_BGR555, BE, bgr15be, 0, 0, 0, 0, 0x001F, 0x03E0, 0x7C00, 10, 5, 0, RGB2YUV_SHIFT + 7)
407RGB16_32FUNCS(AV_PIX_FMT_BGR444, BE, bgr12be, 0, 0, 0, 0, 0x000F, 0x00F0, 0x0F00, 8, 4, 0, RGB2YUV_SHIFT + 4)
408RGB16_32FUNCS(AV_PIX_FMT_RGB565, BE, rgb16be, 0, 0, 0, 0, 0xF800, 0x07E0, 0x001F, 0, 5, 11, RGB2YUV_SHIFT + 8)
409RGB16_32FUNCS(AV_PIX_FMT_RGB555, BE, rgb15be, 0, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, 0, 5, 10, RGB2YUV_SHIFT + 7)
410RGB16_32FUNCS(AV_PIX_FMT_RGB444, BE, rgb12be, 0, 0, 0, 0, 0x0F00, 0x00F0, 0x000F, 0, 4, 8, RGB2YUV_SHIFT + 4)
411RGB16_32FUNCS(AV_PIX_FMT_X2RGB10, LE, rgb30le, 16, 6, 0, 0, 0x3FF00000, 0xFFC00, 0x3FF, 0, 0, 4, RGB2YUV_SHIFT + 6)
412RGB16_32FUNCS(AV_PIX_FMT_X2BGR10, LE, bgr30le, 0, 6, 16, 0, 0x3FF, 0xFFC00, 0x3FF00000, 4, 0, 0, RGB2YUV_SHIFT + 6)
413
414static 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{
418 uint16_t *dstU = (uint16_t *)_dstU;
419 uint16_t *dstV = (uint16_t *)_dstV;
420 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
421 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
422
423 int i;
424 for (i = 0; i < width; i++) {
425 unsigned int g = gsrc[2*i] + gsrc[2*i+1];
426 unsigned int b = bsrc[2*i] + bsrc[2*i+1];
427 unsigned int r = rsrc[2*i] + rsrc[2*i+1];
428
429 dstU[i] = (ru*r + gu*g + bu*b + (0x4001<<(RGB2YUV_SHIFT-6))) >> (RGB2YUV_SHIFT-6+1);
430 dstV[i] = (rv*r + gv*g + bv*b + (0x4001<<(RGB2YUV_SHIFT-6))) >> (RGB2YUV_SHIFT-6+1);
431 }
432}
433
434static 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{
437 int16_t *dst = (int16_t *)_dst;
438 const uint16_t *src = (const uint16_t *)_src;
439 int i;
440 for (i = 0; i < width; i++)
441 dst[i] = AV_RL16(src + 4 * i + 3);
442}
443
444static 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{
447 int16_t *dst = (int16_t *)_dst;
448 const uint16_t *src = (const uint16_t *)_src;
449 int i;
450 for (i = 0; i < width; i++)
451 dst[i] = AV_RB16(src + 4 * i + 3);
452}
453
454static 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{
457 int16_t *dst = (int16_t *)_dst;
458 int i;
459 for (i=0; i<width; i++) {
460 dst[i]= src[4*i]<<6 | src[4*i]>>2;
461 }
462}
463
464static 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{
467 int16_t *dst = (int16_t *)_dst;
468 int i;
469 for (i=0; i<width; i++) {
470 dst[i]= src[4*i+3]<<6 | src[4*i+3]>>2;
471 }
472}
473
474static 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{
477 int16_t *dst = (int16_t *)_dst;
478 int i;
479 for (i=0; i<width; i++) {
480 int d= src[i];
481
482 dst[i]= (pal[d] >> 24)<<6 | pal[d]>>26;
483 }
484}
485
486static 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{
489 int16_t *dst = (int16_t *)_dst;
490 int i;
491 for (i = 0; i < width; i++) {
492 int d = src[i];
493
494 dst[i] = (pal[d] & 0xFF)<<6;
495 }
496}
497
498static 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{
502 uint16_t *dstU = (uint16_t *)_dstU;
503 int16_t *dstV = (int16_t *)_dstV;
504 int i;
505 av_assert1(src1 == src2);
506 for (i = 0; i < width; i++) {
507 int p = pal[src1[i]];
508
509 dstU[i] = (uint8_t)(p>> 8)<<6;
510 dstV[i] = (uint8_t)(p>>16)<<6;
511 }
512}
513
514static 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{
517 int16_t *dst = (int16_t *)_dst;
518 int i, j;
519 width = (width + 7) >> 3;
520 for (i = 0; i < width; i++) {
521 int d = ~src[i];
522 for (j = 0; j < 8; j++)
523 dst[8*i+j]= ((d>>(7-j))&1) * 16383;
524 }
525 if(width&7){
526 int d= ~src[i];
527 for (j = 0; j < (width&7); j++)
528 dst[8*i+j]= ((d>>(7-j))&1) * 16383;
529 }
530}
531
532static 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{
535 int16_t *dst = (int16_t *)_dst;
536 int i, j;
537 width = (width + 7) >> 3;
538 for (i = 0; i < width; i++) {
539 int d = src[i];
540 for (j = 0; j < 8; j++)
541 dst[8*i+j]= ((d>>(7-j))&1) * 16383;
542 }
543 if(width&7){
544 int d = src[i];
545 for (j = 0; j < (width&7); j++)
546 dst[8*i+j] = ((d>>(7-j))&1) * 16383;
547 }
548}
549
550static 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{
553 int i;
554 for (i = 0; i < width; i++)
555 dst[i] = src[2 * i];
556}
557
558static 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{
561 int i;
562 for (i = 0; i < width; i++) {
563 dstU[i] = src1[4 * i + 1];
564 dstV[i] = src1[4 * i + 3];
565 }
566 av_assert1(src1 == src2);
567}
568
569static 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{
572 int i;
573 for (i = 0; i < width; i++) {
574 dstV[i] = src1[4 * i + 1];
575 dstU[i] = src1[4 * i + 3];
576 }
577 av_assert1(src1 == src2);
578}
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 { \
587 int i; \
588 for (i = 0; i < width; i++) { \
589 AV_WN16(dstU + i * 2, AV_RL16(src + i * 8 + 2) >> shift); \
590 AV_WN16(dstV + i * 2, AV_RL16(src + i * 8 + 6) >> shift); \
591 } \
592 } \
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 { \
599 int i; \
600 for (i = 0; i < width; i++) \
601 AV_WN16(dst + i * 2, AV_RL16(src + i * 4) >> shift); \
602 }
603
605y21xle_wrapper(12, 4)
606y21xle_wrapper(16, 0)
607
608static 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{
611 int i;
612 const uint16_t *src = (const uint16_t *)_src;
613 uint16_t *dst = (uint16_t *)_dst;
614 for (i = 0; i < width; i++)
615 dst[i] = av_bswap16(src[i]);
616}
617
618static 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{
621 int i;
622 const uint16_t *src1 = (const uint16_t *)_src1,
623 *src2 = (const uint16_t *)_src2;
624 uint16_t *dstU = (uint16_t *)_dstU, *dstV = (uint16_t *)_dstV;
625 for (i = 0; i < width; i++) {
626 dstU[i] = av_bswap16(src1[i]);
627 dstV[i] = av_bswap16(src2[i]);
628 }
629}
630
631static 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{
634 int i;
635 for (i = 0; i < width; i++)
636 AV_WN16(dst + i * 2, AV_RL16(src + i * 4));
637}
638
639static 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{
642 int i;
643 for (i = 0; i < width; i++)
644 AV_WN16(dst + i * 2, AV_RL16(src + i * 4 + 2));
645}
646
647static 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{
650 int i;
651 for (i = 0; i < width; i++)
652 AV_WN16(dst + i * 2, AV_RB16(src + i * 4));
653}
654
655static 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{
658 int i;
659 for (i = 0; i < width; i++)
660 AV_WN16(dst + i * 2, AV_RB16(src + i * 4 + 2));
661}
662
663static 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{
666 int i;
667 for (i = 0; i < width; i++)
668 AV_WN16(dst + i * 2, AV_RL16(src + i * 8 + 2));
669}
670
671static 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{
674 int i;
675 for (i = 0; i < width; i++)
676 AV_WN16(dst + i * 2, AV_RB16(src + i * 8 + 2));
677}
678
679static 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{
682 int i;
683 for (i = 0; i < width; i++) {
684 AV_WN16(dstU + i * 2, AV_RL16(src + i * 8 + u_offset));
685 AV_WN16(dstV + i * 2, AV_RL16(src + i * 8 + v_offset));
686 }
687}
688
689static 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{
692 int i;
693 for (i = 0; i < width; i++) {
694 AV_WN16(dstU + i * 2, AV_RB16(src + i * 8 + u_offset));
695 AV_WN16(dstV + i * 2, AV_RB16(src + i * 8 + v_offset));
696 }
697}
698
699#define ayuv64_UV_funcs(pixfmt, U, V) \
700static void read_ ## pixfmt ## le_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, \
701 const uint8_t *unused1, int width, uint32_t *unused2, void *opq) \
702{ \
703 ayuv64le_UV_c(dstU, dstV, src, width, U, V); \
704} \
705 \
706static void read_ ## pixfmt ## be_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, \
707 const uint8_t *unused1, int width, uint32_t *unused2, void *opq) \
708{ \
709 ayuv64be_UV_c(dstU, dstV, src, width, U, V); \
710}
711
712ayuv64_UV_funcs(ayuv64, 4, 6)
713ayuv64_UV_funcs(xv48, 0, 4)
714
715static 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{
718 int i;
719 for (i = 0; i < width; i++)
720 AV_WN16(dst + i * 2, AV_RL16(src + i * 8));
721}
722
723static 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{
726 int i;
727 for (i = 0; i < width; i++)
728 AV_WN16(dst + i * 2, AV_RB16(src + i * 8));
729}
730
731static 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{
734 int i;
735 for (i = 0; i < width; i++) {
736 dstU[i] = src[i * 4 + 1];
737 dstV[i] = src[i * 4];
738 }
739}
740
741static 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{
744 int i;
745 for (i = 0; i < width; i++)
746 dst[i] = src[i * 4 + 2];
747}
748
749static 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{
752 int i;
753 for (i = 0; i < width; i++)
754 dst[i] = src[i * 4 + 3];
755}
756
757static 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{
760 int i;
761 for (i = 0; i < width; i++) {
762 dstU[i] = src[i * 4 + 2];
763 dstV[i] = src[i * 4 + 3];
764 }
765}
766
767static 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{
770 int i;
771 for (i = 0; i < width; i++)
772 dst[i] = src[i * 4 + 1];
773}
774
775static 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{
778 int i;
779 for (i = 0; i < width; i++)
780 dst[i] = src[i * 4];
781}
782
783static 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{
786 int i;
787 for (i = 0; i < width; i++) {
788 dstU[i] = src[i * 4];
789 dstV[i] = src[i * 4 + 2];
790 }
791}
792
793static 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{
796 int i;
797 for (i = 0; i < width; i++)
798 dst[i] = src[i * 3 + 1];
799}
800
801static 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{
804 int i;
805 for (i = 0; i < width; i++) {
806 dstU[i] = src[i * 3 + 2];
807 dstV[i] = src[i * 3];
808 }
809}
810
811static 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{
814 int i;
815 for (i = 0; i < width; i++)
816 AV_WN16(dst + i * 2, (AV_RL32(src + i * 4) >> 12) & 0x3FFu);
817}
818
819
820static 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{
823 int i;
824 for (i = 0; i < width; i++) {
825 unsigned int uv = AV_RL32(src + i * 4);
826 AV_WN16(dstU + i * 2, (uv >> 2) & 0x3FFu);
827 AV_WN16(dstV + i * 2, (uv >> 22) & 0x3FFu);
828 }
829}
830
831static 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{
834 int i;
835 for (i = 0; i < width; i++)
836 AV_WN16(dst + i * 2, (AV_RL32(src + i * 4) >> 10) & 0x3FFu);
837}
838
839
840static 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{
843 int i;
844 for (i = 0; i < width; i++) {
845 AV_WN16(dstU + i * 2, AV_RL32(src + i * 4) & 0x3FFu);
846 AV_WN16(dstV + i * 2, (AV_RL32(src + i * 4) >> 20) & 0x3FFu);
847 }
848}
849
850static 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{
853 int i;
854 for (i = 0; i < width; i++)
855 AV_WN16(dst + i * 2, AV_RL16(src + i * 8 + 2) >> 4);
856}
857
858
859static 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{
862 int i;
863 for (i = 0; i < width; i++) {
864 AV_WN16(dstU + i * 2, AV_RL16(src + i * 8 + 0) >> 4);
865 AV_WN16(dstV + i * 2, AV_RL16(src + i * 8 + 4) >> 4);
866 }
867}
868
869static 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{
872 int i;
873 for (i = 0; i < width; i++)
874 AV_WN16(dst + i * 2, AV_RB16(src + i * 8 + 2) >> 4);
875}
876
877
878static 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{
881 int i;
882 for (i = 0; i < width; i++) {
883 AV_WN16(dstU + i * 2, AV_RB16(src + i * 8 + 0) >> 4);
884 AV_WN16(dstV + i * 2, AV_RB16(src + i * 8 + 4) >> 4);
885 }
886}
887
888/* This is almost identical to the previous, end exists only because
889 * yuy2ToY/UV)(dst, src + 1, ...) would have 100% unaligned accesses. */
890static 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{
893 int i;
894 for (i = 0; i < width; i++)
895 dst[i] = src[2 * i + 1];
896}
897
898static 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{
901 int i;
902 for (i = 0; i < width; i++) {
903 dstU[i] = src1[4 * i + 0];
904 dstV[i] = src1[4 * i + 2];
905 }
906 av_assert1(src1 == src2);
907}
908
909static 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{
912 for (int i = 0; i < width; i++)
913 dst[i] = src[3 * (i >> 1) + 1 + (i & 1)];
914}
915
916static 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{
919 for (int i = 0; i < width; i++) {
920 dstU[i] = src1[6 * i + 0];
921 dstV[i] = src1[6 * i + 3];
922 }
923 av_assert1(src1 == src2);
924}
925
926static av_always_inline void nvXXtoUV_c(uint8_t *dst1, uint8_t *dst2,
927 const uint8_t *src, int width)
928{
929 int i;
930 for (i = 0; i < width; i++) {
931 dst1[i] = src[2 * i + 0];
932 dst2[i] = src[2 * i + 1];
933 }
934}
935
936static 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{
940 nvXXtoUV_c(dstU, dstV, src1, width);
941}
942
943static 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{
947 nvXXtoUV_c(dstV, dstU, src1, width);
948}
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 { \
958 int i; \
959 for (i = 0; i < width; i++) { \
960 AV_WN16(dstU + i * 2, AV_RL16(src1 + i * 4 + 0) >> shift); \
961 AV_WN16(dstV + i * 2, AV_RL16(src1 + i * 4 + 2) >> shift); \
962 } \
963 } \
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 { \
972 int i; \
973 for (i = 0; i < width; i++) { \
974 AV_WN16(dstU + i * 2, AV_RB16(src1 + i * 4 + 0) >> shift); \
975 AV_WN16(dstV + i * 2, AV_RB16(src1 + i * 4 + 2) >> shift); \
976 } \
977 }
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 { \
986 int i; \
987 for (i = 0; i < width; i++) { \
988 AV_WN16(dst + i * 2, AV_RL16(src + i * 2) >> shift); \
989 } \
990 } \
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 { \
998 int i; \
999 for (i = 0; i < width; i++) { \
1000 AV_WN16(dst + i * 2, AV_RB16(src + i * 2) >> shift); \
1001 } \
1002 } \
1003 p01x_uv_wrapper(fmt, shift)
1004
1006p01x_wrapper(p010, 6)
1007p01x_wrapper(p012, 4)
1008p01x_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 { \
1018 int i; \
1019 for (i = 0; i < width; i++) { \
1020 AV_WN16(dstU + i * 2, AV_RL16(src1 + i * 2) >> (16 - shift)); \
1021 AV_WN16(dstV + i * 2, AV_RL16(src2 + i * 2) >> (16 - shift)); \
1022 } \
1023 } \
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 { \
1032 int i; \
1033 for (i = 0; i < width; i++) { \
1034 AV_WN16(dstU + i * 2, AV_RB16(src1 + i * 2) >> (16 - shift)); \
1035 AV_WN16(dstV + i * 2, AV_RB16(src2 + i * 2) >> (16 - shift)); \
1036 } \
1037 }
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 { \
1046 int i; \
1047 for (i = 0; i < width; i++) { \
1048 AV_WN16(dst + i * 2, AV_RL16(src + i * 2) >> (16 - shift)); \
1049 } \
1050 } \
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 { \
1058 int i; \
1059 for (i = 0; i < width; i++) { \
1060 AV_WN16(dst + i * 2, AV_RB16(src + i * 2) >> (16 - shift)); \
1061 } \
1062 } \
1063 shf16_uv_wrapper(shift)
1064
1065shf16_wrapper(10)
1066shf16_wrapper(12)
1067
1068static 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{
1071 int16_t *dst = (int16_t *)_dst;
1072 int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1073 int i;
1074 for (i = 0; i < width; i++) {
1075 int b = src[i * 3 + 0];
1076 int g = src[i * 3 + 1];
1077 int r = src[i * 3 + 2];
1078
1079 dst[i] = ((ry*r + gy*g + by*b + (32<<(RGB2YUV_SHIFT-1)) + (1<<(RGB2YUV_SHIFT-7)))>>(RGB2YUV_SHIFT-6));
1080 }
1081}
1082
1083static 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{
1086 int16_t *dstU = (int16_t *)_dstU;
1087 int16_t *dstV = (int16_t *)_dstV;
1088 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1089 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1090 int i;
1091 for (i = 0; i < width; i++) {
1092 int b = src1[3 * i + 0];
1093 int g = src1[3 * i + 1];
1094 int r = src1[3 * i + 2];
1095
1096 dstU[i] = (ru*r + gu*g + bu*b + (256<<(RGB2YUV_SHIFT-1)) + (1<<(RGB2YUV_SHIFT-7)))>>(RGB2YUV_SHIFT-6);
1097 dstV[i] = (rv*r + gv*g + bv*b + (256<<(RGB2YUV_SHIFT-1)) + (1<<(RGB2YUV_SHIFT-7)))>>(RGB2YUV_SHIFT-6);
1098 }
1099 av_assert1(src1 == src2);
1100}
1101
1102static 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{
1105 int16_t *dstU = (int16_t *)_dstU;
1106 int16_t *dstV = (int16_t *)_dstV;
1107 int i;
1108 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1109 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1110 for (i = 0; i < width; i++) {
1111 int b = src1[6 * i + 0] + src1[6 * i + 3];
1112 int g = src1[6 * i + 1] + src1[6 * i + 4];
1113 int r = src1[6 * i + 2] + src1[6 * i + 5];
1114
1115 dstU[i] = (ru*r + gu*g + bu*b + (256<<RGB2YUV_SHIFT) + (1<<(RGB2YUV_SHIFT-6)))>>(RGB2YUV_SHIFT-5);
1116 dstV[i] = (rv*r + gv*g + bv*b + (256<<RGB2YUV_SHIFT) + (1<<(RGB2YUV_SHIFT-6)))>>(RGB2YUV_SHIFT-5);
1117 }
1118 av_assert1(src1 == src2);
1119}
1120
1121static 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{
1124 int16_t *dst = (int16_t *)_dst;
1125 int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1126 int i;
1127 for (i = 0; i < width; i++) {
1128 int r = src[i * 3 + 0];
1129 int g = src[i * 3 + 1];
1130 int b = src[i * 3 + 2];
1131
1132 dst[i] = ((ry*r + gy*g + by*b + (32<<(RGB2YUV_SHIFT-1)) + (1<<(RGB2YUV_SHIFT-7)))>>(RGB2YUV_SHIFT-6));
1133 }
1134}
1135
1136static 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{
1139 int16_t *dstU = (int16_t *)_dstU;
1140 int16_t *dstV = (int16_t *)_dstV;
1141 int i;
1142 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1143 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1144 av_assert1(src1 == src2);
1145 for (i = 0; i < width; i++) {
1146 int r = src1[3 * i + 0];
1147 int g = src1[3 * i + 1];
1148 int b = src1[3 * i + 2];
1149
1150 dstU[i] = (ru*r + gu*g + bu*b + (256<<(RGB2YUV_SHIFT-1)) + (1<<(RGB2YUV_SHIFT-7)))>>(RGB2YUV_SHIFT-6);
1151 dstV[i] = (rv*r + gv*g + bv*b + (256<<(RGB2YUV_SHIFT-1)) + (1<<(RGB2YUV_SHIFT-7)))>>(RGB2YUV_SHIFT-6);
1152 }
1153}
1154
1155static 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{
1158 int16_t *dstU = (int16_t *)_dstU;
1159 int16_t *dstV = (int16_t *)_dstV;
1160 int i;
1161 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1162 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1163 av_assert1(src1 == src2);
1164 for (i = 0; i < width; i++) {
1165 int r = src1[6 * i + 0] + src1[6 * i + 3];
1166 int g = src1[6 * i + 1] + src1[6 * i + 4];
1167 int b = src1[6 * i + 2] + src1[6 * i + 5];
1168
1169 dstU[i] = (ru*r + gu*g + bu*b + (256<<RGB2YUV_SHIFT) + (1<<(RGB2YUV_SHIFT-6)))>>(RGB2YUV_SHIFT-5);
1170 dstV[i] = (rv*r + gv*g + bv*b + (256<<RGB2YUV_SHIFT) + (1<<(RGB2YUV_SHIFT-6)))>>(RGB2YUV_SHIFT-5);
1171 }
1172}
1173
1174static void planar_rgb_to_y(uint8_t *_dst, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opq)
1175{
1176 uint16_t *dst = (uint16_t *)_dst;
1177 int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1178 int i;
1179 for (i = 0; i < width; i++) {
1180 int g = src[0][i];
1181 int b = src[1][i];
1182 int r = src[2][i];
1183
1184 dst[i] = (int)((unsigned)ry*r + (unsigned)gy*g + (unsigned)by*b + (0x801<<(RGB2YUV_SHIFT-7))) >> (RGB2YUV_SHIFT-6);
1185 }
1186}
1187
1188static void planar_rgb_to_a(uint8_t *_dst, const uint8_t *src[4], int width, int32_t *unused, void *opq)
1189{
1190 uint16_t *dst = (uint16_t *)_dst;
1191 int i;
1192 for (i = 0; i < width; i++)
1193 dst[i] = src[3][i] << 6;
1194}
1195
1196static void planar_rgb_to_uv(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opq)
1197{
1198 uint16_t *dstU = (uint16_t *)_dstU;
1199 uint16_t *dstV = (uint16_t *)_dstV;
1200 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1201 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1202 int i;
1203 for (i = 0; i < width; i++) {
1204 int g = src[0][i];
1205 int b = src[1][i];
1206 int r = src[2][i];
1207
1208 dstU[i] = (int)((unsigned)ru*r + (unsigned)gu*g + (unsigned)bu*b + (0x4001<<(RGB2YUV_SHIFT-7))) >> (RGB2YUV_SHIFT-6);
1209 dstV[i] = (int)((unsigned)rv*r + (unsigned)gv*g + (unsigned)bv*b + (0x4001<<(RGB2YUV_SHIFT-7))) >> (RGB2YUV_SHIFT-6);
1210 }
1211}
1212
1213#define rdpx(src) \
1214 (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 { \
1220 int i; \
1221 const uint16_t **src = (const uint16_t **)_src; \
1222 uint16_t *dst = (uint16_t *)_dst; \
1223 int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX]; \
1224 int shift = bpc < 16 ? bpc : 14; \
1225 for (i = 0; i < width; i++) { \
1226 int g = rdpx(src[0] + i) >> (16 - rdpx_shift); \
1227 int b = rdpx(src[1] + i) >> (16 - rdpx_shift); \
1228 int r = rdpx(src[2] + i) >> (16 - rdpx_shift); \
1229 \
1230 dst[i] = (int)((unsigned)ry*r + (unsigned)gy*g + (unsigned)by*b + (16 << (RGB2YUV_SHIFT + bpc - 8)) \
1231 + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14); \
1232 } \
1233 }
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 { \
1239 int i; \
1240 const uint16_t **src = (const uint16_t **)_src; \
1241 uint16_t *dst = (uint16_t *)_dst; \
1242 int shift = (bpc < 16 ? bpc : 14) + 16 - rdpx_shift; \
1243 \
1244 for (i = 0; i < width; i++) { \
1245 dst[i] = rdpx(src[3] + i) << (14 - shift); \
1246 } \
1247 } \
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 { \
1254 int i; \
1255 const uint16_t **src = (const uint16_t **)_src; \
1256 uint16_t *dstU = (uint16_t *)_dstU; \
1257 uint16_t *dstV = (uint16_t *)_dstV; \
1258 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX]; \
1259 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX]; \
1260 int shift = bpc < 16 ? bpc : 14; \
1261 for (i = 0; i < width; i++) { \
1262 int g = rdpx(src[0] + i) >> (16 - rdpx_shift); \
1263 int b = rdpx(src[1] + i) >> (16 - rdpx_shift); \
1264 int r = rdpx(src[2] + i) >> (16 - rdpx_shift); \
1265 \
1266 dstU[i] = (int)((unsigned)ru*r + (unsigned)gu*g + (unsigned)bu*b + (128 << (RGB2YUV_SHIFT + bpc - 8)) \
1267 + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14); \
1268 dstV[i] = (int)((unsigned)rv*r + (unsigned)gv*g + (unsigned)bv*b + (128 << (RGB2YUV_SHIFT + bpc - 8)) \
1269 + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14); \
1270 } \
1271 }
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
1284
1285#undef rdpx
1286
1287#define rdpx(src) (is_be ? av_int2float(AV_RB32(src)): av_int2float(AV_RL32(src)))
1288
1289static 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{
1291 int i;
1292 const float **src = (const float **)_src;
1293 uint16_t *dst = (uint16_t *)_dst;
1294
1295 for (i = 0; i < width; i++) {
1296 dst[i] = lrintf(av_clipf(65535.0f * rdpx(src[3] + i), 0.0f, 65535.0f));
1297 }
1298}
1299
1300static 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{
1302 int i;
1303 const float **src = (const float **)_src;
1304 uint16_t *dstU = (uint16_t *)_dstU;
1305 uint16_t *dstV = (uint16_t *)_dstV;
1306 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1307 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1308
1309 for (i = 0; i < width; i++) {
1310 int g = lrintf(av_clipf(65535.0f * rdpx(src[0] + i), 0.0f, 65535.0f));
1311 int b = lrintf(av_clipf(65535.0f * rdpx(src[1] + i), 0.0f, 65535.0f));
1312 int r = lrintf(av_clipf(65535.0f * rdpx(src[2] + i), 0.0f, 65535.0f));
1313
1314 dstU[i] = (int)((unsigned)ru*r + (unsigned)gu*g + (unsigned)bu*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1315 dstV[i] = (int)((unsigned)rv*r + (unsigned)gv*g + (unsigned)bv*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1316 }
1317}
1318
1319static 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{
1321 int i;
1322 const float **src = (const float **)_src;
1323 uint16_t *dst = (uint16_t *)_dst;
1324
1325 int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1326
1327 for (i = 0; i < width; i++) {
1328 int g = lrintf(av_clipf(65535.0f * rdpx(src[0] + i), 0.0f, 65535.0f));
1329 int b = lrintf(av_clipf(65535.0f * rdpx(src[1] + i), 0.0f, 65535.0f));
1330 int r = lrintf(av_clipf(65535.0f * rdpx(src[2] + i), 0.0f, 65535.0f));
1331
1332 dst[i] = (int)((unsigned)ry*r + (unsigned)gy*g + (unsigned)by*b + (0x2001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1333 }
1334}
1335
1336static 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{
1340 int i;
1341 const float *src = (const float *)_src;
1342 uint16_t *dstU = (uint16_t *)_dstU;
1343 uint16_t *dstV = (uint16_t *)_dstV;
1344 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1345 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1346
1347 for (i = 0; i < width; i++) {
1348 int r = lrintf(av_clipf(65535.0f * rdpx(&src[3*i]), 0.0f, 65535.0f));
1349 int g = lrintf(av_clipf(65535.0f * rdpx(&src[3*i + 1]), 0.0f, 65535.0f));
1350 int b = lrintf(av_clipf(65535.0f * rdpx(&src[3*i + 2]), 0.0f, 65535.0f));
1351
1352 dstU[i] = (ru*r + gu*g + bu*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1353 dstV[i] = (rv*r + gv*g + bv*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1354 }
1355}
1356
1357static av_always_inline void rgbf32_to_uv_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused1,
1358 const uint8_t *_src, const uint8_t *unused2,
1359 int width, int is_be, int32_t *rgb2yuv)
1360{
1361 const float *src = (const float *) _src;
1362 uint16_t *dstU = (uint16_t *) _dstU;
1363 uint16_t *dstV = (uint16_t *) _dstV;
1364 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1365 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1366
1367 for (int i = 0; i < width; i++) {
1368 int r = (lrintf(av_clipf(65535.0f * rdpx(&src[6 * i + 0]), 0.0f, 65535.0f)) +
1369 lrintf(av_clipf(65535.0f * rdpx(&src[6 * i + 3]), 0.0f, 65535.0f))) >> 1;
1370 int g = (lrintf(av_clipf(65535.0f * rdpx(&src[6 * i + 1]), 0.0f, 65535.0f)) +
1371 lrintf(av_clipf(65535.0f * rdpx(&src[6 * i + 4]), 0.0f, 65535.0f))) >> 1;
1372 int b = (lrintf(av_clipf(65535.0f * rdpx(&src[6 * i + 2]), 0.0f, 65535.0f)) +
1373 lrintf(av_clipf(65535.0f * rdpx(&src[6 * i + 5]), 0.0f, 65535.0f))) >> 1;
1374
1375 dstU[i] = (ru*r + gu*g + bu*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1376 dstV[i] = (rv*r + gv*g + bv*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1377 }
1378}
1379
1380static av_always_inline void rgbf32_to_y_c(uint8_t *_dst, const uint8_t *_src,
1381 const uint8_t *unused1, const uint8_t *unused2,
1382 int width, int is_be, int32_t *rgb2yuv)
1383{
1384 int i;
1385 const float *src = (const float *)_src;
1386 uint16_t *dst = (uint16_t *)_dst;
1387
1388 int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1389
1390 for (i = 0; i < width; i++) {
1391 int r = lrintf(av_clipf(65535.0f * rdpx(&src[3*i]), 0.0f, 65535.0f));
1392 int g = lrintf(av_clipf(65535.0f * rdpx(&src[3*i + 1]), 0.0f, 65535.0f));
1393 int b = lrintf(av_clipf(65535.0f * rdpx(&src[3*i + 2]), 0.0f, 65535.0f));
1394
1395 dst[i] = (ry*r + gy*g + by*b + (0x2001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT;
1396 }
1397}
1398
1399static av_always_inline void grayf32ToY16_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1,
1400 const uint8_t *unused2, int width, int is_be, uint32_t *unused)
1401{
1402 int i;
1403 const float *src = (const float *)_src;
1404 uint16_t *dst = (uint16_t *)_dst;
1405
1406 for (i = 0; i < width; ++i){
1407 dst[i] = lrintf(av_clipf(65535.0f * rdpx(src + i), 0.0f, 65535.0f));
1408 }
1409}
1410
1411static av_always_inline void read_yaf32_gray_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1,
1412 const uint8_t *unused2, int width, int is_be, uint32_t *unused)
1413{
1414 int i;
1415 const float *src = (const float *)_src;
1416 uint16_t *dst = (uint16_t *)_dst;
1417
1418 for (i = 0; i < width; ++i)
1419 dst[i] = lrintf(av_clipf(65535.0f * rdpx(src + i*2), 0.0f, 65535.0f));
1420}
1421
1422static av_always_inline void read_yaf32_alpha_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1,
1423 const uint8_t *unused2, int width, int is_be, uint32_t *unused)
1424{
1425 int i;
1426 const float *src = (const float *)_src;
1427 uint16_t *dst = (uint16_t *)_dst;
1428
1429 for (i = 0; i < width; ++i)
1430 dst[i] = lrintf(av_clipf(65535.0f * rdpx(src + i*2 + 1), 0.0f, 65535.0f));
1431}
1432
1433#undef rdpx
1434
1435#define rgb9plus_planar_funcs_endian(nbits, endian_name, endian) \
1436static void planar_rgb##nbits##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
1437 int w, int32_t *rgb2yuv, void *opq) \
1438{ \
1439 planar_rgb16_s16_to_y(dst, src, w, nbits, endian, rgb2yuv); \
1440} \
1441static void planar_rgb##nbits##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \
1442 const uint8_t *src[4], int w, int32_t *rgb2yuv, \
1443 void *opq) \
1444{ \
1445 planar_rgb16_s16_to_uv(dstU, dstV, src, w, nbits, endian, rgb2yuv); \
1446} \
1447
1448#define rgb9plus_planar_transparency_funcs(nbits) \
1449static void planar_rgb##nbits##le_to_a(uint8_t *dst, const uint8_t *src[4], \
1450 int w, int32_t *rgb2yuv, \
1451 void *opq) \
1452{ \
1453 planar_rgb16_s16_to_a(dst, src, w, nbits, 0, rgb2yuv); \
1454} \
1455static void planar_rgb##nbits##be_to_a(uint8_t *dst, const uint8_t *src[4], \
1456 int w, int32_t *rgb2yuv, \
1457 void *opq) \
1458{ \
1459 planar_rgb16_s16_to_a(dst, src, w, nbits, 1, rgb2yuv); \
1460}
1461
1462#define rgb9plus_msb_planar_funcs_endian(nbits, endian_name, endian) \
1463static void msb_planar_rgb##nbits##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
1464 int w, int32_t *rgb2yuv, void *opq) \
1465{ \
1466 planar_rgb16_s##nbits##_to_y(dst, src, w, nbits, endian, rgb2yuv); \
1467} \
1468static void msb_planar_rgb##nbits##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \
1469 const uint8_t *src[4], int w, int32_t *rgb2yuv, \
1470 void *opq) \
1471{ \
1472 planar_rgb16_s##nbits##_to_uv(dstU, dstV, src, w, nbits, endian, rgb2yuv); \
1473}
1474
1475#define rgb9plus_planar_funcs(nbits) \
1476 rgb9plus_planar_funcs_endian(nbits, le, 0) \
1477 rgb9plus_planar_funcs_endian(nbits, be, 1)
1478
1479#define rgb9plus_msb_planar_funcs(nbits) \
1480 rgb9plus_msb_planar_funcs_endian(nbits, le, 0) \
1481 rgb9plus_msb_planar_funcs_endian(nbits, be, 1)
1482
1488
1493
1496
1497#define rgbf32_funcs_endian(endian_name, endian) \
1498static void planar_rgbf32##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
1499 int w, int32_t *rgb2yuv, void *opq) \
1500{ \
1501 planar_rgbf32_to_y(dst, src, w, endian, rgb2yuv); \
1502} \
1503static void planar_rgbf32##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \
1504 const uint8_t *src[4], int w, int32_t *rgb2yuv, \
1505 void *opq) \
1506{ \
1507 planar_rgbf32_to_uv(dstU, dstV, src, w, endian, rgb2yuv); \
1508} \
1509static void planar_rgbf32##endian_name##_to_a(uint8_t *dst, const uint8_t *src[4], \
1510 int w, int32_t *rgb2yuv, void *opq) \
1511{ \
1512 planar_rgbf32_to_a(dst, src, w, endian, rgb2yuv); \
1513} \
1514static void rgbf32##endian_name##_to_y_c(uint8_t *dst, const uint8_t *src, \
1515 const uint8_t *unused1, const uint8_t *unused2, \
1516 int w, uint32_t *rgb2yuv, void *opq) \
1517{ \
1518 rgbf32_to_y_c(dst, src, unused1, unused2, w, endian, rgb2yuv); \
1519} \
1520static void rgbf32##endian_name##_to_uv_c(uint8_t *dstU, uint8_t *dstV, \
1521 const uint8_t *unused1, \
1522 const uint8_t *src, const uint8_t *unused2, \
1523 int w, uint32_t *rgb2yuv, \
1524 void *opq) \
1525{ \
1526 rgbf32_to_uv_c(dstU, dstV, unused1, src, unused2, w, endian, rgb2yuv); \
1527} \
1528static void rgbf32##endian_name##_to_uv_half_c(uint8_t *dstU, uint8_t *dstV, \
1529 const uint8_t *unused1, \
1530 const uint8_t *src, const uint8_t *unused2, \
1531 int w, uint32_t *rgb2yuv, \
1532 void *opq) \
1533{ \
1534 rgbf32_to_uv_half_c(dstU, dstV, unused1, src, unused2, w, endian, rgb2yuv); \
1535} \
1536static void grayf32##endian_name##ToY16_c(uint8_t *dst, const uint8_t *src, \
1537 const uint8_t *unused1, const uint8_t *unused2, \
1538 int width, uint32_t *unused, void *opq) \
1539{ \
1540 grayf32ToY16_c(dst, src, unused1, unused2, width, endian, unused); \
1541} \
1542static void read_yaf32##endian_name##_gray_c(uint8_t *dst, const uint8_t *src, \
1543 const uint8_t *unused1, const uint8_t *unused2, \
1544 int width, uint32_t *unused, void *opq) \
1545{ \
1546 read_yaf32_gray_c(dst, src, unused1, unused2, width, endian, unused); \
1547} \
1548static void read_yaf32##endian_name##_alpha_c(uint8_t *dst, const uint8_t *src, \
1549 const uint8_t *unused1, const uint8_t *unused2, \
1550 int width, uint32_t *unused, void *opq) \
1551{ \
1552 read_yaf32_alpha_c(dst, src, unused1, unused2, width, endian, unused); \
1553}
1554
1557
1558#define rdpx(src) av_int2float(half2float(is_be ? AV_RB16(&src) : AV_RL16(&src), h2f_tbl))
1559#define rdpx2(src) av_int2float(half2float(is_be ? AV_RB16(src) : AV_RL16(src), h2f_tbl))
1560
1561static av_always_inline void planar_rgbf16_to_a(uint8_t *dst, const uint8_t *src[4], int width, int is_be, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1562{
1563 int i;
1564
1565 for (i = 0; i < width; i++) {
1566 AV_WN16(dst + 2*i, lrintf(av_clipf(65535.0f * rdpx2(src[3] + 2*i), 0.0f, 65535.0f)));
1567 }
1568}
1569
1570static av_always_inline void planar_rgbf16_to_uv(uint8_t *dstU, uint8_t *dstV, const uint8_t *src[4], int width, int is_be, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1571{
1572 int i;
1573 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1574 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1575
1576 for (i = 0; i < width; i++) {
1577 int g = lrintf(av_clipf(65535.0f * rdpx2(src[0] + 2*i), 0.0f, 65535.0f));
1578 int b = lrintf(av_clipf(65535.0f * rdpx2(src[1] + 2*i), 0.0f, 65535.0f));
1579 int r = lrintf(av_clipf(65535.0f * rdpx2(src[2] + 2*i), 0.0f, 65535.0f));
1580
1581 AV_WN16(dstU + 2*i, (ru*r + gu*g + bu*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT);
1582 AV_WN16(dstV + 2*i, (rv*r + gv*g + bv*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT);
1583 }
1584}
1585
1586static av_always_inline void planar_rgbf16_to_y(uint8_t *dst, const uint8_t *src[4], int width, int is_be, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1587{
1588 int i;
1589
1590 int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1591
1592 for (i = 0; i < width; i++) {
1593 int g = lrintf(av_clipf(65535.0f * rdpx2(src[0] + 2*i), 0.0f, 65535.0f));
1594 int b = lrintf(av_clipf(65535.0f * rdpx2(src[1] + 2*i), 0.0f, 65535.0f));
1595 int r = lrintf(av_clipf(65535.0f * rdpx2(src[2] + 2*i), 0.0f, 65535.0f));
1596
1597 AV_WN16(dst + 2*i, (ry*r + gy*g + by*b + (0x2001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT);
1598 }
1599}
1600
1601static av_always_inline void grayf16ToY16_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1,
1602 const uint8_t *unused2, int width, int is_be, uint32_t *unused, Half2FloatTables *h2f_tbl)
1603{
1604 int i;
1605
1606 for (i = 0; i < width; ++i){
1607 AV_WN16(dst + 2*i, lrintf(av_clipf(65535.0f * rdpx2(src + 2*i), 0.0f, 65535.0f)));
1608 }
1609}
1610
1611static av_always_inline void read_yaf16_gray_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1,
1612 const uint8_t *unused2, int width, int is_be, uint32_t *unused, Half2FloatTables *h2f_tbl)
1613{
1614 uint16_t *dst = (uint16_t *)_dst;
1615
1616 for (int i = 0; i < width; i++)
1617 dst[i] = lrintf(av_clipf(65535.0f * rdpx2(src + 4*i), 0.0f, 65535.0f));
1618}
1619
1620static av_always_inline void read_yaf16_alpha_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1,
1621 const uint8_t *unused2, int width, int is_be, uint32_t *unused, Half2FloatTables *h2f_tbl)
1622{
1623 uint16_t *dst = (uint16_t *)_dst;
1624
1625 for (int i = 0; i < width; i++)
1626 dst[i] = lrintf(av_clipf(65535.0f * rdpx2(src + 4*i + 2), 0.0f, 65535.0f));
1627}
1628
1629static av_always_inline void rgbaf16ToUV_half_endian(uint16_t *dstU, uint16_t *dstV, int is_be,
1630 const uint16_t *src, int width,
1631 int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1632{
1633 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1634 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1635 int i;
1636 for (i = 0; i < width; i++) {
1637 int r = (lrintf(av_clipf(65535.0f * rdpx(src[i*8+0]), 0.0f, 65535.0f)) +
1638 lrintf(av_clipf(65535.0f * rdpx(src[i*8+4]), 0.0f, 65535.0f))) >> 1;
1639 int g = (lrintf(av_clipf(65535.0f * rdpx(src[i*8+1]), 0.0f, 65535.0f)) +
1640 lrintf(av_clipf(65535.0f * rdpx(src[i*8+5]), 0.0f, 65535.0f))) >> 1;
1641 int b = (lrintf(av_clipf(65535.0f * rdpx(src[i*8+2]), 0.0f, 65535.0f)) +
1642 lrintf(av_clipf(65535.0f * rdpx(src[i*8+6]), 0.0f, 65535.0f))) >> 1;
1643
1644 dstU[i] = (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1645 dstV[i] = (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1646 }
1647}
1648
1649static av_always_inline void rgbaf16ToUV_endian(uint16_t *dstU, uint16_t *dstV, int is_be,
1650 const uint16_t *src, int width,
1651 int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1652{
1653 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1654 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1655 int i;
1656 for (i = 0; i < width; i++) {
1657 int r = lrintf(av_clipf(65535.0f * rdpx(src[i*4+0]), 0.0f, 65535.0f));
1658 int g = lrintf(av_clipf(65535.0f * rdpx(src[i*4+1]), 0.0f, 65535.0f));
1659 int b = lrintf(av_clipf(65535.0f * rdpx(src[i*4+2]), 0.0f, 65535.0f));
1660
1661 dstU[i] = (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1662 dstV[i] = (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1663 }
1664}
1665
1666static av_always_inline void rgbaf16ToY_endian(uint16_t *dst, const uint16_t *src, int is_be,
1667 int width, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1668{
1669 int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1670 int i;
1671 for (i = 0; i < width; i++) {
1672 int r = lrintf(av_clipf(65535.0f * rdpx(src[i*4+0]), 0.0f, 65535.0f));
1673 int g = lrintf(av_clipf(65535.0f * rdpx(src[i*4+1]), 0.0f, 65535.0f));
1674 int b = lrintf(av_clipf(65535.0f * rdpx(src[i*4+2]), 0.0f, 65535.0f));
1675
1676 dst[i] = (ry*r + gy*g + by*b + (0x2001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1677 }
1678}
1679
1680static av_always_inline void rgbaf16ToA_endian(uint16_t *dst, const uint16_t *src, int is_be,
1681 int width, Half2FloatTables *h2f_tbl)
1682{
1683 int i;
1684 for (i=0; i<width; i++) {
1685 dst[i] = lrintf(av_clipf(65535.0f * rdpx(src[i*4+3]), 0.0f, 65535.0f));
1686 }
1687}
1688
1689static av_always_inline void rgbf16ToUV_half_endian(uint16_t *dstU, uint16_t *dstV, int is_be,
1690 const uint16_t *src, int width,
1691 int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1692{
1693 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1694 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1695 int i;
1696 for (i = 0; i < width; i++) {
1697 int r = (lrintf(av_clipf(65535.0f * rdpx(src[i*6+0]), 0.0f, 65535.0f)) +
1698 lrintf(av_clipf(65535.0f * rdpx(src[i*6+3]), 0.0f, 65535.0f))) >> 1;
1699 int g = (lrintf(av_clipf(65535.0f * rdpx(src[i*6+1]), 0.0f, 65535.0f)) +
1700 lrintf(av_clipf(65535.0f * rdpx(src[i*6+4]), 0.0f, 65535.0f))) >> 1;
1701 int b = (lrintf(av_clipf(65535.0f * rdpx(src[i*6+2]), 0.0f, 65535.0f)) +
1702 lrintf(av_clipf(65535.0f * rdpx(src[i*6+5]), 0.0f, 65535.0f))) >> 1;
1703
1704 dstU[i] = (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1705 dstV[i] = (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1706 }
1707}
1708
1709static av_always_inline void rgbf16ToUV_endian(uint16_t *dstU, uint16_t *dstV, int is_be,
1710 const uint16_t *src, int width,
1711 int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1712{
1713 int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1714 int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1715 int i;
1716 for (i = 0; i < width; i++) {
1717 int r = lrintf(av_clipf(65535.0f * rdpx(src[i*3+0]), 0.0f, 65535.0f));
1718 int g = lrintf(av_clipf(65535.0f * rdpx(src[i*3+1]), 0.0f, 65535.0f));
1719 int b = lrintf(av_clipf(65535.0f * rdpx(src[i*3+2]), 0.0f, 65535.0f));
1720
1721 dstU[i] = (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1722 dstV[i] = (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1723 }
1724}
1725
1726static av_always_inline void rgbf16ToY_endian(uint16_t *dst, const uint16_t *src, int is_be,
1727 int width, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
1728{
1729 int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1730 int i;
1731 for (i = 0; i < width; i++) {
1732 int r = lrintf(av_clipf(65535.0f * rdpx(src[i*3+0]), 0.0f, 65535.0f));
1733 int g = lrintf(av_clipf(65535.0f * rdpx(src[i*3+1]), 0.0f, 65535.0f));
1734 int b = lrintf(av_clipf(65535.0f * rdpx(src[i*3+2]), 0.0f, 65535.0f));
1735
1736 dst[i] = (ry*r + gy*g + by*b + (0x2001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT;
1737 }
1738}
1739
1740#undef rdpx
1741
1742#define rgbaf16_funcs_endian(endian_name, endian) \
1743static void planar_rgbf16##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
1744 int w, int32_t *rgb2yuv, void *opq) \
1745{ \
1746 planar_rgbf16_to_y(dst, src, w, endian, rgb2yuv, opq); \
1747} \
1748static void planar_rgbf16##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \
1749 const uint8_t *src[4], int w, int32_t *rgb2yuv, \
1750 void *opq) \
1751{ \
1752 planar_rgbf16_to_uv(dstU, dstV, src, w, endian, rgb2yuv, opq); \
1753} \
1754static void planar_rgbf16##endian_name##_to_a(uint8_t *dst, const uint8_t *src[4], \
1755 int w, int32_t *rgb2yuv, void *opq) \
1756{ \
1757 planar_rgbf16_to_a(dst, src, w, endian, rgb2yuv, opq); \
1758} \
1759static void grayf16##endian_name##ToY16_c(uint8_t *dst, const uint8_t *src, \
1760 const uint8_t *unused1, const uint8_t *unused2, \
1761 int width, uint32_t *unused, void *opq) \
1762{ \
1763 grayf16ToY16_c(dst, src, unused1, unused2, width, endian, unused, opq); \
1764} \
1765static void read_yaf16##endian_name##_gray_c(uint8_t *dst, const uint8_t *src, \
1766 const uint8_t *unused1, const uint8_t *unused2, \
1767 int width, uint32_t *unused, void *opq) \
1768{ \
1769 read_yaf16_gray_c(dst, src, unused1, unused2, width, endian, unused, opq); \
1770} \
1771static void read_yaf16##endian_name##_alpha_c(uint8_t *dst, const uint8_t *src, \
1772 const uint8_t *unused1, const uint8_t *unused2, \
1773 int width, uint32_t *unused, void *opq) \
1774{ \
1775 read_yaf16_alpha_c(dst, src, unused1, unused2, width, endian, unused, opq); \
1776} \
1777 \
1778static void rgbaf16##endian_name##ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused, \
1779 const uint8_t *src1, const uint8_t *src2, \
1780 int width, uint32_t *_rgb2yuv, void *opq) \
1781{ \
1782 const uint16_t *src = (const uint16_t*)src1; \
1783 uint16_t *dstU = (uint16_t*)_dstU; \
1784 uint16_t *dstV = (uint16_t*)_dstV; \
1785 int32_t *rgb2yuv = (int32_t*)_rgb2yuv; \
1786 av_assert1(src1==src2); \
1787 rgbaf16ToUV_half_endian(dstU, dstV, endian, src, width, rgb2yuv, opq); \
1788} \
1789static void rgbaf16##endian_name##ToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused, \
1790 const uint8_t *src1, const uint8_t *src2, \
1791 int width, uint32_t *_rgb2yuv, void *opq) \
1792{ \
1793 const uint16_t *src = (const uint16_t*)src1; \
1794 uint16_t *dstU = (uint16_t*)_dstU; \
1795 uint16_t *dstV = (uint16_t*)_dstV; \
1796 int32_t *rgb2yuv = (int32_t*)_rgb2yuv; \
1797 av_assert1(src1==src2); \
1798 rgbaf16ToUV_endian(dstU, dstV, endian, src, width, rgb2yuv, opq); \
1799} \
1800static void rgbaf16##endian_name##ToY_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused0, \
1801 const uint8_t *unused1, int width, uint32_t *_rgb2yuv, void *opq) \
1802{ \
1803 const uint16_t *src = (const uint16_t*)_src; \
1804 uint16_t *dst = (uint16_t*)_dst; \
1805 int32_t *rgb2yuv = (int32_t*)_rgb2yuv; \
1806 rgbaf16ToY_endian(dst, src, endian, width, rgb2yuv, opq); \
1807} \
1808static void rgbaf16##endian_name##ToA_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused0, \
1809 const uint8_t *unused1, int width, uint32_t *unused2, void *opq) \
1810{ \
1811 const uint16_t *src = (const uint16_t*)_src; \
1812 uint16_t *dst = (uint16_t*)_dst; \
1813 rgbaf16ToA_endian(dst, src, endian, width, opq); \
1814} \
1815static void rgbf16##endian_name##ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused, \
1816 const uint8_t *src1, const uint8_t *src2, \
1817 int width, uint32_t *_rgb2yuv, void *opq) \
1818{ \
1819 const uint16_t *src = (const uint16_t*)src1; \
1820 uint16_t *dstU = (uint16_t*)_dstU; \
1821 uint16_t *dstV = (uint16_t*)_dstV; \
1822 int32_t *rgb2yuv = (int32_t*)_rgb2yuv; \
1823 av_assert1(src1==src2); \
1824 rgbf16ToUV_half_endian(dstU, dstV, endian, src, width, rgb2yuv, opq); \
1825} \
1826static void rgbf16##endian_name##ToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused, \
1827 const uint8_t *src1, const uint8_t *src2, \
1828 int width, uint32_t *_rgb2yuv, void *opq) \
1829{ \
1830 const uint16_t *src = (const uint16_t*)src1; \
1831 uint16_t *dstU = (uint16_t*)_dstU; \
1832 uint16_t *dstV = (uint16_t*)_dstV; \
1833 int32_t *rgb2yuv = (int32_t*)_rgb2yuv; \
1834 av_assert1(src1==src2); \
1835 rgbf16ToUV_endian(dstU, dstV, endian, src, width, rgb2yuv, opq); \
1836} \
1837static void rgbf16##endian_name##ToY_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused0, \
1838 const uint8_t *unused1, int width, uint32_t *_rgb2yuv, void *opq) \
1839{ \
1840 const uint16_t *src = (const uint16_t*)_src; \
1841 uint16_t *dst = (uint16_t*)_dst; \
1842 int32_t *rgb2yuv = (int32_t*)_rgb2yuv; \
1843 rgbf16ToY_endian(dst, src, endian, width, rgb2yuv, opq); \
1844} \
1845
1848
1850 planar1_YV12_fn *lumToYV12,
1851 planar1_YV12_fn *alpToYV12,
1852 planar2_YV12_fn *chrToYV12,
1853 planarX_YV12_fn *readLumPlanar,
1854 planarX_YV12_fn *readAlpPlanar,
1855 planarX2_YV12_fn *readChrPlanar)
1856{
1857 enum AVPixelFormat srcFormat = c->opts.src_format;
1858
1859 *chrToYV12 = NULL;
1860 switch (srcFormat) {
1861 case AV_PIX_FMT_YUYV422:
1862 *chrToYV12 = yuy2ToUV_c;
1863 break;
1864 case AV_PIX_FMT_YVYU422:
1865 *chrToYV12 = yvy2ToUV_c;
1866 break;
1867 case AV_PIX_FMT_UYVY422:
1868 *chrToYV12 = uyvyToUV_c;
1869 break;
1871 *chrToYV12 = uyyvyyToUV_c;
1872 break;
1873 case AV_PIX_FMT_VYU444:
1874 *chrToYV12 = vyuToUV_c;
1875 break;
1876 case AV_PIX_FMT_NV12:
1877 case AV_PIX_FMT_NV16:
1878 case AV_PIX_FMT_NV24:
1879 *chrToYV12 = nv12ToUV_c;
1880 break;
1881 case AV_PIX_FMT_NV21:
1882 case AV_PIX_FMT_NV42:
1883 *chrToYV12 = nv21ToUV_c;
1884 break;
1885 case AV_PIX_FMT_RGB8:
1886 case AV_PIX_FMT_BGR8:
1887 case AV_PIX_FMT_PAL8:
1890 *chrToYV12 = palToUV_c;
1891 break;
1892 case AV_PIX_FMT_GBRP9LE:
1893 *readChrPlanar = planar_rgb9le_to_uv;
1894 break;
1897 *readChrPlanar = planar_rgb10le_to_uv;
1898 break;
1901 *readChrPlanar = planar_rgb12le_to_uv;
1902 break;
1905 *readChrPlanar = planar_rgb14le_to_uv;
1906 break;
1909 *readChrPlanar = planar_rgb16le_to_uv;
1910 break;
1913 *readChrPlanar = planar_rgbf32le_to_uv;
1914 break;
1917 *readChrPlanar = planar_rgbf16le_to_uv;
1918 break;
1920 *readChrPlanar = msb_planar_rgb10le_to_uv;
1921 break;
1923 *readChrPlanar = msb_planar_rgb12le_to_uv;
1924 break;
1925 case AV_PIX_FMT_GBRP9BE:
1926 *readChrPlanar = planar_rgb9be_to_uv;
1927 break;
1930 *readChrPlanar = planar_rgb10be_to_uv;
1931 break;
1934 *readChrPlanar = planar_rgb12be_to_uv;
1935 break;
1938 *readChrPlanar = planar_rgb14be_to_uv;
1939 break;
1942 *readChrPlanar = planar_rgb16be_to_uv;
1943 break;
1946 *readChrPlanar = planar_rgbf32be_to_uv;
1947 break;
1950 *readChrPlanar = planar_rgbf16be_to_uv;
1951 break;
1953 *readChrPlanar = msb_planar_rgb10be_to_uv;
1954 break;
1956 *readChrPlanar = msb_planar_rgb12be_to_uv;
1957 break;
1958 case AV_PIX_FMT_GBRAP:
1959 case AV_PIX_FMT_GBRP:
1960 *readChrPlanar = planar_rgb_to_uv;
1961 break;
1962#if HAVE_BIGENDIAN
1980
1992 *chrToYV12 = bswap16UV_c;
1993 break;
1994#else
2012
2024 *chrToYV12 = bswap16UV_c;
2025 break;
2026#endif
2028 *chrToYV12 = shf16_10LEToUV_c;
2029 break;
2031 *chrToYV12 = shf16_12LEToUV_c;
2032 break;
2034 *chrToYV12 = shf16_10BEToUV_c;
2035 break;
2037 *chrToYV12 = shf16_12BEToUV_c;
2038 break;
2039 case AV_PIX_FMT_VUYA:
2040 case AV_PIX_FMT_VUYX:
2041 *chrToYV12 = read_vuyx_UV_c;
2042 break;
2043 case AV_PIX_FMT_XV30LE:
2044 *chrToYV12 = read_xv30le_UV_c;
2045 break;
2046 case AV_PIX_FMT_V30XLE:
2047 *chrToYV12 = read_v30xle_UV_c;
2048 break;
2049 case AV_PIX_FMT_AYUV:
2050 *chrToYV12 = read_ayuv_UV_c;
2051 break;
2053 *chrToYV12 = read_ayuv64le_UV_c;
2054 break;
2056 *chrToYV12 = read_ayuv64be_UV_c;
2057 break;
2058 case AV_PIX_FMT_UYVA:
2059 *chrToYV12 = read_uyva_UV_c;
2060 break;
2061 case AV_PIX_FMT_XV36LE:
2062 *chrToYV12 = read_xv36le_UV_c;
2063 break;
2064 case AV_PIX_FMT_XV36BE:
2065 *chrToYV12 = read_xv36be_UV_c;
2066 break;
2067 case AV_PIX_FMT_XV48LE:
2068 *chrToYV12 = read_xv48le_UV_c;
2069 break;
2070 case AV_PIX_FMT_XV48BE:
2071 *chrToYV12 = read_xv48be_UV_c;
2072 break;
2073 case AV_PIX_FMT_NV20LE:
2074 *chrToYV12 = nv20LEToUV_c;
2075 break;
2076 case AV_PIX_FMT_P010LE:
2077 case AV_PIX_FMT_P210LE:
2078 case AV_PIX_FMT_P410LE:
2079 *chrToYV12 = p010LEToUV_c;
2080 break;
2081 case AV_PIX_FMT_NV20BE:
2082 *chrToYV12 = nv20BEToUV_c;
2083 break;
2084 case AV_PIX_FMT_P010BE:
2085 case AV_PIX_FMT_P210BE:
2086 case AV_PIX_FMT_P410BE:
2087 *chrToYV12 = p010BEToUV_c;
2088 break;
2089 case AV_PIX_FMT_P012LE:
2090 case AV_PIX_FMT_P212LE:
2091 case AV_PIX_FMT_P412LE:
2092 *chrToYV12 = p012LEToUV_c;
2093 break;
2094 case AV_PIX_FMT_P012BE:
2095 case AV_PIX_FMT_P212BE:
2096 case AV_PIX_FMT_P412BE:
2097 *chrToYV12 = p012BEToUV_c;
2098 break;
2099 case AV_PIX_FMT_P016LE:
2100 case AV_PIX_FMT_P216LE:
2101 case AV_PIX_FMT_P416LE:
2102 *chrToYV12 = p016LEToUV_c;
2103 break;
2104 case AV_PIX_FMT_P016BE:
2105 case AV_PIX_FMT_P216BE:
2106 case AV_PIX_FMT_P416BE:
2107 *chrToYV12 = p016BEToUV_c;
2108 break;
2109 case AV_PIX_FMT_Y210LE:
2110 *chrToYV12 = y210le_UV_c;
2111 break;
2112 case AV_PIX_FMT_Y212LE:
2113 *chrToYV12 = y212le_UV_c;
2114 break;
2115 case AV_PIX_FMT_Y216LE:
2116 *chrToYV12 = y216le_UV_c;
2117 break;
2119 *chrToYV12 = rgbf32le_to_uv_c;
2120 break;
2122 *chrToYV12 = rgbf32be_to_uv_c;
2123 break;
2124 }
2125 if (c->chrSrcHSubSample) {
2126 switch (srcFormat) {
2127 case AV_PIX_FMT_RGBA64BE:
2128 *chrToYV12 = rgb64BEToUV_half_c;
2129 break;
2130 case AV_PIX_FMT_RGBA64LE:
2131 *chrToYV12 = rgb64LEToUV_half_c;
2132 break;
2133 case AV_PIX_FMT_BGRA64BE:
2134 *chrToYV12 = bgr64BEToUV_half_c;
2135 break;
2136 case AV_PIX_FMT_BGRA64LE:
2137 *chrToYV12 = bgr64LEToUV_half_c;
2138 break;
2139 case AV_PIX_FMT_RGB48BE:
2140 *chrToYV12 = rgb48BEToUV_half_c;
2141 break;
2142 case AV_PIX_FMT_RGB48LE:
2143 *chrToYV12 = rgb48LEToUV_half_c;
2144 break;
2145 case AV_PIX_FMT_BGR48BE:
2146 *chrToYV12 = bgr48BEToUV_half_c;
2147 break;
2148 case AV_PIX_FMT_BGR48LE:
2149 *chrToYV12 = bgr48LEToUV_half_c;
2150 break;
2151 case AV_PIX_FMT_RGB32:
2152 *chrToYV12 = bgr32ToUV_half_c;
2153 break;
2154 case AV_PIX_FMT_RGB32_1:
2155 *chrToYV12 = bgr321ToUV_half_c;
2156 break;
2157 case AV_PIX_FMT_BGR24:
2158 *chrToYV12 = bgr24ToUV_half_c;
2159 break;
2160 case AV_PIX_FMT_BGR565LE:
2161 *chrToYV12 = bgr16leToUV_half_c;
2162 break;
2163 case AV_PIX_FMT_BGR565BE:
2164 *chrToYV12 = bgr16beToUV_half_c;
2165 break;
2166 case AV_PIX_FMT_BGR555LE:
2167 *chrToYV12 = bgr15leToUV_half_c;
2168 break;
2169 case AV_PIX_FMT_BGR555BE:
2170 *chrToYV12 = bgr15beToUV_half_c;
2171 break;
2172 case AV_PIX_FMT_GBRAP:
2173 case AV_PIX_FMT_GBRP:
2174 *chrToYV12 = gbr24pToUV_half_c;
2175 break;
2176 case AV_PIX_FMT_BGR444LE:
2177 *chrToYV12 = bgr12leToUV_half_c;
2178 break;
2179 case AV_PIX_FMT_BGR444BE:
2180 *chrToYV12 = bgr12beToUV_half_c;
2181 break;
2182 case AV_PIX_FMT_BGR32:
2183 *chrToYV12 = rgb32ToUV_half_c;
2184 break;
2185 case AV_PIX_FMT_BGR32_1:
2186 *chrToYV12 = rgb321ToUV_half_c;
2187 break;
2188 case AV_PIX_FMT_RGB24:
2189 *chrToYV12 = rgb24ToUV_half_c;
2190 break;
2191 case AV_PIX_FMT_RGB565LE:
2192 *chrToYV12 = rgb16leToUV_half_c;
2193 break;
2194 case AV_PIX_FMT_RGB565BE:
2195 *chrToYV12 = rgb16beToUV_half_c;
2196 break;
2197 case AV_PIX_FMT_RGB555LE:
2198 *chrToYV12 = rgb15leToUV_half_c;
2199 break;
2200 case AV_PIX_FMT_RGB555BE:
2201 *chrToYV12 = rgb15beToUV_half_c;
2202 break;
2203 case AV_PIX_FMT_RGB444LE:
2204 *chrToYV12 = rgb12leToUV_half_c;
2205 break;
2206 case AV_PIX_FMT_RGB444BE:
2207 *chrToYV12 = rgb12beToUV_half_c;
2208 break;
2209 case AV_PIX_FMT_X2RGB10LE:
2210 *chrToYV12 = rgb30leToUV_half_c;
2211 break;
2212 case AV_PIX_FMT_X2BGR10LE:
2213 *chrToYV12 = bgr30leToUV_half_c;
2214 break;
2215 case AV_PIX_FMT_RGBAF16BE:
2216 *chrToYV12 = rgbaf16beToUV_half_c;
2217 break;
2218 case AV_PIX_FMT_RGBAF16LE:
2219 *chrToYV12 = rgbaf16leToUV_half_c;
2220 break;
2221 case AV_PIX_FMT_RGBF16BE:
2222 *chrToYV12 = rgbf16beToUV_half_c;
2223 break;
2224 case AV_PIX_FMT_RGBF16LE:
2225 *chrToYV12 = rgbf16leToUV_half_c;
2226 break;
2227 case AV_PIX_FMT_RGBF32BE:
2228 *chrToYV12 = rgbf32be_to_uv_half_c;
2229 break;
2230 case AV_PIX_FMT_RGBF32LE:
2231 *chrToYV12 = rgbf32le_to_uv_half_c;
2232 break;
2233 }
2234 } else {
2235 switch (srcFormat) {
2237 *chrToYV12 = rgb64BEToUV_c;
2238 break;
2240 *chrToYV12 = rgb64LEToUV_c;
2241 break;
2243 *chrToYV12 = bgr64BEToUV_c;
2244 break;
2246 *chrToYV12 = bgr64LEToUV_c;
2247 break;
2248 case AV_PIX_FMT_RGB48BE:
2249 *chrToYV12 = rgb48BEToUV_c;
2250 break;
2251 case AV_PIX_FMT_RGB48LE:
2252 *chrToYV12 = rgb48LEToUV_c;
2253 break;
2254 case AV_PIX_FMT_BGR48BE:
2255 *chrToYV12 = bgr48BEToUV_c;
2256 break;
2257 case AV_PIX_FMT_BGR48LE:
2258 *chrToYV12 = bgr48LEToUV_c;
2259 break;
2260 case AV_PIX_FMT_RGB32:
2261 *chrToYV12 = bgr32ToUV_c;
2262 break;
2263 case AV_PIX_FMT_RGB32_1:
2264 *chrToYV12 = bgr321ToUV_c;
2265 break;
2266 case AV_PIX_FMT_BGR24:
2267 *chrToYV12 = bgr24ToUV_c;
2268 break;
2270 *chrToYV12 = bgr16leToUV_c;
2271 break;
2273 *chrToYV12 = bgr16beToUV_c;
2274 break;
2276 *chrToYV12 = bgr15leToUV_c;
2277 break;
2279 *chrToYV12 = bgr15beToUV_c;
2280 break;
2282 *chrToYV12 = bgr12leToUV_c;
2283 break;
2285 *chrToYV12 = bgr12beToUV_c;
2286 break;
2287 case AV_PIX_FMT_BGR32:
2288 *chrToYV12 = rgb32ToUV_c;
2289 break;
2290 case AV_PIX_FMT_BGR32_1:
2291 *chrToYV12 = rgb321ToUV_c;
2292 break;
2293 case AV_PIX_FMT_RGB24:
2294 *chrToYV12 = rgb24ToUV_c;
2295 break;
2297 *chrToYV12 = rgb16leToUV_c;
2298 break;
2300 *chrToYV12 = rgb16beToUV_c;
2301 break;
2303 *chrToYV12 = rgb15leToUV_c;
2304 break;
2306 *chrToYV12 = rgb15beToUV_c;
2307 break;
2309 *chrToYV12 = rgb12leToUV_c;
2310 break;
2312 *chrToYV12 = rgb12beToUV_c;
2313 break;
2315 *chrToYV12 = rgb30leToUV_c;
2316 break;
2318 *chrToYV12 = bgr30leToUV_c;
2319 break;
2321 *chrToYV12 = rgbaf16beToUV_c;
2322 break;
2324 *chrToYV12 = rgbaf16leToUV_c;
2325 break;
2327 *chrToYV12 = rgbf16beToUV_c;
2328 break;
2330 *chrToYV12 = rgbf16leToUV_c;
2331 break;
2332 }
2333 }
2334
2335 *lumToYV12 = NULL;
2336 *alpToYV12 = NULL;
2337 switch (srcFormat) {
2338 case AV_PIX_FMT_GBRP9LE:
2339 *readLumPlanar = planar_rgb9le_to_y;
2340 break;
2342 *readAlpPlanar = planar_rgb10le_to_a;
2345 *readLumPlanar = planar_rgb10le_to_y;
2346 break;
2348 *readAlpPlanar = planar_rgb12le_to_a;
2351 *readLumPlanar = planar_rgb12le_to_y;
2352 break;
2354 *readAlpPlanar = planar_rgb14le_to_a;
2357 *readLumPlanar = planar_rgb14le_to_y;
2358 break;
2360 *readAlpPlanar = planar_rgb16le_to_a;
2363 *readLumPlanar = planar_rgb16le_to_y;
2364 break;
2366 *readAlpPlanar = planar_rgbf32le_to_a;
2369 *readLumPlanar = planar_rgbf32le_to_y;
2370 break;
2372 *readAlpPlanar = planar_rgbf16le_to_a;
2375 *readLumPlanar = planar_rgbf16le_to_y;
2376 break;
2378 *readLumPlanar = msb_planar_rgb10le_to_y;
2379 break;
2381 *readLumPlanar = msb_planar_rgb12le_to_y;
2382 break;
2383 case AV_PIX_FMT_GBRP9BE:
2384 *readLumPlanar = planar_rgb9be_to_y;
2385 break;
2387 *readAlpPlanar = planar_rgb10be_to_a;
2390 *readLumPlanar = planar_rgb10be_to_y;
2391 break;
2393 *readAlpPlanar = planar_rgb12be_to_a;
2396 *readLumPlanar = planar_rgb12be_to_y;
2397 break;
2399 *readAlpPlanar = planar_rgb14be_to_a;
2402 *readLumPlanar = planar_rgb14be_to_y;
2403 break;
2405 *readAlpPlanar = planar_rgb16be_to_a;
2408 *readLumPlanar = planar_rgb16be_to_y;
2409 break;
2411 *readAlpPlanar = planar_rgbf32be_to_a;
2414 *readLumPlanar = planar_rgbf32be_to_y;
2415 break;
2417 *readAlpPlanar = planar_rgbf16be_to_a;
2420 *readLumPlanar = planar_rgbf16be_to_y;
2421 break;
2423 *readLumPlanar = msb_planar_rgb10be_to_y;
2424 break;
2426 *readLumPlanar = msb_planar_rgb12be_to_y;
2427 break;
2428 case AV_PIX_FMT_GBRAP:
2429 *readAlpPlanar = planar_rgb_to_a;
2431 case AV_PIX_FMT_GBRP:
2432 *readLumPlanar = planar_rgb_to_y;
2433 break;
2434#if HAVE_BIGENDIAN
2452
2453 case AV_PIX_FMT_GRAY9LE:
2458
2459 case AV_PIX_FMT_P016LE:
2460 case AV_PIX_FMT_P216LE:
2461 case AV_PIX_FMT_P416LE:
2462 *lumToYV12 = bswap16Y_c;
2463 break;
2475 *lumToYV12 = bswap16Y_c;
2476 *alpToYV12 = bswap16Y_c;
2477 break;
2478#else
2496
2497 case AV_PIX_FMT_GRAY9BE:
2502
2503 case AV_PIX_FMT_P016BE:
2504 case AV_PIX_FMT_P216BE:
2505 case AV_PIX_FMT_P416BE:
2506 *lumToYV12 = bswap16Y_c;
2507 break;
2519 *lumToYV12 = bswap16Y_c;
2520 *alpToYV12 = bswap16Y_c;
2521 break;
2522#endif
2524 *lumToYV12 = shf16_10LEToY_c;
2525 break;
2527 *lumToYV12 = shf16_12LEToY_c;
2528 break;
2530 *lumToYV12 = shf16_10BEToY_c;
2531 break;
2533 *lumToYV12 = shf16_12BEToY_c;
2534 break;
2535 case AV_PIX_FMT_YA16LE:
2536 *lumToYV12 = read_ya16le_gray_c;
2537 break;
2538 case AV_PIX_FMT_YA16BE:
2539 *lumToYV12 = read_ya16be_gray_c;
2540 break;
2541 case AV_PIX_FMT_YAF16LE:
2542 *lumToYV12 = read_yaf16le_gray_c;
2543 break;
2544 case AV_PIX_FMT_YAF16BE:
2545 *lumToYV12 = read_yaf16be_gray_c;
2546 break;
2547 case AV_PIX_FMT_VUYA:
2548 case AV_PIX_FMT_VUYX:
2549 *lumToYV12 = read_vuyx_Y_c;
2550 break;
2551 case AV_PIX_FMT_XV30LE:
2552 *lumToYV12 = read_xv30le_Y_c;
2553 break;
2554 case AV_PIX_FMT_V30XLE:
2555 *lumToYV12 = read_v30xle_Y_c;
2556 break;
2557 case AV_PIX_FMT_AYUV:
2558 case AV_PIX_FMT_UYVA:
2559 *lumToYV12 = read_ayuv_Y_c;
2560 break;
2562 case AV_PIX_FMT_XV48LE:
2563 *lumToYV12 = read_ayuv64le_Y_c;
2564 break;
2566 case AV_PIX_FMT_XV48BE:
2567 *lumToYV12 = read_ayuv64be_Y_c;
2568 break;
2569 case AV_PIX_FMT_XV36LE:
2570 *lumToYV12 = read_xv36le_Y_c;
2571 break;
2572 case AV_PIX_FMT_XV36BE:
2573 *lumToYV12 = read_xv36be_Y_c;
2574 break;
2575 case AV_PIX_FMT_YUYV422:
2576 case AV_PIX_FMT_YVYU422:
2577 case AV_PIX_FMT_YA8:
2578 *lumToYV12 = yuy2ToY_c;
2579 break;
2580 case AV_PIX_FMT_UYVY422:
2581 *lumToYV12 = uyvyToY_c;
2582 break;
2584 *lumToYV12 = uyyvyyToY_c;
2585 break;
2586 case AV_PIX_FMT_VYU444:
2587 *lumToYV12 = vyuToY_c;
2588 break;
2589 case AV_PIX_FMT_BGR24:
2590 *lumToYV12 = bgr24ToY_c;
2591 break;
2593 *lumToYV12 = bgr16leToY_c;
2594 break;
2596 *lumToYV12 = bgr16beToY_c;
2597 break;
2599 *lumToYV12 = bgr15leToY_c;
2600 break;
2602 *lumToYV12 = bgr15beToY_c;
2603 break;
2605 *lumToYV12 = bgr12leToY_c;
2606 break;
2608 *lumToYV12 = bgr12beToY_c;
2609 break;
2610 case AV_PIX_FMT_RGB24:
2611 *lumToYV12 = rgb24ToY_c;
2612 break;
2614 *lumToYV12 = rgb16leToY_c;
2615 break;
2617 *lumToYV12 = rgb16beToY_c;
2618 break;
2620 *lumToYV12 = rgb15leToY_c;
2621 break;
2623 *lumToYV12 = rgb15beToY_c;
2624 break;
2626 *lumToYV12 = rgb12leToY_c;
2627 break;
2629 *lumToYV12 = rgb12beToY_c;
2630 break;
2631 case AV_PIX_FMT_RGB8:
2632 case AV_PIX_FMT_BGR8:
2633 case AV_PIX_FMT_PAL8:
2636 *lumToYV12 = palToY_c;
2637 break;
2639 *lumToYV12 = monoblack2Y_c;
2640 break;
2642 *lumToYV12 = monowhite2Y_c;
2643 break;
2644 case AV_PIX_FMT_RGB32:
2645 *lumToYV12 = bgr32ToY_c;
2646 break;
2647 case AV_PIX_FMT_RGB32_1:
2648 *lumToYV12 = bgr321ToY_c;
2649 break;
2650 case AV_PIX_FMT_BGR32:
2651 *lumToYV12 = rgb32ToY_c;
2652 break;
2653 case AV_PIX_FMT_BGR32_1:
2654 *lumToYV12 = rgb321ToY_c;
2655 break;
2656 case AV_PIX_FMT_RGB48BE:
2657 *lumToYV12 = rgb48BEToY_c;
2658 break;
2659 case AV_PIX_FMT_RGB48LE:
2660 *lumToYV12 = rgb48LEToY_c;
2661 break;
2662 case AV_PIX_FMT_BGR48BE:
2663 *lumToYV12 = bgr48BEToY_c;
2664 break;
2665 case AV_PIX_FMT_BGR48LE:
2666 *lumToYV12 = bgr48LEToY_c;
2667 break;
2669 *lumToYV12 = rgb64BEToY_c;
2670 break;
2672 *lumToYV12 = rgb64LEToY_c;
2673 break;
2675 *lumToYV12 = bgr64BEToY_c;
2676 break;
2678 *lumToYV12 = bgr64LEToY_c;
2679 break;
2680 case AV_PIX_FMT_NV20LE:
2681 *lumToYV12 = nv20LEToY_c;
2682 break;
2683 case AV_PIX_FMT_P010LE:
2684 case AV_PIX_FMT_P210LE:
2685 case AV_PIX_FMT_P410LE:
2686 *lumToYV12 = p010LEToY_c;
2687 break;
2688 case AV_PIX_FMT_NV20BE:
2689 *lumToYV12 = nv20BEToY_c;
2690 break;
2691 case AV_PIX_FMT_P010BE:
2692 case AV_PIX_FMT_P210BE:
2693 case AV_PIX_FMT_P410BE:
2694 *lumToYV12 = p010BEToY_c;
2695 break;
2696 case AV_PIX_FMT_P012LE:
2697 case AV_PIX_FMT_P212LE:
2698 case AV_PIX_FMT_P412LE:
2699 *lumToYV12 = p012LEToY_c;
2700 break;
2701 case AV_PIX_FMT_P012BE:
2702 case AV_PIX_FMT_P212BE:
2703 case AV_PIX_FMT_P412BE:
2704 *lumToYV12 = p012BEToY_c;
2705 break;
2707 *lumToYV12 = grayf32leToY16_c;
2708 break;
2710 *lumToYV12 = grayf32beToY16_c;
2711 break;
2712 case AV_PIX_FMT_YAF32LE:
2713 *lumToYV12 = read_yaf32le_gray_c;
2714 break;
2715 case AV_PIX_FMT_YAF32BE:
2716 *lumToYV12 = read_yaf32be_gray_c;
2717 break;
2719 *lumToYV12 = grayf16leToY16_c;
2720 break;
2722 *lumToYV12 = grayf16beToY16_c;
2723 break;
2724 case AV_PIX_FMT_Y210LE:
2725 *lumToYV12 = y210le_Y_c;
2726 break;
2727 case AV_PIX_FMT_Y212LE:
2728 *lumToYV12 = y212le_Y_c;
2729 break;
2730 case AV_PIX_FMT_Y216LE:
2731 *lumToYV12 = y216le_Y_c;
2732 break;
2734 *lumToYV12 = rgb30leToY_c;
2735 break;
2737 *lumToYV12 = bgr30leToY_c;
2738 break;
2740 *lumToYV12 = rgbaf16beToY_c;
2741 break;
2743 *lumToYV12 = rgbaf16leToY_c;
2744 break;
2746 *lumToYV12 = rgbf16beToY_c;
2747 break;
2749 *lumToYV12 = rgbf16leToY_c;
2750 break;
2752 *lumToYV12 = rgbf32le_to_y_c;
2753 break;
2755 *lumToYV12 = rgbf32be_to_y_c;
2756 break;
2757 }
2758 if (c->needAlpha) {
2759 if (is16BPS(srcFormat) || isNBPS(srcFormat)) {
2760 if (HAVE_BIGENDIAN == !isBE(srcFormat) && !*readAlpPlanar)
2761 *alpToYV12 = bswap16Y_c;
2762 }
2763 switch (srcFormat) {
2765 case AV_PIX_FMT_RGBA64LE: *alpToYV12 = rgba64leToA_c; break;
2767 case AV_PIX_FMT_RGBA64BE: *alpToYV12 = rgba64beToA_c; break;
2768 case AV_PIX_FMT_BGRA:
2769 case AV_PIX_FMT_RGBA:
2770 *alpToYV12 = rgbaToA_c;
2771 break;
2772 case AV_PIX_FMT_ABGR:
2773 case AV_PIX_FMT_ARGB:
2774 *alpToYV12 = abgrToA_c;
2775 break;
2777 *alpToYV12 = rgbaf16beToA_c;
2778 break;
2780 *alpToYV12 = rgbaf16leToA_c;
2781 break;
2782 case AV_PIX_FMT_YA8:
2783 *alpToYV12 = uyvyToY_c;
2784 break;
2785 case AV_PIX_FMT_YA16LE:
2786 *alpToYV12 = read_ya16le_alpha_c;
2787 break;
2788 case AV_PIX_FMT_YA16BE:
2789 *alpToYV12 = read_ya16be_alpha_c;
2790 break;
2791 case AV_PIX_FMT_YAF16LE:
2792 *alpToYV12 = read_yaf16le_alpha_c;
2793 break;
2794 case AV_PIX_FMT_YAF16BE:
2795 *alpToYV12 = read_yaf16be_alpha_c;
2796 break;
2797 case AV_PIX_FMT_YAF32LE:
2798 *alpToYV12 = read_yaf32le_alpha_c;
2799 break;
2800 case AV_PIX_FMT_YAF32BE:
2801 *alpToYV12 = read_yaf32be_alpha_c;
2802 break;
2803 case AV_PIX_FMT_VUYA:
2804 case AV_PIX_FMT_UYVA:
2805 *alpToYV12 = read_vuya_A_c;
2806 break;
2807 case AV_PIX_FMT_AYUV:
2808 *alpToYV12 = read_ayuv_A_c;
2809 break;
2811 *alpToYV12 = read_ayuv64le_A_c;
2812 break;
2814 *alpToYV12 = read_ayuv64be_A_c;
2815 break;
2816 case AV_PIX_FMT_PAL8 :
2817 *alpToYV12 = palToA_c;
2818 break;
2819 }
2820 }
2821}
uint8_t * _dst
Definition dsp.h:56
uint8_t ptrdiff_t const uint8_t * _src
Definition dsp.h:56
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87
int32_t
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition avassert.h:58
byte swapping routines
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define rnd
Definition checkasm.h:136
static void fn rgb2yuv(uint8_t *_yuv[3], const ptrdiff_t yuv_stride[3], int16_t *rgb[3], ptrdiff_t s, int w, int h, const int16_t rgb2yuv_coeffs[3][3][8], const int16_t yuv_offset[8])
#define av_clipf
Definition common.h:145
#define NULL
Definition coverity.c:32
#define S(s, c, i)
const pixel * src2
#define shifted_planar_rgb16(rdpx_shift)
Definition input.c:1277
static void nv21ToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *unused, void *opq)
Definition input.c:943
static av_always_inline void rgb16_32ToY_c_template(int16_t *dst, const uint8_t *src, int width, enum AVPixelFormat origin, int shr, int shg, int shb, int shp, int maskr, int maskg, int maskb, int rsh, int gsh, int bsh, int S, int32_t *rgb2yuv, int is_be)
Definition input.c:264
#define rdpx(src)
Definition input.c:1213
static av_always_inline void rgb16_32ToUV_half_c_template(int16_t *dstU, int16_t *dstV, const uint8_t *src, int width, enum AVPixelFormat origin, int shr, int shg, int shb, int shp, int maskr, int maskg, int maskb, int rsh, int gsh, int bsh, int S, int32_t *rgb2yuv, int is_be)
Definition input.c:317
static void read_ayuv_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:757
static void yvy2ToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *unused, void *opq)
Definition input.c:569
static void read_ayuv_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:767
static av_always_inline void rgbaf16ToA_endian(uint16_t *dst, const uint16_t *src, int is_be, int width, Half2FloatTables *h2f_tbl)
Definition input.c:1680
static void read_xv36be_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:878
static av_always_inline void nvXXtoUV_c(uint8_t *dst1, uint8_t *dst2, const uint8_t *src, int width)
Definition input.c:926
static void read_ayuv64be_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:671
static void palToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *pal, void *opq)
Definition input.c:498
static void read_v30xle_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:820
static void uyyvyyToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *unused, void *opq)
Definition input.c:916
static av_always_inline void rgb48ToUV_half_c_template(uint16_t *dstU, uint16_t *dstV, const uint16_t *src1, const uint16_t *src2, int width, enum AVPixelFormat origin, int32_t *rgb2yuv, int is_be)
Definition input.c:172
static void read_v30xle_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:811
static void read_vuyx_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:731
#define rgbaf16_funcs_endian(endian_name, endian)
Definition input.c:1742
#define p01x_wrapper(fmt, shift)
Definition input.c:979
static av_always_inline void rgbf16ToY_endian(uint16_t *dst, const uint16_t *src, int is_be, int width, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
Definition input.c:1726
static void read_ya16le_alpha_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
Definition input.c:639
#define shifted_planar_rgb16_to_y_uv(rdpx_shift)
Definition input.c:1273
static void planar_rgb_to_uv(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opq)
Definition input.c:1196
static av_always_inline void rgbf32_to_uv_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused1, const uint8_t *_src, const uint8_t *unused2, int width, int is_be, int32_t *rgb2yuv)
Definition input.c:1336
static void bswap16UV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *_src1, const uint8_t *_src2, int width, uint32_t *unused, void *opq)
Definition input.c:618
static av_always_inline void ayuv64be_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *src, int width, int u_offset, int v_offset)
Definition input.c:689
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)
Definition input.c:1586
#define rdpx2(src)
#define y21xle_wrapper(bits, shift)
Definition input.c:580
static void read_vuyx_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:741
static void read_uyva_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:783
static void palToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *pal, void *opq)
Definition input.c:474
static void uyyvyyToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
Definition input.c:909
static void bgr24ToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *rgb2yuv, void *opq)
Definition input.c:1083
static void uyvyToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *unused, void *opq)
Definition input.c:898
#define r
Definition input.c:42
static void monoblack2Y_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
Definition input.c:532
static void planar_rgb_to_a(uint8_t *_dst, const uint8_t *src[4], int width, int32_t *unused, void *opq)
Definition input.c:1188
static av_always_inline void ayuv64le_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *src, int width, int u_offset, int v_offset)
Definition input.c:679
#define RGB48FUNCS(pattern, endianness, base_fmt)
Definition input.c:245
static av_always_inline void grayf16ToY16_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, int is_be, uint32_t *unused, Half2FloatTables *h2f_tbl)
Definition input.c:1601
static av_always_inline void rgbaf16ToUV_endian(uint16_t *dstU, uint16_t *dstV, int is_be, const uint16_t *src, int width, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
Definition input.c:1649
static av_always_inline void rgbaf16ToUV_half_endian(uint16_t *dstU, uint16_t *dstV, int is_be, const uint16_t *src, int width, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
Definition input.c:1629
#define RGB64FUNCS(pattern, endianness, base_fmt)
Definition input.c:126
static void read_ya16be_gray_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
Definition input.c:647
static av_always_inline void rgbaf16ToY_endian(uint16_t *dst, const uint16_t *src, int is_be, int width, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
Definition input.c:1666
static void read_xv30le_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:840
static void rgba64leToA_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
Definition input.c:434
static av_always_inline void rgbf32_to_uv_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused1, const uint8_t *_src, const uint8_t *unused2, int width, int is_be, int32_t *rgb2yuv)
Definition input.c:1357
static void bgr24ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *rgb2yuv, void *opq)
Definition input.c:1102
#define rgb9plus_msb_planar_funcs(nbits)
Definition input.c:1479
static av_always_inline void rgbf16ToUV_half_endian(uint16_t *dstU, uint16_t *dstV, int is_be, const uint16_t *src, int width, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
Definition input.c:1689
static void rgb24ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *rgb2yuv, void *opq)
Definition input.c:1155
static av_always_inline void read_yaf16_gray_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, int is_be, uint32_t *unused, Half2FloatTables *h2f_tbl)
Definition input.c:1611
#define p01x_uv_wrapper(fmt, shift)
Definition input.c:950
static av_always_inline void rgbf16ToUV_endian(uint16_t *dstU, uint16_t *dstV, int is_be, const uint16_t *src, int width, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl)
Definition input.c:1709
static av_always_inline void rgbf32_to_y_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1, const uint8_t *unused2, int width, int is_be, int32_t *rgb2yuv)
Definition input.c:1380
#define ayuv64_UV_funcs(pixfmt, U, V)
Definition input.c:699
static void vyuToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:793
static void abgrToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
Definition input.c:454
static void rgbaToA_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
Definition input.c:464
static void read_ayuv64le_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:663
static void read_xv36le_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:859
static av_always_inline void grayf32ToY16_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1, const uint8_t *unused2, int width, int is_be, uint32_t *unused)
Definition input.c:1399
static void rgb24ToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *rgb2yuv, void *opq)
Definition input.c:1136
#define b
Definition input.c:43
static void read_ayuv64be_A_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:723
static void gbr24pToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *gsrc, const uint8_t *bsrc, const uint8_t *rsrc, int width, uint32_t *rgb2yuv, void *opq)
Definition input.c:414
static void planar_rgb_to_y(uint8_t *_dst, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opq)
Definition input.c:1174
static void yuy2ToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *unused, void *opq)
Definition input.c:558
static av_always_inline void read_yaf32_alpha_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1, const uint8_t *unused2, int width, int is_be, uint32_t *unused)
Definition input.c:1422
static void read_ya16le_gray_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
Definition input.c:631
static av_always_inline void rgb16_32ToUV_c_template(int16_t *dstU, int16_t *dstV, const uint8_t *src, int width, enum AVPixelFormat origin, int shr, int shg, int shb, int shp, int maskr, int maskg, int maskb, int rsh, int gsh, int bsh, int S, int32_t *rgb2yuv, int is_be)
Definition input.c:289
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)
Definition input.c:1300
static void vyuToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:801
static void uyvyToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
Definition input.c:890
static void rgba64beToA_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
Definition input.c:444
static av_always_inline void rgb64ToUV_c_template(uint16_t *dstU, uint16_t *dstV, const uint16_t *src1, const uint16_t *src2, int width, enum AVPixelFormat origin, int32_t *rgb2yuv, int is_be)
Definition input.c:61
static av_always_inline void rgb48ToUV_c_template(uint16_t *dstU, uint16_t *dstV, const uint16_t *src1, const uint16_t *src2, int width, enum AVPixelFormat origin, int32_t *rgb2yuv, int is_be)
Definition input.c:150
static void nv12ToUV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *unused, void *opq)
Definition input.c:936
#define RGB16_32FUNCS(base_fmt, endianness, name, shr, shg, shb, shp, maskr, maskg, maskb, rsh, gsh, bsh, S)
Definition input.c:390
static void read_ya16be_alpha_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
Definition input.c:655
static av_always_inline void rgb48ToY_c_template(uint16_t *dst, const uint16_t *src, int width, enum AVPixelFormat origin, int32_t *rgb2yuv, int is_be)
Definition input.c:134
static void rgb24ToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *rgb2yuv, void *opq)
Definition input.c:1121
#define shf16_wrapper(shift)
static av_always_inline void read_yaf32_gray_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1, const uint8_t *unused2, int width, int is_be, uint32_t *unused)
Definition input.c:1411
static av_always_inline void read_yaf16_alpha_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, int is_be, uint32_t *unused, Half2FloatTables *h2f_tbl)
Definition input.c:1620
#define rgb9plus_planar_transparency_funcs(nbits)
Definition input.c:1448
static void read_xv36le_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:850
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)
Definition input.c:1319
static av_always_inline void rgb64ToY_c_template(uint16_t *dst, const uint16_t *src, int width, enum AVPixelFormat origin, int32_t *rgb2yuv, int is_be)
Definition input.c:46
static void read_xv36be_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:869
#define rgb9plus_planar_funcs(nbits)
Definition input.c:1475
static void monowhite2Y_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
Definition input.c:514
static av_always_inline void rgb64ToUV_half_c_template(uint16_t *dstU, uint16_t *dstV, const uint16_t *src1, const uint16_t *src2, int width, enum AVPixelFormat origin, int32_t *rgb2yuv, int is_be)
Definition input.c:80
static void read_vuya_A_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:749
static void palToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *pal, void *opq)
Definition input.c:486
#define rgbf32_funcs_endian(endian_name, endian)
static void yuy2ToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, int width, uint32_t *unused, void *opq)
Definition input.c:550
static void read_ayuv_A_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:775
static void read_xv30le_Y_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused0, const uint8_t *unused1, int width, uint32_t *unused2, void *opq)
Definition input.c:831
#define input_pixel(pos)
Definition input.c:33
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)
Definition input.c:1570
#define AV_RL32(p)
#define AV_RL16(p)
#define AV_WN16(p, v)
#define AV_RB16(p)
Macro definitions for various function/variable attributes.
#define av_always_inline
Definition attributes.h:72
#define av_fallthrough
Definition attributes.h:67
#define av_cold
Definition attributes.h:117
#define lrintf(x)
Definition libm_mips.h:72
#define r_b
#define b_r
#define AV_PIX_FMT_BGR444
Definition pixfmt.h:539
#define AV_PIX_FMT_BGR555
Definition pixfmt.h:538
#define AV_PIX_FMT_BGR48
Definition pixfmt.h:536
#define AV_PIX_FMT_RGBA64
Definition pixfmt.h:535
#define AV_PIX_FMT_BGR32
Definition pixfmt.h:519
#define AV_PIX_FMT_RGB48
Definition pixfmt.h:531
#define AV_PIX_FMT_X2RGB10
Definition pixfmt.h:619
AVPixelFormat
Pixel format.
Definition pixfmt.h:71
@ AV_PIX_FMT_YAF16BE
IEEE-754 half precision packed YA, 16 bits gray, 16 bits alpha, 32bpp, big-endian.
Definition pixfmt.h:485
@ AV_PIX_FMT_YUV444P16BE
planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
Definition pixfmt.h:133
@ AV_PIX_FMT_UYVA
packed UYVA 4:4:4:4, 32bpp (1 Cr & Cb sample per 1x1 Y & A samples), UYVAUYVA...
Definition pixfmt.h:444
@ AV_PIX_FMT_GRAY16BE
Y , 16bpp, big-endian.
Definition pixfmt.h:104
@ AV_PIX_FMT_P210BE
interleaved chroma YUV 4:2:2, 20bpp, data in the high bits, big-endian
Definition pixfmt.h:389
@ AV_PIX_FMT_NV12
planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (firs...
Definition pixfmt.h:96
@ AV_PIX_FMT_YUV420P16BE
planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
Definition pixfmt.h:129
@ AV_PIX_FMT_V30XLE
packed VYUX 4:4:4 like XV30, 32bpp, (msb)10V 10Y 10U 2X(lsb), little-endian
Definition pixfmt.h:449
@ AV_PIX_FMT_AYUV64BE
packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian
Definition pixfmt.h:303
@ AV_PIX_FMT_P010LE
like NV12, with 10bpp per component, data in the high bits, zeros in the low bits,...
Definition pixfmt.h:307
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
Definition pixfmt.h:75
@ AV_PIX_FMT_GRAY10LE
Y , 10bpp, little-endian.
Definition pixfmt.h:321
@ AV_PIX_FMT_GRAYF32LE
IEEE-754 single precision Y, 32bpp, little-endian.
Definition pixfmt.h:364
@ AV_PIX_FMT_P210LE
interleaved chroma YUV 4:2:2, 20bpp, data in the high bits, little-endian
Definition pixfmt.h:390
@ AV_PIX_FMT_GBRP10BE
planar GBR 4:4:4 30bpp, big-endian
Definition pixfmt.h:169
@ AV_PIX_FMT_YA16BE
16 bits gray, 16 bits alpha (big-endian)
Definition pixfmt.h:209
@ AV_PIX_FMT_YUV444P12MSBBE
planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), lowest bits zero, big-endian
Definition pixfmt.h:493
@ AV_PIX_FMT_YUVA420P9BE
planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian
Definition pixfmt.h:175
@ AV_PIX_FMT_XV36LE
packed XVYU 4:4:4, 48bpp, data in the high bits, zeros in the low bits, little-endian,...
Definition pixfmt.h:418
@ AV_PIX_FMT_YUVA444P12BE
planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, big-endian
Definition pixfmt.h:368
@ AV_PIX_FMT_NV42
as above, but U and V bytes are swapped
Definition pixfmt.h:372
@ AV_PIX_FMT_YUV420P14LE
planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
Definition pixfmt.h:270
@ AV_PIX_FMT_YUV440P10BE
planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian
Definition pixfmt.h:299
@ AV_PIX_FMT_GBRPF16BE
IEEE-754 half precision planer GBR 4:4:4, 48bpp, big-endian.
Definition pixfmt.h:466
@ AV_PIX_FMT_NV21
as above, but U and V bytes are swapped
Definition pixfmt.h:97
@ AV_PIX_FMT_XV30LE
packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), little-endian, variant of Y410 where alpha channe...
Definition pixfmt.h:415
@ AV_PIX_FMT_GBRPF32BE
IEEE-754 single precision planar GBR 4:4:4, 96bpp, big-endian.
Definition pixfmt.h:341
@ AV_PIX_FMT_MONOBLACK
Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb.
Definition pixfmt.h:83
@ AV_PIX_FMT_BGR565BE
packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian
Definition pixfmt.h:117
@ AV_PIX_FMT_RGBF32LE
IEEE-754 single precision packed RGB 32:32:32, 96bpp, RGBRGB..., little-endian.
Definition pixfmt.h:421
@ AV_PIX_FMT_YUVA422P12BE
planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, big-endian
Definition pixfmt.h:366
@ AV_PIX_FMT_YUVA444P9LE
planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian
Definition pixfmt.h:180
@ AV_PIX_FMT_YUVA444P10LE
planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
Definition pixfmt.h:186
@ AV_PIX_FMT_VUYX
packed VUYX 4:4:4:4, 32bpp, Variant of VUYA where alpha channel is left undefined
Definition pixfmt.h:406
@ AV_PIX_FMT_GBRP9LE
planar GBR 4:4:4 27bpp, little-endian
Definition pixfmt.h:168
@ AV_PIX_FMT_NV20LE
interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
Definition pixfmt.h:199
@ AV_PIX_FMT_GBRP10MSBBE
planar GBR 4:4:4 30bpp, lowest bits zero, big-endian
Definition pixfmt.h:495
@ AV_PIX_FMT_YUV444P14BE
planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
Definition pixfmt.h:277
@ AV_PIX_FMT_YUVA420P10BE
planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian)
Definition pixfmt.h:181
@ AV_PIX_FMT_YUVA422P12LE
planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, little-endian
Definition pixfmt.h:367
@ AV_PIX_FMT_P416LE
interleaved chroma YUV 4:4:4, 48bpp, little-endian
Definition pixfmt.h:399
@ AV_PIX_FMT_P016LE
like NV12, with 16bpp per component, little-endian
Definition pixfmt.h:323
@ AV_PIX_FMT_P010BE
like NV12, with 10bpp per component, data in the high bits, zeros in the low bits,...
Definition pixfmt.h:308
@ AV_PIX_FMT_AYUV64LE
packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian
Definition pixfmt.h:302
@ AV_PIX_FMT_ARGB
packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
Definition pixfmt.h:99
@ AV_PIX_FMT_RGB555BE
packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined
Definition pixfmt.h:114
@ AV_PIX_FMT_YVYU422
packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb
Definition pixfmt.h:207
@ AV_PIX_FMT_GBRP12BE
planar GBR 4:4:4 36bpp, big-endian
Definition pixfmt.h:279
@ AV_PIX_FMT_YUVA422P9LE
planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian
Definition pixfmt.h:178
@ AV_PIX_FMT_GRAY12LE
Y , 12bpp, little-endian.
Definition pixfmt.h:319
@ AV_PIX_FMT_P012BE
like NV12, with 12bpp per component, data in the high bits, zeros in the low bits,...
Definition pixfmt.h:409
@ AV_PIX_FMT_GBRAP12BE
planar GBR 4:4:4:4 48bpp, big-endian
Definition pixfmt.h:310
@ AV_PIX_FMT_YUV420P9LE
planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
Definition pixfmt.h:154
@ AV_PIX_FMT_NV20BE
interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
Definition pixfmt.h:200
@ AV_PIX_FMT_BGRA
packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
Definition pixfmt.h:102
@ AV_PIX_FMT_GRAY12BE
Y , 12bpp, big-endian.
Definition pixfmt.h:318
@ AV_PIX_FMT_X2BGR10LE
packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G 10R(lsb), little-endian, X=unused/undefined
Definition pixfmt.h:386
@ AV_PIX_FMT_GRAYF16BE
IEEE-754 half precision Y, 16bpp, big-endian.
Definition pixfmt.h:471
@ AV_PIX_FMT_BGR48BE
packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big...
Definition pixfmt.h:145
@ AV_PIX_FMT_YA16LE
16 bits gray, 16 bits alpha (little-endian)
Definition pixfmt.h:210
@ AV_PIX_FMT_YUVA420P10LE
planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
Definition pixfmt.h:182
@ AV_PIX_FMT_GRAY14LE
Y , 14bpp, little-endian.
Definition pixfmt.h:361
@ AV_PIX_FMT_UYVY422
packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
Definition pixfmt.h:88
@ AV_PIX_FMT_Y210LE
packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, little-endian
Definition pixfmt.h:382
@ AV_PIX_FMT_P012LE
like NV12, with 12bpp per component, data in the high bits, zeros in the low bits,...
Definition pixfmt.h:408
@ AV_PIX_FMT_RGB48BE
packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big...
Definition pixfmt.h:109
@ AV_PIX_FMT_ABGR
packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
Definition pixfmt.h:101
@ AV_PIX_FMT_YAF16LE
IEEE-754 half precision packed YA, 16 bits gray, 16 bits alpha, 32bpp, little-endian.
Definition pixfmt.h:486
@ AV_PIX_FMT_YUV422P10BE
planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
Definition pixfmt.h:157
@ AV_PIX_FMT_P016BE
like NV12, with 16bpp per component, big-endian
Definition pixfmt.h:324
@ AV_PIX_FMT_YUVA422P10LE
planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian)
Definition pixfmt.h:184
@ AV_PIX_FMT_YUV444P10MSBBE
planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), lowest bits zero, big-endian
Definition pixfmt.h:491
@ AV_PIX_FMT_YUV420P10LE
planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
Definition pixfmt.h:156
@ AV_PIX_FMT_GBRPF16LE
IEEE-754 half precision planer GBR 4:4:4, 48bpp, little-endian.
Definition pixfmt.h:467
@ AV_PIX_FMT_RGBA64BE
packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is st...
Definition pixfmt.h:202
@ AV_PIX_FMT_RGB8
packed RGB 3:3:2, 8bpp, (msb)3R 3G 2B(lsb)
Definition pixfmt.h:93
@ AV_PIX_FMT_NV24
planar YUV 4:4:4, 24bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (firs...
Definition pixfmt.h:371
@ AV_PIX_FMT_YAF32BE
IEEE-754 single precision packed YA, 32 bits gray, 32 bits alpha, 64bpp, big-endian.
Definition pixfmt.h:482
@ AV_PIX_FMT_GBRAP14BE
planar GBR 4:4:4:4 56bpp, big-endian
Definition pixfmt.h:432
@ AV_PIX_FMT_RGBA64LE
packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is st...
Definition pixfmt.h:203
@ AV_PIX_FMT_YUV422P16LE
planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
Definition pixfmt.h:130
@ AV_PIX_FMT_YUV420P14BE
planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
Definition pixfmt.h:269
@ AV_PIX_FMT_GBRAP16BE
planar GBRA 4:4:4:4 64bpp, big-endian
Definition pixfmt.h:213
@ AV_PIX_FMT_YUV444P14LE
planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
Definition pixfmt.h:278
@ AV_PIX_FMT_GBRPF32LE
IEEE-754 single precision planar GBR 4:4:4, 96bpp, little-endian.
Definition pixfmt.h:342
@ AV_PIX_FMT_YUVA444P9BE
planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian
Definition pixfmt.h:179
@ AV_PIX_FMT_YUV422P12LE
planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
Definition pixfmt.h:272
@ AV_PIX_FMT_BGR8
packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb)
Definition pixfmt.h:90
@ AV_PIX_FMT_RGB444LE
packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, X=unused/undefined
Definition pixfmt.h:136
@ AV_PIX_FMT_YUV444P10BE
planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
Definition pixfmt.h:161
@ AV_PIX_FMT_P410LE
interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, little-endian
Definition pixfmt.h:393
@ AV_PIX_FMT_YUV440P12LE
planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian
Definition pixfmt.h:300
@ AV_PIX_FMT_GBRP10MSBLE
planar GBR 4:4:4 30bpp, lowest bits zero, little-endian
Definition pixfmt.h:496
@ AV_PIX_FMT_RGB4_BYTE
packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb)
Definition pixfmt.h:95
@ AV_PIX_FMT_BGR4_BYTE
packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb)
Definition pixfmt.h:92
@ AV_PIX_FMT_NV16
interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition pixfmt.h:198
@ AV_PIX_FMT_YUVA420P9LE
planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian
Definition pixfmt.h:176
@ AV_PIX_FMT_YAF32LE
IEEE-754 single precision packed YA, 32 bits gray, 32 bits alpha, 64bpp, little-endian.
Definition pixfmt.h:483
@ AV_PIX_FMT_RGBA
packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
Definition pixfmt.h:100
@ AV_PIX_FMT_YUV444P9LE
planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
Definition pixfmt.h:160
@ AV_PIX_FMT_RGBF16LE
IEEE-754 half precision packed RGB 16:16:16, 48bpp, RGBRGB..., little-endian.
Definition pixfmt.h:452
@ AV_PIX_FMT_GBRAP
planar GBRA 4:4:4:4 32bpp
Definition pixfmt.h:212
@ AV_PIX_FMT_GBRP12LE
planar GBR 4:4:4 36bpp, little-endian
Definition pixfmt.h:280
@ AV_PIX_FMT_GRAY9BE
Y , 9bpp, big-endian.
Definition pixfmt.h:338
@ AV_PIX_FMT_YUVA444P16LE
planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
Definition pixfmt.h:192
@ AV_PIX_FMT_YUVA422P10BE
planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian)
Definition pixfmt.h:183
@ AV_PIX_FMT_UYYVYY411
packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
Definition pixfmt.h:89
@ AV_PIX_FMT_P216LE
interleaved chroma YUV 4:2:2, 32bpp, little-endian
Definition pixfmt.h:396
@ AV_PIX_FMT_YUVA422P16BE
planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian)
Definition pixfmt.h:189
@ AV_PIX_FMT_BGRA64BE
packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is st...
Definition pixfmt.h:204
@ AV_PIX_FMT_P416BE
interleaved chroma YUV 4:4:4, 48bpp, big-endian
Definition pixfmt.h:398
@ AV_PIX_FMT_P212BE
interleaved chroma YUV 4:2:2, 24bpp, data in the high bits, big-endian
Definition pixfmt.h:426
@ AV_PIX_FMT_YUV444P10MSBLE
planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), lowest bits zero, little-endian
Definition pixfmt.h:492
@ AV_PIX_FMT_RGB565LE
packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian
Definition pixfmt.h:113
@ AV_PIX_FMT_GBRP16BE
planar GBR 4:4:4 48bpp, big-endian
Definition pixfmt.h:171
@ AV_PIX_FMT_AYUV
packed AYUV 4:4:4:4, 32bpp (1 Cr & Cb sample per 1x1 Y & A samples), AYUVAYUV...
Definition pixfmt.h:442
@ AV_PIX_FMT_GBRAP12LE
planar GBR 4:4:4:4 48bpp, little-endian
Definition pixfmt.h:311
@ AV_PIX_FMT_GBRP9BE
planar GBR 4:4:4 27bpp, big-endian
Definition pixfmt.h:167
@ AV_PIX_FMT_YUVA420P16LE
planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
Definition pixfmt.h:188
@ AV_PIX_FMT_RGB555LE
packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined
Definition pixfmt.h:115
@ AV_PIX_FMT_BGR444BE
packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, X=unused/undefined
Definition pixfmt.h:139
@ AV_PIX_FMT_RGB48LE
packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as lit...
Definition pixfmt.h:110
@ AV_PIX_FMT_BGR555BE
packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined
Definition pixfmt.h:119
@ AV_PIX_FMT_GBRAPF32BE
IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, big-endian.
Definition pixfmt.h:343
@ AV_PIX_FMT_XV36BE
packed XVYU 4:4:4, 48bpp, data in the high bits, zeros in the low bits, big-endian,...
Definition pixfmt.h:417
@ AV_PIX_FMT_GBRP12MSBLE
planar GBR 4:4:4 36bpp, lowest bits zero, little-endian
Definition pixfmt.h:498
@ AV_PIX_FMT_Y212LE
packed YUV 4:2:2 like YUYV422, 24bpp, data in the high bits, zeros in the low bits,...
Definition pixfmt.h:412
@ AV_PIX_FMT_Y216LE
packed YUV 4:2:2 like YUYV422, 32bpp, little-endian
Definition pixfmt.h:461
@ AV_PIX_FMT_BGR444LE
packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, X=unused/undefined
Definition pixfmt.h:138
@ AV_PIX_FMT_YUVA420P16BE
planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian)
Definition pixfmt.h:187
@ AV_PIX_FMT_YUV420P12LE
planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
Definition pixfmt.h:268
@ AV_PIX_FMT_X2RGB10LE
packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), little-endian, X=unused/undefined
Definition pixfmt.h:384
@ AV_PIX_FMT_YUV444P9BE
planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
Definition pixfmt.h:159
@ AV_PIX_FMT_GBRAPF32LE
IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, little-endian.
Definition pixfmt.h:344
@ AV_PIX_FMT_P410BE
interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, big-endian
Definition pixfmt.h:392
@ AV_PIX_FMT_GBRAP14LE
planar GBR 4:4:4:4 56bpp, little-endian
Definition pixfmt.h:433
@ AV_PIX_FMT_RGBAF16LE
IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., little-endian.
Definition pixfmt.h:404
@ AV_PIX_FMT_YUV422P9LE
planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
Definition pixfmt.h:164
@ AV_PIX_FMT_GRAYF32BE
IEEE-754 single precision Y, 32bpp, big-endian.
Definition pixfmt.h:363
@ AV_PIX_FMT_RGB444BE
packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, X=unused/undefined
Definition pixfmt.h:137
@ AV_PIX_FMT_YUV422P9BE
planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
Definition pixfmt.h:163
@ AV_PIX_FMT_BGR48LE
packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as lit...
Definition pixfmt.h:146
@ AV_PIX_FMT_GBRP14LE
planar GBR 4:4:4 42bpp, little-endian
Definition pixfmt.h:282
@ AV_PIX_FMT_XV48LE
packed XVYU 4:4:4, 64bpp, little-endian, variant of Y416 where alpha channel is left undefined
Definition pixfmt.h:464
@ AV_PIX_FMT_YUV422P10LE
planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
Definition pixfmt.h:158
@ AV_PIX_FMT_GRAY16LE
Y , 16bpp, little-endian.
Definition pixfmt.h:105
@ AV_PIX_FMT_GBRP10LE
planar GBR 4:4:4 30bpp, little-endian
Definition pixfmt.h:170
@ AV_PIX_FMT_GBRAP10BE
planar GBR 4:4:4:4 40bpp, big-endian
Definition pixfmt.h:313
@ AV_PIX_FMT_GBRAPF16BE
IEEE-754 half precision planar GBRA 4:4:4:4, 64bpp, big-endian.
Definition pixfmt.h:468
@ AV_PIX_FMT_YUV444P12MSBLE
planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), lowest bits zero, little-endian
Definition pixfmt.h:494
@ AV_PIX_FMT_GRAYF16LE
IEEE-754 half precision Y, 16bpp, little-endian.
Definition pixfmt.h:472
@ AV_PIX_FMT_RGB565BE
packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian
Definition pixfmt.h:112
@ AV_PIX_FMT_BGR555LE
packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined
Definition pixfmt.h:120
@ AV_PIX_FMT_YUV420P12BE
planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
Definition pixfmt.h:267
@ AV_PIX_FMT_BGRA64LE
packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is st...
Definition pixfmt.h:205
@ AV_PIX_FMT_YUV440P12BE
planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian
Definition pixfmt.h:301
@ AV_PIX_FMT_GBRAP10LE
planar GBR 4:4:4:4 40bpp, little-endian
Definition pixfmt.h:314
@ AV_PIX_FMT_YUYV422
packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
Definition pixfmt.h:74
@ AV_PIX_FMT_YUV422P16BE
planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
Definition pixfmt.h:131
@ AV_PIX_FMT_RGBAF16BE
IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., big-endian.
Definition pixfmt.h:403
@ AV_PIX_FMT_PAL8
8 bits with AV_PIX_FMT_RGB32 palette
Definition pixfmt.h:84
@ AV_PIX_FMT_BGR24
packed RGB 8:8:8, 24bpp, BGRBGR...
Definition pixfmt.h:76
@ AV_PIX_FMT_GRAY9LE
Y , 9bpp, little-endian.
Definition pixfmt.h:339
@ AV_PIX_FMT_VUYA
packed VUYA 4:4:4:4, 32bpp (1 Cr & Cb sample per 1x1 Y & A samples), VUYAVUYA...
Definition pixfmt.h:401
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
Definition pixfmt.h:165
@ AV_PIX_FMT_XV48BE
packed XVYU 4:4:4, 64bpp, big-endian, variant of Y416 where alpha channel is left undefined
Definition pixfmt.h:463
@ AV_PIX_FMT_YUV422P14LE
planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
Definition pixfmt.h:274
@ AV_PIX_FMT_GBRAP16LE
planar GBRA 4:4:4:4 64bpp, little-endian
Definition pixfmt.h:214
@ AV_PIX_FMT_YUV420P10BE
planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
Definition pixfmt.h:155
@ AV_PIX_FMT_GBRAPF16LE
IEEE-754 half precision planar GBRA 4:4:4:4, 64bpp, little-endian.
Definition pixfmt.h:469
@ AV_PIX_FMT_YUV420P9BE
The following 12 formats have the disadvantage of needing 1 format for each bit depth.
Definition pixfmt.h:153
@ AV_PIX_FMT_GRAY10BE
Y , 10bpp, big-endian.
Definition pixfmt.h:320
@ AV_PIX_FMT_YUVA444P10BE
planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian)
Definition pixfmt.h:185
@ AV_PIX_FMT_YUV440P10LE
planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian
Definition pixfmt.h:298
@ AV_PIX_FMT_YA8
8 bits gray, 8 bits alpha
Definition pixfmt.h:140
@ AV_PIX_FMT_YUV444P16LE
planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
Definition pixfmt.h:132
@ AV_PIX_FMT_GRAY14BE
Y , 14bpp, big-endian.
Definition pixfmt.h:360
@ AV_PIX_FMT_P212LE
interleaved chroma YUV 4:2:2, 24bpp, data in the high bits, little-endian
Definition pixfmt.h:427
@ AV_PIX_FMT_GBRP14BE
planar GBR 4:4:4 42bpp, big-endian
Definition pixfmt.h:281
@ AV_PIX_FMT_BGR565LE
packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian
Definition pixfmt.h:118
@ AV_PIX_FMT_YUV422P14BE
planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
Definition pixfmt.h:273
@ AV_PIX_FMT_P216BE
interleaved chroma YUV 4:2:2, 32bpp, big-endian
Definition pixfmt.h:395
@ AV_PIX_FMT_YUV444P12BE
planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
Definition pixfmt.h:275
@ AV_PIX_FMT_YUVA444P16BE
planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian)
Definition pixfmt.h:191
@ AV_PIX_FMT_YUVA422P16LE
planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian)
Definition pixfmt.h:190
@ AV_PIX_FMT_RGBF32BE
IEEE-754 single precision packed RGB 32:32:32, 96bpp, RGBRGB..., big-endian.
Definition pixfmt.h:420
@ AV_PIX_FMT_GBRP16LE
planar GBR 4:4:4 48bpp, little-endian
Definition pixfmt.h:172
@ AV_PIX_FMT_YUVA422P9BE
planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian
Definition pixfmt.h:177
@ AV_PIX_FMT_VYU444
packed VYU 4:4:4, 24bpp (1 Cr & Cb sample per 1x1 Y), VYUVYU...
Definition pixfmt.h:446
@ AV_PIX_FMT_YUVA444P12LE
planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, little-endian
Definition pixfmt.h:369
@ AV_PIX_FMT_MONOWHITE
Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb.
Definition pixfmt.h:82
@ AV_PIX_FMT_YUV444P10LE
planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
Definition pixfmt.h:162
@ AV_PIX_FMT_YUV422P12BE
planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
Definition pixfmt.h:271
@ AV_PIX_FMT_P412BE
interleaved chroma YUV 4:4:4, 36bpp, data in the high bits, big-endian
Definition pixfmt.h:429
@ AV_PIX_FMT_GBRP12MSBBE
planar GBR 4:4:4 36bpp, lowest bits zero, big-endian
Definition pixfmt.h:497
@ AV_PIX_FMT_P412LE
interleaved chroma YUV 4:4:4, 36bpp, data in the high bits, little-endian
Definition pixfmt.h:430
@ AV_PIX_FMT_YUV420P16LE
planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
Definition pixfmt.h:128
@ AV_PIX_FMT_RGBF16BE
IEEE-754 half precision packed RGB 16:16:16, 48bpp, RGBRGB..., big-endian.
Definition pixfmt.h:451
@ AV_PIX_FMT_YUV444P12LE
planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
Definition pixfmt.h:276
#define AV_PIX_FMT_RGB32_1
Definition pixfmt.h:518
#define AV_PIX_FMT_BGR32_1
Definition pixfmt.h:520
#define AV_PIX_FMT_X2BGR10
Definition pixfmt.h:620
#define AV_PIX_FMT_BGR565
Definition pixfmt.h:537
#define AV_PIX_FMT_RGB565
Definition pixfmt.h:532
#define AV_PIX_FMT_BGRA64
Definition pixfmt.h:540
#define AV_PIX_FMT_RGB444
Definition pixfmt.h:534
#define AV_PIX_FMT_RGB32
Definition pixfmt.h:517
#define AV_PIX_FMT_RGB555
Definition pixfmt.h:533
#define av_bswap16
Definition bswap.h:28
Definition rpzaenc.c:60
#define BU_IDX
#define RV_IDX
void(* planar2_YV12_fn)(uint8_t *dst, uint8_t *dst2, const uint8_t *src, const uint8_t *src2, const uint8_t *src3, int width, uint32_t *pal, void *opaque)
Unscaled conversion of chroma plane to YV12 for horizontal scaler.
void(* planar1_YV12_fn)(uint8_t *dst, const uint8_t *src, const uint8_t *src2, const uint8_t *src3, int width, uint32_t *pal, void *opaque)
Unscaled conversion of luma/alpha plane to YV12 for horizontal scaler.
#define RY_IDX
#define BV_IDX
#define GV_IDX
void(* planarX_YV12_fn)(uint8_t *dst, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opaque)
Unscaled conversion of arbitrary planar data (e.g.
#define GU_IDX
#define BY_IDX
void ff_sws_init_input_funcs(SwsInternal *c, planar1_YV12_fn *lumToYV12, planar1_YV12_fn *alpToYV12, planar2_YV12_fn *chrToYV12, planarX_YV12_fn *readLumPlanar, planarX_YV12_fn *readAlpPlanar, planarX2_YV12_fn *readChrPlanar)
#define GY_IDX
#define RU_IDX
#define RGB2YUV_SHIFT
void(* planarX2_YV12_fn)(uint8_t *dst, uint8_t *dst2, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opaque)
#define src1
Definition h264pred.c:141
#define src
Definition vp8dsp.c:248
#define width
Definition dsp.h:89
const char * g
Definition vf_curves.c:128
static double c[64]