Go to the documentation of this file.
38 #define input_pixel(pos) (isBE(origin) ? AV_RB16(pos) : AV_RL16(pos))
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(pattern, BE_LE, origin) \
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) \
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); \
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) \
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); \
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) \
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); \
148 const uint16_t *
src1,
149 const uint16_t *src2,
170 const uint16_t *
src1,
171 const uint16_t *src2,
197 #define rgb48funcs(pattern, BE_LE, origin) \
198 static void pattern ## 48 ## BE_LE ## ToY_c(uint8_t *_dst, \
199 const uint8_t *_src, \
200 const uint8_t *unused0, const uint8_t *unused1,\
204 const uint16_t *src = (const uint16_t *)_src; \
205 uint16_t *dst = (uint16_t *)_dst; \
206 rgb48ToY_c_template(dst, src, width, origin, rgb2yuv); \
209 static void pattern ## 48 ## BE_LE ## ToUV_c(uint8_t *_dstU, \
211 const uint8_t *unused0, \
212 const uint8_t *_src1, \
213 const uint8_t *_src2, \
217 const uint16_t *src1 = (const uint16_t *)_src1, \
218 *src2 = (const uint16_t *)_src2; \
219 uint16_t *dstU = (uint16_t *)_dstU, \
220 *dstV = (uint16_t *)_dstV; \
221 rgb48ToUV_c_template(dstU, dstV, src1, src2, width, origin, rgb2yuv); \
224 static void pattern ## 48 ## BE_LE ## ToUV_half_c(uint8_t *_dstU, \
226 const uint8_t *unused0, \
227 const uint8_t *_src1, \
228 const uint8_t *_src2, \
232 const uint16_t *src1 = (const uint16_t *)_src1, \
233 *src2 = (const uint16_t *)_src2; \
234 uint16_t *dstU = (uint16_t *)_dstU, \
235 *dstV = (uint16_t *)_dstV; \
236 rgb48ToUV_half_c_template(dstU, dstV, src1, src2, width, origin, rgb2yuv); \
244 #define input_pixel(i) ((origin == AV_PIX_FMT_RGBA || \
245 origin == AV_PIX_FMT_BGRA || \
246 origin == AV_PIX_FMT_ARGB || \
247 origin == AV_PIX_FMT_ABGR) \
248 ? AV_RN32A(&src[(i) * 4]) \
249 : (isBE(origin) ? AV_RB16(&src[(i) * 2]) \
250 : AV_RL16(&src[(i) * 2])))
258 int maskr,
int maskg,
260 int gsh,
int bsh,
int S,
264 const unsigned rnd = (32<<((
S)-1)) + (1<<(
S-7));
269 int b = (px & maskb) >> shb;
270 int g = (px & maskg) >> shg;
271 int r = (px & maskr) >> shr;
273 dst[
i] = (ry *
r + gy *
g + by *
b +
rnd) >> ((
S)-6);
284 int maskr,
int maskg,
286 int gsh,
int bsh,
int S,
291 const unsigned rnd = (256
u<<((
S)-1)) + (1<<(
S-7));
296 int b = (px & maskb) >> shb;
297 int g = (px & maskg) >> shg;
298 int r = (px & maskr) >> shr;
300 dstU[
i] = (ru *
r + gu *
g + bu *
b +
rnd) >> ((
S)-6);
301 dstV[
i] = (rv *
r + gv *
g + bv *
b +
rnd) >> ((
S)-6);
312 int maskr,
int maskg,
314 int gsh,
int bsh,
int S,
319 maskgx = ~(maskr | maskb);
320 const unsigned rnd = (256
U<<(
S)) + (1<<(
S-6));
329 int b,
r,
g = (px0 & maskgx) + (px1 & maskgx);
330 int rb = px0 + px1 -
g;
332 b = (rb & maskb) >> shb;
338 g = (
g & maskg) >> shg;
340 r = (rb & maskr) >> shr;
342 dstU[
i] = (ru *
r + gu *
g + bu *
b + (unsigned)
rnd) >> ((
S)-6+1);
343 dstV[
i] = (rv *
r + gv *
g + bv *
b + (unsigned)
rnd) >> ((
S)-6+1);
349 #define rgb16_32_wrapper(fmt, name, shr, shg, shb, shp, maskr, \
350 maskg, maskb, rsh, gsh, bsh, S) \
351 static void name ## ToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, \
352 int width, uint32_t *tab) \
354 rgb16_32ToY_c_template((int16_t*)dst, src, width, fmt, shr, shg, shb, shp, \
355 maskr, maskg, maskb, rsh, gsh, bsh, S, tab); \
358 static void name ## ToUV_c(uint8_t *dstU, uint8_t *dstV, \
359 const uint8_t *unused0, const uint8_t *src, const uint8_t *dummy, \
360 int width, uint32_t *tab) \
362 rgb16_32ToUV_c_template((int16_t*)dstU, (int16_t*)dstV, src, width, fmt, \
363 shr, shg, shb, shp, \
364 maskr, maskg, maskb, rsh, gsh, bsh, S, tab);\
367 static void name ## ToUV_half_c(uint8_t *dstU, uint8_t *dstV, \
368 const uint8_t *unused0, const uint8_t *src, \
369 const uint8_t *dummy, \
370 int width, uint32_t *tab) \
372 rgb16_32ToUV_half_c_template((int16_t*)dstU, (int16_t*)dstV, src, width, fmt, \
373 shr, shg, shb, shp, \
374 maskr, maskg, maskb, \
375 rsh, gsh, bsh, S, tab); \
378 rgb16_32_wrapper(
AV_PIX_FMT_BGR32, bgr32, 16, 0, 0, 0, 0xFF0000, 0xFF00, 0x00FF, 8, 0, 8,
RGB2YUV_SHIFT + 8)
379 rgb16_32_wrapper(
AV_PIX_FMT_BGR32_1,
bgr321, 16, 0, 0, 8, 0xFF0000, 0xFF00, 0x00FF, 8, 0, 8,
RGB2YUV_SHIFT + 8)
380 rgb16_32_wrapper(
AV_PIX_FMT_RGB32, rgb32, 0, 0, 16, 0, 0x00FF, 0xFF00, 0xFF0000, 8, 0, 8,
RGB2YUV_SHIFT + 8)
381 rgb16_32_wrapper(
AV_PIX_FMT_RGB32_1,
rgb321, 0, 0, 16, 8, 0x00FF, 0xFF00, 0xFF0000, 8, 0, 8,
RGB2YUV_SHIFT + 8)
382 rgb16_32_wrapper(
AV_PIX_FMT_BGR565LE, bgr16le, 0, 0, 0, 0, 0x001F, 0x07E0, 0xF800, 11, 5, 0,
RGB2YUV_SHIFT + 8)
383 rgb16_32_wrapper(
AV_PIX_FMT_BGR555LE,
bgr15le, 0, 0, 0, 0, 0x001F, 0x03E0, 0x7C00, 10, 5, 0,
RGB2YUV_SHIFT + 7)
384 rgb16_32_wrapper(
AV_PIX_FMT_BGR444LE, bgr12le, 0, 0, 0, 0, 0x000F, 0x00F0, 0x0F00, 8, 4, 0,
RGB2YUV_SHIFT + 4)
385 rgb16_32_wrapper(
AV_PIX_FMT_RGB565LE,
rgb16le, 0, 0, 0, 0, 0xF800, 0x07E0, 0x001F, 0, 5, 11,
RGB2YUV_SHIFT + 8)
386 rgb16_32_wrapper(
AV_PIX_FMT_RGB555LE, rgb15le, 0, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, 0, 5, 10,
RGB2YUV_SHIFT + 7)
387 rgb16_32_wrapper(
AV_PIX_FMT_RGB444LE,
rgb12le, 0, 0, 0, 0, 0x0F00, 0x00F0, 0x000F, 0, 4, 8,
RGB2YUV_SHIFT + 4)
388 rgb16_32_wrapper(
AV_PIX_FMT_BGR565BE, bgr16be, 0, 0, 0, 0, 0x001F, 0x07E0, 0xF800, 11, 5, 0,
RGB2YUV_SHIFT + 8)
389 rgb16_32_wrapper(
AV_PIX_FMT_BGR555BE,
bgr15be, 0, 0, 0, 0, 0x001F, 0x03E0, 0x7C00, 10, 5, 0,
RGB2YUV_SHIFT + 7)
390 rgb16_32_wrapper(
AV_PIX_FMT_BGR444BE, bgr12be, 0, 0, 0, 0, 0x000F, 0x00F0, 0x0F00, 8, 4, 0,
RGB2YUV_SHIFT + 4)
391 rgb16_32_wrapper(
AV_PIX_FMT_RGB565BE,
rgb16be, 0, 0, 0, 0, 0xF800, 0x07E0, 0x001F, 0, 5, 11,
RGB2YUV_SHIFT + 8)
392 rgb16_32_wrapper(
AV_PIX_FMT_RGB555BE, rgb15be, 0, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, 0, 5, 10,
RGB2YUV_SHIFT + 7)
393 rgb16_32_wrapper(
AV_PIX_FMT_RGB444BE,
rgb12be, 0, 0, 0, 0, 0x0F00, 0x00F0, 0x000F, 0, 4, 8,
RGB2YUV_SHIFT + 4)
399 uint16_t *dstU = (uint16_t *)_dstU;
400 uint16_t *dstV = (uint16_t *)_dstV;
406 unsigned int g = gsrc[2*
i] + gsrc[2*
i+1];
407 unsigned int b = bsrc[2*
i] + bsrc[2*
i+1];
408 unsigned int r = rsrc[2*
i] + rsrc[2*
i+1];
418 int16_t *dst = (int16_t *)_dst;
419 const uint16_t *
src = (
const uint16_t *)_src;
428 int16_t *dst = (int16_t *)_dst;
429 const uint16_t *
src = (
const uint16_t *)_src;
437 int16_t *dst = (int16_t *)_dst;
446 int16_t *dst = (int16_t *)_dst;
455 int16_t *dst = (int16_t *)_dst;
460 dst[
i]= (pal[d] >> 24)<<6 | pal[d]>>26;
466 int16_t *dst = (int16_t *)_dst;
471 dst[
i] = (pal[d] & 0xFF)<<6;
477 int width, uint32_t *pal)
479 uint16_t *dstU = (uint16_t *)_dstU;
480 int16_t *dstV = (int16_t *)_dstV;
484 int p = pal[
src1[
i]];
493 int16_t *dst = (int16_t *)_dst;
498 for (j = 0; j < 8; j++)
499 dst[8*
i+j]= ((d>>(7-j))&1) * 16383;
503 for (j = 0; j < (
width&7); j++)
504 dst[8*
i+j]= ((d>>(7-j))&1) * 16383;
510 int16_t *dst = (int16_t *)_dst;
515 for (j = 0; j < 8; j++)
516 dst[8*
i+j]= ((d>>(7-j))&1) * 16383;
520 for (j = 0; j < (
width&7); j++)
521 dst[8*
i+j] = ((d>>(7-j))&1) * 16383;
538 dstU[
i] =
src1[4 *
i + 1];
539 dstV[
i] =
src1[4 *
i + 3];
549 dstV[
i] =
src1[4 *
i + 1];
550 dstU[
i] =
src1[4 *
i + 3];
577 const uint16_t *
src = (
const uint16_t *)_src;
578 uint16_t *dst = (uint16_t *)_dst;
587 const uint16_t *
src1 = (
const uint16_t *)_src1,
588 *src2 = (
const uint16_t *)_src2;
589 uint16_t *dstU = (uint16_t *)_dstU, *dstV = (uint16_t *)_dstV;
662 dst[
i] =
src[2 *
i + 1];
670 dstU[
i] =
src1[4 *
i + 0];
671 dstV[
i] =
src1[4 *
i + 2];
681 dst1[
i] =
src[2 *
i + 0];
682 dst2[
i] =
src[2 *
i + 1];
688 int width, uint32_t *unused)
695 int width, uint32_t *unused)
720 int width, uint32_t *unused)
731 int width, uint32_t *unused)
742 int width, uint32_t *unused)
753 int width, uint32_t *unused)
762 #define input_pixel(pos) (isBE(origin) ? AV_RB16(pos) : AV_RL16(pos))
767 int16_t *dst = (int16_t *)_dst;
771 int b =
src[
i * 3 + 0];
772 int g =
src[
i * 3 + 1];
773 int r =
src[
i * 3 + 2];
782 int16_t *dstU = (int16_t *)_dstU;
783 int16_t *dstV = (int16_t *)_dstV;
801 int16_t *dstU = (int16_t *)_dstU;
802 int16_t *dstV = (int16_t *)_dstV;
820 int16_t *dst = (int16_t *)_dst;
824 int r =
src[
i * 3 + 0];
825 int g =
src[
i * 3 + 1];
826 int b =
src[
i * 3 + 2];
835 int16_t *dstU = (int16_t *)_dstU;
836 int16_t *dstV = (int16_t *)_dstV;
854 int16_t *dstU = (int16_t *)_dstU;
855 int16_t *dstV = (int16_t *)_dstV;
872 uint16_t *dst = (uint16_t *)_dst;
886 uint16_t *dst = (uint16_t *)_dst;
889 dst[
i] =
src[3][
i] << 6;
894 uint16_t *dstU = (uint16_t *)_dstU;
895 uint16_t *dstV = (uint16_t *)_dstV;
910 is_be ? AV_RB16(src) : AV_RL16(src)
915 const uint16_t **
src = (
const uint16_t **)_src;
916 uint16_t *dst = (uint16_t *)_dst;
918 int shift = bpc < 16 ? bpc : 14;
932 const uint16_t **
src = (
const uint16_t **)_src;
933 uint16_t *dst = (uint16_t *)_dst;
934 int shift = bpc < 16 ? bpc : 14;
946 const uint16_t **
src = (
const uint16_t **)_src;
947 uint16_t *dstU = (uint16_t *)_dstU;
948 uint16_t *dstV = (uint16_t *)_dstV;
951 int shift = bpc < 16 ? bpc : 14;
963 #define rdpx(src) (is_be ? av_int2float(AV_RB32(src)): av_int2float(AV_RL32(src)))
968 const float **
src = (
const float **)_src;
969 uint16_t *dst = (uint16_t *)_dst;
979 const float **
src = (
const float **)_src;
980 uint16_t *dstU = (uint16_t *)_dstU;
981 uint16_t *dstV = (uint16_t *)_dstV;
999 const float **
src = (
const float **)_src;
1000 uint16_t *dst = (uint16_t *)_dst;
1020 const float *
src = (
const float *)_src;
1021 uint16_t *dst = (uint16_t *)_dst;
1032 const uint32_t *
src = (
const uint32_t *)_src;
1033 uint16_t *dst = (uint16_t *)_dst;
1040 #define rgb9plus_planar_funcs_endian(nbits, endian_name, endian) \
1041 static void planar_rgb##nbits##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
1042 int w, int32_t *rgb2yuv) \
1044 planar_rgb16_to_y(dst, src, w, nbits, endian, rgb2yuv); \
1046 static void planar_rgb##nbits##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \
1047 const uint8_t *src[4], int w, int32_t *rgb2yuv) \
1049 planar_rgb16_to_uv(dstU, dstV, src, w, nbits, endian, rgb2yuv); \
1052 #define rgb9plus_planar_transparency_funcs(nbits) \
1053 static void planar_rgb##nbits##le_to_a(uint8_t *dst, const uint8_t *src[4], \
1054 int w, int32_t *rgb2yuv) \
1056 planar_rgb16_to_a(dst, src, w, nbits, 0, rgb2yuv); \
1058 static void planar_rgb##nbits##be_to_a(uint8_t *dst, const uint8_t *src[4], \
1059 int w, int32_t *rgb2yuv) \
1061 planar_rgb16_to_a(dst, src, w, nbits, 1, rgb2yuv); \
1064 #define rgb9plus_planar_funcs(nbits) \
1065 rgb9plus_planar_funcs_endian(nbits, le, 0) \
1066 rgb9plus_planar_funcs_endian(nbits, be, 1)
1078 #define rgbf32_planar_funcs_endian(endian_name, endian) \
1079 static void planar_rgbf32##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
1080 int w, int32_t *rgb2yuv) \
1082 planar_rgbf32_to_y(dst, src, w, endian, rgb2yuv); \
1084 static void planar_rgbf32##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \
1085 const uint8_t *src[4], int w, int32_t *rgb2yuv) \
1087 planar_rgbf32_to_uv(dstU, dstV, src, w, endian, rgb2yuv); \
1089 static void planar_rgbf32##endian_name##_to_a(uint8_t *dst, const uint8_t *src[4], \
1090 int w, int32_t *rgb2yuv) \
1092 planar_rgbf32_to_a(dst, src, w, endian, rgb2yuv); \
1102 c->chrToYV12 =
NULL;
1103 switch (srcFormat) {
1129 c->readChrPlanar = planar_rgb9le_to_uv;
1133 c->readChrPlanar = planar_rgb10le_to_uv;
1137 c->readChrPlanar = planar_rgb12le_to_uv;
1140 c->readChrPlanar = planar_rgb14le_to_uv;
1144 c->readChrPlanar = planar_rgb16le_to_uv;
1148 c->readChrPlanar = planar_rgbf32le_to_uv;
1151 c->readChrPlanar = planar_rgb9be_to_uv;
1155 c->readChrPlanar = planar_rgb10be_to_uv;
1159 c->readChrPlanar = planar_rgb12be_to_uv;
1162 c->readChrPlanar = planar_rgb14be_to_uv;
1166 c->readChrPlanar = planar_rgb16be_to_uv;
1170 c->readChrPlanar = planar_rgbf32be_to_uv;
1260 if (
c->chrSrcHSubSample) {
1261 switch (srcFormat) {
1263 c->chrToYV12 = rgb64BEToUV_half_c;
1266 c->chrToYV12 = rgb64LEToUV_half_c;
1269 c->chrToYV12 = bgr64BEToUV_half_c;
1272 c->chrToYV12 = bgr64LEToUV_half_c;
1275 c->chrToYV12 = rgb48BEToUV_half_c;
1278 c->chrToYV12 = rgb48LEToUV_half_c;
1281 c->chrToYV12 = bgr48BEToUV_half_c;
1284 c->chrToYV12 = bgr48LEToUV_half_c;
1287 c->chrToYV12 = bgr32ToUV_half_c;
1290 c->chrToYV12 = bgr321ToUV_half_c;
1296 c->chrToYV12 = bgr16leToUV_half_c;
1299 c->chrToYV12 = bgr16beToUV_half_c;
1302 c->chrToYV12 = bgr15leToUV_half_c;
1305 c->chrToYV12 = bgr15beToUV_half_c;
1312 c->chrToYV12 = bgr12leToUV_half_c;
1315 c->chrToYV12 = bgr12beToUV_half_c;
1318 c->chrToYV12 = rgb32ToUV_half_c;
1321 c->chrToYV12 = rgb321ToUV_half_c;
1327 c->chrToYV12 = rgb16leToUV_half_c;
1330 c->chrToYV12 = rgb16beToUV_half_c;
1333 c->chrToYV12 = rgb15leToUV_half_c;
1336 c->chrToYV12 = rgb15beToUV_half_c;
1339 c->chrToYV12 = rgb12leToUV_half_c;
1342 c->chrToYV12 = rgb12beToUV_half_c;
1346 switch (srcFormat) {
1348 c->chrToYV12 = rgb64BEToUV_c;
1351 c->chrToYV12 = rgb64LEToUV_c;
1354 c->chrToYV12 = bgr64BEToUV_c;
1357 c->chrToYV12 = bgr64LEToUV_c;
1360 c->chrToYV12 = rgb48BEToUV_c;
1363 c->chrToYV12 = rgb48LEToUV_c;
1366 c->chrToYV12 = bgr48BEToUV_c;
1369 c->chrToYV12 = bgr48LEToUV_c;
1372 c->chrToYV12 = bgr32ToUV_c;
1375 c->chrToYV12 = bgr321ToUV_c;
1381 c->chrToYV12 = bgr16leToUV_c;
1384 c->chrToYV12 = bgr16beToUV_c;
1387 c->chrToYV12 = bgr15leToUV_c;
1390 c->chrToYV12 = bgr15beToUV_c;
1393 c->chrToYV12 = bgr12leToUV_c;
1396 c->chrToYV12 = bgr12beToUV_c;
1399 c->chrToYV12 = rgb32ToUV_c;
1402 c->chrToYV12 = rgb321ToUV_c;
1408 c->chrToYV12 = rgb16leToUV_c;
1411 c->chrToYV12 = rgb16beToUV_c;
1414 c->chrToYV12 = rgb15leToUV_c;
1417 c->chrToYV12 = rgb15beToUV_c;
1420 c->chrToYV12 = rgb12leToUV_c;
1423 c->chrToYV12 = rgb12beToUV_c;
1428 c->lumToYV12 =
NULL;
1429 c->alpToYV12 =
NULL;
1430 switch (srcFormat) {
1432 c->readLumPlanar = planar_rgb9le_to_y;
1435 c->readAlpPlanar = planar_rgb10le_to_a;
1437 c->readLumPlanar = planar_rgb10le_to_y;
1440 c->readAlpPlanar = planar_rgb12le_to_a;
1442 c->readLumPlanar = planar_rgb12le_to_y;
1445 c->readLumPlanar = planar_rgb14le_to_y;
1448 c->readAlpPlanar = planar_rgb16le_to_a;
1450 c->readLumPlanar = planar_rgb16le_to_y;
1453 c->readAlpPlanar = planar_rgbf32le_to_a;
1455 c->readLumPlanar = planar_rgbf32le_to_y;
1458 c->readLumPlanar = planar_rgb9be_to_y;
1461 c->readAlpPlanar = planar_rgb10be_to_a;
1463 c->readLumPlanar = planar_rgb10be_to_y;
1466 c->readAlpPlanar = planar_rgb12be_to_a;
1468 c->readLumPlanar = planar_rgb12be_to_y;
1471 c->readLumPlanar = planar_rgb14be_to_y;
1474 c->readAlpPlanar = planar_rgb16be_to_a;
1476 c->readLumPlanar = planar_rgb16be_to_y;
1479 c->readAlpPlanar = planar_rgbf32be_to_a;
1481 c->readLumPlanar = planar_rgbf32be_to_y;
1594 c->lumToYV12 = bgr16leToY_c;
1597 c->lumToYV12 = bgr16beToY_c;
1600 c->lumToYV12 = bgr15leToY_c;
1603 c->lumToYV12 = bgr15beToY_c;
1606 c->lumToYV12 = bgr12leToY_c;
1609 c->lumToYV12 = bgr12beToY_c;
1615 c->lumToYV12 = rgb16leToY_c;
1618 c->lumToYV12 = rgb16beToY_c;
1621 c->lumToYV12 = rgb15leToY_c;
1624 c->lumToYV12 = rgb15beToY_c;
1627 c->lumToYV12 = rgb12leToY_c;
1630 c->lumToYV12 = rgb12beToY_c;
1646 c->lumToYV12 = bgr32ToY_c;
1649 c->lumToYV12 = bgr321ToY_c;
1652 c->lumToYV12 = rgb32ToY_c;
1655 c->lumToYV12 = rgb321ToY_c;
1658 c->lumToYV12 = rgb48BEToY_c;
1661 c->lumToYV12 = rgb48LEToY_c;
1664 c->lumToYV12 = bgr48BEToY_c;
1667 c->lumToYV12 = bgr48LEToY_c;
1670 c->lumToYV12 = rgb64BEToY_c;
1673 c->lumToYV12 = rgb64LEToY_c;
1676 c->lumToYV12 = bgr64BEToY_c;
1679 c->lumToYV12 = bgr64LEToY_c;
1707 if (HAVE_BIGENDIAN == !
isBE(srcFormat) && !
c->readAlpPlanar)
1710 switch (srcFormat) {
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_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_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_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.
void ff_sws_init_input_funcs(SwsContext *c)
@ 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_RGB555BE
packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian , X=unused/undefined
@ 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_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)
@ 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
static av_always_inline float av_int2float(uint32_t i)
Reinterpret a 32-bit integer as a float.
@ 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_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_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
#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
@ AV_PIX_FMT_RGB565LE
packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), 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_YUYV422
packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
@ 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
@ 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)2R 3G 3B(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_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_YUV420P9BE
The following 12 formats have the disadvantage of needing 1 format for each bit depth.
static av_always_inline int isBE(enum AVPixelFormat pix_fmt)
@ 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
@ 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_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.
@ 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_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_YUVA420P10LE
planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
@ 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_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
@ 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_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
@ AV_PIX_FMT_NV21
as above, but U and V bytes are swapped
@ 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
@ 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_P016LE
like NV12, with 16bpp per component, little-endian
@ AV_PIX_FMT_GRAYF32BE
IEEE-754 single precision Y, 32bpp, 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
@ AV_PIX_FMT_YUV444P12BE
planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
@ AV_PIX_FMT_YUV444P9LE
planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), 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
static int shift(int a, int b)
@ 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_GRAY16LE
Y , 16bpp, 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_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_GRAY14LE
Y , 14bpp, 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_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
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_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