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