41 { 0, 1, 0, 1, 0, 1, 0, 1,},
42 { 1, 0, 1, 0, 1, 0, 1, 0,},
43 { 0, 1, 0, 1, 0, 1, 0, 1,},
44 { 1, 0, 1, 0, 1, 0, 1, 0,},
45 { 0, 1, 0, 1, 0, 1, 0, 1,},
46 { 1, 0, 1, 0, 1, 0, 1, 0,},
47 { 0, 1, 0, 1, 0, 1, 0, 1,},
48 { 1, 0, 1, 0, 1, 0, 1, 0,},
50 { 1, 2, 1, 2, 1, 2, 1, 2,},
51 { 3, 0, 3, 0, 3, 0, 3, 0,},
52 { 1, 2, 1, 2, 1, 2, 1, 2,},
53 { 3, 0, 3, 0, 3, 0, 3, 0,},
54 { 1, 2, 1, 2, 1, 2, 1, 2,},
55 { 3, 0, 3, 0, 3, 0, 3, 0,},
56 { 1, 2, 1, 2, 1, 2, 1, 2,},
57 { 3, 0, 3, 0, 3, 0, 3, 0,},
59 { 2, 4, 3, 5, 2, 4, 3, 5,},
60 { 6, 0, 7, 1, 6, 0, 7, 1,},
61 { 3, 5, 2, 4, 3, 5, 2, 4,},
62 { 7, 1, 6, 0, 7, 1, 6, 0,},
63 { 2, 4, 3, 5, 2, 4, 3, 5,},
64 { 6, 0, 7, 1, 6, 0, 7, 1,},
65 { 3, 5, 2, 4, 3, 5, 2, 4,},
66 { 7, 1, 6, 0, 7, 1, 6, 0,},
68 { 4, 8, 7, 11, 4, 8, 7, 11,},
69 { 12, 0, 15, 3, 12, 0, 15, 3,},
70 { 6, 10, 5, 9, 6, 10, 5, 9,},
71 { 14, 2, 13, 1, 14, 2, 13, 1,},
72 { 4, 8, 7, 11, 4, 8, 7, 11,},
73 { 12, 0, 15, 3, 12, 0, 15, 3,},
74 { 6, 10, 5, 9, 6, 10, 5, 9,},
75 { 14, 2, 13, 1, 14, 2, 13, 1,},
77 { 9, 17, 15, 23, 8, 16, 14, 22,},
78 { 25, 1, 31, 7, 24, 0, 30, 6,},
79 { 13, 21, 11, 19, 12, 20, 10, 18,},
80 { 29, 5, 27, 3, 28, 4, 26, 2,},
81 { 8, 16, 14, 22, 9, 17, 15, 23,},
82 { 24, 0, 30, 6, 25, 1, 31, 7,},
83 { 12, 20, 10, 18, 13, 21, 11, 19,},
84 { 28, 4, 26, 2, 29, 5, 27, 3,},
86 { 18, 34, 30, 46, 17, 33, 29, 45,},
87 { 50, 2, 62, 14, 49, 1, 61, 13,},
88 { 26, 42, 22, 38, 25, 41, 21, 37,},
89 { 58, 10, 54, 6, 57, 9, 53, 5,},
90 { 16, 32, 28, 44, 19, 35, 31, 47,},
91 { 48, 0, 60, 12, 51, 3, 63, 15,},
92 { 24, 40, 20, 36, 27, 43, 23, 39,},
93 { 56, 8, 52, 4, 59, 11, 55, 7,},
95 { 18, 34, 30, 46, 17, 33, 29, 45,},
96 { 50, 2, 62, 14, 49, 1, 61, 13,},
97 { 26, 42, 22, 38, 25, 41, 21, 37,},
98 { 58, 10, 54, 6, 57, 9, 53, 5,},
99 { 16, 32, 28, 44, 19, 35, 31, 47,},
100 { 48, 0, 60, 12, 51, 3, 63, 15,},
101 { 24, 40, 20, 36, 27, 43, 23, 39,},
102 { 56, 8, 52, 4, 59, 11, 55, 7,},
104 { 36, 68, 60, 92, 34, 66, 58, 90,},
105 { 100, 4,124, 28, 98, 2,122, 26,},
106 { 52, 84, 44, 76, 50, 82, 42, 74,},
107 { 116, 20,108, 12,114, 18,106, 10,},
108 { 32, 64, 56, 88, 38, 70, 62, 94,},
109 { 96, 0,120, 24,102, 6,126, 30,},
110 { 48, 80, 40, 72, 54, 86, 46, 78,},
111 { 112, 16,104, 8,118, 22,110, 14,},
134 dst += dstStride * srcSliceY;
135 if (dstStride == srcStride && srcStride > 0) {
148 int srcStride[],
int srcSliceY,
152 uint8_t *dst = dstParam[1] + dstStride[1] * srcSliceY / 2;
155 dstParam[0], dstStride[0]);
159 srcStride[1], srcStride[2], dstStride[1]);
162 srcStride[2], srcStride[1], dstStride[1]);
168 int srcStride[],
int srcSliceY,
172 uint8_t *dst1 = dstParam[1] + dstStride[1] * srcSliceY / 2;
173 uint8_t *dst2 = dstParam[2] + dstStride[2] * srcSliceY / 2;
176 dstParam[0], dstStride[0]);
180 srcStride[1], dstStride[1], dstStride[2]);
183 srcStride[1], dstStride[2], dstStride[1]);
189 int srcStride[],
int srcSliceY,
193 uint8_t *dst = dstParam[1] + dstStride[1] * srcSliceY;
196 dstParam[0], dstStride[0]);
200 srcStride[1], srcStride[2], dstStride[1]);
203 srcStride[2], srcStride[1], dstStride[1]);
209 int srcStride[],
int srcSliceY,
213 uint8_t *dst1 = dstParam[1] + dstStride[1] * srcSliceY;
214 uint8_t *dst2 = dstParam[2] + dstStride[2] * srcSliceY;
217 dstParam[0], dstStride[0]);
221 srcStride[1], dstStride[1], dstStride[2]);
224 srcStride[1], dstStride[2], dstStride[1]);
230 int srcStride[],
int srcSliceY,
236 const uint16_t **
src = (
const uint16_t**)src8;
237 uint16_t *dstY = (uint16_t*)(dstParam8[0] + dstStride[0] * srcSliceY);
238 uint16_t *dstUV = (uint16_t*)(dstParam8[1] + dstStride[1] * srcSliceY / 2);
242 const int shift[3] = {
251 av_assert0(!(srcStride[0] % 2 || srcStride[1] % 2 || srcStride[2] % 2 ||
252 dstStride[0] % 2 || dstStride[1] % 2));
255 uint16_t *tdstY = dstY;
256 const uint16_t *tsrc0 =
src[0];
257 for (x =
c->srcW; x > 0; x--) {
258 *tdstY++ = *tsrc0++ <<
shift[0];
260 src[0] += srcStride[0] / 2;
261 dstY += dstStride[0] / 2;
264 uint16_t *tdstUV = dstUV;
265 const uint16_t *tsrc1 =
src[1];
266 const uint16_t *tsrc2 =
src[2];
267 for (x =
c->srcW / 2; x > 0; x--) {
268 *tdstUV++ = *tsrc1++ <<
shift[1];
269 *tdstUV++ = *tsrc2++ <<
shift[2];
271 src[1] += srcStride[1] / 2;
272 src[2] += srcStride[2] / 2;
273 dstUV += dstStride[1] / 2;
280 #if AV_HAVE_BIGENDIAN
281 #define output_pixel(p, v) do { \
282 uint16_t *pp = (p); \
286 #define output_pixel(p, v) (*p) = (v)
290 int srcStride[],
int srcSliceY,
294 uint16_t *dstY = (uint16_t*)(dstParam8[0] + dstStride[0] * srcSliceY);
295 uint16_t *dstUV = (uint16_t*)(dstParam8[1] + dstStride[1] * srcSliceY / 2);
298 av_assert0(!(dstStride[0] % 2 || dstStride[1] % 2));
301 uint16_t *tdstY = dstY;
303 for (x =
c->srcW; x > 0; x--) {
307 src[0] += srcStride[0];
308 dstY += dstStride[0] / 2;
311 uint16_t *tdstUV = dstUV;
314 for (x =
c->srcW / 2; x > 0; x--) {
320 src[1] += srcStride[1];
321 src[2] += srcStride[2];
322 dstUV += dstStride[1] / 2;
332 int srcStride[],
int srcSliceY,
int srcSliceH,
333 uint8_t *dstParam[],
int dstStride[])
335 uint8_t *dst = dstParam[0] + dstStride[0] * srcSliceY;
338 srcStride[1], dstStride[0]);
344 int srcStride[],
int srcSliceY,
int srcSliceH,
345 uint8_t *dstParam[],
int dstStride[])
347 uint8_t *dst = dstParam[0] + dstStride[0] * srcSliceY;
350 srcStride[1], dstStride[0]);
356 int srcStride[],
int srcSliceY,
int srcSliceH,
357 uint8_t *dstParam[],
int dstStride[])
359 uint8_t *dst = dstParam[0] + dstStride[0] * srcSliceY;
362 srcStride[1], dstStride[0]);
368 int srcStride[],
int srcSliceY,
int srcSliceH,
369 uint8_t *dstParam[],
int dstStride[])
371 uint8_t *dst = dstParam[0] + dstStride[0] * srcSliceY;
374 srcStride[1], dstStride[0]);
380 int srcStride[],
int srcSliceY,
int srcSliceH,
381 uint8_t *dstParam[],
int dstStride[])
383 uint8_t *ydst = dstParam[0] + dstStride[0] * srcSliceY;
384 uint8_t *udst = dstParam[1] + dstStride[1] * srcSliceY / 2;
385 uint8_t *vdst = dstParam[2] + dstStride[2] * srcSliceY / 2;
388 dstStride[1], srcStride[0]);
397 int srcStride[],
int srcSliceY,
int srcSliceH,
398 uint8_t *dstParam[],
int dstStride[])
400 uint8_t *ydst = dstParam[0] + dstStride[0] * srcSliceY;
401 uint8_t *udst = dstParam[1] + dstStride[1] * srcSliceY;
402 uint8_t *vdst = dstParam[2] + dstStride[2] * srcSliceY;
405 dstStride[1], srcStride[0]);
411 int srcStride[],
int srcSliceY,
int srcSliceH,
412 uint8_t *dstParam[],
int dstStride[])
414 uint8_t *ydst = dstParam[0] + dstStride[0] * srcSliceY;
415 uint8_t *udst = dstParam[1] + dstStride[1] * srcSliceY / 2;
416 uint8_t *vdst = dstParam[2] + dstStride[2] * srcSliceY / 2;
419 dstStride[1], srcStride[0]);
428 int srcStride[],
int srcSliceY,
int srcSliceH,
429 uint8_t *dstParam[],
int dstStride[])
431 uint8_t *ydst = dstParam[0] + dstStride[0] * srcSliceY;
432 uint8_t *udst = dstParam[1] + dstStride[1] * srcSliceY;
433 uint8_t *vdst = dstParam[2] + dstStride[2] * srcSliceY;
436 dstStride[1], srcStride[0]);
445 for (
i = 0;
i < num_pixels;
i++)
446 ((uint32_t *) dst)[
i] = ((
const uint32_t *) palette)[
src[
i << 1]] | (
src[(
i << 1) + 1] << 24);
454 for (
i = 0;
i < num_pixels;
i++)
455 ((uint32_t *) dst)[
i] = ((
const uint32_t *) palette)[
src[
i << 1]] |
src[(
i << 1) + 1];
463 for (
i = 0;
i < num_pixels;
i++) {
465 dst[0] = palette[
src[
i << 1] * 4 + 0];
466 dst[1] = palette[
src[
i << 1] * 4 + 1];
467 dst[2] = palette[
src[
i << 1] * 4 + 2];
473 int srcStride[],
int srcSliceY,
int srcSliceH,
474 uint8_t *dst[],
int dstStride[])
478 for (p = 0; p < 4; p++) {
479 int srcstr = srcStride[p] / 2;
480 int dststr = dstStride[p] / 2;
481 uint16_t *dstPtr = (uint16_t *) dst[p];
482 const uint16_t *srcPtr = (
const uint16_t *)
src[p];
484 if(!dstPtr || !srcPtr)
486 dstPtr += (srcSliceY >>
c->chrDstVSubSample) * dststr;
488 for (j = 0; j < min_stride; j++) {
500 int srcStride[],
int srcSliceY,
int srcSliceH,
501 uint8_t *dst[],
int dstStride[])
505 for (p = 0; p < 4; p++) {
506 int srcstr = srcStride[p] / 4;
507 int dststr = dstStride[p] / 4;
508 uint32_t *dstPtr = (uint32_t *) dst[p];
509 const uint32_t *srcPtr = (
const uint32_t *)
src[p];
511 if(!dstPtr || !srcPtr)
513 dstPtr += (srcSliceY >>
c->chrDstVSubSample) * dststr;
515 for (j = 0; j < min_stride; j++) {
536 uint8_t *dstPtr = dst[0] + dstStride[0] * srcSliceY;
548 }
else if (
usePal(srcFormat)) {
565 srcPtr += srcStride[0];
566 dstPtr += dstStride[0];
574 uint16_t *dst[],
int dstStride[],
int srcSliceH,
575 int src_alpha,
int swap,
int shift,
int width)
578 int dst_alpha = dst[3] !=
NULL;
580 uint16_t *src_line = (uint16_t *)(
src + srcStride *
h);
583 if (src_alpha && dst_alpha) {
584 for (x = 0; x <
width; x++) {
590 }
else if (dst_alpha) {
591 for (x = 0; x <
width; x++) {
597 }
else if (src_alpha) {
598 for (x = 0; x <
width; x++) {
605 for (x = 0; x <
width; x++) {
613 if (src_alpha && dst_alpha) {
614 for (x = 0; x <
width; x++) {
620 }
else if (dst_alpha) {
621 for (x = 0; x <
width; x++) {
627 }
else if (src_alpha) {
628 for (x = 0; x <
width; x++) {
635 for (x = 0; x <
width; x++) {
643 if (src_alpha && dst_alpha) {
644 for (x = 0; x <
width; x++) {
650 }
else if (dst_alpha) {
651 for (x = 0; x <
width; x++) {
657 }
else if (src_alpha) {
658 for (x = 0; x <
width; x++) {
665 for (x = 0; x <
width; x++) {
673 if (src_alpha && dst_alpha) {
674 for (x = 0; x <
width; x++) {
675 dst[0][x] = *src_line++ >>
shift;
676 dst[1][x] = *src_line++ >>
shift;
677 dst[2][x] = *src_line++ >>
shift;
678 dst[3][x] = *src_line++ >>
shift;
680 }
else if (dst_alpha) {
681 for (x = 0; x <
width; x++) {
682 dst[0][x] = *src_line++ >>
shift;
683 dst[1][x] = *src_line++ >>
shift;
684 dst[2][x] = *src_line++ >>
shift;
687 }
else if (src_alpha) {
688 for (x = 0; x <
width; x++) {
689 dst[0][x] = *src_line++ >>
shift;
690 dst[1][x] = *src_line++ >>
shift;
691 dst[2][x] = *src_line++ >>
shift;
695 for (x = 0; x <
width; x++) {
696 dst[0][x] = *src_line++ >>
shift;
697 dst[1][x] = *src_line++ >>
shift;
698 dst[2][x] = *src_line++ >>
shift;
702 for (
i = 0;
i < 4;
i++)
703 dst[
i] += dstStride[
i] >> 1;
708 int srcStride[],
int srcSliceY,
int srcSliceH,
709 uint8_t *dst[],
int dstStride[])
711 uint16_t *dst2013[] = { (uint16_t *)dst[2], (uint16_t *)dst[0], (uint16_t *)dst[1], (uint16_t *)dst[3] };
712 uint16_t *dst1023[] = { (uint16_t *)dst[1], (uint16_t *)dst[0], (uint16_t *)dst[2], (uint16_t *)dst[3] };
713 int stride2013[] = { dstStride[2], dstStride[0], dstStride[1], dstStride[3] };
714 int stride1023[] = { dstStride[1], dstStride[0], dstStride[2], dstStride[3] };
732 src_format->
name, dst_format->
name);
736 for (
i = 0;
i < 4 && dst[
i];
i++) {
737 dst2013[
i] += stride2013[
i] * srcSliceY / 2;
738 dst1023[
i] += stride1023[
i] * srcSliceY / 2;
741 switch (
c->srcFormat) {
760 "unsupported conversion to planar RGB %s -> %s\n",
761 src_format->
name, dst_format->
name);
772 int src_alpha =
src[3] !=
NULL;
773 int scale_high = 16 - bpp, scale_low = (bpp - 8) * 2;
775 uint16_t *dest = (uint16_t *)(dst + dstStride *
h);
780 if (
alpha && !src_alpha) {
781 for (x = 0; x <
width; x++) {
783 *dest++ =
av_bswap16(component << scale_high | component >> scale_low);
785 *dest++ =
av_bswap16(component << scale_high | component >> scale_low);
787 *dest++ =
av_bswap16(component << scale_high | component >> scale_low);
790 }
else if (
alpha && src_alpha) {
791 for (x = 0; x <
width; x++) {
793 *dest++ =
av_bswap16(component << scale_high | component >> scale_low);
795 *dest++ =
av_bswap16(component << scale_high | component >> scale_low);
797 *dest++ =
av_bswap16(component << scale_high | component >> scale_low);
799 *dest++ =
av_bswap16(component << scale_high | component >> scale_low);
802 for (x = 0; x <
width; x++) {
804 *dest++ =
av_bswap16(component << scale_high | component >> scale_low);
806 *dest++ =
av_bswap16(component << scale_high | component >> scale_low);
808 *dest++ =
av_bswap16(component << scale_high | component >> scale_low);
813 if (
alpha && !src_alpha) {
814 for (x = 0; x <
width; x++) {
820 }
else if (
alpha && src_alpha) {
821 for (x = 0; x <
width; x++) {
828 for (x = 0; x <
width; x++) {
836 if (
alpha && !src_alpha) {
837 for (x = 0; x <
width; x++) {
843 }
else if (
alpha && src_alpha) {
844 for (x = 0; x <
width; x++) {
851 for (x = 0; x <
width; x++) {
859 if (
alpha && !src_alpha) {
860 for (x = 0; x <
width; x++) {
861 *dest++ =
src[0][x] << scale_high |
src[0][x] >> scale_low;
862 *dest++ =
src[1][x] << scale_high |
src[1][x] >> scale_low;
863 *dest++ =
src[2][x] << scale_high |
src[2][x] >> scale_low;
866 }
else if (
alpha && src_alpha) {
867 for (x = 0; x <
width; x++) {
868 *dest++ =
src[0][x] << scale_high |
src[0][x] >> scale_low;
869 *dest++ =
src[1][x] << scale_high |
src[1][x] >> scale_low;
870 *dest++ =
src[2][x] << scale_high |
src[2][x] >> scale_low;
871 *dest++ =
src[3][x] << scale_high |
src[3][x] >> scale_low;
874 for (x = 0; x <
width; x++) {
875 *dest++ =
src[0][x] << scale_high |
src[0][x] >> scale_low;
876 *dest++ =
src[1][x] << scale_high |
src[1][x] >> scale_low;
877 *dest++ =
src[2][x] << scale_high |
src[2][x] >> scale_low;
881 for (
i = 0;
i < 3 + src_alpha;
i++)
882 src[
i] += srcStride[
i] >> 1;
887 int srcStride[],
int srcSliceY,
int srcSliceH,
888 uint8_t *dst[],
int dstStride[])
890 const uint16_t *src102[] = { (uint16_t *)
src[1], (uint16_t *)
src[0], (uint16_t *)
src[2], (uint16_t *)
src[3] };
891 const uint16_t *src201[] = { (uint16_t *)
src[2], (uint16_t *)
src[0], (uint16_t *)
src[1], (uint16_t *)
src[3] };
892 int stride102[] = { srcStride[1], srcStride[0], srcStride[2], srcStride[3] };
893 int stride201[] = { srcStride[2], srcStride[0], srcStride[1], srcStride[3] };
896 int bits_per_sample = src_format->
comp[0].
depth;
907 bits_per_sample <= 8) {
909 src_format->
name, dst_format->
name);
912 switch (
c->dstFormat) {
916 dst[0] + srcSliceY * dstStride[0], dstStride[0],
917 srcSliceH, 0, swap, bits_per_sample,
c->srcW);
922 dst[0] + srcSliceY * dstStride[0], dstStride[0],
923 srcSliceH, 0, swap, bits_per_sample,
c->srcW);
928 dst[0] + srcSliceY * dstStride[0], dstStride[0],
929 srcSliceH, 1, swap, bits_per_sample,
c->srcW);
934 dst[0] + srcSliceY * dstStride[0], dstStride[0],
935 srcSliceH, 1, swap, bits_per_sample,
c->srcW);
939 "unsupported planar RGB conversion %s -> %s\n",
940 src_format->
name, dst_format->
name);
952 uint8_t *dest = dst + dstStride *
h;
953 for (x = 0; x <
width; x++) {
959 for (
i = 0;
i < 3;
i++)
960 src[
i] += srcStride[
i];
966 int alpha_first,
int width)
970 uint8_t *dest = dst + dstStride *
h;
973 for (x = 0; x <
width; x++) {
980 for (x = 0; x <
width; x++) {
988 for (
i = 0;
i < 3;
i++)
989 src[
i] += srcStride[
i];
995 int alpha_first,
int width)
999 uint8_t *dest = dst + dstStride *
h;
1002 for (x = 0; x <
width; x++) {
1003 *dest++ =
src[3][x];
1004 *dest++ =
src[0][x];
1005 *dest++ =
src[1][x];
1006 *dest++ =
src[2][x];
1009 for (x = 0; x <
width; x++) {
1010 *dest++ =
src[0][x];
1011 *dest++ =
src[1][x];
1012 *dest++ =
src[2][x];
1013 *dest++ =
src[3][x];
1017 for (
i = 0;
i < 4;
i++)
1018 src[
i] += srcStride[
i];
1023 int srcStride[],
int srcSliceY,
int srcSliceH,
1024 uint8_t *dst[],
int dstStride[])
1026 int alpha_first = 0;
1029 int stride102[] = { srcStride[1], srcStride[0], srcStride[2], srcStride[3] };
1030 int stride201[] = { srcStride[2], srcStride[0], srcStride[1], srcStride[3] };
1039 switch (
c->dstFormat) {
1042 dst[0] + srcSliceY * dstStride[0], dstStride[0],
1048 dst[0] + srcSliceY * dstStride[0], dstStride[0],
1056 dst[0] + srcSliceY * dstStride[0], dstStride[0],
1064 dst[0] + srcSliceY * dstStride[0], dstStride[0],
1070 "unsupported planar RGB conversion %s -> %s\n",
1079 int srcStride[],
int srcSliceY,
int srcSliceH,
1080 uint8_t *dst[],
int dstStride[])
1082 int alpha_first = 0;
1085 int stride102[] = { srcStride[1], srcStride[0], srcStride[2] };
1086 int stride201[] = { srcStride[2], srcStride[0], srcStride[1] };
1095 switch (
c->dstFormat) {
1098 dst[0] + srcSliceY * dstStride[0], dstStride[0],
1104 dst[0] + srcSliceY * dstStride[0], dstStride[0],
1112 dst[0] + srcSliceY * dstStride[0], dstStride[0],
1120 dst[0] + srcSliceY * dstStride[0], dstStride[0],
1126 "unsupported planar RGB conversion %s -> %s\n",
1137 uint8_t *dst[],
int dstStride[])
1140 dst[0], dstStride[0]);
1142 dst[1], dstStride[1]);
1144 dst[2], dstStride[2]);
1153 int alpha_first,
int inc_size,
int width)
1166 for (x = 0; x <
width; x++) {
1167 dest[0][x] =
src[0];
1168 dest[1][x] =
src[1];
1169 dest[2][x] =
src[2];
1173 src += srcStride -
width * inc_size;
1174 dest[0] += dstStride[0];
1175 dest[1] += dstStride[1];
1176 dest[2] += dstStride[2];
1181 int srcStride[],
int srcSliceY,
int srcSliceH,
1182 uint8_t *dst[],
int dstStride[])
1184 int alpha_first = 0;
1185 int stride102[] = { dstStride[1], dstStride[0], dstStride[2] };
1186 int stride201[] = { dstStride[2], dstStride[0], dstStride[1] };
1187 uint8_t *dst102[] = { dst[1] + srcSliceY * dstStride[1],
1188 dst[0] + srcSliceY * dstStride[0],
1189 dst[2] + srcSliceY * dstStride[2] };
1190 uint8_t *dst201[] = { dst[2] + srcSliceY * dstStride[2],
1191 dst[0] + srcSliceY * dstStride[0],
1192 dst[1] + srcSliceY * dstStride[1] };
1194 switch (
c->srcFormat) {
1197 stride201,
srcSliceH, alpha_first, 3,
c->srcW);
1201 stride102,
srcSliceH, alpha_first, 3,
c->srcW);
1207 stride201,
srcSliceH, alpha_first, 4,
c->srcW);
1213 stride102,
srcSliceH, alpha_first, 4,
c->srcW);
1217 "unsupported planar RGB conversion %s -> %s\n",
1227 #define BAYER_RENAME(x) bayer_gbrg8_to_##x
1232 #define BAYER_RENAME(x) bayer_gbrg16le_to_##x
1237 #define BAYER_RENAME(x) bayer_gbrg16be_to_##x
1242 #define BAYER_RENAME(x) bayer_grbg8_to_##x
1247 #define BAYER_RENAME(x) bayer_grbg16le_to_##x
1252 #define BAYER_RENAME(x) bayer_grbg16be_to_##x
1257 #define BAYER_RENAME(x) bayer_bggr8_to_##x
1262 #define BAYER_RENAME(x) bayer_bggr16le_to_##x
1267 #define BAYER_RENAME(x) bayer_bggr16be_to_##x
1272 #define BAYER_RENAME(x) bayer_rggb8_to_##x
1277 #define BAYER_RENAME(x) bayer_rggb16le_to_##x
1282 #define BAYER_RENAME(x) bayer_rggb16be_to_##x
1288 uint8_t *dstPtr= dst[0] + srcSliceY * dstStride[0];
1294 switch(
c->srcFormat) {
1295 #define CASE(pixfmt, prefix) \
1296 case pixfmt: copy = bayer_##prefix##_to_rgb24_copy; \
1297 interpolate = bayer_##prefix##_to_rgb24_interpolate; \
1317 copy(srcPtr, srcStride[0], dstPtr, dstStride[0],
c->srcW);
1318 srcPtr += 2 * srcStride[0];
1319 dstPtr += 2 * dstStride[0];
1322 interpolate(srcPtr, srcStride[0], dstPtr, dstStride[0],
c->srcW);
1323 srcPtr += 2 * srcStride[0];
1324 dstPtr += 2 * dstStride[0];
1328 copy(srcPtr, -srcStride[0], dstPtr, -dstStride[0],
c->srcW);
1330 copy(srcPtr, srcStride[0], dstPtr, dstStride[0],
c->srcW);
1337 uint8_t *dstPtr= dst[0] + srcSliceY * dstStride[0];
1343 switch(
c->srcFormat) {
1344 #define CASE(pixfmt, prefix) \
1345 case pixfmt: copy = bayer_##prefix##_to_rgb48_copy; \
1346 interpolate = bayer_##prefix##_to_rgb48_interpolate; \
1366 copy(srcPtr, srcStride[0], dstPtr, dstStride[0],
c->srcW);
1367 srcPtr += 2 * srcStride[0];
1368 dstPtr += 2 * dstStride[0];
1371 interpolate(srcPtr, srcStride[0], dstPtr, dstStride[0],
c->srcW);
1372 srcPtr += 2 * srcStride[0];
1373 dstPtr += 2 * dstStride[0];
1377 copy(srcPtr, -srcStride[0], dstPtr, -dstStride[0],
c->srcW);
1379 copy(srcPtr, srcStride[0], dstPtr, dstStride[0],
c->srcW);
1387 uint8_t *dstY= dst[0] + srcSliceY * dstStride[0];
1388 uint8_t *dstU= dst[1] + srcSliceY * dstStride[1] / 2;
1389 uint8_t *
dstV= dst[2] + srcSliceY * dstStride[2] / 2;
1394 switch(
c->srcFormat) {
1395 #define CASE(pixfmt, prefix) \
1396 case pixfmt: copy = bayer_##prefix##_to_yv12_copy; \
1397 interpolate = bayer_##prefix##_to_yv12_interpolate; \
1417 copy(srcPtr, srcStride[0], dstY, dstU,
dstV, dstStride[0],
c->srcW,
c->input_rgb2yuv_table);
1418 srcPtr += 2 * srcStride[0];
1419 dstY += 2 * dstStride[0];
1420 dstU += dstStride[1];
1421 dstV += dstStride[1];
1424 interpolate(srcPtr, srcStride[0], dstY, dstU,
dstV, dstStride[0],
c->srcW,
c->input_rgb2yuv_table);
1425 srcPtr += 2 * srcStride[0];
1426 dstY += 2 * dstStride[0];
1427 dstU += dstStride[1];
1428 dstV += dstStride[1];
1432 copy(srcPtr, -srcStride[0], dstY, dstU,
dstV, -dstStride[0],
c->srcW,
c->input_rgb2yuv_table);
1434 copy(srcPtr, srcStride[0], dstY, dstU,
dstV, dstStride[0],
c->srcW,
c->input_rgb2yuv_table);
1438 #define isRGBA32(x) ( \
1439 (x) == AV_PIX_FMT_ARGB \
1440 || (x) == AV_PIX_FMT_RGBA \
1441 || (x) == AV_PIX_FMT_BGRA \
1442 || (x) == AV_PIX_FMT_ABGR \
1445 #define isRGBA64(x) ( \
1446 (x) == AV_PIX_FMT_RGBA64LE \
1447 || (x) == AV_PIX_FMT_RGBA64BE \
1448 || (x) == AV_PIX_FMT_BGRA64LE \
1449 || (x) == AV_PIX_FMT_BGRA64BE \
1452 #define isRGB48(x) ( \
1453 (x) == AV_PIX_FMT_RGB48LE \
1454 || (x) == AV_PIX_FMT_RGB48BE \
1455 || (x) == AV_PIX_FMT_BGR48LE \
1456 || (x) == AV_PIX_FMT_BGR48BE \
1465 const int srcId =
c->srcFormatBpp;
1466 const int dstId =
c->dstFormatBpp;
1469 #define IS_NOT_NE(bpp, desc) \
1470 (((bpp + 7) >> 3) == 2 && \
1471 (!(desc->flags & AV_PIX_FMT_FLAG_BE) != !HAVE_BIGENDIAN))
1473 #define CONV_IS(src, dst) (srcFormat == AV_PIX_FMT_##src && dstFormat == AV_PIX_FMT_##dst)
1493 else if (
CONV_IS(RGB48LE, BGR48BE)
1498 if (
CONV_IS(RGB48LE, BGRA64LE)
1502 else if (
CONV_IS(RGB48LE, BGRA64BE)
1506 if (
CONV_IS(RGB48LE, RGBA64LE)
1510 else if (
CONV_IS(RGB48LE, RGBA64BE)
1515 if (
CONV_IS(RGBA64LE, BGR48LE)
1519 else if (
CONV_IS(RGBA64LE, BGR48BE)
1523 else if (
CONV_IS(RGBA64LE, RGB48LE)
1527 else if (
CONV_IS(RGBA64LE, RGB48BE)
1535 switch (srcId | (dstId << 16)) {
1552 switch (srcId | (dstId << 16)) {
1593 const int srcBpp = (
c->srcFormatBpp + 7) >> 3;
1594 const int dstBpp = (
c->dstFormatBpp + 7) >> 3;
1603 int src_bswap =
IS_NOT_NE(
c->srcFormatBpp, desc_src);
1604 int dst_bswap =
IS_NOT_NE(
c->dstFormatBpp, desc_dst);
1615 dstPtr[dstStride[0] * (srcSliceY +
i)] = 255;
1619 if (dstStride[0] * srcBpp == srcStride[0] * dstBpp && srcStride[0] > 0 &&
1620 !(srcStride[0] % srcBpp) && !dst_bswap && !src_bswap)
1621 conv(srcPtr, dstPtr + dstStride[0] * srcSliceY,
1622 (
srcSliceH - 1) * srcStride[0] +
c->srcW * srcBpp);
1625 dstPtr += dstStride[0] * srcSliceY;
1629 for(j=0; j<
c->srcW; j++)
1630 ((uint16_t*)
c->formatConvBuffer)[j] =
av_bswap16(((uint16_t*)srcPtr)[j]);
1631 conv(
c->formatConvBuffer, dstPtr,
c->srcW * srcBpp);
1633 conv(srcPtr, dstPtr,
c->srcW * srcBpp);
1635 for(j=0; j<
c->srcW; j++)
1636 ((uint16_t*)dstPtr)[j] =
av_bswap16(((uint16_t*)dstPtr)[j]);
1637 srcPtr += srcStride[0];
1638 dstPtr += dstStride[0];
1646 int srcStride[],
int srcSliceY,
int srcSliceH,
1647 uint8_t *dst[],
int dstStride[])
1651 dst[0] + srcSliceY * dstStride[0],
1652 dst[1] + (srcSliceY >> 1) * dstStride[1],
1653 dst[2] + (srcSliceY >> 1) * dstStride[2],
1655 dstStride[0], dstStride[1], srcStride[0],
1656 c->input_rgb2yuv_table);
1663 int srcStride[],
int srcSliceY,
int srcSliceH,
1664 uint8_t *dst[],
int dstStride[])
1667 dst[0], dstStride[0]);
1669 planar2x(
src[1], dst[1] + dstStride[1] * (srcSliceY >> 1),
c->chrSrcW,
1670 srcSliceH >> 2, srcStride[1], dstStride[1]);
1671 planar2x(
src[2], dst[2] + dstStride[2] * (srcSliceY >> 1),
c->chrSrcW,
1672 srcSliceH >> 2, srcStride[2], dstStride[2]);
1679 int srcStride[],
int srcSliceY,
1683 ptrdiff_t dstStrideFloat = dstStride[0] >> 2;
1685 float *dstPtr = (
float *)(dst[0] + dstStride[0] * srcSliceY);
1688 for (x = 0; x <
c->srcW; ++x){
1689 dstPtr[x] =
c->uint2float_lut[srcPtr[x]];
1691 srcPtr += srcStride[0];
1692 dstPtr += dstStrideFloat;
1699 int srcStride[],
int srcSliceY,
1703 ptrdiff_t srcStrideFloat = srcStride[0] >> 2;
1704 const float *srcPtr = (
const float *)
src[0];
1705 uint8_t *dstPtr = dst[0] + dstStride[0] * srcSliceY;
1708 for (x = 0; x <
c->srcW; ++x){
1711 srcPtr += srcStrideFloat;
1712 dstPtr += dstStride[0];
1720 int srcStride[],
int srcSliceY,
int srcSliceH,
1721 uint8_t *dst[],
int dstStride[])
1723 if (dstStride[0] == srcStride[0] && srcStride[0] > 0)
1724 memcpy(dst[0] + dstStride[0] * srcSliceY,
src[0],
srcSliceH * dstStride[0]);
1728 uint8_t *dstPtr = dst[0] + dstStride[0] * srcSliceY;
1732 while (length +
c->srcW <=
FFABS(dstStride[0]) &&
1733 length +
c->srcW <=
FFABS(srcStride[0]))
1738 memcpy(dstPtr, srcPtr, length);
1739 srcPtr += srcStride[0];
1740 dstPtr += dstStride[0];
1746 #define DITHER_COPY(dst, dstStride, src, srcStride, bswap, dbswap)\
1747 unsigned shift= src_depth-dst_depth, tmp;\
1748 if (c->dither == SWS_DITHER_NONE) {\
1749 for (i = 0; i < height; i++) {\
1750 for (j = 0; j < length-7; j+=8) {\
1751 dst[j+0] = dbswap(bswap(src[j+0])>>shift);\
1752 dst[j+1] = dbswap(bswap(src[j+1])>>shift);\
1753 dst[j+2] = dbswap(bswap(src[j+2])>>shift);\
1754 dst[j+3] = dbswap(bswap(src[j+3])>>shift);\
1755 dst[j+4] = dbswap(bswap(src[j+4])>>shift);\
1756 dst[j+5] = dbswap(bswap(src[j+5])>>shift);\
1757 dst[j+6] = dbswap(bswap(src[j+6])>>shift);\
1758 dst[j+7] = dbswap(bswap(src[j+7])>>shift);\
1760 for (; j < length; j++) {\
1761 dst[j] = dbswap(bswap(src[j])>>shift);\
1766 } else if (shiftonly) {\
1767 for (i = 0; i < height; i++) {\
1768 const uint8_t *dither= dithers[shift-1][i&7];\
1769 for (j = 0; j < length-7; j+=8) {\
1770 tmp = (bswap(src[j+0]) + dither[0])>>shift; dst[j+0] = dbswap(tmp - (tmp>>dst_depth));\
1771 tmp = (bswap(src[j+1]) + dither[1])>>shift; dst[j+1] = dbswap(tmp - (tmp>>dst_depth));\
1772 tmp = (bswap(src[j+2]) + dither[2])>>shift; dst[j+2] = dbswap(tmp - (tmp>>dst_depth));\
1773 tmp = (bswap(src[j+3]) + dither[3])>>shift; dst[j+3] = dbswap(tmp - (tmp>>dst_depth));\
1774 tmp = (bswap(src[j+4]) + dither[4])>>shift; dst[j+4] = dbswap(tmp - (tmp>>dst_depth));\
1775 tmp = (bswap(src[j+5]) + dither[5])>>shift; dst[j+5] = dbswap(tmp - (tmp>>dst_depth));\
1776 tmp = (bswap(src[j+6]) + dither[6])>>shift; dst[j+6] = dbswap(tmp - (tmp>>dst_depth));\
1777 tmp = (bswap(src[j+7]) + dither[7])>>shift; dst[j+7] = dbswap(tmp - (tmp>>dst_depth));\
1779 for (; j < length; j++) {\
1780 tmp = (bswap(src[j]) + dither[j&7])>>shift; dst[j] = dbswap(tmp - (tmp>>dst_depth));\
1786 for (i = 0; i < height; i++) {\
1787 const uint8_t *dither= dithers[shift-1][i&7];\
1788 for (j = 0; j < length-7; j+=8) {\
1789 tmp = bswap(src[j+0]); dst[j+0] = dbswap((tmp - (tmp>>dst_depth) + dither[0])>>shift);\
1790 tmp = bswap(src[j+1]); dst[j+1] = dbswap((tmp - (tmp>>dst_depth) + dither[1])>>shift);\
1791 tmp = bswap(src[j+2]); dst[j+2] = dbswap((tmp - (tmp>>dst_depth) + dither[2])>>shift);\
1792 tmp = bswap(src[j+3]); dst[j+3] = dbswap((tmp - (tmp>>dst_depth) + dither[3])>>shift);\
1793 tmp = bswap(src[j+4]); dst[j+4] = dbswap((tmp - (tmp>>dst_depth) + dither[4])>>shift);\
1794 tmp = bswap(src[j+5]); dst[j+5] = dbswap((tmp - (tmp>>dst_depth) + dither[5])>>shift);\
1795 tmp = bswap(src[j+6]); dst[j+6] = dbswap((tmp - (tmp>>dst_depth) + dither[6])>>shift);\
1796 tmp = bswap(src[j+7]); dst[j+7] = dbswap((tmp - (tmp>>dst_depth) + dither[7])>>shift);\
1798 for (; j < length; j++) {\
1799 tmp = bswap(src[j]); dst[j] = dbswap((tmp - (tmp>>dst_depth) + dither[j&7])>>shift);\
1807 int srcStride[],
int srcSliceY,
int srcSliceH,
1808 uint8_t *dst[],
int dstStride[])
1813 for (plane = 0; plane < 4 && dst[plane] !=
NULL; plane++) {
1814 int length = (plane == 0 || plane == 3) ?
c->srcW :
AV_CEIL_RSHIFT(
c->srcW,
c->chrDstHSubSample);
1815 int y = (plane == 0 || plane == 3) ? srcSliceY:
AV_CEIL_RSHIFT(srcSliceY,
c->chrDstVSubSample);
1818 uint8_t *dstPtr = dst[plane] + dstStride[plane] * y;
1819 int shiftonly = plane == 1 || plane == 2 || (!
c->srcRange && plane == 0);
1822 if (plane == 1 && !dst[2])
continue;
1823 if (!
src[plane] || (plane == 1 && !
src[2])) {
1826 plane == 3, desc_dst->
comp[plane].
depth,
1827 isBE(
c->dstFormat));
1830 (plane == 3) ? 255 : 128);
1836 const int src_depth = desc_src->
comp[plane].
depth;
1837 const int dst_depth = desc_dst->
comp[plane].
depth;
1838 const uint16_t *srcPtr2 = (
const uint16_t *) srcPtr;
1839 uint16_t *dstPtr2 = (uint16_t*)dstPtr;
1841 if (dst_depth == 8) {
1843 DITHER_COPY(dstPtr, dstStride[plane], srcPtr2, srcStride[plane]/2, , )
1847 }
else if (src_depth == 8) {
1851 for (j = 0; j < length; j++)\
1852 w(&dstPtr2[j], srcPtr[j]<<(dst_depth-8));\
1854 for (j = 0; j < length; j++)\
1855 w(&dstPtr2[j], (srcPtr[j]<<(dst_depth-8)) |\
1856 (srcPtr[j]>>(2*8-dst_depth)));\
1858 if(
isBE(
c->dstFormat)){
1863 dstPtr2 += dstStride[plane]/2;
1864 srcPtr += srcStride[plane];
1866 }
else if (src_depth <= dst_depth) {
1872 unsigned shift = dst_depth - src_depth;
1874 #define FAST_COPY_UP(shift) \
1875 for (; j < length - 3; j += 4) { \
1876 uint64_t v = AV_RN64A(srcPtr2 + j); \
1877 AV_WN64A(dstPtr2 + j, v << shift); \
1880 #define FAST_COPY_UP(shift) \
1881 for (; j < length - 1; j += 2) { \
1882 uint32_t v = AV_RN32A(srcPtr2 + j); \
1883 AV_WN32A(dstPtr2 + j, v << shift); \
1892 #define COPY_UP(r,w) \
1894 for (; j < length; j++){ \
1895 unsigned int v= r(&srcPtr2[j]);\
1896 w(&dstPtr2[j], v<<(dst_depth-src_depth));\
1899 for (; j < length; j++){ \
1900 unsigned int v= r(&srcPtr2[j]);\
1901 w(&dstPtr2[j], (v<<(dst_depth-src_depth)) | \
1902 (v>>(2*src_depth-dst_depth)));\
1905 if(
isBE(
c->srcFormat)){
1906 if(
isBE(
c->dstFormat)){
1912 if(
isBE(
c->dstFormat)){
1918 dstPtr2 += dstStride[plane]/2;
1919 srcPtr2 += srcStride[plane]/2;
1924 DITHER_COPY(dstPtr2, dstStride[plane]/2, srcPtr2, srcStride[plane]/2, , )
1940 for (j = 0; j < length; j++)
1941 ((uint16_t *) dstPtr)[j] =
av_bswap16(((
const uint16_t *) srcPtr)[j]);
1942 srcPtr += srcStride[plane];
1943 dstPtr += dstStride[plane];
1948 for (j = 0; j < length; j++)
1949 ((uint32_t *) dstPtr)[j] =
av_bswap32(((
const uint32_t *) srcPtr)[j]);
1950 srcPtr += srcStride[plane];
1951 dstPtr += dstStride[plane];
1953 }
else if (dstStride[plane] == srcStride[plane] &&
1954 srcStride[plane] > 0 && srcStride[plane] == length) {
1955 memcpy(dst[plane] + dstStride[plane] * y,
src[plane],
1956 height * dstStride[plane]);
1963 memcpy(dstPtr, srcPtr, length);
1964 srcPtr += srcStride[plane];
1965 dstPtr += dstStride[plane];
1974 #define IS_DIFFERENT_ENDIANESS(src_fmt, dst_fmt, pix_fmt) \
1975 ((src_fmt == pix_fmt ## BE && dst_fmt == pix_fmt ## LE) || \
1976 (src_fmt == pix_fmt ## LE && dst_fmt == pix_fmt ## BE))
1983 const int flags =
c->flags;
1984 const int dstH =
c->dstH;
1987 needsDither =
isAnyRGB(dstFormat) &&
1988 c->dstFormatBpp < 24 &&
1989 (
c->dstFormatBpp <
c->srcFormatBpp || (!
isAnyRGB(srcFormat)));
2053 #define isByteRGB(f) ( \
2054 f == AV_PIX_FMT_RGB32 || \
2055 f == AV_PIX_FMT_RGB32_1 || \
2056 f == AV_PIX_FMT_RGB24 || \
2057 f == AV_PIX_FMT_BGR32 || \
2058 f == AV_PIX_FMT_BGR32_1 || \
2059 f == AV_PIX_FMT_BGR24)
2106 else if (!
isBayer(dstFormat)) {
2208 #define isPlanarGray(x) (isGray(x) && (x) != AV_PIX_FMT_YA8 && (x) != AV_PIX_FMT_YA16LE && (x) != AV_PIX_FMT_YA16BE)
2210 if ( srcFormat == dstFormat ||
2217 c->chrDstHSubSample ==
c->chrSrcHSubSample &&
2218 c->chrDstVSubSample ==
c->chrSrcVSubSample &&
2237 int num_pixels,
const uint8_t *palette)
2241 for (
i = 0;
i < num_pixels;
i++)
2242 ((uint32_t *) dst)[
i] = ((
const uint32_t *) palette)[
src[
i]];
2247 int num_pixels,
const uint8_t *palette)
2251 for (
i = 0;
i < num_pixels;
i++) {
2253 dst[0] = palette[
src[
i] * 4 + 0];
2254 dst[1] = palette[
src[
i] * 4 + 1];
2255 dst[2] = palette[
src[
i] * 4 + 2];
void ff_get_unscaled_swscale_aarch64(SwsContext *c)
static double val(void *priv, double ch)
void ff_get_unscaled_swscale_arm(SwsContext *c)
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Convenience header that includes libavutil's core.
#define flags(name, subs,...)
#define AV_CEIL_RSHIFT(a, b)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
static void comp(unsigned char *dst, ptrdiff_t dst_stride, unsigned char *src, ptrdiff_t src_stride, int add)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette)
Convert an 8-bit paletted frame into a frame with a color depth of 32 bits.
void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette)
Convert an 8-bit paletted frame into a frame with a color depth of 24 bits.
#define SWS_FAST_BILINEAR
static const int16_t alpha[]
static int conv(int samples, float **pcm, char *buf, int channels)
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
#define AV_PIX_FMT_FLAG_ALPHA
The pixel format has an alpha channel.
#define AV_PIX_FMT_FLAG_RGB
The pixel format contains RGB-like data (as opposed to YUV/grayscale).
#define AV_PIX_FMT_FLAG_PLANAR
At least one pixel component is not in the first data plane.
#define AV_PIX_FMT_FLAG_BE
Pixel format is big-endian.
#define AV_PIX_FMT_GBRAP12
#define AV_PIX_FMT_YUV420P16
#define AV_PIX_FMT_GBRPF32
#define AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P9
#define AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV440P12
#define AV_PIX_FMT_GBRAP16
#define AV_PIX_FMT_YUV422P9
#define AV_PIX_FMT_BGR444
#define AV_PIX_FMT_BGR555
#define AV_PIX_FMT_YUVA420P16
#define AV_PIX_FMT_YUV420P12
#define AV_PIX_FMT_YUVA420P10
#define AV_PIX_FMT_BAYER_GRBG16
#define AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_GBRP10
#define AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_GRAY12
#define AV_PIX_FMT_BAYER_BGGR16
#define AV_PIX_FMT_RGBA64
#define AV_PIX_FMT_GBRP12
#define AV_PIX_FMT_YUV420P9
#define AV_PIX_FMT_BAYER_RGGB16
#define AV_PIX_FMT_GRAYF32
#define AV_PIX_FMT_YUV420P14
AVPixelFormat
Pixel format.
@ AV_PIX_FMT_BAYER_GBRG8
bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples
@ 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_P010LE
like NV12, with 10bpp per component, data in the high bits, zeros in the low bits,...
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
@ AV_PIX_FMT_GBRP10BE
planar GBR 4:4:4 30bpp, big-endian
@ AV_PIX_FMT_NV42
as above, but U and V bytes are swapped
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
@ AV_PIX_FMT_NV21
as above, but U and V bytes are swapped
@ AV_PIX_FMT_GBRP9LE
planar GBR 4:4:4 27bpp, little-endian
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
@ AV_PIX_FMT_BAYER_GRBG16LE
bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian
@ AV_PIX_FMT_P016LE
like NV12, with 16bpp per component, little-endian
@ AV_PIX_FMT_ARGB
packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
@ AV_PIX_FMT_GBRP12BE
planar GBR 4:4:4 36bpp, big-endian
@ AV_PIX_FMT_GBRAP12BE
planar GBR 4:4:4:4 48bpp, big-endian
@ AV_PIX_FMT_BGRA
packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
@ 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_UYVY422
packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
@ 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_ABGR
packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
@ AV_PIX_FMT_YUVA420P
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
@ AV_PIX_FMT_YUV410P
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
@ 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_NV24
planar YUV 4:4:4, 24bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (firs...
@ 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_GBRAP16BE
planar GBRA 4:4:4:4 64bpp, big-endian
@ AV_PIX_FMT_BAYER_RGGB16LE
bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian
@ AV_PIX_FMT_RGBA
packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
@ AV_PIX_FMT_YUVA444P
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
@ AV_PIX_FMT_BAYER_GRBG8
bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples
@ AV_PIX_FMT_GBRAP
planar GBRA 4:4:4:4 32bpp
@ AV_PIX_FMT_GBRP12LE
planar GBR 4:4:4 36bpp, little-endian
@ 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_BAYER_BGGR16BE
bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian
@ AV_PIX_FMT_GBRP16BE
planar GBR 4:4:4 48bpp, big-endian
@ AV_PIX_FMT_GBRAP12LE
planar GBR 4:4:4:4 48bpp, little-endian
@ AV_PIX_FMT_GBRP9BE
planar GBR 4:4:4 27bpp, 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_BAYER_RGGB16BE
bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian
@ 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_GBRP14LE
planar GBR 4:4:4 42bpp, little-endian
@ AV_PIX_FMT_GBRP10LE
planar GBR 4:4:4 30bpp, little-endian
@ AV_PIX_FMT_GBRAP10BE
planar GBR 4:4:4:4 40bpp, big-endian
@ AV_PIX_FMT_BAYER_GRBG16BE
bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian
@ 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_GBRAP10LE
planar GBR 4:4:4:4 40bpp, little-endian
@ AV_PIX_FMT_YUYV422
packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
@ AV_PIX_FMT_BAYER_GBRG16LE
bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian
@ AV_PIX_FMT_BGR24
packed RGB 8:8:8, 24bpp, BGRBGR...
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
@ AV_PIX_FMT_GBRAP16LE
planar GBRA 4:4:4:4 64bpp, little-endian
@ AV_PIX_FMT_BAYER_BGGR16LE
bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian
@ AV_PIX_FMT_YA8
8 bits gray, 8 bits alpha
@ AV_PIX_FMT_GBRP14BE
planar GBR 4:4:4 42bpp, big-endian
@ AV_PIX_FMT_BAYER_GBRG16BE
bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian
@ AV_PIX_FMT_BAYER_RGGB8
bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples
@ AV_PIX_FMT_GBRP16LE
planar GBR 4:4:4 48bpp, little-endian
@ AV_PIX_FMT_BAYER_BGGR8
bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples
#define AV_PIX_FMT_YUV422P14
#define AV_PIX_FMT_RGB32_1
#define AV_PIX_FMT_BGR32_1
#define AV_PIX_FMT_BGR565
#define AV_PIX_FMT_BAYER_GBRG16
#define AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_RGB565
#define AV_PIX_FMT_GRAY14
#define AV_PIX_FMT_YUV422P16
#define AV_PIX_FMT_BGRA64
#define AV_PIX_FMT_YUV440P10
#define AV_PIX_FMT_GRAY16
#define AV_PIX_FMT_GBRAP10
#define AV_PIX_FMT_RGB444
#define AV_PIX_FMT_GBRP16
#define AV_PIX_FMT_YUV444P14
#define AV_PIX_FMT_GBRP14
#define AV_PIX_FMT_GBRAPF32
#define AV_PIX_FMT_YUV444P16
#define AV_PIX_FMT_AYUV64
#define AV_PIX_FMT_RGB555
#define AV_PIX_FMT_YUV444P10
typedef void(RENAME(mix_any_func_type))
void(* yuv422ptouyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, int width, int height, int lumStride, int chromStride, int dstStride)
Width should be a multiple of 16.
void(* rgb24to16)(const uint8_t *src, uint8_t *dst, int src_size)
void(* rgb24tobgr32)(const uint8_t *src, uint8_t *dst, int src_size)
void(* rgb32to15)(const uint8_t *src, uint8_t *dst, int src_size)
void rgb12tobgr12(const uint8_t *src, uint8_t *dst, int src_size)
void rgb32to24(const uint8_t *src, uint8_t *dst, int src_size)
void(* rgb24to15)(const uint8_t *src, uint8_t *dst, int src_size)
void(* uyvytoyuv420)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
void(* yv12toyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, int width, int height, int lumStride, int chromStride, int dstStride)
Height should be a multiple of 2 and width should be a multiple of 16.
void rgb16tobgr15(const uint8_t *src, uint8_t *dst, int src_size)
void(* rgb24tobgr16)(const uint8_t *src, uint8_t *dst, int src_size)
void(* yuv422ptoyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, int width, int height, int lumStride, int chromStride, int dstStride)
Width should be a multiple of 16.
void rgb15to24(const uint8_t *src, uint8_t *dst, int src_size)
void rgb15tobgr15(const uint8_t *src, uint8_t *dst, int src_size)
void rgb15tobgr32(const uint8_t *src, uint8_t *dst, int src_size)
void(* ff_rgb24toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, int width, int height, int lumStride, int chromStride, int srcStride, int32_t *rgb2yuv)
Height should be a multiple of 2 and width should be a multiple of 2.
void(* shuffle_bytes_3210)(const uint8_t *src, uint8_t *dst, int src_size)
void rgb16tobgr16(const uint8_t *src, uint8_t *dst, int src_size)
void(* shuffle_bytes_3012)(const uint8_t *src, uint8_t *dst, int src_size)
void(* rgb16tobgr24)(const uint8_t *src, uint8_t *dst, int src_size)
void(* rgb32tobgr15)(const uint8_t *src, uint8_t *dst, int src_size)
void(* shuffle_bytes_2103)(const uint8_t *src, uint8_t *dst, int src_size)
void(* rgb16to32)(const uint8_t *src, uint8_t *dst, int src_size)
void(* yv12touyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, int width, int height, int lumStride, int chromStride, int dstStride)
Height should be a multiple of 2 and width should be a multiple of 16.
void(* yuyvtoyuv420)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
void(* rgb32tobgr16)(const uint8_t *src, uint8_t *dst, int src_size)
void rgb16tobgr32(const uint8_t *src, uint8_t *dst, int src_size)
void(* interleaveBytes)(const uint8_t *src1, const uint8_t *src2, uint8_t *dst, int width, int height, int src1Stride, int src2Stride, int dstStride)
void(* shuffle_bytes_1230)(const uint8_t *src, uint8_t *dst, int src_size)
void rgb24to32(const uint8_t *src, uint8_t *dst, int src_size)
void(* rgb32tobgr24)(const uint8_t *src, uint8_t *dst, int src_size)
void(* rgb24tobgr15)(const uint8_t *src, uint8_t *dst, int src_size)
void(* rgb16to15)(const uint8_t *src, uint8_t *dst, int src_size)
void(* rgb15to16)(const uint8_t *src, uint8_t *dst, int src_size)
void(* planar2x)(const uint8_t *src, uint8_t *dst, int width, int height, int srcStride, int dstStride)
void(* deinterleaveBytes)(const uint8_t *src, uint8_t *dst1, uint8_t *dst2, int width, int height, int srcStride, int dst1Stride, int dst2Stride)
void(* rgb15to32)(const uint8_t *src, uint8_t *dst, int src_size)
void(* yuyvtoyuv422)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
void(* uyvytoyuv422)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
void(* rgb32to16)(const uint8_t *src, uint8_t *dst, int src_size)
void(* rgb15tobgr24)(const uint8_t *src, uint8_t *dst, int src_size)
void rgb16to24(const uint8_t *src, uint8_t *dst, int src_size)
void(* rgb24tobgr24)(const uint8_t *src, uint8_t *dst, int src_size)
void rgb12to15(const uint8_t *src, uint8_t *dst, int src_size)
void rgb15tobgr16(const uint8_t *src, uint8_t *dst, int src_size)
void(* shuffle_bytes_0321)(const uint8_t *src, uint8_t *dst, int src_size)
void rgb48to64_bswap(const uint8_t *src, uint8_t *dst, int src_size)
void rgb64to48_nobswap(const uint8_t *src, uint8_t *dst, int src_size)
void rgb48tobgr64_nobswap(const uint8_t *src, uint8_t *dst, int src_size)
void rgb64tobgr48_bswap(const uint8_t *src, uint8_t *dst, int src_size)
void rgb48tobgr64_bswap(const uint8_t *src, uint8_t *dst, int src_size)
void rgb48to64_nobswap(const uint8_t *src, uint8_t *dst, int src_size)
void rgb64to48_bswap(const uint8_t *src, uint8_t *dst, int src_size)
void rgb64tobgr48_nobswap(const uint8_t *src, uint8_t *dst, int src_size)
void rgb48tobgr48_bswap(const uint8_t *src, uint8_t *dst, int src_size)
void rgb48tobgr48_nobswap(const uint8_t *src, uint8_t *dst, int src_size)
static int shift(int a, int b)
int shift
Number of least significant bits that must be shifted away to get the value.
int depth
Number of bits in the component.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
uint64_t flags
Combination of AV_PIX_FMT_FLAG_...
static av_always_inline int isBGRinInt(enum AVPixelFormat pix_fmt)
static av_always_inline int isBayer(enum AVPixelFormat pix_fmt)
static void fillPlane16(uint8_t *plane, int stride, int width, int height, int y, int alpha, int bits, const int big_endian)
static av_always_inline int isPlanar(enum AVPixelFormat pix_fmt)
static av_always_inline int isFloat(enum AVPixelFormat pix_fmt)
static av_always_inline int isAnyRGB(enum AVPixelFormat pix_fmt)
static av_always_inline int is16BPS(enum AVPixelFormat pix_fmt)
static av_always_inline int usePal(enum AVPixelFormat pix_fmt)
SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c)
static av_always_inline int isPacked(enum AVPixelFormat pix_fmt)
static av_always_inline int isSemiPlanarYUV(enum AVPixelFormat pix_fmt)
static av_always_inline int isRGBinInt(enum AVPixelFormat pix_fmt)
static av_always_inline int isPackedRGB(enum AVPixelFormat pix_fmt)
static av_always_inline int isBE(enum AVPixelFormat pix_fmt)
static av_always_inline int isNBPS(enum AVPixelFormat pix_fmt)
static int palToRgbWrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
#define IS_NOT_NE(bpp, desc)
static void copyPlane(const uint8_t *src, int srcStride, int srcSliceY, int srcSliceH, int width, uint8_t *dst, int dstStride)
static void packedtogbr24p(const uint8_t *src, int srcStride, uint8_t *dst[], int dstStride[], int srcSliceH, int alpha_first, int inc_size, int width)
static rgbConvFn findRgbConvFn(SwsContext *c)
static const uint8_t dithers[8][8][8]
static int rgbToPlanarRgbWrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static int planarToNv12Wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[])
static int yuyvToYuv422Wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[])
static int float_y_to_uint_y_wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static void gbr24ptopacked32(const uint8_t *src[], int srcStride[], uint8_t *dst, int dstStride, int srcSliceH, int alpha_first, int width)
#define CONV_IS(src, dst)
static int yuv422pToYuy2Wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[])
static void fillPlane(uint8_t *plane, int stride, int width, int height, int y, uint8_t val)
static int planarToP01xWrapper(SwsContext *c, const uint8_t *src8[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam8[], int dstStride[])
static int yvu9ToYv12Wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static void gbraptopacked32(const uint8_t *src[], int srcStride[], uint8_t *dst, int dstStride, int srcSliceH, int alpha_first, int width)
static int bswap_16bpc(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static int bswap_32bpc(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static int uyvyToYuv422Wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[])
static int planarRgbToplanarRgbWrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static int rgbToRgbWrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
#define output_pixel(p, v)
static int yuyvToYuv420Wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[])
void ff_get_unscaled_swscale(SwsContext *c)
Set c->swscale to an unscaled converter if one exists for the specific source and destination formats...
static int yuv422pToUyvyWrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[])
static void gray8aToPacked24(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette)
static int planarRgbaToRgbWrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static void gbr16ptopacked16(const uint16_t *src[], int srcStride[], uint8_t *dst, int dstStride, int srcSliceH, int alpha, int swap, int bpp, int width)
static void packed16togbra16(const uint8_t *src, int srcStride, uint16_t *dst[], int dstStride[], int srcSliceH, int src_alpha, int swap, int shift, int width)
static int bayer_to_rgb24_wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static int planarRgb16ToRgb16Wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static void gbr24ptopacked24(const uint8_t *src[], int srcStride[], uint8_t *dst, int dstStride, int srcSliceH, int width)
static void gray8aToPacked32(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette)
static int nv12ToPlanarWrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[])
static int Rgb16ToPlanarRgb16Wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
#define IS_DIFFERENT_ENDIANESS(src_fmt, dst_fmt, pix_fmt)
static int packedCopyWrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static int planarToUyvyWrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[])
static int planarCopyWrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static int uyvyToYuv420Wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[])
static int planarToNv24Wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[])
#define CASE(pixfmt, prefix)
void(* rgbConvFn)(const uint8_t *, uint8_t *, int)
static void gray8aToPacked32_1(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette)
#define FAST_COPY_UP(shift)
static int uint_y_to_float_y_wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static int bgr24ToYv12Wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static int planarToYuy2Wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[])
static int planar8ToP01xleWrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam8[], int dstStride[])
static int nv24ToPlanarWrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dstParam[], int dstStride[])
static int planarRgbToRgbWrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static int bayer_to_yv12_wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
static int bayer_to_rgb48_wrapper(SwsContext *c, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
#define DITHER_COPY(dst, dstStride, src, srcStride, bswap, dbswap)
static void interpolate(float *out, float v1, float v2, int size)
static av_always_inline int isPlanarYUV(enum AVPixelFormat pix_fmt)
static void copy(const float *p1, float *p2, const int length)
EMMS_IF_MMX return srcSliceH
av_cold void ff_get_unscaled_swscale_ppc(SwsContext *c)