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