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