Go to the documentation of this file.
31 #define input_pixel(pos) (is_be ? AV_RB16(pos) : AV_RL16(pos))
38 #define IS_BE(ENDIAN_IDENTIFIER) IS_BE_ ## ENDIAN_IDENTIFIER
40 #define r ((origin == AV_PIX_FMT_BGR48BE || origin == AV_PIX_FMT_BGR48LE || origin == AV_PIX_FMT_BGRA64BE || origin == AV_PIX_FMT_BGRA64LE) ? b_r : r_b)
41 #define b ((origin == AV_PIX_FMT_BGR48BE || origin == AV_PIX_FMT_BGR48LE || origin == AV_PIX_FMT_BGRA64BE || origin == AV_PIX_FMT_BGRA64LE) ? r_b : b_r)
60 const uint16_t *
src1,
const uint16_t *
src2,
79 const uint16_t *
src1,
const uint16_t *
src2,
96 #define RGB64FUNCS_EXT(pattern, BE_LE, origin, is_be) \
97 static void pattern ## 64 ## BE_LE ## ToY_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused0, const uint8_t *unused1,\
98 int width, uint32_t *rgb2yuv, void *opq) \
100 const uint16_t *src = (const uint16_t *) _src; \
101 uint16_t *dst = (uint16_t *) _dst; \
102 rgb64ToY_c_template(dst, src, width, origin, rgb2yuv, is_be); \
105 static void pattern ## 64 ## BE_LE ## ToUV_c(uint8_t *_dstU, uint8_t *_dstV, \
106 const uint8_t *unused0, const uint8_t *_src1, const uint8_t *_src2, \
107 int width, uint32_t *rgb2yuv, void *opq) \
109 const uint16_t *src1 = (const uint16_t *) _src1, \
110 *src2 = (const uint16_t *) _src2; \
111 uint16_t *dstU = (uint16_t *) _dstU, *dstV = (uint16_t *) _dstV; \
112 rgb64ToUV_c_template(dstU, dstV, src1, src2, width, origin, rgb2yuv, is_be); \
115 static void pattern ## 64 ## BE_LE ## ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, \
116 const uint8_t *unused0, const uint8_t *_src1, const uint8_t *_src2, \
117 int width, uint32_t *rgb2yuv, void *opq) \
119 const uint16_t *src1 = (const uint16_t *) _src1, \
120 *src2 = (const uint16_t *) _src2; \
121 uint16_t *dstU = (uint16_t *) _dstU, *dstV = (uint16_t *) _dstV; \
122 rgb64ToUV_half_c_template(dstU, dstV, src1, src2, width, origin, rgb2yuv, is_be); \
124 #define RGB64FUNCS(pattern, endianness, base_fmt) \
125 RGB64FUNCS_EXT(pattern, endianness, base_fmt ## endianness, IS_BE(endianness))
150 const uint16_t *
src1,
151 const uint16_t *
src2,
172 const uint16_t *
src1,
173 const uint16_t *
src2,
199 #define RGB48FUNCS_EXT(pattern, BE_LE, origin, is_be) \
200 static void pattern ## 48 ## BE_LE ## ToY_c(uint8_t *_dst, \
201 const uint8_t *_src, \
202 const uint8_t *unused0, const uint8_t *unused1,\
207 const uint16_t *src = (const uint16_t *)_src; \
208 uint16_t *dst = (uint16_t *)_dst; \
209 rgb48ToY_c_template(dst, src, width, origin, rgb2yuv, is_be); \
212 static void pattern ## 48 ## BE_LE ## ToUV_c(uint8_t *_dstU, \
214 const uint8_t *unused0, \
215 const uint8_t *_src1, \
216 const uint8_t *_src2, \
221 const uint16_t *src1 = (const uint16_t *)_src1, \
222 *src2 = (const uint16_t *)_src2; \
223 uint16_t *dstU = (uint16_t *)_dstU, \
224 *dstV = (uint16_t *)_dstV; \
225 rgb48ToUV_c_template(dstU, dstV, src1, src2, width, origin, rgb2yuv, is_be); \
228 static void pattern ## 48 ## BE_LE ## ToUV_half_c(uint8_t *_dstU, \
230 const uint8_t *unused0, \
231 const uint8_t *_src1, \
232 const uint8_t *_src2, \
237 const uint16_t *src1 = (const uint16_t *)_src1, \
238 *src2 = (const uint16_t *)_src2; \
239 uint16_t *dstU = (uint16_t *)_dstU, \
240 *dstV = (uint16_t *)_dstV; \
241 rgb48ToUV_half_c_template(dstU, dstV, src1, src2, width, origin, rgb2yuv, is_be); \
243 #define RGB48FUNCS(pattern, endianness, base_fmt) \
244 RGB48FUNCS_EXT(pattern, endianness, base_fmt ## endianness, IS_BE(endianness))
251 #define input_pixel(i) ((origin == AV_PIX_FMT_RGBA || \
252 origin == AV_PIX_FMT_BGRA || \
253 origin == AV_PIX_FMT_ARGB || \
254 origin == AV_PIX_FMT_ABGR) \
255 ? AV_RN32A(&src[(i) * 4]) \
256 : ((origin == AV_PIX_FMT_X2RGB10LE || \
257 origin == AV_PIX_FMT_X2BGR10LE) \
258 ? AV_RL32(&src[(i) * 4]) \
259 : (is_be ? AV_RB16(&src[(i) * 2]) \
260 : AV_RL16(&src[(i) * 2]))))
268 int maskr,
int maskg,
270 int gsh,
int bsh,
int S,
274 const unsigned rnd = (32<<((
S)-1)) + (1<<(
S-7));
279 int b = (px & maskb) >> shb;
280 int g = (px & maskg) >> shg;
281 int r = (px & maskr) >> shr;
283 dst[
i] = (ry *
r + gy *
g + by *
b +
rnd) >> ((
S)-6);
294 int maskr,
int maskg,
296 int gsh,
int bsh,
int S,
301 const unsigned rnd = (256
u<<((
S)-1)) + (1<<(
S-7));
306 int b = (px & maskb) >> shb;
307 int g = (px & maskg) >> shg;
308 int r = (px & maskr) >> shr;
310 dstU[
i] = (ru *
r + gu *
g + bu *
b +
rnd) >> ((
S)-6);
311 dstV[
i] = (rv *
r + gv *
g + bv *
b +
rnd) >> ((
S)-6);
322 int maskr,
int maskg,
324 int gsh,
int bsh,
int S,
329 maskgx = ~(maskr | maskb);
330 const unsigned rnd = (256
U<<(
S)) + (1<<(
S-6));
339 int b,
r,
g = (px0 & maskgx) + (px1 & maskgx);
340 int rb = px0 + px1 -
g;
342 b = (rb & maskb) >> shb;
348 g = (
g & maskg) >> shg;
350 r = (rb & maskr) >> shr;
352 dstU[
i] = (ru *
r + gu *
g + bu *
b + (unsigned)
rnd) >> ((
S)-6+1);
353 dstV[
i] = (rv *
r + gv *
g + bv *
b + (unsigned)
rnd) >> ((
S)-6+1);
359 #define RGB16_32FUNCS_EXT(fmt, name, shr, shg, shb, shp, maskr, \
360 maskg, maskb, rsh, gsh, bsh, S, is_be) \
361 static void name ## ToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, \
362 int width, uint32_t *tab, void *opq) \
364 rgb16_32ToY_c_template((int16_t*)dst, src, width, fmt, shr, shg, shb, shp, \
365 maskr, maskg, maskb, rsh, gsh, bsh, S, tab, is_be); \
368 static void name ## ToUV_c(uint8_t *dstU, uint8_t *dstV, \
369 const uint8_t *unused0, const uint8_t *src, const uint8_t *dummy, \
370 int width, uint32_t *tab, void *opq) \
372 rgb16_32ToUV_c_template((int16_t*)dstU, (int16_t*)dstV, src, width, fmt, \
373 shr, shg, shb, shp, \
374 maskr, maskg, maskb, rsh, gsh, bsh, S, tab, is_be); \
377 static void name ## ToUV_half_c(uint8_t *dstU, uint8_t *dstV, \
378 const uint8_t *unused0, const uint8_t *src, \
379 const uint8_t *dummy, \
380 int width, uint32_t *tab, void *opq) \
382 rgb16_32ToUV_half_c_template((int16_t*)dstU, (int16_t*)dstV, src, width, fmt, \
383 shr, shg, shb, shp, \
384 maskr, maskg, maskb, \
385 rsh, gsh, bsh, S, tab, is_be); \
388 #define RGB16_32FUNCS(base_fmt, endianness, name, shr, shg, shb, shp, maskr, \
389 maskg, maskb, rsh, gsh, bsh, S) \
390 RGB16_32FUNCS_EXT(base_fmt ## endianness, name, shr, shg, shb, shp, maskr, \
391 maskg, maskb, rsh, gsh, bsh, S, IS_BE(endianness))
393 RGB16_32FUNCS(
AV_PIX_FMT_BGR32, , bgr32, 16, 0, 0, 0, 0xFF0000, 0xFF00, 0x00FF, 8, 0, 8,
RGB2YUV_SHIFT + 8)
394 RGB16_32FUNCS(
AV_PIX_FMT_BGR32_1, , bgr321, 16, 0, 0, 8, 0xFF0000, 0xFF00, 0x00FF, 8, 0, 8,
RGB2YUV_SHIFT + 8)
395 RGB16_32FUNCS(
AV_PIX_FMT_RGB32, , rgb32, 0, 0, 16, 0, 0x00FF, 0xFF00, 0xFF0000, 8, 0, 8,
RGB2YUV_SHIFT + 8)
396 RGB16_32FUNCS(
AV_PIX_FMT_RGB32_1, , rgb321, 0, 0, 16, 8, 0x00FF, 0xFF00, 0xFF0000, 8, 0, 8,
RGB2YUV_SHIFT + 8)
397 RGB16_32FUNCS(
AV_PIX_FMT_BGR565, LE, bgr16le, 0, 0, 0, 0, 0x001F, 0x07E0, 0xF800, 11, 5, 0,
RGB2YUV_SHIFT + 8)
398 RGB16_32FUNCS(
AV_PIX_FMT_BGR555, LE, bgr15le, 0, 0, 0, 0, 0x001F, 0x03E0, 0x7C00, 10, 5, 0,
RGB2YUV_SHIFT + 7)
399 RGB16_32FUNCS(
AV_PIX_FMT_BGR444, LE, bgr12le, 0, 0, 0, 0, 0x000F, 0x00F0, 0x0F00, 8, 4, 0,
RGB2YUV_SHIFT + 4)
400 RGB16_32FUNCS(
AV_PIX_FMT_RGB565, LE, rgb16le, 0, 0, 0, 0, 0xF800, 0x07E0, 0x001F, 0, 5, 11,
RGB2YUV_SHIFT + 8)
401 RGB16_32FUNCS(
AV_PIX_FMT_RGB555, LE, rgb15le, 0, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, 0, 5, 10,
RGB2YUV_SHIFT + 7)
402 RGB16_32FUNCS(
AV_PIX_FMT_RGB444, LE, rgb12le, 0, 0, 0, 0, 0x0F00, 0x00F0, 0x000F, 0, 4, 8,
RGB2YUV_SHIFT + 4)
403 RGB16_32FUNCS(
AV_PIX_FMT_BGR565, BE, bgr16be, 0, 0, 0, 0, 0x001F, 0x07E0, 0xF800, 11, 5, 0,
RGB2YUV_SHIFT + 8)
404 RGB16_32FUNCS(
AV_PIX_FMT_BGR555, BE, bgr15be, 0, 0, 0, 0, 0x001F, 0x03E0, 0x7C00, 10, 5, 0,
RGB2YUV_SHIFT + 7)
405 RGB16_32FUNCS(
AV_PIX_FMT_BGR444, BE, bgr12be, 0, 0, 0, 0, 0x000F, 0x00F0, 0x0F00, 8, 4, 0,
RGB2YUV_SHIFT + 4)
406 RGB16_32FUNCS(
AV_PIX_FMT_RGB565, BE, rgb16be, 0, 0, 0, 0, 0xF800, 0x07E0, 0x001F, 0, 5, 11,
RGB2YUV_SHIFT + 8)
407 RGB16_32FUNCS(
AV_PIX_FMT_RGB555, BE, rgb15be, 0, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, 0, 5, 10,
RGB2YUV_SHIFT + 7)
408 RGB16_32FUNCS(
AV_PIX_FMT_RGB444, BE, rgb12be, 0, 0, 0, 0, 0x0F00, 0x00F0, 0x000F, 0, 4, 8,
RGB2YUV_SHIFT + 4)
409 RGB16_32FUNCS(
AV_PIX_FMT_X2RGB10, LE, rgb30le, 16, 6, 0, 0, 0x3FF00000, 0xFFC00, 0x3FF, 0, 0, 4,
RGB2YUV_SHIFT + 6)
410 RGB16_32FUNCS(
AV_PIX_FMT_X2BGR10, LE, bgr30le, 0, 6, 16, 0, 0x3FF, 0xFFC00, 0x3FF00000, 4, 0, 0,
RGB2YUV_SHIFT + 6)
413 const uint8_t *gsrc, const uint8_t *bsrc, const uint8_t *rsrc,
416 uint16_t *dstU = (uint16_t *)_dstU;
417 uint16_t *dstV = (uint16_t *)_dstV;
423 unsigned int g = gsrc[2*
i] + gsrc[2*
i+1];
424 unsigned int b = bsrc[2*
i] + bsrc[2*
i+1];
425 unsigned int r = rsrc[2*
i] + rsrc[2*
i+1];
433 const uint8_t *unused2,
int width, uint32_t *unused,
void *opq)
435 int16_t *
dst = (int16_t *)
_dst;
436 const uint16_t *
src = (
const uint16_t *)
_src;
443 const uint8_t *unused2,
int width, uint32_t *unused,
void *opq)
445 int16_t *
dst = (int16_t *)
_dst;
446 const uint16_t *
src = (
const uint16_t *)
_src;
453 const uint8_t *unused2,
int width, uint32_t *unused,
void *opq)
455 int16_t *
dst = (int16_t *)
_dst;
463 const uint8_t *unused2,
int width, uint32_t *unused,
void *opq)
465 int16_t *
dst = (int16_t *)
_dst;
473 const uint8_t *unused2,
int width, uint32_t *pal,
void *opq)
475 int16_t *
dst = (int16_t *)
_dst;
480 dst[
i]= (pal[d] >> 24)<<6 | pal[d]>>26;
485 const uint8_t *unused2,
int width, uint32_t *pal,
void *opq)
487 int16_t *
dst = (int16_t *)
_dst;
492 dst[
i] = (pal[d] & 0xFF)<<6;
497 const uint8_t *unused0,
const uint8_t *
src1,
const uint8_t *
src2,
498 int width, uint32_t *pal,
void *opq)
500 uint16_t *dstU = (uint16_t *)_dstU;
501 int16_t *dstV = (int16_t *)_dstV;
505 int p = pal[
src1[
i]];
507 dstU[
i] = (uint8_t)(p>> 8)<<6;
508 dstV[
i] = (uint8_t)(p>>16)<<6;
513 const uint8_t *unused2,
int width, uint32_t *unused,
void *opq)
515 int16_t *
dst = (int16_t *)
_dst;
520 for (j = 0; j < 8; j++)
521 dst[8*
i+j]= ((d>>(7-j))&1) * 16383;
525 for (j = 0; j < (
width&7); j++)
526 dst[8*
i+j]= ((d>>(7-j))&1) * 16383;
531 const uint8_t *unused2,
int width, uint32_t *unused,
void *opq)
533 int16_t *
dst = (int16_t *)
_dst;
538 for (j = 0; j < 8; j++)
539 dst[8*
i+j]= ((d>>(7-j))&1) * 16383;
543 for (j = 0; j < (
width&7); j++)
544 dst[8*
i+j] = ((d>>(7-j))&1) * 16383;
548 static void yuy2ToY_c(uint8_t *
dst,
const uint8_t *
src,
const uint8_t *unused1,
const uint8_t *unused2,
int width,
549 uint32_t *unused,
void *opq)
556 static void yuy2ToUV_c(uint8_t *dstU, uint8_t *dstV,
const uint8_t *unused0,
const uint8_t *
src1,
557 const uint8_t *
src2,
int width, uint32_t *unused,
void *opq)
561 dstU[
i] =
src1[4 *
i + 1];
562 dstV[
i] =
src1[4 *
i + 3];
567 static void yvy2ToUV_c(uint8_t *dstU, uint8_t *dstV,
const uint8_t *unused0,
const uint8_t *
src1,
568 const uint8_t *
src2,
int width, uint32_t *unused,
void *opq)
572 dstV[
i] =
src1[4 *
i + 1];
573 dstU[
i] =
src1[4 *
i + 3];
578 #define y21xle_wrapper(bits, shift) \
579 static void y2 ## bits ## le_UV_c(uint8_t *dstU, uint8_t *dstV, \
580 const uint8_t *unused0, \
581 const uint8_t *src, \
582 const uint8_t *unused1, int width, \
583 uint32_t *unused2, void *opq) \
586 for (i = 0; i < width; i++) { \
587 AV_WN16(dstU + i * 2, AV_RL16(src + i * 8 + 2) >> shift); \
588 AV_WN16(dstV + i * 2, AV_RL16(src + i * 8 + 6) >> shift); \
592 static void y2 ## bits ## le_Y_c(uint8_t *dst, const uint8_t *src, \
593 const uint8_t *unused0, \
594 const uint8_t *unused1, int width, \
595 uint32_t *unused2, void *opq) \
598 for (i = 0; i < width; i++) \
599 AV_WN16(dst + i * 2, AV_RL16(src + i * 4) >> shift); \
606 static
void bswap16Y_c(uint8_t *
_dst, const uint8_t *
_src, const uint8_t *unused1, const uint8_t *unused2,
int width,
607 uint32_t *unused,
void *opq)
610 const uint16_t *
src = (
const uint16_t *)
_src;
611 uint16_t *
dst = (uint16_t *)
_dst;
616 static void bswap16UV_c(uint8_t *_dstU, uint8_t *_dstV,
const uint8_t *unused0,
const uint8_t *_src1,
617 const uint8_t *_src2,
int width, uint32_t *unused,
void *opq)
620 const uint16_t *
src1 = (
const uint16_t *)_src1,
621 *
src2 = (
const uint16_t *)_src2;
622 uint16_t *dstU = (uint16_t *)_dstU, *dstV = (uint16_t *)_dstV;
630 uint32_t *unused,
void *opq)
638 uint32_t *unused,
void *opq)
646 uint32_t *unused,
void *opq)
654 uint32_t *unused,
void *opq)
662 uint32_t *unused2,
void *opq)
670 uint32_t *unused2,
void *opq)
678 int u_offset,
int v_offset)
688 int u_offset,
int v_offset)
697 #define ayuv64_UV_funcs(pixfmt, U, V) \
698 static void read_ ## pixfmt ## le_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, \
699 const uint8_t *unused1, int width, uint32_t *unused2, void *opq) \
701 ayuv64le_UV_c(dstU, dstV, src, width, U, V); \
704 static void read_ ## pixfmt ## be_UV_c(uint8_t *dstU, uint8_t *dstV, const uint8_t *unused0, const uint8_t *src, \
705 const uint8_t *unused1, int width, uint32_t *unused2, void *opq) \
707 ayuv64be_UV_c(dstU, dstV, src, width, U, V); \
713 static
void read_ayuv64le_A_c(uint8_t *
dst, const uint8_t *
src, const uint8_t *unused0, const uint8_t *unused1,
int width,
714 uint32_t *unused2,
void *opq)
722 uint32_t *unused2,
void *opq)
729 static void read_vuyx_UV_c(uint8_t *dstU, uint8_t *dstV,
const uint8_t *unused0,
const uint8_t *
src,
730 const uint8_t *unused1,
int width, uint32_t *unused2,
void *opq)
734 dstU[
i] =
src[
i * 4 + 1];
735 dstV[
i] =
src[
i * 4];
740 uint32_t *unused2,
void *opq)
748 uint32_t *unused2,
void *opq)
755 static void read_ayuv_UV_c(uint8_t *dstU, uint8_t *dstV,
const uint8_t *unused0,
const uint8_t *
src,
756 const uint8_t *unused1,
int width, uint32_t *unused2,
void *opq)
760 dstU[
i] =
src[
i * 4 + 2];
761 dstV[
i] =
src[
i * 4 + 3];
766 uint32_t *unused2,
void *opq)
774 uint32_t *unused2,
void *opq)
781 static void read_uyva_UV_c(uint8_t *dstU, uint8_t *dstV,
const uint8_t *unused0,
const uint8_t *
src,
782 const uint8_t *unused1,
int width, uint32_t *unused2,
void *opq)
786 dstU[
i] =
src[
i * 4];
787 dstV[
i] =
src[
i * 4 + 2];
791 static void vyuToY_c(uint8_t *
dst,
const uint8_t *
src,
const uint8_t *unused0,
const uint8_t *unused1,
int width,
792 uint32_t *unused2,
void *opq)
799 static void vyuToUV_c(uint8_t *dstU, uint8_t *dstV,
const uint8_t *unused0,
const uint8_t *
src,
800 const uint8_t *unused1,
int width, uint32_t *unused2,
void *opq)
804 dstU[
i] =
src[
i * 3 + 2];
805 dstV[
i] =
src[
i * 3];
810 uint32_t *unused2,
void *opq)
819 const uint8_t *unused1,
int width, uint32_t *unused2,
void *opq)
824 AV_WN16(dstU +
i * 2, (uv >> 2) & 0x3FFu);
825 AV_WN16(dstV +
i * 2, (uv >> 22) & 0x3FFu);
830 uint32_t *unused2,
void *opq)
839 const uint8_t *unused1,
int width, uint32_t *unused2,
void *opq)
849 uint32_t *unused2,
void *opq)
858 const uint8_t *unused1,
int width, uint32_t *unused2,
void *opq)
868 uint32_t *unused2,
void *opq)
877 const uint8_t *unused1,
int width, uint32_t *unused2,
void *opq)
888 static void uyvyToY_c(uint8_t *
dst,
const uint8_t *
src,
const uint8_t *unused1,
const uint8_t *unused2,
int width,
889 uint32_t *unused,
void *opq)
896 static void uyvyToUV_c(uint8_t *dstU, uint8_t *dstV,
const uint8_t *unused0,
const uint8_t *
src1,
897 const uint8_t *
src2,
int width, uint32_t *unused,
void *opq)
901 dstU[
i] =
src1[4 *
i + 0];
902 dstV[
i] =
src1[4 *
i + 2];
907 static void uyyvyyToY_c(uint8_t *
dst,
const uint8_t *
src,
const uint8_t *unused1,
const uint8_t *unused2,
908 int width, uint32_t *unused,
void *opq)
911 dst[
i] =
src[3 * (
i >> 1) + 1 + (
i & 1)];
914 static void uyyvyyToUV_c(uint8_t *dstU, uint8_t *dstV,
const uint8_t *unused0,
const uint8_t *
src1,
915 const uint8_t *
src2,
int width, uint32_t *unused,
void *opq)
918 dstU[
i] =
src1[6 *
i + 0];
919 dstV[
i] =
src1[6 *
i + 3];
929 dst1[
i] =
src[2 *
i + 0];
930 dst2[
i] =
src[2 *
i + 1];
935 const uint8_t *unused0,
const uint8_t *
src1,
const uint8_t *
src2,
936 int width, uint32_t *unused,
void *opq)
942 const uint8_t *unused0,
const uint8_t *
src1,
const uint8_t *
src2,
943 int width, uint32_t *unused,
void *opq)
948 #define p01x_uv_wrapper(fmt, shift) \
949 static void fmt ## LEToUV ## _c(uint8_t *dstU, \
951 const uint8_t *unused0, \
952 const uint8_t *src1, \
953 const uint8_t *src2, int width, \
954 uint32_t *unused, void *opq) \
957 for (i = 0; i < width; i++) { \
958 AV_WN16(dstU + i * 2, AV_RL16(src1 + i * 4 + 0) >> shift); \
959 AV_WN16(dstV + i * 2, AV_RL16(src1 + i * 4 + 2) >> shift); \
963 static void fmt ## BEToUV ## _c(uint8_t *dstU, \
965 const uint8_t *unused0, \
966 const uint8_t *src1, \
967 const uint8_t *src2, int width, \
968 uint32_t *unused, void *opq) \
971 for (i = 0; i < width; i++) { \
972 AV_WN16(dstU + i * 2, AV_RB16(src1 + i * 4 + 0) >> shift); \
973 AV_WN16(dstV + i * 2, AV_RB16(src1 + i * 4 + 2) >> shift); \
977 #define p01x_wrapper(fmt, shift) \
978 static void fmt ## LEToY ## _c(uint8_t *dst, \
979 const uint8_t *src, \
980 const uint8_t *unused1, \
981 const uint8_t *unused2, int width, \
982 uint32_t *unused, void *opq) \
985 for (i = 0; i < width; i++) { \
986 AV_WN16(dst + i * 2, AV_RL16(src + i * 2) >> shift); \
990 static void fmt ## BEToY ## _c(uint8_t *dst, \
991 const uint8_t *src, \
992 const uint8_t *unused1, \
993 const uint8_t *unused2, int width, \
994 uint32_t *unused, void *opq) \
997 for (i = 0; i < width; i++) { \
998 AV_WN16(dst + i * 2, AV_RB16(src + i * 2) >> shift); \
1001 p01x_uv_wrapper(fmt, shift)
1008 static
void bgr24ToY_c(uint8_t *
_dst, const uint8_t *
src, const uint8_t *unused1, const uint8_t *unused2,
1011 int16_t *
dst = (int16_t *)
_dst;
1015 int b =
src[
i * 3 + 0];
1016 int g =
src[
i * 3 + 1];
1017 int r =
src[
i * 3 + 2];
1023 static void bgr24ToUV_c(uint8_t *_dstU, uint8_t *_dstV,
const uint8_t *unused0,
const uint8_t *
src1,
1026 int16_t *dstU = (int16_t *)_dstU;
1027 int16_t *dstV = (int16_t *)_dstV;
1045 int16_t *dstU = (int16_t *)_dstU;
1046 int16_t *dstV = (int16_t *)_dstV;
1064 int16_t *
dst = (int16_t *)
_dst;
1068 int r =
src[
i * 3 + 0];
1069 int g =
src[
i * 3 + 1];
1070 int b =
src[
i * 3 + 2];
1076 static void rgb24ToUV_c(uint8_t *_dstU, uint8_t *_dstV,
const uint8_t *unused0,
const uint8_t *
src1,
1079 int16_t *dstU = (int16_t *)_dstU;
1080 int16_t *dstV = (int16_t *)_dstV;
1098 int16_t *dstU = (int16_t *)_dstU;
1099 int16_t *dstV = (int16_t *)_dstV;
1116 uint16_t *
dst = (uint16_t *)
_dst;
1130 uint16_t *
dst = (uint16_t *)
_dst;
1138 uint16_t *dstU = (uint16_t *)_dstU;
1139 uint16_t *dstV = (uint16_t *)_dstV;
1154 (is_be ? AV_RB16(src) : AV_RL16(src))
1159 const uint16_t **
src = (
const uint16_t **)
_src;
1160 uint16_t *
dst = (uint16_t *)
_dst;
1162 int shift = bpc < 16 ? bpc : 14;
1176 const uint16_t **
src = (
const uint16_t **)
_src;
1177 uint16_t *
dst = (uint16_t *)
_dst;
1178 int shift = bpc < 16 ? bpc : 14;
1190 const uint16_t **
src = (
const uint16_t **)
_src;
1191 uint16_t *dstU = (uint16_t *)_dstU;
1192 uint16_t *dstV = (uint16_t *)_dstV;
1195 int shift = bpc < 16 ? bpc : 14;
1207 #define rdpx(src) (is_be ? av_int2float(AV_RB32(src)): av_int2float(AV_RL32(src)))
1212 const float **
src = (
const float **)
_src;
1213 uint16_t *
dst = (uint16_t *)
_dst;
1223 const float **
src = (
const float **)
_src;
1224 uint16_t *dstU = (uint16_t *)_dstU;
1225 uint16_t *dstV = (uint16_t *)_dstV;
1242 const float **
src = (
const float **)
_src;
1243 uint16_t *
dst = (uint16_t *)
_dst;
1257 const uint8_t *
_src,
const uint8_t *unused2,
1261 const float *
src = (
const float *)
_src;
1262 uint16_t *dstU = (uint16_t *)_dstU;
1263 uint16_t *dstV = (uint16_t *)_dstV;
1278 const uint8_t *unused1,
const uint8_t *unused2,
1282 const float *
src = (
const float *)
_src;
1283 uint16_t *
dst = (uint16_t *)
_dst;
1297 const uint8_t *unused2,
int width,
int is_be, uint32_t *unused)
1300 const float *
src = (
const float *)
_src;
1301 uint16_t *
dst = (uint16_t *)
_dst;
1309 const uint8_t *unused2,
int width,
int is_be, uint32_t *unused)
1312 const float *
src = (
const float *)
_src;
1313 uint16_t *
dst = (uint16_t *)
_dst;
1320 const uint8_t *unused2,
int width,
int is_be, uint32_t *unused)
1323 const float *
src = (
const float *)
_src;
1324 uint16_t *
dst = (uint16_t *)
_dst;
1332 #define rgb9plus_planar_funcs_endian(nbits, endian_name, endian) \
1333 static void planar_rgb##nbits##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
1334 int w, int32_t *rgb2yuv, void *opq) \
1336 planar_rgb16_to_y(dst, src, w, nbits, endian, rgb2yuv); \
1338 static void planar_rgb##nbits##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \
1339 const uint8_t *src[4], int w, int32_t *rgb2yuv, \
1342 planar_rgb16_to_uv(dstU, dstV, src, w, nbits, endian, rgb2yuv); \
1345 #define rgb9plus_planar_transparency_funcs(nbits) \
1346 static void planar_rgb##nbits##le_to_a(uint8_t *dst, const uint8_t *src[4], \
1347 int w, int32_t *rgb2yuv, \
1350 planar_rgb16_to_a(dst, src, w, nbits, 0, rgb2yuv); \
1352 static void planar_rgb##nbits##be_to_a(uint8_t *dst, const uint8_t *src[4], \
1353 int w, int32_t *rgb2yuv, \
1356 planar_rgb16_to_a(dst, src, w, nbits, 1, rgb2yuv); \
1359 #define rgb9plus_planar_funcs(nbits) \
1360 rgb9plus_planar_funcs_endian(nbits, le, 0) \
1361 rgb9plus_planar_funcs_endian(nbits, be, 1)
1374 #define rgbf32_funcs_endian(endian_name, endian) \
1375 static void planar_rgbf32##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
1376 int w, int32_t *rgb2yuv, void *opq) \
1378 planar_rgbf32_to_y(dst, src, w, endian, rgb2yuv); \
1380 static void planar_rgbf32##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \
1381 const uint8_t *src[4], int w, int32_t *rgb2yuv, \
1384 planar_rgbf32_to_uv(dstU, dstV, src, w, endian, rgb2yuv); \
1386 static void planar_rgbf32##endian_name##_to_a(uint8_t *dst, const uint8_t *src[4], \
1387 int w, int32_t *rgb2yuv, void *opq) \
1389 planar_rgbf32_to_a(dst, src, w, endian, rgb2yuv); \
1391 static void rgbf32##endian_name##_to_y_c(uint8_t *dst, const uint8_t *src, \
1392 const uint8_t *unused1, const uint8_t *unused2, \
1393 int w, uint32_t *rgb2yuv, void *opq) \
1395 rgbf32_to_y_c(dst, src, unused1, unused2, w, endian, rgb2yuv); \
1397 static void rgbf32##endian_name##_to_uv_c(uint8_t *dstU, uint8_t *dstV, \
1398 const uint8_t *unused1, \
1399 const uint8_t *src, const uint8_t *unused2, \
1400 int w, uint32_t *rgb2yuv, \
1403 rgbf32_to_uv_c(dstU, dstV, unused1, src, unused2, w, endian, rgb2yuv); \
1405 static void grayf32##endian_name##ToY16_c(uint8_t *dst, const uint8_t *src, \
1406 const uint8_t *unused1, const uint8_t *unused2, \
1407 int width, uint32_t *unused, void *opq) \
1409 grayf32ToY16_c(dst, src, unused1, unused2, width, endian, unused); \
1411 static void read_yaf32##endian_name##_gray_c(uint8_t *dst, const uint8_t *src, \
1412 const uint8_t *unused1, const uint8_t *unused2, \
1413 int width, uint32_t *unused, void *opq) \
1415 read_yaf32_gray_c(dst, src, unused1, unused2, width, endian, unused); \
1417 static void read_yaf32##endian_name##_alpha_c(uint8_t *dst, const uint8_t *src, \
1418 const uint8_t *unused1, const uint8_t *unused2, \
1419 int width, uint32_t *unused, void *opq) \
1421 read_yaf32_alpha_c(dst, src, unused1, unused2, width, endian, unused); \
1427 #define rdpx(src) av_int2float(half2float(is_be ? AV_RB16(&src) : AV_RL16(&src), h2f_tbl))
1428 #define rdpx2(src) av_int2float(half2float(is_be ? AV_RB16(src) : AV_RL16(src), h2f_tbl))
1483 uint16_t *
dst = (uint16_t *)
_dst;
1492 uint16_t *
dst = (uint16_t *)
_dst;
1611 #define rgbaf16_funcs_endian(endian_name, endian) \
1612 static void planar_rgbf16##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
1613 int w, int32_t *rgb2yuv, void *opq) \
1615 planar_rgbf16_to_y(dst, src, w, endian, rgb2yuv, opq); \
1617 static void planar_rgbf16##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \
1618 const uint8_t *src[4], int w, int32_t *rgb2yuv, \
1621 planar_rgbf16_to_uv(dstU, dstV, src, w, endian, rgb2yuv, opq); \
1623 static void planar_rgbf16##endian_name##_to_a(uint8_t *dst, const uint8_t *src[4], \
1624 int w, int32_t *rgb2yuv, void *opq) \
1626 planar_rgbf16_to_a(dst, src, w, endian, rgb2yuv, opq); \
1628 static void grayf16##endian_name##ToY16_c(uint8_t *dst, const uint8_t *src, \
1629 const uint8_t *unused1, const uint8_t *unused2, \
1630 int width, uint32_t *unused, void *opq) \
1632 grayf16ToY16_c(dst, src, unused1, unused2, width, endian, unused, opq); \
1634 static void read_yaf16##endian_name##_gray_c(uint8_t *dst, const uint8_t *src, \
1635 const uint8_t *unused1, const uint8_t *unused2, \
1636 int width, uint32_t *unused, void *opq) \
1638 read_yaf16_gray_c(dst, src, unused1, unused2, width, endian, unused, opq); \
1640 static void read_yaf16##endian_name##_alpha_c(uint8_t *dst, const uint8_t *src, \
1641 const uint8_t *unused1, const uint8_t *unused2, \
1642 int width, uint32_t *unused, void *opq) \
1644 read_yaf16_alpha_c(dst, src, unused1, unused2, width, endian, unused, opq); \
1647 static void rgbaf16##endian_name##ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused, \
1648 const uint8_t *src1, const uint8_t *src2, \
1649 int width, uint32_t *_rgb2yuv, void *opq) \
1651 const uint16_t *src = (const uint16_t*)src1; \
1652 uint16_t *dstU = (uint16_t*)_dstU; \
1653 uint16_t *dstV = (uint16_t*)_dstV; \
1654 int32_t *rgb2yuv = (int32_t*)_rgb2yuv; \
1655 av_assert1(src1==src2); \
1656 rgbaf16ToUV_half_endian(dstU, dstV, endian, src, width, rgb2yuv, opq); \
1658 static void rgbaf16##endian_name##ToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused, \
1659 const uint8_t *src1, const uint8_t *src2, \
1660 int width, uint32_t *_rgb2yuv, void *opq) \
1662 const uint16_t *src = (const uint16_t*)src1; \
1663 uint16_t *dstU = (uint16_t*)_dstU; \
1664 uint16_t *dstV = (uint16_t*)_dstV; \
1665 int32_t *rgb2yuv = (int32_t*)_rgb2yuv; \
1666 av_assert1(src1==src2); \
1667 rgbaf16ToUV_endian(dstU, dstV, endian, src, width, rgb2yuv, opq); \
1669 static void rgbaf16##endian_name##ToY_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused0, \
1670 const uint8_t *unused1, int width, uint32_t *_rgb2yuv, void *opq) \
1672 const uint16_t *src = (const uint16_t*)_src; \
1673 uint16_t *dst = (uint16_t*)_dst; \
1674 int32_t *rgb2yuv = (int32_t*)_rgb2yuv; \
1675 rgbaf16ToY_endian(dst, src, endian, width, rgb2yuv, opq); \
1677 static void rgbaf16##endian_name##ToA_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused0, \
1678 const uint8_t *unused1, int width, uint32_t *unused2, void *opq) \
1680 const uint16_t *src = (const uint16_t*)_src; \
1681 uint16_t *dst = (uint16_t*)_dst; \
1682 rgbaf16ToA_endian(dst, src, endian, width, opq); \
1684 static void rgbf16##endian_name##ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused, \
1685 const uint8_t *src1, const uint8_t *src2, \
1686 int width, uint32_t *_rgb2yuv, void *opq) \
1688 const uint16_t *src = (const uint16_t*)src1; \
1689 uint16_t *dstU = (uint16_t*)_dstU; \
1690 uint16_t *dstV = (uint16_t*)_dstV; \
1691 int32_t *rgb2yuv = (int32_t*)_rgb2yuv; \
1692 av_assert1(src1==src2); \
1693 rgbf16ToUV_half_endian(dstU, dstV, endian, src, width, rgb2yuv, opq); \
1695 static void rgbf16##endian_name##ToUV_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused, \
1696 const uint8_t *src1, const uint8_t *src2, \
1697 int width, uint32_t *_rgb2yuv, void *opq) \
1699 const uint16_t *src = (const uint16_t*)src1; \
1700 uint16_t *dstU = (uint16_t*)_dstU; \
1701 uint16_t *dstV = (uint16_t*)_dstV; \
1702 int32_t *rgb2yuv = (int32_t*)_rgb2yuv; \
1703 av_assert1(src1==src2); \
1704 rgbf16ToUV_endian(dstU, dstV, endian, src, width, rgb2yuv, opq); \
1706 static void rgbf16##endian_name##ToY_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused0, \
1707 const uint8_t *unused1, int width, uint32_t *_rgb2yuv, void *opq) \
1709 const uint16_t *src = (const uint16_t*)_src; \
1710 uint16_t *dst = (uint16_t*)_dst; \
1711 int32_t *rgb2yuv = (int32_t*)_rgb2yuv; \
1712 rgbf16ToY_endian(dst, src, endian, width, rgb2yuv, opq); \
1729 switch (srcFormat) {
1762 *readChrPlanar = planar_rgb9le_to_uv;
1766 *readChrPlanar = planar_rgb10le_to_uv;
1770 *readChrPlanar = planar_rgb12le_to_uv;
1774 *readChrPlanar = planar_rgb14le_to_uv;
1778 *readChrPlanar = planar_rgb16le_to_uv;
1782 *readChrPlanar = planar_rgbf32le_to_uv;
1786 *readChrPlanar = planar_rgbf16le_to_uv;
1789 *readChrPlanar = planar_rgb9be_to_uv;
1793 *readChrPlanar = planar_rgb10be_to_uv;
1797 *readChrPlanar = planar_rgb12be_to_uv;
1801 *readChrPlanar = planar_rgb14be_to_uv;
1805 *readChrPlanar = planar_rgb16be_to_uv;
1809 *readChrPlanar = planar_rgbf32be_to_uv;
1813 *readChrPlanar = planar_rgbf16be_to_uv;
1898 *chrToYV12 = read_ayuv64le_UV_c;
1901 *chrToYV12 = read_ayuv64be_UV_c;
1913 *chrToYV12 = read_xv48le_UV_c;
1916 *chrToYV12 = read_xv48be_UV_c;
1919 *chrToYV12 = nv20LEToUV_c;
1924 *chrToYV12 = p010LEToUV_c;
1927 *chrToYV12 = nv20BEToUV_c;
1932 *chrToYV12 = p010BEToUV_c;
1937 *chrToYV12 = p012LEToUV_c;
1942 *chrToYV12 = p012BEToUV_c;
1947 *chrToYV12 = p016LEToUV_c;
1952 *chrToYV12 = p016BEToUV_c;
1955 *chrToYV12 = y210le_UV_c;
1958 *chrToYV12 = y212le_UV_c;
1961 *chrToYV12 = y216le_UV_c;
1964 *chrToYV12 = rgbf32le_to_uv_c;
1967 *chrToYV12 = rgbf32be_to_uv_c;
1970 if (
c->chrSrcHSubSample) {
1971 switch (srcFormat) {
1973 *chrToYV12 = rgb64BEToUV_half_c;
1976 *chrToYV12 = rgb64LEToUV_half_c;
1979 *chrToYV12 = bgr64BEToUV_half_c;
1982 *chrToYV12 = bgr64LEToUV_half_c;
1985 *chrToYV12 = rgb48BEToUV_half_c;
1988 *chrToYV12 = rgb48LEToUV_half_c;
1991 *chrToYV12 = bgr48BEToUV_half_c;
1994 *chrToYV12 = bgr48LEToUV_half_c;
1997 *chrToYV12 = bgr32ToUV_half_c;
2000 *chrToYV12 = bgr321ToUV_half_c;
2006 *chrToYV12 = bgr16leToUV_half_c;
2009 *chrToYV12 = bgr16beToUV_half_c;
2012 *chrToYV12 = bgr15leToUV_half_c;
2015 *chrToYV12 = bgr15beToUV_half_c;
2022 *chrToYV12 = bgr12leToUV_half_c;
2025 *chrToYV12 = bgr12beToUV_half_c;
2028 *chrToYV12 = rgb32ToUV_half_c;
2031 *chrToYV12 = rgb321ToUV_half_c;
2037 *chrToYV12 = rgb16leToUV_half_c;
2040 *chrToYV12 = rgb16beToUV_half_c;
2043 *chrToYV12 = rgb15leToUV_half_c;
2046 *chrToYV12 = rgb15beToUV_half_c;
2049 *chrToYV12 = rgb12leToUV_half_c;
2052 *chrToYV12 = rgb12beToUV_half_c;
2055 *chrToYV12 = rgb30leToUV_half_c;
2058 *chrToYV12 = bgr30leToUV_half_c;
2061 *chrToYV12 = rgbaf16beToUV_half_c;
2064 *chrToYV12 = rgbaf16leToUV_half_c;
2067 *chrToYV12 = rgbf16beToUV_half_c;
2070 *chrToYV12 = rgbf16leToUV_half_c;
2074 switch (srcFormat) {
2076 *chrToYV12 = rgb64BEToUV_c;
2079 *chrToYV12 = rgb64LEToUV_c;
2082 *chrToYV12 = bgr64BEToUV_c;
2085 *chrToYV12 = bgr64LEToUV_c;
2088 *chrToYV12 = rgb48BEToUV_c;
2091 *chrToYV12 = rgb48LEToUV_c;
2094 *chrToYV12 = bgr48BEToUV_c;
2097 *chrToYV12 = bgr48LEToUV_c;
2100 *chrToYV12 = bgr32ToUV_c;
2103 *chrToYV12 = bgr321ToUV_c;
2109 *chrToYV12 = bgr16leToUV_c;
2112 *chrToYV12 = bgr16beToUV_c;
2115 *chrToYV12 = bgr15leToUV_c;
2118 *chrToYV12 = bgr15beToUV_c;
2121 *chrToYV12 = bgr12leToUV_c;
2124 *chrToYV12 = bgr12beToUV_c;
2127 *chrToYV12 = rgb32ToUV_c;
2130 *chrToYV12 = rgb321ToUV_c;
2136 *chrToYV12 = rgb16leToUV_c;
2139 *chrToYV12 = rgb16beToUV_c;
2142 *chrToYV12 = rgb15leToUV_c;
2145 *chrToYV12 = rgb15beToUV_c;
2148 *chrToYV12 = rgb12leToUV_c;
2151 *chrToYV12 = rgb12beToUV_c;
2154 *chrToYV12 = rgb30leToUV_c;
2157 *chrToYV12 = bgr30leToUV_c;
2160 *chrToYV12 = rgbaf16beToUV_c;
2163 *chrToYV12 = rgbaf16leToUV_c;
2166 *chrToYV12 = rgbf16beToUV_c;
2169 *chrToYV12 = rgbf16leToUV_c;
2176 switch (srcFormat) {
2178 *readLumPlanar = planar_rgb9le_to_y;
2181 *readAlpPlanar = planar_rgb10le_to_a;
2183 *readLumPlanar = planar_rgb10le_to_y;
2186 *readAlpPlanar = planar_rgb12le_to_a;
2188 *readLumPlanar = planar_rgb12le_to_y;
2191 *readAlpPlanar = planar_rgb14le_to_a;
2193 *readLumPlanar = planar_rgb14le_to_y;
2196 *readAlpPlanar = planar_rgb16le_to_a;
2198 *readLumPlanar = planar_rgb16le_to_y;
2201 *readAlpPlanar = planar_rgbf32le_to_a;
2203 *readLumPlanar = planar_rgbf32le_to_y;
2206 *readAlpPlanar = planar_rgbf16le_to_a;
2208 *readLumPlanar = planar_rgbf16le_to_y;
2211 *readLumPlanar = planar_rgb9be_to_y;
2214 *readAlpPlanar = planar_rgb10be_to_a;
2216 *readLumPlanar = planar_rgb10be_to_y;
2219 *readAlpPlanar = planar_rgb12be_to_a;
2221 *readLumPlanar = planar_rgb12be_to_y;
2224 *readAlpPlanar = planar_rgb14be_to_a;
2226 *readLumPlanar = planar_rgb14be_to_y;
2229 *readAlpPlanar = planar_rgb16be_to_a;
2231 *readLumPlanar = planar_rgb16be_to_y;
2234 *readAlpPlanar = planar_rgbf32be_to_a;
2236 *readLumPlanar = planar_rgbf32be_to_y;
2239 *readAlpPlanar = planar_rgbf16be_to_a;
2241 *readLumPlanar = planar_rgbf16be_to_y;
2276 *lumToYV12 = bswap16Y_c;
2289 *lumToYV12 = bswap16Y_c;
2290 *alpToYV12 = bswap16Y_c;
2320 *lumToYV12 = bswap16Y_c;
2333 *lumToYV12 = bswap16Y_c;
2334 *alpToYV12 = bswap16Y_c;
2344 *lumToYV12 = read_yaf16le_gray_c;
2347 *lumToYV12 = read_yaf16be_gray_c;
2392 *lumToYV12 = bgr24ToY_c;
2395 *lumToYV12 = bgr16leToY_c;
2398 *lumToYV12 = bgr16beToY_c;
2401 *lumToYV12 = bgr15leToY_c;
2404 *lumToYV12 = bgr15beToY_c;
2407 *lumToYV12 = bgr12leToY_c;
2410 *lumToYV12 = bgr12beToY_c;
2416 *lumToYV12 = rgb16leToY_c;
2419 *lumToYV12 = rgb16beToY_c;
2422 *lumToYV12 = rgb15leToY_c;
2425 *lumToYV12 = rgb15beToY_c;
2428 *lumToYV12 = rgb12leToY_c;
2431 *lumToYV12 = rgb12beToY_c;
2447 *lumToYV12 = bgr32ToY_c;
2450 *lumToYV12 = bgr321ToY_c;
2453 *lumToYV12 = rgb32ToY_c;
2456 *lumToYV12 = rgb321ToY_c;
2459 *lumToYV12 = rgb48BEToY_c;
2462 *lumToYV12 = rgb48LEToY_c;
2465 *lumToYV12 = bgr48BEToY_c;
2468 *lumToYV12 = bgr48LEToY_c;
2471 *lumToYV12 = rgb64BEToY_c;
2474 *lumToYV12 = rgb64LEToY_c;
2477 *lumToYV12 = bgr64BEToY_c;
2480 *lumToYV12 = bgr64LEToY_c;
2483 *lumToYV12 = nv20LEToY_c;
2488 *lumToYV12 = p010LEToY_c;
2491 *lumToYV12 = nv20BEToY_c;
2496 *lumToYV12 = p010BEToY_c;
2501 *lumToYV12 = p012LEToY_c;
2506 *lumToYV12 = p012BEToY_c;
2509 *lumToYV12 = grayf32leToY16_c;
2512 *lumToYV12 = grayf32beToY16_c;
2515 *lumToYV12 = read_yaf32le_gray_c;
2518 *lumToYV12 = read_yaf32be_gray_c;
2521 *lumToYV12 = grayf16leToY16_c;
2524 *lumToYV12 = grayf16beToY16_c;
2527 *lumToYV12 = y210le_Y_c;
2530 *lumToYV12 = y212le_Y_c;
2533 *lumToYV12 = y216le_Y_c;
2536 *lumToYV12 = rgb30leToY_c;
2539 *lumToYV12 = bgr30leToY_c;
2542 *lumToYV12 = rgbaf16beToY_c;
2545 *lumToYV12 = rgbaf16leToY_c;
2548 *lumToYV12 = rgbf16beToY_c;
2551 *lumToYV12 = rgbf16leToY_c;
2554 *lumToYV12 = rgbf32le_to_y_c;
2557 *lumToYV12 = rgbf32be_to_y_c;
2562 if (HAVE_BIGENDIAN == !
isBE(srcFormat) && !*readAlpPlanar)
2563 *alpToYV12 = bswap16Y_c;
2565 switch (srcFormat) {
2579 *alpToYV12 = rgbaf16beToA_c;
2582 *alpToYV12 = rgbaf16leToA_c;
2594 *alpToYV12 = read_yaf16le_alpha_c;
2597 *alpToYV12 = read_yaf16be_alpha_c;
2600 *alpToYV12 = read_yaf32le_alpha_c;
2603 *alpToYV12 = read_yaf32be_alpha_c;
2613 *alpToYV12 = read_ayuv64le_A_c;
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
@ AV_PIX_FMT_YUV420P9LE
planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
@ AV_PIX_FMT_XV30LE
packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), little-endian, variant of Y410 where alpha channe...
@ AV_PIX_FMT_GRAY10BE
Y , 10bpp, big-endian.
AVPixelFormat
Pixel format.
@ 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...
@ AV_PIX_FMT_P416BE
interleaved chroma YUV 4:4:4, 48bpp, big-endian
@ AV_PIX_FMT_YA8
8 bits gray, 8 bits alpha
@ 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...
@ AV_PIX_FMT_RGB444LE
packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, X=unused/undefined
#define u(width, name, range_min, range_max)
@ AV_PIX_FMT_GBRP16BE
planar GBR 4:4:4 48bpp, big-endian
@ AV_PIX_FMT_GBRP10BE
planar GBR 4:4:4 30bpp, big-endian
@ AV_PIX_FMT_YUV422P14LE
planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
@ AV_PIX_FMT_RGBF16LE
IEEE-754 half precision packed RGB 16:16:16, 48bpp, RGBRGB..., little-endian.
@ AV_PIX_FMT_YUVA444P10BE
planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian)
@ 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...
@ AV_PIX_FMT_YUV440P12BE
planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian
@ AV_PIX_FMT_GBRAPF32LE
IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, little-endian.
@ AV_PIX_FMT_GBRPF32BE
IEEE-754 single precision planar GBR 4:4:4, 96bpp, big-endian.
@ AV_PIX_FMT_P412BE
interleaved chroma YUV 4:4:4, 36bpp, data in the high bits, big-endian
@ AV_PIX_FMT_MONOWHITE
Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb.
@ AV_PIX_FMT_P010BE
like NV12, with 10bpp per component, data in the high bits, zeros in the low bits,...
static const char rgb2yuv[]
@ AV_PIX_FMT_YUV420P14BE
planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
@ AV_PIX_FMT_YUV420P16LE
planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
#define AV_PIX_FMT_RGB32_1
@ AV_PIX_FMT_GBRP14BE
planar GBR 4:4:4 42bpp, big-endian
@ AV_PIX_FMT_BGR24
packed RGB 8:8:8, 24bpp, BGRBGR...
@ AV_PIX_FMT_BGRA
packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
@ AV_PIX_FMT_YUVA444P9BE
planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian
@ AV_PIX_FMT_YUV422P9BE
planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
@ AV_PIX_FMT_GRAY10LE
Y , 10bpp, little-endian.
@ AV_PIX_FMT_GRAYF32LE
IEEE-754 single precision Y, 32bpp, little-endian.
@ AV_PIX_FMT_GBRAP14BE
planar GBR 4:4:4:4 56bpp, big-endian
@ AV_PIX_FMT_RGB555BE
packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined
@ AV_PIX_FMT_RGBAF16LE
IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., little-endian.
uint8_t ptrdiff_t const uint8_t * _src
@ AV_PIX_FMT_AYUV64LE
packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian
@ AV_PIX_FMT_YUV444P16LE
planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
@ AV_PIX_FMT_AYUV64BE
packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian
@ AV_PIX_FMT_GBRAP12LE
planar GBR 4:4:4:4 48bpp, little-endian
@ AV_PIX_FMT_GRAY16BE
Y , 16bpp, big-endian.
static av_always_inline int is16BPS(enum AVPixelFormat pix_fmt)
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
planar GBRA 4:4:4:4 32bpp
@ AV_PIX_FMT_YUV420P12LE
planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
@ AV_PIX_FMT_GRAY9LE
Y , 9bpp, little-endian.
static av_always_inline int isNBPS(enum AVPixelFormat pix_fmt)
@ AV_PIX_FMT_YUVA444P16BE
planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian)
@ AV_PIX_FMT_YUV444P10BE
planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
@ AV_PIX_FMT_YUV420P10LE
planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
@ AV_PIX_FMT_VUYA
packed VUYA 4:4:4:4, 32bpp (1 Cr & Cb sample per 1x1 Y & A samples), VUYAVUYA...
@ AV_PIX_FMT_YUV444P12LE
planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
@ AV_PIX_FMT_YUV422P12BE
planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
@ AV_PIX_FMT_YUV444P14LE
planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
@ AV_PIX_FMT_BGR8
packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb)
@ AV_PIX_FMT_GBRAP16BE
planar GBRA 4:4:4:4 64bpp, big-endian
@ AV_PIX_FMT_GBRP16LE
planar GBR 4:4:4 48bpp, little-endian
@ AV_PIX_FMT_P416LE
interleaved chroma YUV 4:4:4, 48bpp, little-endian
@ AV_PIX_FMT_P210LE
interleaved chroma YUV 4:2:2, 20bpp, data in the high bits, little-endian
@ AV_PIX_FMT_NV20BE
interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
@ AV_PIX_FMT_P016BE
like NV12, with 16bpp per component, big-endian
@ AV_PIX_FMT_GBRP12LE
planar GBR 4:4:4 36bpp, little-endian
@ AV_PIX_FMT_YUVA420P16BE
planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian)
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_RL16
@ AV_PIX_FMT_GBRP10LE
planar GBR 4:4:4 30bpp, little-endian
@ AV_PIX_FMT_GBRAPF16LE
IEEE-754 half precision planar GBRA 4:4:4:4, 64bpp, little-endian.
#define AV_PIX_FMT_BGR32_1
@ AV_PIX_FMT_RGBA
packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
@ AV_PIX_FMT_YUV444P10LE
planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
@ AV_PIX_FMT_YUVA422P10LE
planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian)
@ AV_PIX_FMT_YUV444P9BE
planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
@ AV_PIX_FMT_YUV422P10BE
planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
@ AV_PIX_FMT_YUV422P16LE
planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
#define AV_PIX_FMT_RGBA64
@ AV_PIX_FMT_RGB565LE
packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian
@ AV_PIX_FMT_Y216LE
packed YUV 4:2:2 like YUYV422, 32bpp, little-endian
@ AV_PIX_FMT_GBRAPF32BE
IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, big-endian.
@ AV_PIX_FMT_GBRAP12BE
planar GBR 4:4:4:4 48bpp, big-endian
@ AV_PIX_FMT_P012LE
like NV12, with 12bpp per component, data in the high bits, zeros in the low bits,...
@ AV_PIX_FMT_GBRAPF16BE
IEEE-754 half precision planar GBRA 4:4:4:4, 64bpp, big-endian.
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.
@ AV_PIX_FMT_YUYV422
packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
@ AV_PIX_FMT_P210BE
interleaved chroma YUV 4:2:2, 20bpp, data in the high bits, big-endian
@ 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...
@ AV_PIX_FMT_YA16LE
16 bits gray, 16 bits alpha (little-endian)
@ AV_PIX_FMT_MONOBLACK
Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb.
@ AV_PIX_FMT_YUVA422P12LE
planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, little-endian
@ AV_PIX_FMT_BGR565LE
packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian
@ 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...
@ AV_PIX_FMT_YUVA444P12BE
planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, big-endian
void(* planarX2_YV12_fn)(uint8_t *dst, uint8_t *dst2, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opaque)
@ AV_PIX_FMT_YUVA444P9LE
planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian
@ AV_PIX_FMT_Y210LE
packed YUV 4:2:2 like YUYV422, 20bpp, data in the high bits, little-endian
@ AV_PIX_FMT_YUVA420P16LE
planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
@ AV_PIX_FMT_RGB8
packed RGB 3:3:2, 8bpp, (msb)3R 3G 2B(lsb)
@ AV_PIX_FMT_YUV440P10LE
planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian
@ AV_PIX_FMT_BGR555BE
packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined
@ AV_PIX_FMT_YUVA420P9LE
planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian
@ AV_PIX_FMT_YAF16BE
IEEE-754 half precision packed YA, 16 bits gray, 16 bits alpha, 32bpp, big-endian.
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.
@ AV_PIX_FMT_ABGR
packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
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
@ AV_PIX_FMT_YUV420P14LE
planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
@ AV_PIX_FMT_YUV444P14BE
planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
@ AV_PIX_FMT_BGR4_BYTE
packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb)
@ AV_PIX_FMT_X2RGB10LE
packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), little-endian, X=unused/undefined
@ AV_PIX_FMT_P212LE
interleaved chroma YUV 4:2:2, 24bpp, data in the high bits, little-endian
@ AV_PIX_FMT_YUV420P9BE
The following 12 formats have the disadvantage of needing 1 format for each bit depth.
#define AV_PIX_FMT_X2BGR10
static av_always_inline int isBE(enum AVPixelFormat pix_fmt)
@ AV_PIX_FMT_RGBF32BE
IEEE-754 single precision packed RGB 32:32:32, 96bpp, RGBRGB..., big-endian.
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
@ AV_PIX_FMT_YUV440P12LE
planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian
static int shift(int a, int b)
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
@ AV_PIX_FMT_YUV420P12BE
planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
@ AV_PIX_FMT_YUV422P10LE
planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
@ AV_PIX_FMT_RGB444BE
packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, X=unused/undefined
@ AV_PIX_FMT_XV36BE
packed XVYU 4:4:4, 48bpp, data in the high bits, zeros in the low bits, big-endian,...
@ AV_PIX_FMT_YUV422P14BE
planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
@ AV_PIX_FMT_YA16BE
16 bits gray, 16 bits alpha (big-endian)
@ AV_PIX_FMT_GRAY12LE
Y , 12bpp, little-endian.
void(* planar1_YV12_fn)(uint8_t *dst, const uint8_t *src, const uint8_t *src2, const uint8_t *src3, int width, uint32_t *pal, void *opaque)
Unscaled conversion of luma/alpha plane to YV12 for horizontal scaler.
#define AV_PIX_FMT_BGR555
@ AV_PIX_FMT_GBRP9BE
planar GBR 4:4:4 27bpp, big-endian
@ AV_PIX_FMT_YUV420P10BE
planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
@ AV_PIX_FMT_RGBAF16BE
IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., big-endian.
@ AV_PIX_FMT_NV16
interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
@ AV_PIX_FMT_BGR444BE
packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, X=unused/undefined
@ AV_PIX_FMT_GBRP9LE
planar GBR 4:4:4 27bpp, little-endian
@ AV_PIX_FMT_GBRAP10LE
planar GBR 4:4:4:4 40bpp, little-endian
@ AV_PIX_FMT_BGR565BE
packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian
@ AV_PIX_FMT_YAF32LE
IEEE-754 single precision packed YA, 32 bits gray, 32 bits alpha, 64bpp, little-endian.
@ AV_PIX_FMT_P012BE
like NV12, with 12bpp per component, data in the high bits, zeros in the low bits,...
@ AV_PIX_FMT_P410LE
interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, little-endian
@ AV_PIX_FMT_YUVA420P10LE
planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
@ AV_PIX_FMT_AYUV
packed AYUV 4:4:4:4, 32bpp (1 Cr & Cb sample per 1x1 Y & A samples), AYUVAYUV...
@ AV_PIX_FMT_ARGB
packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
@ 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...
@ AV_PIX_FMT_YUVA422P10BE
planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian)
@ AV_PIX_FMT_UYVA
packed UYVA 4:4:4:4, 32bpp (1 Cr & Cb sample per 1x1 Y & A samples), UYVAUYVA...
@ AV_PIX_FMT_YUVA444P12LE
planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), 12b alpha, little-endian
@ AV_PIX_FMT_YUVA422P9BE
planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian
#define AV_PIX_FMT_BGRA64
@ AV_PIX_FMT_RGB555LE
packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined
@ 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...
#define i(width, name, range_min, range_max)
@ AV_PIX_FMT_GRAY9BE
Y , 9bpp, big-endian.
@ 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...
#define AV_PIX_FMT_BGR444
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
@ AV_PIX_FMT_YAF16LE
IEEE-754 half precision packed YA, 16 bits gray, 16 bits alpha, 32bpp, little-endian.
#define AV_PIX_FMT_RGB555
@ AV_PIX_FMT_NV20LE
interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
#define AV_PIX_FMT_X2RGB10
@ AV_PIX_FMT_NV21
as above, but U and V bytes are swapped
#define AV_PIX_FMT_BGR565
@ AV_PIX_FMT_RGB4_BYTE
packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb)
@ AV_PIX_FMT_YUV444P16BE
planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
@ AV_PIX_FMT_GBRPF32LE
IEEE-754 single precision planar GBR 4:4:4, 96bpp, little-endian.
@ AV_PIX_FMT_NV42
as above, but U and V bytes are swapped
#define AV_PIX_FMT_RGB565
@ AV_PIX_FMT_GBRAP16LE
planar GBRA 4:4:4:4 64bpp, little-endian
@ AV_PIX_FMT_PAL8
8 bits with AV_PIX_FMT_RGB32 palette
@ AV_PIX_FMT_GRAY12BE
Y , 12bpp, big-endian.
@ AV_PIX_FMT_YVYU422
packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb
@ 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...
@ AV_PIX_FMT_Y212LE
packed YUV 4:2:2 like YUYV422, 24bpp, data in the high bits, zeros in the low bits,...
@ AV_PIX_FMT_P410BE
interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, big-endian
@ AV_PIX_FMT_P016LE
like NV12, with 16bpp per component, little-endian
@ AV_PIX_FMT_GRAYF32BE
IEEE-754 single precision Y, 32bpp, big-endian.
@ AV_PIX_FMT_GRAYF16BE
IEEE-754 half precision Y, 16bpp, big-endian.
@ AV_PIX_FMT_RGBF16BE
IEEE-754 half precision packed RGB 16:16:16, 48bpp, RGBRGB..., big-endian.
@ AV_PIX_FMT_GBRP12BE
planar GBR 4:4:4 36bpp, big-endian
@ AV_PIX_FMT_UYVY422
packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
@ AV_PIX_FMT_YUV444P12BE
planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
@ AV_PIX_FMT_XV48LE
packed XVYU 4:4:4, 64bpp, little-endian, variant of Y416 where alpha channel is left undefined
@ AV_PIX_FMT_YUV444P9LE
planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
@ AV_PIX_FMT_P216LE
interleaved chroma YUV 4:2:2, 32bpp, little-endian
@ AV_PIX_FMT_RGBF32LE
IEEE-754 single precision packed RGB 32:32:32, 96bpp, RGBRGB..., little-endian.
@ AV_PIX_FMT_YUVA420P10BE
planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian)
@ AV_PIX_FMT_RGB565BE
packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian
@ AV_PIX_FMT_YUV420P16BE
planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
@ AV_PIX_FMT_YUV422P16BE
planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
@ AV_PIX_FMT_P212BE
interleaved chroma YUV 4:2:2, 24bpp, data in the high bits, big-endian
@ AV_PIX_FMT_GRAY16LE
Y , 16bpp, little-endian.
@ AV_PIX_FMT_X2BGR10LE
packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G 10R(lsb), little-endian, X=unused/undefined
@ AV_PIX_FMT_V30XLE
packed VYUX 4:4:4 like XV30, 32bpp, (msb)10V 10Y 10U 2X(lsb), little-endian
@ AV_PIX_FMT_P010LE
like NV12, with 10bpp per component, data in the high bits, zeros in the low bits,...
@ AV_PIX_FMT_XV48BE
packed XVYU 4:4:4, 64bpp, big-endian, variant of Y416 where alpha channel is left undefined
@ AV_PIX_FMT_YUVA444P10LE
planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
@ AV_PIX_FMT_BGR555LE
packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined
@ AV_PIX_FMT_YAF32BE
IEEE-754 single precision packed YA, 32 bits gray, 32 bits alpha, 64bpp, big-endian.
@ AV_PIX_FMT_P216BE
interleaved chroma YUV 4:2:2, 32bpp, big-endian
@ AV_PIX_FMT_P412LE
interleaved chroma YUV 4:4:4, 36bpp, data in the high bits, little-endian
@ AV_PIX_FMT_GRAY14LE
Y , 14bpp, little-endian.
@ AV_PIX_FMT_GRAYF16LE
IEEE-754 half precision Y, 16bpp, little-endian.
@ AV_PIX_FMT_XV36LE
packed XVYU 4:4:4, 48bpp, data in the high bits, zeros in the low bits, little-endian,...
@ AV_PIX_FMT_GRAY14BE
Y , 14bpp, big-endian.
@ AV_PIX_FMT_YUVA422P16BE
planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian)
@ AV_PIX_FMT_YUV440P10BE
planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian
@ AV_PIX_FMT_YUV422P9LE
planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
@ AV_PIX_FMT_YUVA422P16LE
planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian)
@ AV_PIX_FMT_GBRP14LE
planar GBR 4:4:4 42bpp, little-endian
@ AV_PIX_FMT_GBRAP10BE
planar GBR 4:4:4:4 40bpp, big-endian
@ AV_PIX_FMT_YUVA444P16LE
planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
@ AV_PIX_FMT_GBRPF16BE
IEEE-754 half precision planer GBR 4:4:4, 48bpp, big-endian.
@ AV_PIX_FMT_VUYX
packed VUYX 4:4:4:4, 32bpp, Variant of VUYA where alpha channel is left undefined
@ AV_PIX_FMT_VYU444
packed VYU 4:4:4, 24bpp (1 Cr & Cb sample per 1x1 Y), VYUVYU...
@ AV_PIX_FMT_YUVA422P12BE
planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), 12b alpha, big-endian
@ AV_PIX_FMT_BGR444LE
packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, X=unused/undefined
@ AV_PIX_FMT_YUV422P12LE
planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
@ AV_PIX_FMT_YUVA420P9BE
planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian
@ AV_PIX_FMT_GBRAP14LE
planar GBR 4:4:4:4 56bpp, little-endian
@ AV_PIX_FMT_GBRPF16LE
IEEE-754 half precision planer GBR 4:4:4, 48bpp, little-endian.
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
@ AV_PIX_FMT_UYYVYY411
packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
@ 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...
@ AV_PIX_FMT_YUVA422P9LE
planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian
#define AV_PIX_FMT_RGB444