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 : ((origin == AV_PIX_FMT_X2RGB10LE) \
250 ? AV_RL32(&src[(i) * 4]) \
251 : (isBE(origin) ? AV_RB16(&src[(i) * 2]) \
252 : AV_RL16(&src[(i) * 2]))))
260 int maskr,
int maskg,
262 int gsh,
int bsh,
int S,
266 const unsigned rnd = (32<<((
S)-1)) + (1<<(
S-7));
271 int b = (px & maskb) >> shb;
272 int g = (px & maskg) >> shg;
273 int r = (px & maskr) >> shr;
275 dst[
i] = (ry *
r + gy *
g + by *
b +
rnd) >> ((
S)-6);
286 int maskr,
int maskg,
288 int gsh,
int bsh,
int S,
293 const unsigned rnd = (256
u<<((
S)-1)) + (1<<(
S-7));
298 int b = (px & maskb) >> shb;
299 int g = (px & maskg) >> shg;
300 int r = (px & maskr) >> shr;
314 int maskr,
int maskg,
316 int gsh,
int bsh,
int S,
321 maskgx = ~(maskr | maskb);
322 const unsigned rnd = (256
U<<(
S)) + (1<<(
S-6));
331 int b,
r,
g = (px0 & maskgx) + (px1 & maskgx);
332 int rb = px0 + px1 -
g;
334 b = (rb & maskb) >> shb;
340 g = (
g & maskg) >> shg;
342 r = (rb & maskr) >> shr;
344 dstU[
i] = (
ru *
r +
gu *
g +
bu *
b + (unsigned)
rnd) >> ((
S)-6+1);
351 #define rgb16_32_wrapper(fmt, name, shr, shg, shb, shp, maskr, \
352 maskg, maskb, rsh, gsh, bsh, S) \
353 static void name ## ToY_c(uint8_t *dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2, \
354 int width, uint32_t *tab) \
356 rgb16_32ToY_c_template((int16_t*)dst, src, width, fmt, shr, shg, shb, shp, \
357 maskr, maskg, maskb, rsh, gsh, bsh, S, tab); \
360 static void name ## ToUV_c(uint8_t *dstU, uint8_t *dstV, \
361 const uint8_t *unused0, const uint8_t *src, const uint8_t *dummy, \
362 int width, uint32_t *tab) \
364 rgb16_32ToUV_c_template((int16_t*)dstU, (int16_t*)dstV, src, width, fmt, \
365 shr, shg, shb, shp, \
366 maskr, maskg, maskb, rsh, gsh, bsh, S, tab);\
369 static void name ## ToUV_half_c(uint8_t *dstU, uint8_t *dstV, \
370 const uint8_t *unused0, const uint8_t *src, \
371 const uint8_t *dummy, \
372 int width, uint32_t *tab) \
374 rgb16_32ToUV_half_c_template((int16_t*)dstU, (int16_t*)dstV, src, width, fmt, \
375 shr, shg, shb, shp, \
376 maskr, maskg, maskb, \
377 rsh, gsh, bsh, S, tab); \
380 rgb16_32_wrapper(
AV_PIX_FMT_BGR32, bgr32, 16, 0, 0, 0, 0xFF0000, 0xFF00, 0x00FF, 8, 0, 8,
RGB2YUV_SHIFT + 8)
381 rgb16_32_wrapper(
AV_PIX_FMT_BGR32_1,
bgr321, 16, 0, 0, 8, 0xFF0000, 0xFF00, 0x00FF, 8, 0, 8,
RGB2YUV_SHIFT + 8)
382 rgb16_32_wrapper(
AV_PIX_FMT_RGB32, rgb32, 0, 0, 16, 0, 0x00FF, 0xFF00, 0xFF0000, 8, 0, 8,
RGB2YUV_SHIFT + 8)
383 rgb16_32_wrapper(
AV_PIX_FMT_RGB32_1,
rgb321, 0, 0, 16, 8, 0x00FF, 0xFF00, 0xFF0000, 8, 0, 8,
RGB2YUV_SHIFT + 8)
384 rgb16_32_wrapper(
AV_PIX_FMT_BGR565LE, bgr16le, 0, 0, 0, 0, 0x001F, 0x07E0, 0xF800, 11, 5, 0,
RGB2YUV_SHIFT + 8)
385 rgb16_32_wrapper(
AV_PIX_FMT_BGR555LE,
bgr15le, 0, 0, 0, 0, 0x001F, 0x03E0, 0x7C00, 10, 5, 0,
RGB2YUV_SHIFT + 7)
386 rgb16_32_wrapper(
AV_PIX_FMT_BGR444LE, bgr12le, 0, 0, 0, 0, 0x000F, 0x00F0, 0x0F00, 8, 4, 0,
RGB2YUV_SHIFT + 4)
387 rgb16_32_wrapper(
AV_PIX_FMT_RGB565LE,
rgb16le, 0, 0, 0, 0, 0xF800, 0x07E0, 0x001F, 0, 5, 11,
RGB2YUV_SHIFT + 8)
388 rgb16_32_wrapper(
AV_PIX_FMT_RGB555LE, rgb15le, 0, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, 0, 5, 10,
RGB2YUV_SHIFT + 7)
389 rgb16_32_wrapper(
AV_PIX_FMT_RGB444LE,
rgb12le, 0, 0, 0, 0, 0x0F00, 0x00F0, 0x000F, 0, 4, 8,
RGB2YUV_SHIFT + 4)
390 rgb16_32_wrapper(
AV_PIX_FMT_BGR565BE, bgr16be, 0, 0, 0, 0, 0x001F, 0x07E0, 0xF800, 11, 5, 0,
RGB2YUV_SHIFT + 8)
391 rgb16_32_wrapper(
AV_PIX_FMT_BGR555BE,
bgr15be, 0, 0, 0, 0, 0x001F, 0x03E0, 0x7C00, 10, 5, 0,
RGB2YUV_SHIFT + 7)
392 rgb16_32_wrapper(
AV_PIX_FMT_BGR444BE, bgr12be, 0, 0, 0, 0, 0x000F, 0x00F0, 0x0F00, 8, 4, 0,
RGB2YUV_SHIFT + 4)
393 rgb16_32_wrapper(
AV_PIX_FMT_RGB565BE,
rgb16be, 0, 0, 0, 0, 0xF800, 0x07E0, 0x001F, 0, 5, 11,
RGB2YUV_SHIFT + 8)
394 rgb16_32_wrapper(
AV_PIX_FMT_RGB555BE, rgb15be, 0, 0, 0, 0, 0x7C00, 0x03E0, 0x001F, 0, 5, 10,
RGB2YUV_SHIFT + 7)
395 rgb16_32_wrapper(
AV_PIX_FMT_RGB444BE,
rgb12be, 0, 0, 0, 0, 0x0F00, 0x00F0, 0x000F, 0, 4, 8,
RGB2YUV_SHIFT + 4)
396 rgb16_32_wrapper(
AV_PIX_FMT_X2RGB10LE, rgb30le, 16, 6, 0, 0, 0x3FF00000, 0xFFC00, 0x3FF, 0, 0, 4,
RGB2YUV_SHIFT + 6)
402 uint16_t *dstU = (uint16_t *)_dstU;
421 int16_t *dst = (int16_t *)_dst;
422 const uint16_t *
src = (
const uint16_t *)_src;
431 int16_t *dst = (int16_t *)_dst;
432 const uint16_t *
src = (
const uint16_t *)_src;
440 int16_t *dst = (int16_t *)_dst;
449 int16_t *dst = (int16_t *)_dst;
458 int16_t *dst = (int16_t *)_dst;
463 dst[
i]= (pal[d] >> 24)<<6 | pal[d]>>26;
469 int16_t *dst = (int16_t *)_dst;
474 dst[
i] = (pal[d] & 0xFF)<<6;
480 int width, uint32_t *pal)
482 uint16_t *dstU = (uint16_t *)_dstU;
487 int p = pal[
src1[
i]];
496 int16_t *dst = (int16_t *)_dst;
501 for (j = 0; j < 8; j++)
502 dst[8*
i+j]= ((d>>(7-j))&1) * 16383;
506 for (j = 0; j < (
width&7); j++)
507 dst[8*
i+j]= ((d>>(7-j))&1) * 16383;
513 int16_t *dst = (int16_t *)_dst;
518 for (j = 0; j < 8; j++)
519 dst[8*
i+j]= ((d>>(7-j))&1) * 16383;
523 for (j = 0; j < (
width&7); j++)
524 dst[8*
i+j] = ((d>>(7-j))&1) * 16383;
541 dstU[
i] =
src1[4 *
i + 1];
553 dstU[
i] =
src1[4 *
i + 3];
580 const uint16_t *
src = (
const uint16_t *)_src;
581 uint16_t *dst = (uint16_t *)_dst;
590 const uint16_t *
src1 = (
const uint16_t *)_src1,
591 *src2 = (
const uint16_t *)_src2;
592 uint16_t *dstU = (uint16_t *)_dstU, *
dstV = (uint16_t *)
_dstV;
665 dst[
i] =
src[2 *
i + 1];
673 dstU[
i] =
src1[4 *
i + 0];
684 dst1[
i] =
src[2 *
i + 0];
685 dst2[
i] =
src[2 *
i + 1];
691 int width, uint32_t *unused)
698 int width, uint32_t *unused)
723 int width, uint32_t *unused)
734 int width, uint32_t *unused)
745 int width, uint32_t *unused)
756 int width, uint32_t *unused)
765 #define input_pixel(pos) (isBE(origin) ? AV_RB16(pos) : AV_RL16(pos))
770 int16_t *dst = (int16_t *)_dst;
774 int b =
src[
i * 3 + 0];
775 int g =
src[
i * 3 + 1];
776 int r =
src[
i * 3 + 2];
785 int16_t *dstU = (int16_t *)_dstU;
804 int16_t *dstU = (int16_t *)_dstU;
823 int16_t *dst = (int16_t *)_dst;
827 int r =
src[
i * 3 + 0];
828 int g =
src[
i * 3 + 1];
829 int b =
src[
i * 3 + 2];
838 int16_t *dstU = (int16_t *)_dstU;
857 int16_t *dstU = (int16_t *)_dstU;
875 uint16_t *dst = (uint16_t *)_dst;
889 uint16_t *dst = (uint16_t *)_dst;
892 dst[
i] =
src[3][
i] << 6;
897 uint16_t *dstU = (uint16_t *)_dstU;
913 is_be ? AV_RB16(src) : AV_RL16(src)
918 const uint16_t **
src = (
const uint16_t **)_src;
919 uint16_t *dst = (uint16_t *)_dst;
921 int shift = bpc < 16 ? bpc : 14;
935 const uint16_t **
src = (
const uint16_t **)_src;
936 uint16_t *dst = (uint16_t *)_dst;
937 int shift = bpc < 16 ? bpc : 14;
949 const uint16_t **
src = (
const uint16_t **)_src;
950 uint16_t *dstU = (uint16_t *)_dstU;
954 int shift = bpc < 16 ? bpc : 14;
966 #define rdpx(src) (is_be ? av_int2float(AV_RB32(src)): av_int2float(AV_RL32(src)))
971 const float **
src = (
const float **)_src;
972 uint16_t *dst = (uint16_t *)_dst;
982 const float **
src = (
const float **)_src;
983 uint16_t *dstU = (uint16_t *)_dstU;
1001 const float **
src = (
const float **)_src;
1002 uint16_t *dst = (uint16_t *)_dst;
1021 const float *
src = (
const float *)_src;
1022 uint16_t *dst = (uint16_t *)_dst;
1033 const uint32_t *
src = (
const uint32_t *)_src;
1034 uint16_t *dst = (uint16_t *)_dst;
1041 #define rgb9plus_planar_funcs_endian(nbits, endian_name, endian) \
1042 static void planar_rgb##nbits##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
1043 int w, int32_t *rgb2yuv) \
1045 planar_rgb16_to_y(dst, src, w, nbits, endian, rgb2yuv); \
1047 static void planar_rgb##nbits##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \
1048 const uint8_t *src[4], int w, int32_t *rgb2yuv) \
1050 planar_rgb16_to_uv(dstU, dstV, src, w, nbits, endian, rgb2yuv); \
1053 #define rgb9plus_planar_transparency_funcs(nbits) \
1054 static void planar_rgb##nbits##le_to_a(uint8_t *dst, const uint8_t *src[4], \
1055 int w, int32_t *rgb2yuv) \
1057 planar_rgb16_to_a(dst, src, w, nbits, 0, rgb2yuv); \
1059 static void planar_rgb##nbits##be_to_a(uint8_t *dst, const uint8_t *src[4], \
1060 int w, int32_t *rgb2yuv) \
1062 planar_rgb16_to_a(dst, src, w, nbits, 1, rgb2yuv); \
1065 #define rgb9plus_planar_funcs(nbits) \
1066 rgb9plus_planar_funcs_endian(nbits, le, 0) \
1067 rgb9plus_planar_funcs_endian(nbits, be, 1)
1079 #define rgbf32_planar_funcs_endian(endian_name, endian) \
1080 static void planar_rgbf32##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
1081 int w, int32_t *rgb2yuv) \
1083 planar_rgbf32_to_y(dst, src, w, endian, rgb2yuv); \
1085 static void planar_rgbf32##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \
1086 const uint8_t *src[4], int w, int32_t *rgb2yuv) \
1088 planar_rgbf32_to_uv(dstU, dstV, src, w, endian, rgb2yuv); \
1090 static void planar_rgbf32##endian_name##_to_a(uint8_t *dst, const uint8_t *src[4], \
1091 int w, int32_t *rgb2yuv) \
1093 planar_rgbf32_to_a(dst, src, w, endian, rgb2yuv); \
1103 c->chrToYV12 =
NULL;
1104 switch (srcFormat) {
1130 c->readChrPlanar = planar_rgb9le_to_uv;
1134 c->readChrPlanar = planar_rgb10le_to_uv;
1138 c->readChrPlanar = planar_rgb12le_to_uv;
1141 c->readChrPlanar = planar_rgb14le_to_uv;
1145 c->readChrPlanar = planar_rgb16le_to_uv;
1149 c->readChrPlanar = planar_rgbf32le_to_uv;
1152 c->readChrPlanar = planar_rgb9be_to_uv;
1156 c->readChrPlanar = planar_rgb10be_to_uv;
1160 c->readChrPlanar = planar_rgb12be_to_uv;
1163 c->readChrPlanar = planar_rgb14be_to_uv;
1167 c->readChrPlanar = planar_rgb16be_to_uv;
1171 c->readChrPlanar = planar_rgbf32be_to_uv;
1261 if (
c->chrSrcHSubSample) {
1262 switch (srcFormat) {
1264 c->chrToYV12 = rgb64BEToUV_half_c;
1267 c->chrToYV12 = rgb64LEToUV_half_c;
1270 c->chrToYV12 = bgr64BEToUV_half_c;
1273 c->chrToYV12 = bgr64LEToUV_half_c;
1276 c->chrToYV12 = rgb48BEToUV_half_c;
1279 c->chrToYV12 = rgb48LEToUV_half_c;
1282 c->chrToYV12 = bgr48BEToUV_half_c;
1285 c->chrToYV12 = bgr48LEToUV_half_c;
1288 c->chrToYV12 = bgr32ToUV_half_c;
1291 c->chrToYV12 = bgr321ToUV_half_c;
1297 c->chrToYV12 = bgr16leToUV_half_c;
1300 c->chrToYV12 = bgr16beToUV_half_c;
1303 c->chrToYV12 = bgr15leToUV_half_c;
1306 c->chrToYV12 = bgr15beToUV_half_c;
1310 c->chrToYV12 = gbr24pToUV_half_c;
1313 c->chrToYV12 = bgr12leToUV_half_c;
1316 c->chrToYV12 = bgr12beToUV_half_c;
1319 c->chrToYV12 = rgb32ToUV_half_c;
1322 c->chrToYV12 = rgb321ToUV_half_c;
1328 c->chrToYV12 = rgb16leToUV_half_c;
1331 c->chrToYV12 = rgb16beToUV_half_c;
1334 c->chrToYV12 = rgb15leToUV_half_c;
1337 c->chrToYV12 = rgb15beToUV_half_c;
1340 c->chrToYV12 = rgb12leToUV_half_c;
1343 c->chrToYV12 = rgb12beToUV_half_c;
1346 c->chrToYV12 = rgb30leToUV_half_c;
1350 switch (srcFormat) {
1352 c->chrToYV12 = rgb64BEToUV_c;
1355 c->chrToYV12 = rgb64LEToUV_c;
1358 c->chrToYV12 = bgr64BEToUV_c;
1361 c->chrToYV12 = bgr64LEToUV_c;
1364 c->chrToYV12 = rgb48BEToUV_c;
1367 c->chrToYV12 = rgb48LEToUV_c;
1370 c->chrToYV12 = bgr48BEToUV_c;
1373 c->chrToYV12 = bgr48LEToUV_c;
1376 c->chrToYV12 = bgr32ToUV_c;
1379 c->chrToYV12 = bgr321ToUV_c;
1385 c->chrToYV12 = bgr16leToUV_c;
1388 c->chrToYV12 = bgr16beToUV_c;
1391 c->chrToYV12 = bgr15leToUV_c;
1394 c->chrToYV12 = bgr15beToUV_c;
1397 c->chrToYV12 = bgr12leToUV_c;
1400 c->chrToYV12 = bgr12beToUV_c;
1403 c->chrToYV12 = rgb32ToUV_c;
1406 c->chrToYV12 = rgb321ToUV_c;
1412 c->chrToYV12 = rgb16leToUV_c;
1415 c->chrToYV12 = rgb16beToUV_c;
1418 c->chrToYV12 = rgb15leToUV_c;
1421 c->chrToYV12 = rgb15beToUV_c;
1424 c->chrToYV12 = rgb12leToUV_c;
1427 c->chrToYV12 = rgb12beToUV_c;
1430 c->chrToYV12 = rgb30leToUV_c;
1435 c->lumToYV12 =
NULL;
1436 c->alpToYV12 =
NULL;
1437 switch (srcFormat) {
1439 c->readLumPlanar = planar_rgb9le_to_y;
1442 c->readAlpPlanar = planar_rgb10le_to_a;
1444 c->readLumPlanar = planar_rgb10le_to_y;
1447 c->readAlpPlanar = planar_rgb12le_to_a;
1449 c->readLumPlanar = planar_rgb12le_to_y;
1452 c->readLumPlanar = planar_rgb14le_to_y;
1455 c->readAlpPlanar = planar_rgb16le_to_a;
1457 c->readLumPlanar = planar_rgb16le_to_y;
1460 c->readAlpPlanar = planar_rgbf32le_to_a;
1462 c->readLumPlanar = planar_rgbf32le_to_y;
1465 c->readLumPlanar = planar_rgb9be_to_y;
1468 c->readAlpPlanar = planar_rgb10be_to_a;
1470 c->readLumPlanar = planar_rgb10be_to_y;
1473 c->readAlpPlanar = planar_rgb12be_to_a;
1475 c->readLumPlanar = planar_rgb12be_to_y;
1478 c->readLumPlanar = planar_rgb14be_to_y;
1481 c->readAlpPlanar = planar_rgb16be_to_a;
1483 c->readLumPlanar = planar_rgb16be_to_y;
1486 c->readAlpPlanar = planar_rgbf32be_to_a;
1488 c->readLumPlanar = planar_rgbf32be_to_y;
1601 c->lumToYV12 = bgr16leToY_c;
1604 c->lumToYV12 = bgr16beToY_c;
1607 c->lumToYV12 = bgr15leToY_c;
1610 c->lumToYV12 = bgr15beToY_c;
1613 c->lumToYV12 = bgr12leToY_c;
1616 c->lumToYV12 = bgr12beToY_c;
1622 c->lumToYV12 = rgb16leToY_c;
1625 c->lumToYV12 = rgb16beToY_c;
1628 c->lumToYV12 = rgb15leToY_c;
1631 c->lumToYV12 = rgb15beToY_c;
1634 c->lumToYV12 = rgb12leToY_c;
1637 c->lumToYV12 = rgb12beToY_c;
1653 c->lumToYV12 = bgr32ToY_c;
1656 c->lumToYV12 = bgr321ToY_c;
1659 c->lumToYV12 = rgb32ToY_c;
1662 c->lumToYV12 = rgb321ToY_c;
1665 c->lumToYV12 = rgb48BEToY_c;
1668 c->lumToYV12 = rgb48LEToY_c;
1671 c->lumToYV12 = bgr48BEToY_c;
1674 c->lumToYV12 = bgr48LEToY_c;
1677 c->lumToYV12 = rgb64BEToY_c;
1680 c->lumToYV12 = rgb64LEToY_c;
1683 c->lumToYV12 = bgr64BEToY_c;
1686 c->lumToYV12 = bgr64LEToY_c;
1712 c->lumToYV12 =rgb30leToY_c;
1717 if (HAVE_BIGENDIAN == !
isBE(srcFormat) && !
c->readAlpPlanar)
1720 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,...
@ 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_X2RGB10LE
packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), little-endian, X=unused/undefined
@ 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...
@ 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