41 { 1, 3, 1, 3, 1, 3, 1, 3, },
42 { 2, 0, 2, 0, 2, 0, 2, 0, },
43 { 1, 3, 1, 3, 1, 3, 1, 3, },
47 { 6, 2, 6, 2, 6, 2, 6, 2, },
48 { 0, 4, 0, 4, 0, 4, 0, 4, },
49 { 6, 2, 6, 2, 6, 2, 6, 2, },
53 { 8, 4, 11, 7, 8, 4, 11, 7, },
54 { 2, 14, 1, 13, 2, 14, 1, 13, },
55 { 10, 6, 9, 5, 10, 6, 9, 5, },
56 { 0, 12, 3, 15, 0, 12, 3, 15, },
57 { 8, 4, 11, 7, 8, 4, 11, 7, },
61 { 17, 9, 23, 15, 16, 8, 22, 14, },
62 { 5, 29, 3, 27, 4, 28, 2, 26, },
63 { 21, 13, 19, 11, 20, 12, 18, 10, },
64 { 0, 24, 6, 30, 1, 25, 7, 31, },
65 { 16, 8, 22, 14, 17, 9, 23, 15, },
66 { 4, 28, 2, 26, 5, 29, 3, 27, },
67 { 20, 12, 18, 10, 21, 13, 19, 11, },
68 { 1, 25, 7, 31, 0, 24, 6, 30, },
69 { 17, 9, 23, 15, 16, 8, 22, 14, },
73 { 0, 55, 14, 68, 3, 58, 17, 72, },
74 { 37, 18, 50, 32, 40, 22, 54, 35, },
75 { 9, 64, 5, 59, 13, 67, 8, 63, },
76 { 46, 27, 41, 23, 49, 31, 44, 26, },
77 { 2, 57, 16, 71, 1, 56, 15, 70, },
78 { 39, 21, 52, 34, 38, 19, 51, 33, },
79 { 11, 66, 7, 62, 10, 65, 6, 60, },
80 { 48, 30, 43, 25, 47, 29, 42, 24, },
81 { 0, 55, 14, 68, 3, 58, 17, 72, },
86 {117, 62, 158, 103, 113, 58, 155, 100, },
87 { 34, 199, 21, 186, 31, 196, 17, 182, },
88 {144, 89, 131, 76, 141, 86, 127, 72, },
89 { 0, 165, 41, 206, 10, 175, 52, 217, },
90 {110, 55, 151, 96, 120, 65, 162, 107, },
91 { 28, 193, 14, 179, 38, 203, 24, 189, },
92 {138, 83, 124, 69, 148, 93, 134, 79, },
93 { 7, 172, 48, 213, 3, 168, 45, 210, },
94 {117, 62, 158, 103, 113, 58, 155, 100, },
99 { 0, 143, 18, 200, 2, 156, 25, 215, },
100 { 78, 28, 125, 64, 89, 36, 138, 74, },
101 { 10, 180, 3, 161, 16, 195, 8, 175, },
102 {109, 51, 93, 38, 121, 60, 105, 47, },
103 { 1, 152, 23, 210, 0, 147, 20, 205, },
104 { 85, 33, 134, 71, 81, 30, 130, 67, },
105 { 14, 190, 6, 171, 12, 185, 5, 166, },
106 {117, 57, 101, 44, 113, 54, 97, 41, },
107 { 0, 143, 18, 200, 2, 156, 25, 215, },
112 { 0, 124, 8, 193, 0, 140, 12, 213, },
113 { 55, 14, 104, 42, 66, 19, 119, 52, },
114 { 3, 168, 1, 145, 6, 187, 3, 162, },
115 { 86, 31, 70, 21, 99, 39, 82, 28, },
116 { 0, 134, 11, 206, 0, 129, 9, 200, },
117 { 62, 17, 114, 48, 58, 16, 109, 45, },
118 { 5, 181, 2, 157, 4, 175, 1, 151, },
119 { 95, 36, 78, 26, 90, 34, 74, 24, },
120 { 0, 124, 8, 193, 0, 140, 12, 213, },
125 { 0, 107, 3, 187, 0, 125, 6, 212, },
126 { 39, 7, 86, 28, 49, 11, 102, 36, },
127 { 1, 158, 0, 131, 3, 180, 1, 151, },
128 { 68, 19, 52, 12, 81, 25, 64, 17, },
129 { 0, 119, 5, 203, 0, 113, 4, 195, },
130 { 45, 9, 96, 33, 42, 8, 91, 30, },
131 { 2, 172, 1, 144, 2, 165, 0, 137, },
132 { 77, 23, 60, 15, 72, 21, 56, 14, },
133 { 0, 107, 3, 187, 0, 125, 6, 212, },
140 #define IS_BE(ENDIAN_IDENTIFIER) IS_BE_ ## ENDIAN_IDENTIFIER
142 #define output_pixel(pos, val, bias, signedness) \
144 AV_WB16(pos, bias + av_clip_ ## signedness ## 16(val >> shift)); \
146 AV_WL16(pos, bias + av_clip_ ## signedness ## 16(val >> shift)); \
151 int big_endian,
int output_bits)
157 for (
i = 0;
i < dstW;
i++) {
165 const int32_t **
src, uint16_t *dest,
int dstW,
166 int big_endian,
int output_bits)
172 for (
i = 0;
i < dstW;
i++) {
182 for (j = 0; j < filterSize; j++)
191 const int16_t *chrFilter,
int chrFilterSize,
192 const int16_t **chrUSrc,
const int16_t **chrVSrc,
193 uint8_t *dest8,
int chrDstW,
int output_bits)
195 uint16_t *dest = (uint16_t*)dest8;
202 for (
i = 0;
i < chrDstW;
i++) {
204 int v = 1 << (
shift - 1);
209 for (j = 0; j < chrFilterSize; j++) {
210 u += uSrc[j][
i] * (unsigned)chrFilter[j];
211 v += vSrc[j][
i] * (unsigned)chrFilter[j];
222 static const int big_endian = HAVE_BIGENDIAN;
223 static const int shift = 3;
224 static const float float_mult = 1.0f / 65535.0f;
228 for (
i = 0;
i < dstW; ++
i){
231 dest[
i] = float_mult * (
float)val_uint;
238 static const int big_endian = HAVE_BIGENDIAN;
239 static const int shift = 3;
240 static const float float_mult = 1.0f / 65535.0f;
244 for (
i = 0;
i < dstW; ++
i){
253 float *dest,
int dstW)
255 static const int big_endian = HAVE_BIGENDIAN;
256 static const int shift = 15;
257 static const float float_mult = 1.0f / 65535.0f;
261 for (
i = 0;
i < dstW; ++
i){
262 val = (1 << (
shift - 1)) - 0x40000000;
263 for (j = 0; j < filterSize; ++j){
267 dest[
i] = float_mult * (
float)val_uint;
273 uint32_t *dest,
int dstW)
275 static const int big_endian = HAVE_BIGENDIAN;
276 static const int shift = 15;
277 static const float float_mult = 1.0f / 65535.0f;
281 for (
i = 0;
i < dstW; ++
i){
282 val = (1 << (
shift - 1)) - 0x40000000;
283 for (j = 0; j < filterSize; ++j){
291 #define yuv2plane1_float(template, dest_type, BE_LE) \
292 static void yuv2plane1_float ## BE_LE ## _c(const int16_t *src, uint8_t *dest, int dstW, \
293 const uint8_t *dither, int offset) \
295 template((const int32_t *)src, (dest_type *)dest, dstW); \
298 #define yuv2planeX_float(template, dest_type, BE_LE) \
299 static void yuv2planeX_float ## BE_LE ## _c(const int16_t *filter, int filterSize, \
300 const int16_t **src, uint8_t *dest, int dstW, \
301 const uint8_t *dither, int offset) \
303 template(filter, filterSize, (const int32_t **)src, (dest_type *)dest, dstW); \
320 #define output_pixel(pos, val) \
322 AV_WB16(pos, av_clip_uintp2(val >> shift, output_bits)); \
324 AV_WL16(pos, av_clip_uintp2(val >> shift, output_bits)); \
328 yuv2plane1_10_c_template(
const int16_t *
src, uint16_t *dest,
int dstW,
329 int big_endian,
int output_bits)
332 int shift = 15 - output_bits;
334 for (
i = 0;
i < dstW;
i++) {
342 const int16_t **
src, uint16_t *dest,
int dstW,
343 int big_endian,
int output_bits)
346 int shift = 11 + 16 - output_bits;
348 for (
i = 0;
i < dstW;
i++) {
352 for (j = 0; j < filterSize; j++)
361 #define yuv2NBPS(bits, BE_LE, is_be, template_size, typeX_t) \
362 static void yuv2plane1_ ## bits ## BE_LE ## _c(const int16_t *src, \
363 uint8_t *dest, int dstW, \
364 const uint8_t *dither, int offset)\
366 yuv2plane1_ ## template_size ## _c_template((const typeX_t *) src, \
367 (uint16_t *) dest, dstW, is_be, bits); \
369 static void yuv2planeX_ ## bits ## BE_LE ## _c(const int16_t *filter, int filterSize, \
370 const int16_t **src, uint8_t *dest, int dstW, \
371 const uint8_t *dither, int offset)\
373 yuv2planeX_## template_size ## _c_template(filter, \
374 filterSize, (const typeX_t **) src, \
375 (uint16_t *) dest, dstW, is_be, bits); \
389 #define output_pixel(pos, val) \
391 AV_WB16(pos, av_clip_uintp2(val >> shift, output_bits) << (16 - output_bits)); \
393 AV_WL16(pos, av_clip_uintp2(val >> shift, output_bits) << (16 - output_bits)); \
397 yuv2msbplane1_10_c_template(
const int16_t *
src, uint16_t *dest,
int dstW,
398 int big_endian,
int output_bits)
401 int shift = 15 - output_bits;
403 for (
i = 0;
i < dstW;
i++) {
411 const int16_t **
src, uint16_t *dest,
int dstW,
412 int big_endian,
int output_bits)
415 int shift = 11 + 16 - output_bits;
417 for (
i = 0;
i < dstW;
i++) {
421 for (j = 0; j < filterSize; j++)
428 #define yuv2MSBNBPS(bits, BE_LE, is_be, template_size, typeX_t) \
429 static void yuv2msbplane1_ ## bits ## BE_LE ## _c(const int16_t *src, \
430 uint8_t *dest, int dstW, \
431 const uint8_t *dither, int offset)\
433 yuv2msbplane1_ ## template_size ## _c_template((const typeX_t *) src, \
434 (uint16_t *) dest, dstW, is_be, bits); \
436 static void yuv2msbplaneX_ ## bits ## BE_LE ## _c(const int16_t *filter, int filterSize, \
437 const int16_t **src, uint8_t *dest, int dstW, \
438 const uint8_t *dither, int offset)\
440 yuv2msbplaneX_## template_size ## _c_template(filter, \
441 filterSize, (const typeX_t **) src, \
442 (uint16_t *) dest, dstW, is_be, bits); \
452 static void yuv2nv12cX_16LE_c(
enum AVPixelFormat dstFormat,
const uint8_t *chrDither,
453 const int16_t *chrFilter,
int chrFilterSize,
454 const int16_t **chrUSrc,
const int16_t **chrVSrc,
455 uint8_t *dest8,
int chrDstW)
461 const int16_t *chrFilter,
int chrFilterSize,
462 const int16_t **chrUSrc,
const int16_t **chrVSrc,
463 uint8_t *dest8,
int chrDstW)
469 const int16_t **
src, uint8_t *dest,
int dstW,
473 for (
i=0;
i<dstW;
i++) {
476 for (j=0; j<filterSize; j++)
487 for (
i=0;
i<dstW;
i++) {
494 const int16_t *chrFilter,
int chrFilterSize,
495 const int16_t **chrUSrc,
const int16_t **chrVSrc,
496 uint8_t *dest,
int chrDstW)
501 for (
i=0;
i<chrDstW;
i++) {
502 int u = chrDither[
i & 7] << 12;
503 int v = chrDither[(
i + 3) & 7] << 12;
505 for (j=0; j<chrFilterSize; j++) {
506 u += (unsigned)(chrUSrc[j][
i] * chrFilter[j]);
507 v += (unsigned)(chrVSrc[j][
i] * chrFilter[j]);
514 for (
i=0;
i<chrDstW;
i++) {
515 int u = chrDither[
i & 7] << 12;
516 int v = chrDither[(
i + 3) & 7] << 12;
518 for (j=0; j<chrFilterSize; j++) {
519 u += (unsigned)(chrUSrc[j][
i] * chrFilter[j]);
520 v += (unsigned)(chrVSrc[j][
i] * chrFilter[j]);
529 #define output_pixel(pos, val) \
531 AV_WB16(pos, av_clip_uintp2(val >> shift, output_bits) << output_shift); \
533 AV_WL16(pos, av_clip_uintp2(val >> shift, output_bits) << output_shift); \
537 uint16_t *dest,
int dstW,
538 int big_endian,
int output_bits,
int output_shift)
541 int shift = 15 - output_bits;
543 for (
i = 0;
i < dstW;
i++) {
550 const int16_t **
src, uint16_t *dest,
int dstW,
551 int big_endian,
int output_bits,
int output_shift)
554 int shift = 11 + 16 - output_bits;
556 for (
i = 0;
i < dstW;
i++) {
559 for (j = 0; j < filterSize; j++)
567 const int16_t *chrFilter,
int chrFilterSize,
568 const int16_t **chrUSrc,
const int16_t **chrVSrc,
569 uint8_t *dest8,
int chrDstW,
int output_bits,
int output_shift)
571 uint16_t *dest = (uint16_t*)dest8;
573 int shift = 11 + 16 - output_bits;
575 for (
i = 0;
i < chrDstW;
i++) {
577 int v = 1 << (
shift - 1);
579 for (j = 0; j < chrFilterSize; j++) {
580 u += (unsigned)(chrUSrc[j][
i] * chrFilter[j]);
581 v += (unsigned)(chrVSrc[j][
i] * chrFilter[j]);
591 #define yuv2p01x_wrapper(fmt, bits, shift) \
592 static void yuv2 ## fmt ## l1_LE_c(const int16_t *src, \
593 uint8_t *dest, int dstW, \
594 const uint8_t *dither, int offset) \
596 yuv2p01xl1_c(src, (uint16_t*)dest, dstW, 0, bits, shift); \
599 static void yuv2 ## fmt ## l1_BE_c(const int16_t *src, \
600 uint8_t *dest, int dstW, \
601 const uint8_t *dither, int offset) \
603 yuv2p01xl1_c(src, (uint16_t*)dest, dstW, 1, bits, shift); \
606 static void yuv2 ## fmt ## lX_LE_c(const int16_t *filter, \
607 int filterSize, const int16_t **src, \
608 uint8_t *dest, int dstW, \
609 const uint8_t *dither, int offset) \
611 yuv2p01xlX_c(filter, filterSize, src, (uint16_t*)dest, dstW, 0, \
615 static void yuv2 ## fmt ## lX_BE_c(const int16_t *filter, \
616 int filterSize, const int16_t **src, \
617 uint8_t *dest, int dstW, \
618 const uint8_t *dither, int offset) \
620 yuv2p01xlX_c(filter, filterSize, src, (uint16_t*)dest, dstW, 1, \
624 static void yuv2 ## fmt ## cX_LE_c(enum AVPixelFormat dstFormat, \
625 const uint8_t *chrDither, \
626 const int16_t *chrFilter, \
628 const int16_t **chrUSrc, \
629 const int16_t **chrVSrc, \
630 uint8_t *dest8, int chrDstW) \
632 yuv2p01xcX_c(0, chrDither, chrFilter, chrFilterSize, chrUSrc, chrVSrc, \
633 dest8, chrDstW, bits, shift); \
636 static void yuv2 ## fmt ## cX_BE_c(enum AVPixelFormat dstFormat, \
637 const uint8_t *chrDither, \
638 const int16_t *chrFilter, \
640 const int16_t **chrUSrc, \
641 const int16_t **chrVSrc, \
642 uint8_t *dest8, int chrDstW) \
644 yuv2p01xcX_c(1, chrDither, chrFilter, chrFilterSize, chrUSrc, chrVSrc, \
645 dest8, chrDstW, bits, shift); \
652 #define accumulate_bit(acc, val) \
655 #define output_pixel(pos, acc) \
656 if (target == AV_PIX_FMT_MONOBLACK) { \
663 yuv2mono_X_c_template(
SwsInternal *
c,
const int16_t *lumFilter,
664 const int16_t **lumSrc,
int lumFilterSize,
665 const int16_t *chrFilter,
const int16_t **chrUSrc,
666 const int16_t **chrVSrc,
int chrFilterSize,
667 const int16_t **alpSrc, uint8_t *dest,
int dstW,
675 for (
i = 0;
i < dstW;
i += 2) {
680 for (j = 0; j < lumFilterSize; j++) {
681 Y1 += (unsigned)(lumSrc[j][
i] * lumFilter[j]);
682 Y2 += (unsigned)(lumSrc[j][
i+1] * lumFilter[j]);
686 if ((Y1 | Y2) & 0x100) {
691 Y1 += (7*err + 1*
c->dither_error[0][
i] + 5*
c->dither_error[0][
i+1] + 3*
c->dither_error[0][
i+2] + 8 - 256)>>4;
692 c->dither_error[0][
i] = err;
693 acc = 2*acc + (Y1 >= 128);
696 err = Y2 + ((7*Y1 + 1*
c->dither_error[0][
i+1] + 5*
c->dither_error[0][
i+2] + 3*
c->dither_error[0][
i+3] + 8 - 256)>>4);
697 c->dither_error[0][
i+1] = Y1;
698 acc = 2*acc + (err >= 128);
708 c->dither_error[0][
i] = err;
717 const int16_t *ubuf[2],
const int16_t *vbuf[2],
718 const int16_t *abuf[2], uint8_t *dest,
int dstW,
719 int yalpha,
int uvalpha,
int y,
722 const int16_t *buf0 = buf[0], *buf1 = buf[1];
724 int yalpha1 = 4096 - yalpha;
731 for (
i = 0;
i < dstW;
i +=2) {
734 Y = (buf0[
i + 0] * yalpha1 + buf1[
i + 0] * yalpha) >> 19;
735 Y += (7*err + 1*
c->dither_error[0][
i] + 5*
c->dither_error[0][
i+1] + 3*
c->dither_error[0][
i+2] + 8 - 256)>>4;
736 c->dither_error[0][
i] = err;
737 acc = 2*acc + (
Y >= 128);
740 err = (buf0[
i + 1] * yalpha1 + buf1[
i + 1] * yalpha) >> 19;
741 err += (7*
Y + 1*
c->dither_error[0][
i+1] + 5*
c->dither_error[0][
i+2] + 3*
c->dither_error[0][
i+3] + 8 - 256)>>4;
742 c->dither_error[0][
i+1] =
Y;
743 acc = 2*acc + (err >= 128);
749 c->dither_error[0][
i] = err;
751 for (
i = 0;
i < dstW;
i += 8) {
755 Y = (buf0[
i + 0] * yalpha1 + buf1[
i + 0] * yalpha) >> 19;
757 Y = (buf0[
i + 1] * yalpha1 + buf1[
i + 1] * yalpha) >> 19;
759 Y = (buf0[
i + 2] * yalpha1 + buf1[
i + 2] * yalpha) >> 19;
761 Y = (buf0[
i + 3] * yalpha1 + buf1[
i + 3] * yalpha) >> 19;
763 Y = (buf0[
i + 4] * yalpha1 + buf1[
i + 4] * yalpha) >> 19;
765 Y = (buf0[
i + 5] * yalpha1 + buf1[
i + 5] * yalpha) >> 19;
767 Y = (buf0[
i + 6] * yalpha1 + buf1[
i + 6] * yalpha) >> 19;
769 Y = (buf0[
i + 7] * yalpha1 + buf1[
i + 7] * yalpha) >> 19;
779 const int16_t *ubuf[2],
const int16_t *vbuf[2],
780 const int16_t *abuf0, uint8_t *dest,
int dstW,
789 for (
i = 0;
i < dstW;
i +=2) {
792 Y = ((buf0[
i + 0] + 64) >> 7);
793 Y += (7*err + 1*
c->dither_error[0][
i] + 5*
c->dither_error[0][
i+1] + 3*
c->dither_error[0][
i+2] + 8 - 256)>>4;
794 c->dither_error[0][
i] = err;
795 acc = 2*acc + (
Y >= 128);
798 err = ((buf0[
i + 1] + 64) >> 7);
799 err += (7*
Y + 1*
c->dither_error[0][
i+1] + 5*
c->dither_error[0][
i+2] + 3*
c->dither_error[0][
i+3] + 8 - 256)>>4;
800 c->dither_error[0][
i+1] =
Y;
801 acc = 2*acc + (err >= 128);
807 c->dither_error[0][
i] = err;
809 for (
i = 0;
i < dstW;
i += 8) {
826 #undef accumulate_bit
828 #define YUV2PACKEDWRAPPER(name, base, ext, fmt) \
829 static void name ## ext ## _X_c(SwsInternal *c, const int16_t *lumFilter, \
830 const int16_t **lumSrc, int lumFilterSize, \
831 const int16_t *chrFilter, const int16_t **chrUSrc, \
832 const int16_t **chrVSrc, int chrFilterSize, \
833 const int16_t **alpSrc, uint8_t *dest, int dstW, \
836 name ## base ## _X_c_template(c, lumFilter, lumSrc, lumFilterSize, \
837 chrFilter, chrUSrc, chrVSrc, chrFilterSize, \
838 alpSrc, dest, dstW, y, fmt); \
841 static void name ## ext ## _2_c(SwsInternal *c, const int16_t *buf[2], \
842 const int16_t *ubuf[2], const int16_t *vbuf[2], \
843 const int16_t *abuf[2], uint8_t *dest, int dstW, \
844 int yalpha, int uvalpha, int y) \
846 name ## base ## _2_c_template(c, buf, ubuf, vbuf, abuf, \
847 dest, dstW, yalpha, uvalpha, y, fmt); \
850 static void name ## ext ## _1_c(SwsInternal *c, const int16_t *buf0, \
851 const int16_t *ubuf[2], const int16_t *vbuf[2], \
852 const int16_t *abuf0, uint8_t *dest, int dstW, \
853 int uvalpha, int y) \
855 name ## base ## _1_c_template(c, buf0, ubuf, vbuf, \
856 abuf0, dest, dstW, uvalpha, \
863 #define output_pixels(pos, Y1, U, Y2, V) \
864 if (target == AV_PIX_FMT_YUYV422) { \
865 dest[pos + 0] = Y1; \
867 dest[pos + 2] = Y2; \
869 } else if (target == AV_PIX_FMT_YVYU422) { \
870 dest[pos + 0] = Y1; \
872 dest[pos + 2] = Y2; \
876 dest[pos + 1] = Y1; \
878 dest[pos + 3] = Y2; \
883 const int16_t **lumSrc,
int lumFilterSize,
884 const int16_t *chrFilter,
const int16_t **chrUSrc,
885 const int16_t **chrVSrc,
int chrFilterSize,
886 const int16_t **alpSrc, uint8_t *dest,
int dstW,
891 for (
i = 0;
i < ((dstW + 1) >> 1);
i++) {
898 for (j = 0; j < lumFilterSize; j++) {
899 Y1 += (unsigned)(lumSrc[j][
i * 2] * lumFilter[j]);
900 Y2 += (unsigned)(lumSrc[j][
i * 2 + 1] * lumFilter[j]);
902 for (j = 0; j < chrFilterSize; j++) {
903 U += (unsigned)(chrUSrc[j][
i] * chrFilter[j]);
904 V += (unsigned)(chrVSrc[j][
i] * chrFilter[j]);
910 if ((Y1 | Y2 |
U |
V) & 0x100) {
922 const int16_t *ubuf[2],
const int16_t *vbuf[2],
923 const int16_t *abuf[2], uint8_t *dest,
int dstW,
924 int yalpha,
int uvalpha,
int y,
927 const int16_t *buf0 = buf[0], *buf1 = buf[1],
928 *ubuf0 = ubuf[0], *ubuf1 = ubuf[1],
929 *vbuf0 = vbuf[0], *vbuf1 = vbuf[1];
930 int yalpha1 = 4096 - yalpha;
931 int uvalpha1 = 4096 - uvalpha;
936 for (
i = 0;
i < ((dstW + 1) >> 1);
i++) {
937 int Y1 = (buf0[
i * 2] * yalpha1 + buf1[
i * 2] * yalpha) >> 19;
938 int Y2 = (buf0[
i * 2 + 1] * yalpha1 + buf1[
i * 2 + 1] * yalpha) >> 19;
939 int U = (ubuf0[
i] * uvalpha1 + ubuf1[
i] * uvalpha) >> 19;
940 int V = (vbuf0[
i] * uvalpha1 + vbuf1[
i] * uvalpha) >> 19;
942 if ((Y1 | Y2 |
U |
V) & 0x100) {
955 const int16_t *ubuf[2],
const int16_t *vbuf[2],
956 const int16_t *abuf0, uint8_t *dest,
int dstW,
959 const int16_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0];
962 if (uvalpha < 2048) {
963 for (
i = 0;
i < ((dstW + 1) >> 1);
i++) {
964 int Y1 = (buf0[
i * 2 ]+64) >> 7;
965 int Y2 = (buf0[
i * 2 + 1]+64) >> 7;
966 int U = (ubuf0[
i] +64) >> 7;
967 int V = (vbuf0[
i] +64) >> 7;
969 if ((Y1 | Y2 |
U |
V) & 0x100) {
979 const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1];
980 for (
i = 0;
i < ((dstW + 1) >> 1);
i++) {
981 int Y1 = (buf0[
i * 2 ] + 64) >> 7;
982 int Y2 = (buf0[
i * 2 + 1] + 64) >> 7;
983 int U = (ubuf0[
i] + ubuf1[
i]+128) >> 8;
984 int V = (vbuf0[
i] + vbuf1[
i]+128) >> 8;
986 if ((Y1 | Y2 |
U |
V) & 0x100) {
1004 #define R_B ((target == AV_PIX_FMT_RGB48LE || target == AV_PIX_FMT_RGB48BE || target == AV_PIX_FMT_RGBA64LE || target == AV_PIX_FMT_RGBA64BE) ? R : B)
1005 #define B_R ((target == AV_PIX_FMT_RGB48LE || target == AV_PIX_FMT_RGB48BE || target == AV_PIX_FMT_RGBA64LE || target == AV_PIX_FMT_RGBA64BE) ? B : R)
1006 #define output_pixel(pos, val) \
1008 AV_WB16(pos, val); \
1010 AV_WL16(pos, val); \
1015 const int32_t **lumSrc,
int lumFilterSize,
1016 const int16_t *chrFilter,
const int32_t **unused_chrUSrc,
1017 const int32_t **unused_chrVSrc,
int unused_chrFilterSize,
1018 const int32_t **alpSrc, uint16_t *dest,
int dstW,
1020 int unused_hasAlpha,
int unused_eightbytes,
int is_be)
1022 int hasAlpha = !!alpSrc;
1025 for (
i = 0;
i < dstW;
i++) {
1027 int Y = -0x40000000;
1030 for (j = 0; j < lumFilterSize; j++)
1031 Y += (
unsigned)(lumSrc[j][
i] * lumFilter[j]);
1034 Y += (1<<3) + 0x8000;
1038 A = -0x40000000 + (1<<14);
1039 for (j = 0; j < lumFilterSize; j++)
1040 A += (
unsigned)(alpSrc[j][
i] * lumFilter[j]);
1055 const int32_t *abuf[2], uint16_t *dest,
int dstW,
1056 int yalpha_param,
int unused_uvalpha,
int y,
1058 int unused_eightbytes,
int is_be)
1060 unsigned yalpha = yalpha_param;
1061 int hasAlpha = abuf && abuf[0] && abuf[1];
1062 const int32_t *buf0 = buf[0], *buf1 = buf[1],
1063 *abuf0 = hasAlpha ? abuf[0] :
NULL,
1064 *abuf1 = hasAlpha ? abuf[1] :
NULL;
1065 unsigned yalpha1 = 4096 - yalpha;
1070 for (
i = 0;
i < dstW;
i++) {
1071 int Y = (int)(buf0[
i] * yalpha1 + buf1[
i] * yalpha) >> 15;
1077 A = (int)(abuf0[
i] * yalpha1 + abuf1[
i] * yalpha) >> 15;
1089 const int32_t *abuf0, uint16_t *dest,
int dstW,
1091 int unused_hasAlpha,
int unused_eightbytes,
int is_be)
1093 int hasAlpha = !!abuf0;
1096 for (
i = 0;
i < dstW;
i++) {
1097 int Y = buf0[
i] >> 3;
1115 const int32_t **lumSrc,
int lumFilterSize,
1116 const int16_t *chrFilter,
const int32_t **chrUSrc,
1117 const int32_t **chrVSrc,
int chrFilterSize,
1118 const int32_t **alpSrc, uint16_t *dest,
int dstW,
1119 int y,
enum AVPixelFormat target,
int hasAlpha,
int eightbytes,
1123 int A1 = 0xffff<<14,
A2 = 0xffff<<14;
1125 for (
i = 0;
i < ((dstW + 1) >> 1);
i++) {
1127 unsigned Y1 = -0x40000000;
1128 unsigned Y2 = -0x40000000;
1129 int U = -(128 << 23);
1130 int V = -(128 << 23);
1133 for (j = 0; j < lumFilterSize; j++) {
1134 Y1 += lumSrc[j][
i * 2] * (unsigned)lumFilter[j];
1135 Y2 += lumSrc[j][
i * 2 + 1] * (unsigned)lumFilter[j];
1137 for (j = 0; j < chrFilterSize; j++) {;
1138 U += chrUSrc[j][
i] * (unsigned)chrFilter[j];
1139 V += chrVSrc[j][
i] * (unsigned)chrFilter[j];
1145 for (j = 0; j < lumFilterSize; j++) {
1146 A1 += alpSrc[j][
i * 2] * (unsigned)lumFilter[j];
1147 A2 += alpSrc[j][
i * 2 + 1] * (unsigned)lumFilter[j];
1164 Y1 -=
c->yuv2rgb_y_offset;
1165 Y2 -=
c->yuv2rgb_y_offset;
1166 Y1 *=
c->yuv2rgb_y_coeff;
1167 Y2 *=
c->yuv2rgb_y_coeff;
1168 Y1 += (1 << 13) - (1 << 29);
1169 Y2 += (1 << 13) - (1 << 29);
1172 R =
V *
c->yuv2rgb_v2r_coeff;
1173 G =
V *
c->yuv2rgb_v2g_coeff +
U *
c->yuv2rgb_u2g_coeff;
1174 B =
U *
c->yuv2rgb_u2b_coeff;
1199 const int32_t *abuf[2], uint16_t *dest,
int dstW,
1200 int yalpha_param,
int uvalpha_param,
int y,
1204 unsigned yalpha = yalpha_param;
1205 unsigned uvalpha = uvalpha_param;
1206 const int32_t *buf0 = buf[0], *buf1 = buf[1],
1207 *ubuf0 = ubuf[0], *ubuf1 = ubuf[1],
1208 *vbuf0 = vbuf[0], *vbuf1 = vbuf[1],
1209 *abuf0 = hasAlpha ? abuf[0] :
NULL,
1210 *abuf1 = hasAlpha ? abuf[1] :
NULL;
1211 unsigned yalpha1 = 4096 - yalpha;
1212 unsigned uvalpha1 = 4096 - uvalpha;
1214 int A1 = 0xffff<<14,
A2 = 0xffff<<14;
1219 for (
i = 0;
i < ((dstW + 1) >> 1);
i++) {
1220 unsigned Y1 = (int)(buf0[
i * 2] * yalpha1 + buf1[
i * 2] * yalpha) >> 14;
1221 unsigned Y2 = (int)(buf0[
i * 2 + 1] * yalpha1 + buf1[
i * 2 + 1] * yalpha) >> 14;
1222 int U = (int)(ubuf0[
i] * uvalpha1 + ubuf1[
i] * uvalpha - (128 << 23)) >> 14;
1223 int V = (int)(vbuf0[
i] * uvalpha1 + vbuf1[
i] * uvalpha - (128 << 23)) >> 14;
1226 Y1 -=
c->yuv2rgb_y_offset;
1227 Y2 -=
c->yuv2rgb_y_offset;
1228 Y1 *=
c->yuv2rgb_y_coeff;
1229 Y2 *=
c->yuv2rgb_y_coeff;
1230 Y1 += (1 << 13) - (1 << 29);
1231 Y2 += (1 << 13) - (1 << 29);
1233 R =
V *
c->yuv2rgb_v2r_coeff;
1234 G =
V *
c->yuv2rgb_v2g_coeff +
U *
c->yuv2rgb_u2g_coeff;
1235 B =
U *
c->yuv2rgb_u2b_coeff;
1238 A1 = (int)(abuf0[
i * 2 ] * yalpha1 + abuf1[
i * 2 ] * yalpha) >> 1;
1239 A2 = (int)(abuf0[
i * 2 + 1] * yalpha1 + abuf1[
i * 2 + 1] * yalpha) >> 1;
1267 const int32_t *abuf0, uint16_t *dest,
int dstW,
1269 int hasAlpha,
int eightbytes,
int is_be)
1271 const int32_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0];
1273 int A1 = 0xffff<<14,
A2= 0xffff<<14;
1276 for (
i = 0;
i < ((dstW + 1) >> 1);
i++) {
1277 SUINT Y1 = (buf0[
i * 2] ) >> 2;
1278 SUINT Y2 = (buf0[
i * 2 + 1]) >> 2;
1279 SUINT U = (ubuf0[
i] - (128 << 11)) >> 2;
1280 SUINT V = (vbuf0[
i] - (128 << 11)) >> 2;
1283 Y1 -=
c->yuv2rgb_y_offset;
1284 Y2 -=
c->yuv2rgb_y_offset;
1285 Y1 *=
c->yuv2rgb_y_coeff;
1286 Y2 *=
c->yuv2rgb_y_coeff;
1287 Y1 += (1 << 13) - (1 << 29);
1288 Y2 += (1 << 13) - (1 << 29);
1291 A1 = abuf0[
i * 2 ] * (1 << 11);
1292 A2 = abuf0[
i * 2 + 1] * (1 << 11);
1298 R =
V *
c->yuv2rgb_v2r_coeff;
1299 G =
V *
c->yuv2rgb_v2g_coeff +
U *
c->yuv2rgb_u2g_coeff;
1300 B =
U *
c->yuv2rgb_u2b_coeff;
1320 const int32_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1];
1321 int A1 = 0xffff<<14,
A2 = 0xffff<<14;
1322 unsigned uvalpha1 = 4096 - uvalpha;
1325 for (
i = 0;
i < ((dstW + 1) >> 1);
i++) {
1326 SUINT Y1 = (buf0[
i * 2] ) >> 2;
1327 SUINT Y2 = (buf0[
i * 2 + 1]) >> 2;
1328 SUINT U = (ubuf0[
i] * uvalpha1 + ubuf1[
i] * uvalpha - (128 << 23)) >> 14;
1329 SUINT V = (vbuf0[
i] * uvalpha1 + vbuf1[
i] * uvalpha - (128 << 23)) >> 14;
1332 Y1 -=
c->yuv2rgb_y_offset;
1333 Y2 -=
c->yuv2rgb_y_offset;
1334 Y1 *=
c->yuv2rgb_y_coeff;
1335 Y2 *=
c->yuv2rgb_y_coeff;
1336 Y1 += (1 << 13) - (1 << 29);
1337 Y2 += (1 << 13) - (1 << 29);
1340 A1 = abuf0[
i * 2 ] * (1 << 11);
1341 A2 = abuf0[
i * 2 + 1] * (1 << 11);
1347 R =
V *
c->yuv2rgb_v2r_coeff;
1348 G =
V *
c->yuv2rgb_v2g_coeff +
U *
c->yuv2rgb_u2g_coeff;
1349 B =
U *
c->yuv2rgb_u2b_coeff;
1373 const int32_t **lumSrc,
int lumFilterSize,
1374 const int16_t *chrFilter,
const int32_t **chrUSrc,
1375 const int32_t **chrVSrc,
int chrFilterSize,
1376 const int32_t **alpSrc, uint16_t *dest,
int dstW,
1378 int eightbytes,
int is_be)
1383 for (
i = 0;
i < dstW;
i++) {
1385 int Y = -0x40000000;
1386 int U = -(128 << 23);
1387 int V = -(128 << 23);
1390 for (j = 0; j < lumFilterSize; j++) {
1391 Y += lumSrc[j][
i] * (unsigned)lumFilter[j];
1393 for (j = 0; j < chrFilterSize; j++) {;
1394 U += chrUSrc[j][
i] * (unsigned)chrFilter[j];
1395 V += chrVSrc[j][
i] * (unsigned)chrFilter[j];
1400 for (j = 0; j < lumFilterSize; j++) {
1401 A += alpSrc[j][
i] * (unsigned)lumFilter[j];
1414 Y -=
c->yuv2rgb_y_offset;
1415 Y *=
c->yuv2rgb_y_coeff;
1416 Y += (1 << 13) - (1<<29);
1419 R =
V *
c->yuv2rgb_v2r_coeff;
1420 G =
V *
c->yuv2rgb_v2g_coeff +
U *
c->yuv2rgb_u2g_coeff;
1421 B =
U *
c->yuv2rgb_u2b_coeff;
1439 const int32_t *abuf[2], uint16_t *dest,
int dstW,
1440 int yalpha_param,
int uvalpha_param,
int y,
1444 unsigned yalpha = yalpha_param;
1445 unsigned uvalpha = uvalpha_param;
1446 const int32_t *buf0 = buf[0], *buf1 = buf[1],
1447 *ubuf0 = ubuf[0], *ubuf1 = ubuf[1],
1448 *vbuf0 = vbuf[0], *vbuf1 = vbuf[1],
1449 *abuf0 = hasAlpha ? abuf[0] :
NULL,
1450 *abuf1 = hasAlpha ? abuf[1] :
NULL;
1451 unsigned yalpha1 = 4096 - yalpha;
1452 unsigned uvalpha1 = 4096 - uvalpha;
1459 for (
i = 0;
i < dstW;
i++) {
1460 int Y = (int)(buf0[
i] * yalpha1 + buf1[
i] * yalpha) >> 14;
1461 int U = (int)(ubuf0[
i] * uvalpha1 + ubuf1[
i] * uvalpha - (128 << 23)) >> 14;
1462 int V = (int)(vbuf0[
i] * uvalpha1 + vbuf1[
i] * uvalpha - (128 << 23)) >> 14;
1465 Y -=
c->yuv2rgb_y_offset;
1466 Y *=
c->yuv2rgb_y_coeff;
1467 Y += (1 << 13) - (1 << 29);
1469 R =
V *
c->yuv2rgb_v2r_coeff;
1470 G =
V *
c->yuv2rgb_v2g_coeff +
U *
c->yuv2rgb_u2g_coeff;
1471 B =
U *
c->yuv2rgb_u2b_coeff;
1474 A = (int)(abuf0[
i] * yalpha1 + abuf1[
i] * yalpha) >> 1;
1494 const int32_t *abuf0, uint16_t *dest,
int dstW,
1496 int hasAlpha,
int eightbytes,
int is_be)
1498 const int32_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0];
1503 for (
i = 0;
i < dstW;
i++) {
1505 SUINT U = (ubuf0[
i] - (128 << 11)) >> 2;
1506 SUINT V = (vbuf0[
i] - (128 << 11)) >> 2;
1509 Y -=
c->yuv2rgb_y_offset;
1510 Y *=
c->yuv2rgb_y_coeff;
1511 Y += (1 << 13) - (1 << 29);
1514 A = abuf0[
i] * (1 << 11);
1519 R =
V *
c->yuv2rgb_v2r_coeff;
1520 G =
V *
c->yuv2rgb_v2g_coeff +
U *
c->yuv2rgb_u2g_coeff;
1521 B =
U *
c->yuv2rgb_u2b_coeff;
1534 const int32_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1];
1535 unsigned uvalpha1 = 4096 - uvalpha;
1539 for (
i = 0;
i < dstW;
i++) {
1541 SUINT U = (ubuf0[
i] * uvalpha1 + ubuf1[
i] * uvalpha - (128 << 23)) >> 14;
1542 SUINT V = (vbuf0[
i] * uvalpha1 + vbuf1[
i] * uvalpha - (128 << 23)) >> 14;
1545 Y -=
c->yuv2rgb_y_offset;
1546 Y *=
c->yuv2rgb_y_coeff;
1547 Y += (1 << 13) - (1 << 29);
1550 A = abuf0[
i] * (1 << 11);
1555 R =
V *
c->yuv2rgb_v2r_coeff;
1556 G =
V *
c->yuv2rgb_v2g_coeff +
U *
c->yuv2rgb_u2g_coeff;
1557 B =
U *
c->yuv2rgb_u2b_coeff;
1576 #define YUV2PACKED16WRAPPER_EXT(name, base, ext, fmt, is_be, hasAlpha, eightbytes) \
1577 static void name ## ext ## _X_c(SwsInternal *c, const int16_t *lumFilter, \
1578 const int16_t **_lumSrc, int lumFilterSize, \
1579 const int16_t *chrFilter, const int16_t **_chrUSrc, \
1580 const int16_t **_chrVSrc, int chrFilterSize, \
1581 const int16_t **_alpSrc, uint8_t *_dest, int dstW, \
1584 const int32_t **lumSrc = (const int32_t **) _lumSrc, \
1585 **chrUSrc = (const int32_t **) _chrUSrc, \
1586 **chrVSrc = (const int32_t **) _chrVSrc, \
1587 **alpSrc = (const int32_t **) _alpSrc; \
1588 uint16_t *dest = (uint16_t *) _dest; \
1589 name ## base ## _X_c_template(c, lumFilter, lumSrc, lumFilterSize, \
1590 chrFilter, chrUSrc, chrVSrc, chrFilterSize, \
1591 alpSrc, dest, dstW, y, fmt, hasAlpha, eightbytes, is_be); \
1594 static void name ## ext ## _2_c(SwsInternal *c, const int16_t *_buf[2], \
1595 const int16_t *_ubuf[2], const int16_t *_vbuf[2], \
1596 const int16_t *_abuf[2], uint8_t *_dest, int dstW, \
1597 int yalpha, int uvalpha, int y) \
1599 const int32_t **buf = (const int32_t **) _buf, \
1600 **ubuf = (const int32_t **) _ubuf, \
1601 **vbuf = (const int32_t **) _vbuf, \
1602 **abuf = (const int32_t **) _abuf; \
1603 uint16_t *dest = (uint16_t *) _dest; \
1604 name ## base ## _2_c_template(c, buf, ubuf, vbuf, abuf, \
1605 dest, dstW, yalpha, uvalpha, y, fmt, hasAlpha, eightbytes, is_be); \
1608 static void name ## ext ## _1_c(SwsInternal *c, const int16_t *_buf0, \
1609 const int16_t *_ubuf[2], const int16_t *_vbuf[2], \
1610 const int16_t *_abuf0, uint8_t *_dest, int dstW, \
1611 int uvalpha, int y) \
1613 const int32_t *buf0 = (const int32_t *) _buf0, \
1614 **ubuf = (const int32_t **) _ubuf, \
1615 **vbuf = (const int32_t **) _vbuf, \
1616 *abuf0 = (const int32_t *) _abuf0; \
1617 uint16_t *dest = (uint16_t *) _dest; \
1618 name ## base ## _1_c_template(c, buf0, ubuf, vbuf, abuf0, dest, \
1619 dstW, uvalpha, y, fmt, hasAlpha, eightbytes, is_be); \
1621 #define YUV2PACKED16WRAPPER(name, base, ext, base_fmt, endianness, hasAlpha, eightbytes) \
1622 YUV2PACKED16WRAPPER_EXT(name, base, ext, base_fmt ## endianness, IS_BE(endianness), hasAlpha, eightbytes)
1662 unsigned A1,
unsigned A2,
1663 const
void *_r, const
void *_g, const
void *_b,
int y,
1668 uint32_t *dest = (uint32_t *) _dest;
1669 const uint32_t *
r = (
const uint32_t *) _r;
1670 const uint32_t *
g = (
const uint32_t *) _g;
1671 const uint32_t *
b = (
const uint32_t *) _b;
1676 dest[
i * 2 + 0] =
r[Y1] +
g[Y1] +
b[Y1] + (hasAlpha ?
A1 << sh : 0);
1677 dest[
i * 2 + 1] =
r[Y2] +
g[Y2] +
b[Y2] + (hasAlpha ?
A2 << sh : 0);
1683 dest[
i * 2 + 0] =
r[Y1] +
g[Y1] +
b[Y1] + (
A1 << sh);
1684 dest[
i * 2 + 1] =
r[Y2] +
g[Y2] +
b[Y2] + (
A2 << sh);
1686 #if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1
1689 av_assert2((((
r[Y1] +
g[Y1] +
b[Y1]) >> sh) & 0xFF) == 0xFF);
1691 dest[
i * 2 + 0] =
r[Y1] +
g[Y1] +
b[Y1];
1692 dest[
i * 2 + 1] =
r[Y2] +
g[Y2] +
b[Y2];
1696 uint8_t *dest = (uint8_t *) _dest;
1697 const uint8_t *
r = (
const uint8_t *) _r;
1698 const uint8_t *
g = (
const uint8_t *) _g;
1699 const uint8_t *
b = (
const uint8_t *) _b;
1701 #define r_b ((target == AV_PIX_FMT_RGB24) ? r : b)
1702 #define b_r ((target == AV_PIX_FMT_RGB24) ? b : r)
1704 dest[
i * 6 + 0] =
r_b[Y1];
1705 dest[
i * 6 + 1] =
g[Y1];
1706 dest[
i * 6 + 2] =
b_r[Y1];
1707 dest[
i * 6 + 3] =
r_b[Y2];
1708 dest[
i * 6 + 4] =
g[Y2];
1709 dest[
i * 6 + 5] =
b_r[Y2];
1715 uint16_t *dest = (uint16_t *) _dest;
1716 const uint16_t *
r = (
const uint16_t *) _r;
1717 const uint16_t *
g = (
const uint16_t *) _g;
1718 const uint16_t *
b = (
const uint16_t *) _b;
1719 int dr1, dg1, db1, dr2, dg2, db2;
1744 dest[
i * 2 + 0] =
r[Y1 + dr1] +
g[Y1 + dg1] +
b[Y1 + db1];
1745 dest[
i * 2 + 1] =
r[Y2 + dr2] +
g[Y2 + dg2] +
b[Y2 + db2];
1747 uint32_t *dest = (uint32_t *) _dest;
1748 const uint32_t *
r = (
const uint32_t *) _r;
1749 const uint32_t *
g = (
const uint32_t *) _g;
1750 const uint32_t *
b = (
const uint32_t *) _b;
1751 dest[
i * 2 + 0] =
r[Y1] +
g[Y1] +
b[Y1];
1752 dest[
i * 2 + 1] =
r[Y2] +
g[Y2] +
b[Y2];
1754 uint8_t *dest = (uint8_t *) _dest;
1755 const uint8_t *
r = (
const uint8_t *) _r;
1756 const uint8_t *
g = (
const uint8_t *) _g;
1757 const uint8_t *
b = (
const uint8_t *) _b;
1758 int dr1, dg1, db1, dr2, dg2, db2;
1763 dr1 = dg1 = d32[(
i * 2 + 0) & 7];
1764 db1 = d64[(
i * 2 + 0) & 7];
1765 dr2 = dg2 = d32[(
i * 2 + 1) & 7];
1766 db2 = d64[(
i * 2 + 1) & 7];
1770 dr1 = db1 =
d128[(
i * 2 + 0) & 7];
1771 dg1 = d64[(
i * 2 + 0) & 7];
1772 dr2 = db2 =
d128[(
i * 2 + 1) & 7];
1773 dg2 = d64[(
i * 2 + 1) & 7];
1777 dest[
i] =
r[Y1 + dr1] +
g[Y1 + dg1] +
b[Y1 + db1] +
1778 ((
r[Y2 + dr2] +
g[Y2 + dg2] +
b[Y2 + db2]) << 4);
1780 dest[
i * 2 + 0] =
r[Y1 + dr1] +
g[Y1 + dg1] +
b[Y1 + db1];
1781 dest[
i * 2 + 1] =
r[Y2 + dr2] +
g[Y2 + dg2] +
b[Y2 + db2];
1788 const int16_t **lumSrc,
int lumFilterSize,
1789 const int16_t *chrFilter,
const int16_t **chrUSrc,
1790 const int16_t **chrVSrc,
int chrFilterSize,
1791 const int16_t **alpSrc, uint8_t *dest,
int dstW,
1796 for (
i = 0;
i < ((dstW + 1) >> 1);
i++) {
1802 const void *
r, *
g, *
b;
1804 for (j = 0; j < lumFilterSize; j++) {
1805 Y1 += (unsigned)(lumSrc[j][
i * 2] * lumFilter[j]);
1806 Y2 += (unsigned)(lumSrc[j][
i * 2 + 1] * lumFilter[j]);
1808 for (j = 0; j < chrFilterSize; j++) {
1809 U += (unsigned)(chrUSrc[j][
i] * chrFilter[j]);
1810 V += (unsigned)(chrVSrc[j][
i] * chrFilter[j]);
1819 for (j = 0; j < lumFilterSize; j++) {
1820 A1 += (unsigned)(alpSrc[j][
i * 2 ] * lumFilter[j]);
1821 A2 += (unsigned)(alpSrc[j][
i * 2 + 1] * lumFilter[j]);
1825 if ((
A1 |
A2) & 0x100) {
1836 r,
g,
b, y, target, hasAlpha);
1842 const int16_t *ubuf[2],
const int16_t *vbuf[2],
1843 const int16_t *abuf[2], uint8_t *dest,
int dstW,
1844 int yalpha,
int uvalpha,
int y,
1847 const int16_t *buf0 = buf[0], *buf1 = buf[1],
1848 *ubuf0 = ubuf[0], *ubuf1 = ubuf[1],
1849 *vbuf0 = vbuf[0], *vbuf1 = vbuf[1],
1850 *abuf0 = hasAlpha ? abuf[0] :
NULL,
1851 *abuf1 = hasAlpha ? abuf[1] :
NULL;
1852 int yalpha1 = 4096 - yalpha;
1853 int uvalpha1 = 4096 - uvalpha;
1858 for (
i = 0;
i < ((dstW + 1) >> 1);
i++) {
1859 int Y1 = (buf0[
i * 2] * yalpha1 + buf1[
i * 2] * yalpha) >> 19;
1860 int Y2 = (buf0[
i * 2 + 1] * yalpha1 + buf1[
i * 2 + 1] * yalpha) >> 19;
1861 int U = (ubuf0[
i] * uvalpha1 + ubuf1[
i] * uvalpha) >> 19;
1862 int V = (vbuf0[
i] * uvalpha1 + vbuf1[
i] * uvalpha) >> 19;
1869 A1 = (abuf0[
i * 2 ] * yalpha1 + abuf1[
i * 2 ] * yalpha) >> 19;
1870 A2 = (abuf0[
i * 2 + 1] * yalpha1 + abuf1[
i * 2 + 1] * yalpha) >> 19;
1876 r,
g,
b, y, target, hasAlpha);
1882 const int16_t *ubuf[2],
const int16_t *vbuf[2],
1883 const int16_t *abuf0, uint8_t *dest,
int dstW,
1887 const int16_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0];
1891 for (
i = 0;
i < ((dstW + 1) >> 1);
i++) {
1892 int Y1 = (buf0[
i * 2 ] + 64) >> 7;
1893 int Y2 = (buf0[
i * 2 + 1] + 64) >> 7;
1894 int U = (ubuf0[
i] + 64) >> 7;
1895 int V = (vbuf0[
i] + 64) >> 7;
1902 A1 = abuf0[
i * 2 ] * 255 + 16384 >> 15;
1903 A2 = abuf0[
i * 2 + 1] * 255 + 16384 >> 15;
1909 r,
g,
b, y, target, hasAlpha);
1912 const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1];
1913 int uvalpha1 = 4096 - uvalpha;
1916 for (
i = 0;
i < ((dstW + 1) >> 1);
i++) {
1917 int Y1 = (buf0[
i * 2 ] + 64) >> 7;
1918 int Y2 = (buf0[
i * 2 + 1] + 64) >> 7;
1919 int U = (ubuf0[
i] * uvalpha1 + ubuf1[
i] * uvalpha + (128 << 11)) >> 19;
1920 int V = (vbuf0[
i] * uvalpha1 + vbuf1[
i] * uvalpha + (128 << 11)) >> 19;
1927 A1 = (abuf0[
i * 2 ] + 64) >> 7;
1928 A2 = (abuf0[
i * 2 + 1] + 64) >> 7;
1934 r,
g,
b, y, target, hasAlpha);
1939 #define YUV2RGBWRAPPERX(name, base, ext, fmt, hasAlpha) \
1940 static void name ## ext ## _X_c(SwsInternal *c, const int16_t *lumFilter, \
1941 const int16_t **lumSrc, int lumFilterSize, \
1942 const int16_t *chrFilter, const int16_t **chrUSrc, \
1943 const int16_t **chrVSrc, int chrFilterSize, \
1944 const int16_t **alpSrc, uint8_t *dest, int dstW, \
1947 name ## base ## _X_c_template(c, lumFilter, lumSrc, lumFilterSize, \
1948 chrFilter, chrUSrc, chrVSrc, chrFilterSize, \
1949 alpSrc, dest, dstW, y, fmt, hasAlpha); \
1952 #define YUV2RGBWRAPPERX2(name, base, ext, fmt, hasAlpha) \
1953 YUV2RGBWRAPPERX(name, base, ext, fmt, hasAlpha) \
1954 static void name ## ext ## _2_c(SwsInternal *c, const int16_t *buf[2], \
1955 const int16_t *ubuf[2], const int16_t *vbuf[2], \
1956 const int16_t *abuf[2], uint8_t *dest, int dstW, \
1957 int yalpha, int uvalpha, int y) \
1959 name ## base ## _2_c_template(c, buf, ubuf, vbuf, abuf, \
1960 dest, dstW, yalpha, uvalpha, y, fmt, hasAlpha); \
1963 #define YUV2RGBWRAPPER(name, base, ext, fmt, hasAlpha) \
1964 YUV2RGBWRAPPERX2(name, base, ext, fmt, hasAlpha) \
1965 static void name ## ext ## _1_c(SwsInternal *c, const int16_t *buf0, \
1966 const int16_t *ubuf[2], const int16_t *vbuf[2], \
1967 const int16_t *abuf0, uint8_t *dest, int dstW, \
1968 int uvalpha, int y) \
1970 name ## base ## _1_c_template(c, buf0, ubuf, vbuf, abuf0, dest, \
1971 dstW, uvalpha, y, fmt, hasAlpha); \
1978 #if CONFIG_SWSCALE_ALPHA
1997 uint8_t *dest,
int i,
int Y,
int A,
int U,
int V,
2003 Y -=
c->yuv2rgb_y_offset;
2004 Y *=
c->yuv2rgb_y_coeff;
2006 R = (unsigned)
Y +
V*(
unsigned)
c->yuv2rgb_v2r_coeff;
2007 G = (unsigned)
Y +
V*(
unsigned)
c->yuv2rgb_v2g_coeff +
U*(unsigned)
c->yuv2rgb_u2g_coeff;
2008 B = (
unsigned)
Y +
U*(unsigned)
c->yuv2rgb_u2b_coeff;
2009 if ((
R |
G |
B) & 0xC0000000) {
2017 dest[0] = hasAlpha ?
A : 255;
2031 dest[3] = hasAlpha ?
A : 255;
2034 dest[0] = hasAlpha ?
A : 255;
2048 dest[3] = hasAlpha ?
A : 255;
2054 AV_WL32(dest, (3
U << 30) + (
R << 20) + (
G << 10) +
B);
2060 AV_WL32(dest, (3
U << 30) + (
B << 20) + (
G << 10) +
R);
2069 switch (
c->opts.dither) {
2087 R += (7*err[0] + 1*
c->dither_error[0][
i] + 5*
c->dither_error[0][
i+1] + 3*
c->dither_error[0][
i+2])>>4;
2088 G += (7*err[1] + 1*
c->dither_error[1][
i] + 5*
c->dither_error[1][
i+1] + 3*
c->dither_error[1][
i+2])>>4;
2089 B += (7*err[2] + 1*
c->dither_error[2][
i] + 5*
c->dither_error[2][
i+1] + 3*
c->dither_error[2][
i+2])>>4;
2090 c->dither_error[0][
i] = err[0];
2091 c->dither_error[1][
i] = err[1];
2092 c->dither_error[2][
i] = err[2];
2093 r =
R >> (isrgb8 ? 5 : 7);
2094 g =
G >> (isrgb8 ? 5 : 6);
2095 b =
B >> (isrgb8 ? 6 : 7);
2099 err[0] =
R -
r*(isrgb8 ? 36 : 255);
2100 err[1] =
G -
g*(isrgb8 ? 36 : 85);
2101 err[2] =
B -
b*(isrgb8 ? 85 : 255);
2106 #define A_DITHER(u,v) (((((u)+((v)*236))*119)&0xff))
2125 #define X_DITHER(u,v) (((((u)^((v)*237))*181)&0x1ff)/2)
2145 dest[0] =
r + 2*
g + 8*
b;
2147 dest[0] =
b + 2*
g + 8*
r;
2149 dest[0] =
r + 8*
g + 64*
b;
2151 dest[0] =
b + 4*
g + 32*
r;
2160 const int16_t **lumSrc,
int lumFilterSize,
2161 const int16_t *chrFilter,
const int16_t **chrUSrc,
2162 const int16_t **chrVSrc,
int chrFilterSize,
2163 const int16_t **alpSrc, uint8_t *dest,
2175 for (
i = 0;
i < dstW;
i++) {
2178 int U = (1<<9)-(128 << 19);
2179 int V = (1<<9)-(128 << 19);
2181 for (j = 0; j < lumFilterSize; j++) {
2182 Y += (unsigned)(lumSrc[j][
i] * lumFilter[j]);
2184 for (j = 0; j < chrFilterSize; j++) {
2185 U += (unsigned)(chrUSrc[j][
i] * chrFilter[j]);
2186 V += (unsigned)(chrVSrc[j][
i] * chrFilter[j]);
2193 for (j = 0; j < lumFilterSize; j++) {
2194 A += (unsigned)(alpSrc[j][
i] * lumFilter[j]);
2200 yuv2rgb_write_full(
c, dest,
i,
Y,
A,
U,
V, y, target, hasAlpha, err);
2203 c->dither_error[0][
i] = err[0];
2204 c->dither_error[1][
i] = err[1];
2205 c->dither_error[2][
i] = err[2];
2210 const int16_t *ubuf[2],
const int16_t *vbuf[2],
2211 const int16_t *abuf[2], uint8_t *dest,
int dstW,
2212 int yalpha,
int uvalpha,
int y,
2215 const int16_t *buf0 = buf[0], *buf1 = buf[1],
2216 *ubuf0 = ubuf[0], *ubuf1 = ubuf[1],
2217 *vbuf0 = vbuf[0], *vbuf1 = vbuf[1],
2218 *abuf0 = hasAlpha ? abuf[0] :
NULL,
2219 *abuf1 = hasAlpha ? abuf[1] :
NULL;
2220 int yalpha1 = 4096 - yalpha;
2221 int uvalpha1 = 4096 - uvalpha;
2234 for (
i = 0;
i < dstW;
i++) {
2235 int Y = ( buf0[
i] * yalpha1 + buf1[
i] * yalpha ) >> 10;
2236 int U = (ubuf0[
i] * uvalpha1 + ubuf1[
i] * uvalpha-(128 << 19)) >> 10;
2237 int V = (vbuf0[
i] * uvalpha1 + vbuf1[
i] * uvalpha-(128 << 19)) >> 10;
2240 A = (abuf0[
i] * yalpha1 + abuf1[
i] * yalpha + (1<<18)) >> 19;
2245 yuv2rgb_write_full(
c, dest,
i,
Y,
A,
U,
V, y, target, hasAlpha, err);
2248 c->dither_error[0][
i] = err[0];
2249 c->dither_error[1][
i] = err[1];
2250 c->dither_error[2][
i] = err[2];
2255 const int16_t *ubuf[2],
const int16_t *vbuf[2],
2256 const int16_t *abuf0, uint8_t *dest,
int dstW,
2260 const int16_t *ubuf0 = ubuf[0], *vbuf0 = vbuf[0];
2271 for (
i = 0;
i < dstW;
i++) {
2272 int Y = buf0[
i] * 4;
2273 int U = (ubuf0[
i] - (128<<7)) * 4;
2274 int V = (vbuf0[
i] - (128<<7)) * 4;
2277 A = (abuf0[
i] + 64) >> 7;
2282 yuv2rgb_write_full(
c, dest,
i,
Y,
A,
U,
V, y, target, hasAlpha, err);
2286 const int16_t *ubuf1 = ubuf[1], *vbuf1 = vbuf[1];
2288 int uvalpha1 = 4096 - uvalpha;
2291 for (
i = 0;
i < dstW;
i++) {
2292 int Y = buf0[
i] * 4;
2293 int U = (ubuf0[
i] * uvalpha1 + ubuf1[
i] * uvalpha - (128 << 19)) >> 10;
2294 int V = (vbuf0[
i] * uvalpha1 + vbuf1[
i] * uvalpha - (128 << 19)) >> 10;
2297 A = (abuf0[
i] + 64) >> 7;
2302 yuv2rgb_write_full(
c, dest,
i,
Y,
A,
U,
V, y, target, hasAlpha, err);
2307 c->dither_error[0][
i] = err[0];
2308 c->dither_error[1][
i] = err[1];
2309 c->dither_error[2][
i] = err[2];
2318 #if CONFIG_SWSCALE_ALPHA
2342 const int16_t **lumSrc,
int lumFilterSize,
2343 const int16_t *chrFilter, const int16_t **chrUSrc,
2344 const int16_t **chrVSrc,
int chrFilterSize,
2345 const int16_t **alpSrc, uint8_t **dest,
2351 uint16_t **dest16 = (uint16_t**)dest;
2352 int SH = 22 + 8 -
desc->comp[0].depth;
2355 for (
i = 0;
i < dstW;
i++) {
2358 int U = (1 << 9) - (128 << 19);
2359 int V = (1 << 9) - (128 << 19);
2362 for (j = 0; j < lumFilterSize; j++)
2363 Y += (
unsigned)(lumSrc[j][
i] * lumFilter[j]);
2365 for (j = 0; j < chrFilterSize; j++) {
2366 U += (unsigned)(chrUSrc[j][
i] * chrFilter[j]);
2367 V += (unsigned)(chrVSrc[j][
i] * chrFilter[j]);
2377 for (j = 0; j < lumFilterSize; j++)
2378 A += (
unsigned)(alpSrc[j][
i] * lumFilter[j]);
2384 Y -=
c->yuv2rgb_y_offset;
2385 Y *=
c->yuv2rgb_y_coeff;
2387 R =
Y +
V * (unsigned)
c->yuv2rgb_v2r_coeff;
2388 G =
Y +
V * (
unsigned)
c->yuv2rgb_v2g_coeff +
U * (unsigned)
c->yuv2rgb_u2g_coeff;
2389 B =
Y +
U * (
unsigned)
c->yuv2rgb_u2b_coeff;
2391 if ((
R |
G |
B) & 0xC0000000) {
2398 dest16[0][
i] =
G >>
SH;
2399 dest16[1][
i] =
B >>
SH;
2400 dest16[2][
i] =
R >>
SH;
2402 dest16[3][
i] =
A >> (
SH - 3);
2404 dest[0][
i] =
G >> 22;
2405 dest[1][
i] =
B >> 22;
2406 dest[2][
i] =
R >> 22;
2408 dest[3][
i] =
A >> 19;
2411 if (
SH != 22 && (!
isBE(
c->opts.dst_format)) != (!HAVE_BIGENDIAN)) {
2412 for (
i = 0;
i < dstW;
i++) {
2424 const int16_t **lumSrc,
int lumFilterSize,
2425 const int16_t *chrFilter,
const int16_t **chrUSrc,
2426 const int16_t **chrVSrc,
int chrFilterSize,
2427 const int16_t **alpSrc, uint8_t **dest,
2432 uint16_t **dest16 = (uint16_t**)dest;
2437 chrFilter, chrUSrc, chrVSrc, chrFilterSize,
2438 alpSrc, dest, dstW, y);
2440 if (
desc->comp[0].depth <= 8)
2443 if ((!
isBE(
c->opts.dst_format)) != (!HAVE_BIGENDIAN)) {
2444 for (
i = 0;
i < dstW;
i++) {
2452 for (
i = 0;
i < dstW;
i++) {
2453 dest16[0][
i] = dest16[0][
i] <<
shift;
2454 dest16[1][
i] = dest16[1][
i] <<
shift;
2455 dest16[2][
i] = dest16[2][
i] <<
shift;
2457 dest16[3][
i] = dest16[3][
i] <<
shift;
2464 const int16_t **lumSrcx,
int lumFilterSize,
2465 const int16_t *chrFilter,
const int16_t **chrUSrcx,
2466 const int16_t **chrVSrcx,
int chrFilterSize,
2467 const int16_t **alpSrcx, uint8_t **dest,
2473 uint16_t **dest16 = (uint16_t**)dest;
2479 for (
i = 0;
i < dstW;
i++) {
2481 int Y = -0x40000000;
2482 int U = -(128 << 23);
2483 int V = -(128 << 23);
2486 for (j = 0; j < lumFilterSize; j++)
2487 Y += lumSrc[j][
i] * (
unsigned)lumFilter[j];
2489 for (j = 0; j < chrFilterSize; j++) {
2490 U += chrUSrc[j][
i] * (unsigned)chrFilter[j];
2491 V += chrVSrc[j][
i] * (unsigned)chrFilter[j];
2502 for (j = 0; j < lumFilterSize; j++)
2503 A += alpSrc[j][
i] * (
unsigned)lumFilter[j];
2509 Y -=
c->yuv2rgb_y_offset;
2510 Y *=
c->yuv2rgb_y_coeff;
2511 Y += (1 << 13) - (1 << 29);
2512 R =
V *
c->yuv2rgb_v2r_coeff;
2513 G =
V *
c->yuv2rgb_v2g_coeff +
U *
c->yuv2rgb_u2g_coeff;
2514 B =
U *
c->yuv2rgb_u2b_coeff;
2523 if ((!
isBE(
c->opts.dst_format)) != (!HAVE_BIGENDIAN)) {
2524 for (
i = 0;
i < dstW;
i++) {
2536 const int16_t **lumSrcx,
int lumFilterSize,
2537 const int16_t *chrFilter,
const int16_t **chrUSrcx,
2538 const int16_t **chrVSrcx,
int chrFilterSize,
2539 const int16_t **alpSrcx, uint8_t **dest,
2545 uint32_t **dest32 = (uint32_t**)dest;
2550 static const float float_mult = 1.0f / 65535.0f;
2552 for (
i = 0;
i < dstW;
i++) {
2554 int Y = -0x40000000;
2555 int U = -(128 << 23);
2556 int V = -(128 << 23);
2559 for (j = 0; j < lumFilterSize; j++)
2560 Y += lumSrc[j][
i] * (
unsigned)lumFilter[j];
2562 for (j = 0; j < chrFilterSize; j++) {
2563 U += chrUSrc[j][
i] * (unsigned)chrFilter[j];
2564 V += chrVSrc[j][
i] * (unsigned)chrFilter[j];
2575 for (j = 0; j < lumFilterSize; j++)
2576 A += alpSrc[j][
i] * (
unsigned)lumFilter[j];
2582 Y -=
c->yuv2rgb_y_offset;
2583 Y *=
c->yuv2rgb_y_coeff;
2584 Y += (1 << 13) - (1 << 29);
2585 R =
V *
c->yuv2rgb_v2r_coeff;
2586 G =
V *
c->yuv2rgb_v2g_coeff +
U *
c->yuv2rgb_u2g_coeff;
2587 B =
U *
c->yuv2rgb_u2b_coeff;
2599 if ((!
isBE(
c->opts.dst_format)) != (!HAVE_BIGENDIAN)) {
2600 for (
i = 0;
i < dstW;
i++) {
2612 const int16_t *ubuf[2],
const int16_t *vbuf[2],
2613 const int16_t *abuf0, uint8_t *dest,
int dstW,
2616 int hasAlpha = !!abuf0;
2619 for (
i = 0;
i < dstW;
i++) {
2620 int Y = (buf0[
i] + 64) >> 7;
2626 A = (abuf0[
i] + 64) >> 7;
2632 dest[
i * 2 + 1] = hasAlpha ?
A : 255;
2638 const int16_t *ubuf[2],
const int16_t *vbuf[2],
2639 const int16_t *abuf[2], uint8_t *dest,
int dstW,
2640 int yalpha,
int uvalpha,
int y)
2642 int hasAlpha = abuf && abuf[0] && abuf[1];
2643 const int16_t *buf0 = buf[0], *buf1 = buf[1],
2644 *abuf0 = hasAlpha ? abuf[0] :
NULL,
2645 *abuf1 = hasAlpha ? abuf[1] :
NULL;
2646 int yalpha1 = 4096 - yalpha;
2651 for (
i = 0;
i < dstW;
i++) {
2652 int Y = (buf0[
i] * yalpha1 + buf1[
i] * yalpha) >> 19;
2658 A = (abuf0[
i] * yalpha1 + abuf1[
i] * yalpha) >> 19;
2663 dest[
i * 2 + 1] = hasAlpha ?
A : 255;
2669 const int16_t **lumSrc,
int lumFilterSize,
2670 const int16_t *chrFilter,
const int16_t **chrUSrc,
2671 const int16_t **chrVSrc,
int chrFilterSize,
2672 const int16_t **alpSrc, uint8_t *dest,
int dstW,
int y)
2674 int hasAlpha = !!alpSrc;
2677 for (
i = 0;
i < dstW;
i++) {
2679 int Y = 1 << 18,
A = 1 << 18;
2681 for (j = 0; j < lumFilterSize; j++)
2682 Y += (
unsigned)(lumSrc[j][
i] * lumFilter[j]);
2689 for (j = 0; j < lumFilterSize; j++)
2690 A += (
unsigned)(alpSrc[j][
i] * lumFilter[j]);
2699 dest[2 *
i + 1] = hasAlpha ?
A : 255;
2703 #define output_pixels(pos, val) \
2705 AV_WB16(pos, val); \
2707 AV_WL16(pos, val); \
2712 const int16_t **_lumSrc,
int lumFilterSize,
2713 const int16_t *chrFilter,
const int16_t **_chrUSrc,
2714 const int16_t **_chrVSrc,
int chrFilterSize,
2715 const int16_t **_alpSrc, uint8_t *dest,
int dstW,
int y,
2716 int A_offset,
int Y_offset,
int U_offset,
int V_offset,
int is_be)
2719 **chrUSrc = (
const int32_t **) _chrUSrc,
2720 **chrVSrc = (
const int32_t **) _chrVSrc,
2721 **alpSrc = (
const int32_t **) _alpSrc;
2722 int hasAlpha = !!alpSrc;
2725 for (
i = 0;
i < dstW;
i++) {
2726 int Y = 1 << 14,
U = 1 << 14;
2727 int V = 1 << 14,
A = 1 << 14;
2735 for (j = 0; j < lumFilterSize; j++)
2736 Y += lumSrc[j][
i] * (
unsigned)lumFilter[j];
2738 for (j = 0; j < chrFilterSize; j++)
2739 U += chrUSrc[j][
i] * (
unsigned)chrFilter[j];
2741 for (j = 0; j < chrFilterSize; j++)
2742 V += chrVSrc[j][
i] * (
unsigned)chrFilter[j];
2745 for (j = 0; j < lumFilterSize; j++)
2746 A += alpSrc[j][
i] * (
unsigned)lumFilter[j];
2761 #define YUV2AYUV64(pixfmt, BE_LE, A, Y, U, V, is_be) \
2763 yuv2 ## pixfmt ## BE_LE ##_X_c(SwsInternal *c, const int16_t *lumFilter, \
2764 const int16_t **lumSrc, int lumFilterSize, \
2765 const int16_t *chrFilter, const int16_t **chrUSrc, \
2766 const int16_t **chrVSrc, int chrFilterSize, \
2767 const int16_t **alpSrc, uint8_t *dest, int dstW, int y) \
2769 yuv2ayuv64_X_c(c, lumFilter, lumSrc, lumFilterSize, \
2770 chrFilter, chrUSrc, chrVSrc, chrFilterSize, \
2771 alpSrc, dest, dstW, y, A, Y, U, V, is_be); \
2780 #undef output_pixels
2784 const int16_t **lumSrc,
int lumFilterSize,
2785 const int16_t *chrFilter,
const int16_t **chrUSrc,
2786 const int16_t **chrVSrc,
int chrFilterSize,
2787 const int16_t **alpSrc, uint8_t *dest,
int dstW,
int y,
2791 for (
i = 0;
i < dstW;
i++) {
2792 int Y = 1 << 16,
U = 1 << 16,
V = 1 << 16,
A = 0x3;
2795 for (j = 0; j < lumFilterSize; j++)
2796 Y += (
unsigned)(lumSrc[j][
i] * lumFilter[j]);
2798 for (j = 0; j < chrFilterSize; j++) {
2799 U += (unsigned)(chrUSrc[j][
i] * chrFilter[j]);
2800 V += (unsigned)(chrVSrc[j][
i] * chrFilter[j]);
2809 (
unsigned)
V << (
shift + 20) |
2810 (
unsigned)
A << (
shift ? 0 : 30 ));
2814 #define V30LE_WRAPPER(name, shift) \
2815 static void yuv2 ## name ## _X_c(SwsInternal *c, const int16_t *lumFilter, \
2816 const int16_t **lumSrc, int lumFilterSize, \
2817 const int16_t *chrFilter, const int16_t **chrUSrc, \
2818 const int16_t **chrVSrc, int chrFilterSize, \
2819 const int16_t **alpSrc, uint8_t *dest, int dstW, \
2822 yuv2v30_X_c_template(c, lumFilter, lumSrc, lumFilterSize, \
2823 chrFilter, chrUSrc, chrVSrc, chrFilterSize, \
2824 alpSrc, dest, dstW, y, shift); \
2830 #define output_pixels(pos, val, shift, bits, output_shift) \
2832 AV_WB16(pos, av_clip_uintp2(val >> shift, bits) << output_shift); \
2834 AV_WL16(pos, av_clip_uintp2(val >> shift, bits) << output_shift); \
2839 const int16_t **lumSrc,
int lumFilterSize,
2840 const int16_t *chrFilter,
const int16_t **chrUSrc,
2841 const int16_t **chrVSrc,
int chrFilterSize,
2842 const int16_t **alpSrc, uint8_t *dest,
int dstW,
int y,
int is_be)
2845 for (
i = 0;
i < dstW;
i++) {
2846 int Y = 1 << 14,
U = 1 << 14,
V = 1 << 14,
A = 65535;
2849 for (j = 0; j < lumFilterSize; j++)
2850 Y += (
unsigned)(lumSrc[j][
i] * lumFilter[j]);
2852 for (j = 0; j < chrFilterSize; j++) {
2853 U += (unsigned)(chrUSrc[j][
i] * chrFilter[j]);
2854 V += (unsigned)(chrVSrc[j][
i] * chrFilter[j]);
2864 #undef output_pixels
2866 #define YUV2XV36(BE_LE, is_be) \
2868 yuv2xv36 ## BE_LE ##_X_c(SwsInternal *c, const int16_t *lumFilter, \
2869 const int16_t **lumSrc, int lumFilterSize, \
2870 const int16_t *chrFilter, const int16_t **chrUSrc, \
2871 const int16_t **chrVSrc, int chrFilterSize, \
2872 const int16_t **alpSrc, uint8_t *dest, int dstW, int y) \
2874 yuv2xv36_X_c(c, lumFilter, lumSrc, lumFilterSize, \
2875 chrFilter, chrUSrc, chrVSrc, chrFilterSize, \
2876 alpSrc, dest, dstW, y, is_be); \
2882 #define output_pixels(pos, A, Y, U, V) \
2883 if (target == AV_PIX_FMT_AYUV) { \
2884 dest[pos + 0] = A; \
2885 dest[pos + 1] = Y; \
2886 dest[pos + 2] = U; \
2887 dest[pos + 3] = V; \
2888 } else if (target == AV_PIX_FMT_UYVA) { \
2889 dest[pos + 0] = U; \
2890 dest[pos + 1] = Y; \
2891 dest[pos + 2] = V; \
2892 dest[pos + 3] = A; \
2894 dest[pos + 0] = V; \
2895 dest[pos + 1] = U; \
2896 dest[pos + 2] = Y; \
2897 dest[pos + 3] = A; \
2902 const int16_t *ubuf[2],
const int16_t *vbuf[2],
2903 const int16_t *abuf0, uint8_t *dest,
int dstW,
2906 int hasAlpha = !!abuf0;
2909 if (uvalpha < 2048) {
2910 for (
i = 0;
i < dstW;
i++) {
2911 int Y = (buf0[
i] + 64) >> 7;
2912 int U = (ubuf[0][
i] + 64) >> 7;
2913 int V = (vbuf[0][
i] + 64) >> 7;
2924 A = (abuf0[
i] + 64) >> 7;
2932 for (
i = 0;
i < dstW;
i++) {
2933 int Y = (buf0[
i] + 64) >> 7;
2934 int U = (ubuf[0][
i] + ubuf[1][
i] + 128) >> 8;
2935 int V = (vbuf[0][
i] + vbuf[1][
i] + 128) >> 8;
2946 A = (abuf0[
i] + 64) >> 7;
2958 const int16_t *ubuf[2],
const int16_t *vbuf[2],
2959 const int16_t *abuf[2], uint8_t *dest,
int dstW,
2960 int yalpha,
int uvalpha,
int y,
2963 int hasAlpha = abuf && abuf[0] && abuf[1];
2964 const int16_t *buf0 = buf[0], *buf1 = buf[1],
2965 *ubuf0 = ubuf[0], *ubuf1 = ubuf[1],
2966 *vbuf0 = vbuf[0], *vbuf1 = vbuf[1],
2967 *abuf0 = hasAlpha ? abuf[0] :
NULL,
2968 *abuf1 = hasAlpha ? abuf[1] :
NULL;
2969 int yalpha1 = 4096 - yalpha;
2970 int uvalpha1 = 4096 - uvalpha;
2976 for (
i = 0;
i < dstW;
i++) {
2977 int Y = (buf0[
i] * yalpha1 + buf1[
i] * yalpha) >> 19;
2978 int U = (ubuf0[
i] * uvalpha1 + ubuf1[
i] * uvalpha) >> 19;
2979 int V = (vbuf0[
i] * uvalpha1 + vbuf1[
i] * uvalpha) >> 19;
2990 A = (abuf0[
i] * yalpha1 + abuf1[
i] * yalpha) >> 19;
3000 const int16_t **lumSrc,
int lumFilterSize,
3001 const int16_t *chrFilter,
const int16_t **chrUSrc,
3002 const int16_t **chrVSrc,
int chrFilterSize,
3003 const int16_t **alpSrc, uint8_t *dest,
int dstW,
3008 for (
i = 0;
i < dstW;
i++) {
3010 int Y = 1 << 18,
U = 1 << 18;
3011 int V = 1 << 18,
A = 255;
3013 for (j = 0; j < lumFilterSize; j++)
3014 Y += (
unsigned)(lumSrc[j][
i] * lumFilter[j]);
3016 for (j = 0; j < chrFilterSize; j++)
3017 U += (
unsigned)(chrUSrc[j][
i] * chrFilter[j]);
3019 for (j = 0; j < chrFilterSize; j++)
3020 V += (
unsigned)(chrVSrc[j][
i] * chrFilter[j]);
3036 for (j = 0; j < lumFilterSize; j++)
3037 A += (
unsigned)(alpSrc[j][
i] * lumFilter[j]);
3049 #undef output_pixels
3051 #define AYUVPACKEDWRAPPER(name, fmt) \
3052 static void yuv2 ## name ## _X_c(SwsInternal *c, const int16_t *lumFilter, \
3053 const int16_t **lumSrc, int lumFilterSize, \
3054 const int16_t *chrFilter, const int16_t **chrUSrc, \
3055 const int16_t **chrVSrc, int chrFilterSize, \
3056 const int16_t **alpSrc, uint8_t *dest, int dstW, \
3059 yuv2ayuv_X_c_template(c, lumFilter, lumSrc, lumFilterSize, \
3060 chrFilter, chrUSrc, chrVSrc, chrFilterSize, \
3061 alpSrc, dest, dstW, y, fmt); \
3064 static void yuv2 ## name ## _2_c(SwsInternal *c, const int16_t *buf[2], \
3065 const int16_t *ubuf[2], const int16_t *vbuf[2], \
3066 const int16_t *abuf[2], uint8_t *dest, int dstW, \
3067 int yalpha, int uvalpha, int y) \
3069 yuv2ayuv_2_c_template(c, buf, ubuf, vbuf, abuf, \
3070 dest, dstW, yalpha, uvalpha, y, fmt); \
3073 static void yuv2 ## name ## _1_c(SwsInternal *c, const int16_t *buf0, \
3074 const int16_t *ubuf[2], const int16_t *vbuf[2], \
3075 const int16_t *abuf0, uint8_t *dest, int dstW, \
3076 int uvalpha, int y) \
3078 yuv2ayuv_1_c_template(c, buf0, ubuf, vbuf, \
3079 abuf0, dest, dstW, uvalpha, \
3087 #define output_pixel(pos, val, bits) \
3088 AV_WL16(pos, av_clip_uintp2(val >> shift, bits) << output_shift);
3090 #define yuv2y2xx_wrapper(bits) \
3092 yuv2y2 ## bits ## le_X_c(SwsInternal *c, const int16_t *lumFilter, \
3093 const int16_t **lumSrc, int lumFilterSize, \
3094 const int16_t *chrFilter, \
3095 const int16_t **chrUSrc, \
3096 const int16_t **chrVSrc, int chrFilterSize, \
3097 const int16_t **alpSrc, \
3098 uint8_t *dest, int dstW, int y) \
3101 int shift = 11 + 16 - bits; \
3102 int output_shift = 16 - bits; \
3103 for (i = 0; i < ((dstW + 1) >> 1); i++) { \
3104 int Y1 = 1 << (shift - 1), Y2 = 1 << (shift - 1); \
3105 int U = 1 << (shift - 1), V = 1 << (shift - 1); \
3107 for (j = 0; j < lumFilterSize; j++) { \
3108 Y1 += (unsigned)(lumSrc[j][i * 2] * lumFilter[j]); \
3109 Y2 += (unsigned)(lumSrc[j][i * 2 + 1] * lumFilter[j]); \
3112 for (j = 0; j < chrFilterSize; j++) { \
3113 U += (unsigned)(chrUSrc[j][i] * chrFilter[j]); \
3114 V += (unsigned)(chrVSrc[j][i] * chrFilter[j]); \
3117 output_pixel(dest + 8 * i + 0, Y1, bits); \
3118 output_pixel(dest + 8 * i + 2, U, bits); \
3119 output_pixel(dest + 8 * i + 4, Y2, bits); \
3120 output_pixel(dest + 8 * i + 6, V, bits); \
3128 yuv2y216le_X_c(
SwsInternal *
c, const int16_t *lumFilter,
3129 const int16_t **_lumSrc,
int lumFilterSize,
3130 const int16_t *chrFilter,
3131 const int16_t **_chrUSrc,
3132 const int16_t **_chrVSrc,
int chrFilterSize,
3133 const int16_t **_alpSrc,
3134 uint8_t *dest,
int dstW,
int y)
3141 for (
int i = 0;
i < ((dstW + 1) >> 1);
i++) {
3142 int Y1 = 1 << (
shift - 1), Y2 = 1 << (
shift - 1);
3151 for (
int j = 0; j < lumFilterSize; j++) {
3152 Y1 += lumSrc[j][
i * 2] * (unsigned)lumFilter[j];
3153 Y2 += lumSrc[j][
i * 2 + 1] * (unsigned)lumFilter[j];
3156 for (
int j = 0; j < chrFilterSize; j++) {
3157 U += chrUSrc[j][
i] * (unsigned)chrFilter[j];
3158 V += chrVSrc[j][
i] * (unsigned)chrFilter[j];
3170 const int16_t *ubuf[2],
const int16_t *vbuf[2],
3171 const int16_t *abuf0, uint8_t *dest,
int dstW,
3176 if (uvalpha < 2048) {
3177 for (
i = 0;
i < dstW;
i++) {
3178 int Y = (buf0[
i] + 64) >> 7;
3179 int U = (ubuf[0][
i] + 64) >> 7;
3180 int V = (vbuf[0][
i] + 64) >> 7;
3190 dest[3 *
i + 1] =
Y;
3191 dest[3 *
i + 2] =
U;
3194 for (
i = 0;
i < dstW;
i++) {
3195 int Y = (buf0[
i] + 64) >> 7;
3196 int U = (ubuf[0][
i] + ubuf[1][
i] + 128) >> 8;
3197 int V = (vbuf[0][
i] + vbuf[1][
i] + 128) >> 8;
3207 dest[3 *
i + 1] =
Y;
3208 dest[3 *
i + 2] =
U;
3215 const int16_t *ubuf[2],
const int16_t *vbuf[2],
3216 const int16_t *abuf[2], uint8_t *dest,
int dstW,
3217 int yalpha,
int uvalpha,
int y)
3219 const int16_t *buf0 = buf[0], *buf1 = buf[1],
3220 *ubuf0 = ubuf[0], *ubuf1 = ubuf[1],
3221 *vbuf0 = vbuf[0], *vbuf1 = vbuf[1];
3222 int yalpha1 = 4096 - yalpha;
3223 int uvalpha1 = 4096 - uvalpha;
3229 for (
i = 0;
i < dstW;
i++) {
3230 int Y = (buf0[
i] * yalpha1 + buf1[
i] * yalpha) >> 19;
3231 int U = (ubuf0[
i] * uvalpha1 + ubuf1[
i] * uvalpha) >> 19;
3232 int V = (vbuf0[
i] * uvalpha1 + vbuf1[
i] * uvalpha) >> 19;
3242 dest[3 *
i + 1] =
Y;
3243 dest[3 *
i + 2] =
U;
3249 const int16_t **lumSrc,
int lumFilterSize,
3250 const int16_t *chrFilter,
const int16_t **chrUSrc,
3251 const int16_t **chrVSrc,
int chrFilterSize,
3252 const int16_t **alpSrc, uint8_t *dest,
int dstW,
int y)
3256 for (
i = 0;
i < dstW;
i++) {
3258 int Y = 1 << 18,
U = 1 << 18;
3261 for (j = 0; j < lumFilterSize; j++)
3262 Y += (
unsigned)(lumSrc[j][
i] * lumFilter[j]);
3264 for (j = 0; j < chrFilterSize; j++)
3265 U += (
unsigned)(chrUSrc[j][
i] * chrFilter[j]);
3267 for (j = 0; j < chrFilterSize; j++)
3268 V += (
unsigned)(chrVSrc[j][
i] * chrFilter[j]);
3282 dest[3 *
i + 1] =
Y;
3283 dest[3 *
i + 2] =
U;
3302 if (
desc->comp[0].depth == 10) {
3303 *yuv2plane1 =
isBE(dstFormat) ? yuv2p010l1_BE_c : yuv2p010l1_LE_c;
3304 *
yuv2planeX =
isBE(dstFormat) ? yuv2p010lX_BE_c : yuv2p010lX_LE_c;
3305 *yuv2nv12cX =
isBE(dstFormat) ? yuv2p010cX_BE_c : yuv2p010cX_LE_c;
3306 }
else if (
desc->comp[0].depth == 12) {
3307 *yuv2plane1 =
isBE(dstFormat) ? yuv2p012l1_BE_c : yuv2p012l1_LE_c;
3308 *
yuv2planeX =
isBE(dstFormat) ? yuv2p012lX_BE_c : yuv2p012lX_LE_c;
3309 *yuv2nv12cX =
isBE(dstFormat) ? yuv2p012cX_BE_c : yuv2p012cX_LE_c;
3313 if (
desc->comp[0].depth == 10) {
3314 *yuv2plane1 =
isBE(dstFormat) ? yuv2nv20l1_BE_c : yuv2nv20l1_LE_c;
3315 *
yuv2planeX =
isBE(dstFormat) ? yuv2nv20lX_BE_c : yuv2nv20lX_LE_c;
3316 *yuv2nv12cX =
isBE(dstFormat) ? yuv2nv20cX_BE_c : yuv2nv20cX_LE_c;
3319 }
else if (
is16BPS(dstFormat)) {
3320 *
yuv2planeX =
isBE(dstFormat) ? yuv2planeX_16BE_c : yuv2planeX_16LE_c;
3321 *yuv2plane1 =
isBE(dstFormat) ? yuv2plane1_16BE_c : yuv2plane1_16LE_c;
3326 if (
desc->comp[0].depth == 10) {
3327 *
yuv2planeX =
isBE(dstFormat) ? yuv2msbplaneX_10BE_c : yuv2msbplaneX_10LE_c;
3328 *yuv2plane1 =
isBE(dstFormat) ? yuv2msbplane1_10BE_c : yuv2msbplane1_10LE_c;
3329 }
else if (
desc->comp[0].depth == 12) {
3330 *
yuv2planeX =
isBE(dstFormat) ? yuv2msbplaneX_12BE_c : yuv2msbplaneX_12LE_c;
3331 *yuv2plane1 =
isBE(dstFormat) ? yuv2msbplane1_12BE_c : yuv2msbplane1_12LE_c;
3334 }
else if (
isNBPS(dstFormat)) {
3335 if (
desc->comp[0].depth == 9) {
3336 *
yuv2planeX =
isBE(dstFormat) ? yuv2planeX_9BE_c : yuv2planeX_9LE_c;
3337 *yuv2plane1 =
isBE(dstFormat) ? yuv2plane1_9BE_c : yuv2plane1_9LE_c;
3338 }
else if (
desc->comp[0].depth == 10) {
3339 *
yuv2planeX =
isBE(dstFormat) ? yuv2planeX_10BE_c : yuv2planeX_10LE_c;
3340 *yuv2plane1 =
isBE(dstFormat) ? yuv2plane1_10BE_c : yuv2plane1_10LE_c;
3341 }
else if (
desc->comp[0].depth == 12) {
3342 *
yuv2planeX =
isBE(dstFormat) ? yuv2planeX_12BE_c : yuv2planeX_12LE_c;
3343 *yuv2plane1 =
isBE(dstFormat) ? yuv2plane1_12BE_c : yuv2plane1_12LE_c;
3344 }
else if (
desc->comp[0].depth == 14) {
3345 *
yuv2planeX =
isBE(dstFormat) ? yuv2planeX_14BE_c : yuv2planeX_14LE_c;
3346 *yuv2plane1 =
isBE(dstFormat) ? yuv2plane1_14BE_c : yuv2plane1_14LE_c;
3351 *yuv2plane1 = yuv2plane1_floatBE_c;
3354 *yuv2plane1 = yuv2plane1_floatLE_c;
3363 switch (dstFormat) {
3366 *yuv2packedX = yuv2rgba32_full_X_c;
3367 *yuv2packed2 = yuv2rgba32_full_2_c;
3368 *yuv2packed1 = yuv2rgba32_full_1_c;
3370 #if CONFIG_SWSCALE_ALPHA
3372 *yuv2packedX = yuv2rgba32_full_X_c;
3373 *yuv2packed2 = yuv2rgba32_full_2_c;
3374 *yuv2packed1 = yuv2rgba32_full_1_c;
3378 *yuv2packedX = yuv2rgbx32_full_X_c;
3379 *yuv2packed2 = yuv2rgbx32_full_2_c;
3380 *yuv2packed1 = yuv2rgbx32_full_1_c;
3386 *yuv2packedX = yuv2argb32_full_X_c;
3387 *yuv2packed2 = yuv2argb32_full_2_c;
3388 *yuv2packed1 = yuv2argb32_full_1_c;
3390 #if CONFIG_SWSCALE_ALPHA
3392 *yuv2packedX = yuv2argb32_full_X_c;
3393 *yuv2packed2 = yuv2argb32_full_2_c;
3394 *yuv2packed1 = yuv2argb32_full_1_c;
3398 *yuv2packedX = yuv2xrgb32_full_X_c;
3399 *yuv2packed2 = yuv2xrgb32_full_2_c;
3400 *yuv2packed1 = yuv2xrgb32_full_1_c;
3406 *yuv2packedX = yuv2bgra32_full_X_c;
3407 *yuv2packed2 = yuv2bgra32_full_2_c;
3408 *yuv2packed1 = yuv2bgra32_full_1_c;
3410 #if CONFIG_SWSCALE_ALPHA
3412 *yuv2packedX = yuv2bgra32_full_X_c;
3413 *yuv2packed2 = yuv2bgra32_full_2_c;
3414 *yuv2packed1 = yuv2bgra32_full_1_c;
3418 *yuv2packedX = yuv2bgrx32_full_X_c;
3419 *yuv2packed2 = yuv2bgrx32_full_2_c;
3420 *yuv2packed1 = yuv2bgrx32_full_1_c;
3426 *yuv2packedX = yuv2abgr32_full_X_c;
3427 *yuv2packed2 = yuv2abgr32_full_2_c;
3428 *yuv2packed1 = yuv2abgr32_full_1_c;
3430 #if CONFIG_SWSCALE_ALPHA
3432 *yuv2packedX = yuv2abgr32_full_X_c;
3433 *yuv2packed2 = yuv2abgr32_full_2_c;
3434 *yuv2packed1 = yuv2abgr32_full_1_c;
3438 *yuv2packedX = yuv2xbgr32_full_X_c;
3439 *yuv2packed2 = yuv2xbgr32_full_2_c;
3440 *yuv2packed1 = yuv2xbgr32_full_1_c;
3445 #if CONFIG_SWSCALE_ALPHA
3447 *yuv2packedX = yuv2rgba64le_full_X_c;
3448 *yuv2packed2 = yuv2rgba64le_full_2_c;
3449 *yuv2packed1 = yuv2rgba64le_full_1_c;
3453 *yuv2packedX = yuv2rgbx64le_full_X_c;
3454 *yuv2packed2 = yuv2rgbx64le_full_2_c;
3455 *yuv2packed1 = yuv2rgbx64le_full_1_c;
3459 #if CONFIG_SWSCALE_ALPHA
3461 *yuv2packedX = yuv2rgba64be_full_X_c;
3462 *yuv2packed2 = yuv2rgba64be_full_2_c;
3463 *yuv2packed1 = yuv2rgba64be_full_1_c;
3467 *yuv2packedX = yuv2rgbx64be_full_X_c;
3468 *yuv2packed2 = yuv2rgbx64be_full_2_c;
3469 *yuv2packed1 = yuv2rgbx64be_full_1_c;
3473 #if CONFIG_SWSCALE_ALPHA
3475 *yuv2packedX = yuv2bgra64le_full_X_c;
3476 *yuv2packed2 = yuv2bgra64le_full_2_c;
3477 *yuv2packed1 = yuv2bgra64le_full_1_c;
3481 *yuv2packedX = yuv2bgrx64le_full_X_c;
3482 *yuv2packed2 = yuv2bgrx64le_full_2_c;
3483 *yuv2packed1 = yuv2bgrx64le_full_1_c;
3487 #if CONFIG_SWSCALE_ALPHA
3489 *yuv2packedX = yuv2bgra64be_full_X_c;
3490 *yuv2packed2 = yuv2bgra64be_full_2_c;
3491 *yuv2packed1 = yuv2bgra64be_full_1_c;
3495 *yuv2packedX = yuv2bgrx64be_full_X_c;
3496 *yuv2packed2 = yuv2bgrx64be_full_2_c;
3497 *yuv2packed1 = yuv2bgrx64be_full_1_c;
3502 *yuv2packedX = yuv2rgb24_full_X_c;
3503 *yuv2packed2 = yuv2rgb24_full_2_c;
3504 *yuv2packed1 = yuv2rgb24_full_1_c;
3507 *yuv2packedX = yuv2bgr24_full_X_c;
3508 *yuv2packed2 = yuv2bgr24_full_2_c;
3509 *yuv2packed1 = yuv2bgr24_full_1_c;
3512 *yuv2packedX = yuv2rgb48le_full_X_c;
3513 *yuv2packed2 = yuv2rgb48le_full_2_c;
3514 *yuv2packed1 = yuv2rgb48le_full_1_c;
3517 *yuv2packedX = yuv2bgr48le_full_X_c;
3518 *yuv2packed2 = yuv2bgr48le_full_2_c;
3519 *yuv2packed1 = yuv2bgr48le_full_1_c;
3522 *yuv2packedX = yuv2rgb48be_full_X_c;
3523 *yuv2packed2 = yuv2rgb48be_full_2_c;
3524 *yuv2packed1 = yuv2rgb48be_full_1_c;
3527 *yuv2packedX = yuv2bgr48be_full_X_c;
3528 *yuv2packed2 = yuv2bgr48be_full_2_c;
3529 *yuv2packed1 = yuv2bgr48be_full_1_c;
3532 *yuv2packedX = yuv2bgr4_byte_full_X_c;
3533 *yuv2packed2 = yuv2bgr4_byte_full_2_c;
3534 *yuv2packed1 = yuv2bgr4_byte_full_1_c;
3537 *yuv2packedX = yuv2rgb4_byte_full_X_c;
3538 *yuv2packed2 = yuv2rgb4_byte_full_2_c;
3539 *yuv2packed1 = yuv2rgb4_byte_full_1_c;
3542 *yuv2packedX = yuv2bgr8_full_X_c;
3543 *yuv2packed2 = yuv2bgr8_full_2_c;
3544 *yuv2packed1 = yuv2bgr8_full_1_c;
3547 *yuv2packedX = yuv2rgb8_full_X_c;
3548 *yuv2packed2 = yuv2rgb8_full_2_c;
3549 *yuv2packed1 = yuv2rgb8_full_1_c;
3552 *yuv2packedX = yuv2x2rgb10_full_X_c;
3553 *yuv2packed2 = yuv2x2rgb10_full_2_c;
3554 *yuv2packed1 = yuv2x2rgb10_full_1_c;
3557 *yuv2packedX = yuv2x2bgr10_full_X_c;
3558 *yuv2packed2 = yuv2x2bgr10_full_2_c;
3559 *yuv2packed1 = yuv2x2bgr10_full_1_c;
3598 if (!*yuv2packedX && !*yuv2anyX)
3602 switch (dstFormat) {
3604 #if CONFIG_SWSCALE_ALPHA
3606 *yuv2packed1 = yuv2rgba64le_1_c;
3607 *yuv2packed2 = yuv2rgba64le_2_c;
3608 *yuv2packedX = yuv2rgba64le_X_c;
3612 *yuv2packed1 = yuv2rgbx64le_1_c;
3613 *yuv2packed2 = yuv2rgbx64le_2_c;
3614 *yuv2packedX = yuv2rgbx64le_X_c;
3618 #if CONFIG_SWSCALE_ALPHA
3620 *yuv2packed1 = yuv2rgba64be_1_c;
3621 *yuv2packed2 = yuv2rgba64be_2_c;
3622 *yuv2packedX = yuv2rgba64be_X_c;
3626 *yuv2packed1 = yuv2rgbx64be_1_c;
3627 *yuv2packed2 = yuv2rgbx64be_2_c;
3628 *yuv2packedX = yuv2rgbx64be_X_c;
3632 #if CONFIG_SWSCALE_ALPHA
3634 *yuv2packed1 = yuv2bgra64le_1_c;
3635 *yuv2packed2 = yuv2bgra64le_2_c;
3636 *yuv2packedX = yuv2bgra64le_X_c;
3640 *yuv2packed1 = yuv2bgrx64le_1_c;
3641 *yuv2packed2 = yuv2bgrx64le_2_c;
3642 *yuv2packedX = yuv2bgrx64le_X_c;
3646 #if CONFIG_SWSCALE_ALPHA
3648 *yuv2packed1 = yuv2bgra64be_1_c;
3649 *yuv2packed2 = yuv2bgra64be_2_c;
3650 *yuv2packedX = yuv2bgra64be_X_c;
3654 *yuv2packed1 = yuv2bgrx64be_1_c;
3655 *yuv2packed2 = yuv2bgrx64be_2_c;
3656 *yuv2packedX = yuv2bgrx64be_X_c;
3660 *yuv2packed1 = yuv2rgb48le_1_c;
3661 *yuv2packed2 = yuv2rgb48le_2_c;
3662 *yuv2packedX = yuv2rgb48le_X_c;
3665 *yuv2packed1 = yuv2rgb48be_1_c;
3666 *yuv2packed2 = yuv2rgb48be_2_c;
3667 *yuv2packedX = yuv2rgb48be_X_c;
3670 *yuv2packed1 = yuv2bgr48le_1_c;
3671 *yuv2packed2 = yuv2bgr48le_2_c;
3672 *yuv2packedX = yuv2bgr48le_X_c;
3675 *yuv2packed1 = yuv2bgr48be_1_c;
3676 *yuv2packed2 = yuv2bgr48be_2_c;
3677 *yuv2packedX = yuv2bgr48be_X_c;
3682 *yuv2packed1 = yuv2rgb32_1_c;
3683 *yuv2packed2 = yuv2rgb32_2_c;
3684 *yuv2packedX = yuv2rgb32_X_c;
3686 #if CONFIG_SWSCALE_ALPHA
3688 *yuv2packed1 = yuv2rgba32_1_c;
3689 *yuv2packed2 = yuv2rgba32_2_c;
3690 *yuv2packedX = yuv2rgba32_X_c;
3694 *yuv2packed1 = yuv2rgbx32_1_c;
3695 *yuv2packed2 = yuv2rgbx32_2_c;
3696 *yuv2packedX = yuv2rgbx32_X_c;
3703 *yuv2packed1 = yuv2rgb32_1_1_c;
3704 *yuv2packed2 = yuv2rgb32_1_2_c;
3705 *yuv2packedX = yuv2rgb32_1_X_c;
3707 #if CONFIG_SWSCALE_ALPHA
3709 *yuv2packed1 = yuv2rgba32_1_1_c;
3710 *yuv2packed2 = yuv2rgba32_1_2_c;
3711 *yuv2packedX = yuv2rgba32_1_X_c;
3715 *yuv2packed1 = yuv2rgbx32_1_1_c;
3716 *yuv2packed2 = yuv2rgbx32_1_2_c;
3717 *yuv2packedX = yuv2rgbx32_1_X_c;
3722 *yuv2packed1 = yuv2rgb24_1_c;
3723 *yuv2packed2 = yuv2rgb24_2_c;
3724 *yuv2packedX = yuv2rgb24_X_c;
3727 *yuv2packed1 = yuv2bgr24_1_c;
3728 *yuv2packed2 = yuv2bgr24_2_c;
3729 *yuv2packedX = yuv2bgr24_X_c;
3735 *yuv2packed1 = yuv2rgb16_1_c;
3736 *yuv2packed2 = yuv2rgb16_2_c;
3737 *yuv2packedX = yuv2rgb16_X_c;
3743 *yuv2packed1 = yuv2rgb15_1_c;
3744 *yuv2packed2 = yuv2rgb15_2_c;
3745 *yuv2packedX = yuv2rgb15_X_c;
3751 *yuv2packed1 = yuv2rgb12_1_c;
3752 *yuv2packed2 = yuv2rgb12_2_c;
3753 *yuv2packedX = yuv2rgb12_X_c;
3757 *yuv2packed1 = yuv2rgb8_1_c;
3758 *yuv2packed2 = yuv2rgb8_2_c;
3759 *yuv2packedX = yuv2rgb8_X_c;
3763 *yuv2packed1 = yuv2rgb4_1_c;
3764 *yuv2packed2 = yuv2rgb4_2_c;
3765 *yuv2packedX = yuv2rgb4_X_c;
3769 *yuv2packed1 = yuv2rgb4b_1_c;
3770 *yuv2packed2 = yuv2rgb4b_2_c;
3771 *yuv2packedX = yuv2rgb4b_X_c;
3775 *yuv2packed1 = yuv2x2rgb10_1_c;
3776 *yuv2packed2 = yuv2x2rgb10_2_c;
3777 *yuv2packedX = yuv2x2rgb10_X_c;
3781 *yuv2packed1 = yuv2x2bgr10_1_c;
3782 *yuv2packed2 = yuv2x2bgr10_2_c;
3783 *yuv2packedX = yuv2x2bgr10_X_c;
3787 switch (dstFormat) {
3789 *yuv2packed1 = yuv2monowhite_1_c;
3790 *yuv2packed2 = yuv2monowhite_2_c;
3791 *yuv2packedX = yuv2monowhite_X_c;
3794 *yuv2packed1 = yuv2monoblack_1_c;
3795 *yuv2packed2 = yuv2monoblack_2_c;
3796 *yuv2packedX = yuv2monoblack_X_c;
3799 *yuv2packed1 = yuv2yuyv422_1_c;
3800 *yuv2packed2 = yuv2yuyv422_2_c;
3801 *yuv2packedX = yuv2yuyv422_X_c;
3804 *yuv2packed1 = yuv2yvyu422_1_c;
3805 *yuv2packed2 = yuv2yvyu422_2_c;
3806 *yuv2packedX = yuv2yvyu422_X_c;
3809 *yuv2packed1 = yuv2uyvy422_1_c;
3810 *yuv2packed2 = yuv2uyvy422_2_c;
3811 *yuv2packedX = yuv2uyvy422_X_c;
3824 *yuv2packed1 = yuv2ya16le_1_c;
3825 *yuv2packed2 = yuv2ya16le_2_c;
3826 *yuv2packedX = yuv2ya16le_X_c;
3829 *yuv2packed1 = yuv2ya16be_1_c;
3830 *yuv2packed2 = yuv2ya16be_2_c;
3831 *yuv2packedX = yuv2ya16be_X_c;
3834 *yuv2packedX = yuv2v30xle_X_c;
3837 *yuv2packedX = yuv2ayuv64le_X_c;
3840 *yuv2packedX = yuv2ayuv64be_X_c;
3843 *yuv2packed1 = yuv2ayuv_1_c;
3844 *yuv2packed2 = yuv2ayuv_2_c;
3845 *yuv2packedX = yuv2ayuv_X_c;
3849 *yuv2packed1 = yuv2vuyX_1_c;
3850 *yuv2packed2 = yuv2vuyX_2_c;
3851 *yuv2packedX = yuv2vuyX_X_c;
3854 *yuv2packed1 = yuv2uyva_1_c;
3855 *yuv2packed2 = yuv2uyva_2_c;
3856 *yuv2packedX = yuv2uyva_X_c;
3859 *yuv2packedX = yuv2xv30le_X_c;
3862 *yuv2packedX = yuv2xv36le_X_c;
3865 *yuv2packedX = yuv2xv36be_X_c;
3868 *yuv2packedX = yuv2xv48le_X_c;
3871 *yuv2packedX = yuv2xv48be_X_c;
3874 *yuv2packedX = yuv2y210le_X_c;
3877 *yuv2packedX = yuv2y212le_X_c;
3880 *yuv2packedX = yuv2y216le_X_c;