2 * This library is free software; you can redistribute it and/or modify it
3 * under the terms of the GNU Lesser General Public License as published
4 * by the Free Software Foundation; either version 2 of the License, or
5 * (at your option) any later version.
7 * This library is distributed in the hope that it will be useful, but
8 * WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10 * Lesser General Public License for more details.
12 * You should have received a copy of the GNU Lesser General Public
13 * License along with this library; if not, write to the Free Software
14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19 #include "cmodel_permutation.h"
30 // ********************************* YUV101010 -> *****************************
32 #define READ_YUV101010 \
34 uint32_t input_i = input[0] | \
39 y = ((input_i & 0xffc00000) >> 16) | 0x3f; \
40 u = ((input_i & 0x3ff000) >> 6) | 0x3f; \
41 v = ((input_i & 0xffc) << 4) | 0x3f;
48 static inline void transfer_YUV101010_to_RGB8(unsigned char *(*output
), unsigned char *input
)
54 y
= (y
<< 8) | (y
>> 8);
56 YUV_TO_RGB16(y
, u
, v
, r
, g
, b
);
58 *(*output
)++ = (unsigned char)(((input
[0] & 0xc000) >> 8) +
59 ((input
[1] & 0xe000) >> 10) +
60 ((input
[2] & 0xe000) >> 13));
63 static inline void transfer_YUV101010_to_BGR565(unsigned char *(*output
), unsigned char *input
)
69 y
= (y
<< 8) | (y
>> 8);
71 YUV_TO_RGB16(y
, u
, v
, r
, g
, b
);
73 *(uint16_t*)(*output
) = (b
& 0xf800) |
79 static inline void transfer_YUV101010_to_RGB565(unsigned char *(*output
), unsigned char *input
)
85 y
= (y
<< 8) | (y
>> 8);
87 YUV_TO_RGB16(y
, u
, v
, r
, g
, b
);
89 *(uint16_t*)(*output
) = (r
& 0xf800) |
95 static inline void transfer_YUV101010_to_BGR888(unsigned char *(*output
), unsigned char *input
)
101 y
= (y
<< 8) | (y
>> 8);
103 YUV_TO_RGB16(y
, u
, v
, r
, g
, b
);
105 *(*output
)++ = b
>> 8;
106 *(*output
)++ = g
>> 8;
107 *(*output
)++ = r
>> 8;
110 static inline void transfer_YUV101010_to_BGR8888(unsigned char *(*output
), unsigned char *input
)
116 y
= (y
<< 8) | (y
>> 8);
118 YUV_TO_RGB16(y
, u
, v
, r
, g
, b
);
120 *(*output
)++ = b
>> 8;
121 *(*output
)++ = g
>> 8;
122 *(*output
)++ = r
>> 8;
126 static inline void transfer_YUV101010_to_YUV888(unsigned char *(*output
), unsigned char *input
)
130 *(*output
)++ = y
>> 8;
131 *(*output
)++ = u
>> 8;
132 *(*output
)++ = v
>> 8;
135 static inline void transfer_YUV101010_to_YUVA8888(unsigned char *(*output
), unsigned char *input
)
139 *(*output
)++ = y
>> 8;
140 *(*output
)++ = u
>> 8;
141 *(*output
)++ = v
>> 8;
145 static inline void transfer_YUV101010_to_YUV161616(uint16_t *(*output
), unsigned char *input
)
154 static inline void transfer_YUV101010_to_YUVA16161616(uint16_t *(*output
), unsigned char *input
)
161 *(*output
)++ = 0xffff;
164 static inline void transfer_YUV101010_to_RGB888(unsigned char *(*output
), unsigned char *input
)
170 y
= (y
<< 8) | (y
>> 8);
172 YUV_TO_RGB16(y
, u
, v
, r
, g
, b
);
174 *(*output
)++ = r
>> 8;
175 *(*output
)++ = g
>> 8;
176 *(*output
)++ = b
>> 8;
179 static inline void transfer_YUV101010_to_RGBA8888(unsigned char *(*output
), unsigned char *input
)
185 y
= (y
<< 8) | (y
>> 8);
187 YUV_TO_RGB16(y
, u
, v
, r
, g
, b
);
189 *(*output
)++ = r
>> 8;
190 *(*output
)++ = g
>> 8;
191 *(*output
)++ = b
>> 8;
195 static inline void transfer_YUV101010_to_RGB161616(uint16_t *(*output
), unsigned char *input
)
201 y
= (y
<< 8) | (y
>> 8);
203 YUV_TO_RGB16(y
, u
, v
, r
, g
, b
);
210 static inline void transfer_YUV101010_to_RGBA16161616(uint16_t *(*output
), unsigned char *input
)
216 y
= (y
<< 8) | (y
>> 8);
218 YUV_TO_RGB16(y
, u
, v
, r
, g
, b
);
223 *(*output
)++ = 0xffff;
229 static inline void transfer_YUV101010_to_RGB_FLOAT(float *(*output
),
230 unsigned char *input
)
237 y_f
= (float)y
/ 0xffff;
239 YUV16_TO_RGB_FLOAT(y_f
, u
, v
, r
, g
, b
);
246 static inline void transfer_YUV101010_to_RGBA_FLOAT(float *(*output
),
247 unsigned char *input
)
254 y_f
= (float)y
/ 0xffff;
256 YUV16_TO_RGB_FLOAT(y_f
, u
, v
, r
, g
, b
);
282 // ******************************** VYU888 -> *********************************
285 static inline void transfer_VYU888_to_RGB8(unsigned char *(*output
), unsigned char *input
)
290 y
= ((int)input
[1]) << 16;
293 YUV_TO_RGB(y
, u
, v
, r
, g
, b
);
295 *(*output
) = (unsigned char)((r
& 0xc0) +
301 static inline void transfer_VYU888_to_BGR565(unsigned char *(*output
), unsigned char *input
)
306 y
= ((int)input
[1]) << 16;
309 YUV_TO_RGB(y
, u
, v
, r
, g
, b
);
310 *(uint16_t*)(*output
) = ((b
& 0xf8) << 8)
316 static inline void transfer_VYU888_to_RGB565(unsigned char *(*output
), unsigned char *input
)
321 y
= ((int)input
[1]) << 16;
324 YUV_TO_RGB(y
, u
, v
, r
, g
, b
);
325 *(uint16_t*)(*output
) = ((r
& 0xf8) << 8)
331 static inline void transfer_VYU888_to_BGR888(unsigned char *(*output
), unsigned char *input
)
336 y
= ((int)input
[1]) << 16;
339 YUV_TO_RGB(y
, u
, v
, r
, g
, b
);
347 static inline void transfer_VYU888_to_BGR8888(unsigned char *(*output
), unsigned char *input
)
352 y
= ((int)input
[1]) << 16;
355 YUV_TO_RGB(y
, u
, v
, r
, g
, b
);
363 static inline void transfer_VYU888_to_RGB888(unsigned char *(*output
), unsigned char *input
)
368 y
= ((int)input
[1]) << 16;
371 YUV_TO_RGB(y
, u
, v
, r
, g
, b
);
379 static inline void transfer_VYU888_to_RGBA8888(unsigned char *(*output
), unsigned char *input
)
384 y
= ((int)input
[1]) << 16;
387 YUV_TO_RGB(y
, u
, v
, r
, g
, b
);
397 static inline void transfer_VYU888_to_RGB161616(uint16_t *(*output
), unsigned char *input
)
402 y
= (input
[1] << 16) | (input
[1] << 8) | input
[1];
403 u
= (input
[2] << 8) | input
[2];
404 v
= (input
[0] << 8) | input
[0];
405 YUV_TO_RGB16(y
, u
, v
, r
, g
, b
);
413 static inline void transfer_VYU888_to_RGBA16161616(uint16_t *(*output
), unsigned char *input
)
418 y
= (input
[1] << 16) | (input
[1] << 8) | input
[1];
419 u
= (input
[2] << 8) | input
[2];
420 v
= (input
[0] << 8) | input
[0];
421 YUV_TO_RGB16(y
, u
, v
, r
, g
, b
);
426 (*output
)[3] = 0xffff;
431 static inline void transfer_VYU888_to_RGB_FLOAT(float *(*output
), unsigned char *input
)
438 y
= (float)*input
++ / 0xff;
440 YUV_TO_FLOAT(y
, u
, v
, r
, g
, b
);
447 static inline void transfer_VYU888_to_RGBA_FLOAT(float *(*output
), unsigned char *input
)
454 y
= (float)*input
++ / 0xff;
456 YUV_TO_FLOAT(y
, u
, v
, r
, g
, b
);
465 static inline void transfer_VYU888_to_YUV888(unsigned char *(*output
), unsigned char *input
)
467 (*output
)[0] = input
[1];
468 (*output
)[1] = input
[2];
469 (*output
)[2] = input
[0];
473 static inline void transfer_VYU888_to_YUVA8888(unsigned char *(*output
), unsigned char *input
)
475 (*output
)[0] = input
[1];
476 (*output
)[1] = input
[2];
477 (*output
)[2] = input
[0];
483 static inline void transfer_VYU888_to_YUV161616(uint16_t *(*output
), unsigned char *input
)
485 (*output
)[0] = ((int)input
[1]) << 8;
486 (*output
)[1] = ((int)input
[2]) << 8;
487 (*output
)[2] = ((int)input
[0]) << 8;
491 static inline void transfer_VYU888_to_YUVA16161616(uint16_t *(*output
), unsigned char *input
)
493 (*output
)[0] = ((int)input
[1]) << 8;
494 (*output
)[1] = ((int)input
[2]) << 8;
495 (*output
)[2] = ((int)input
[0]) << 8;
511 // ******************************** UYVA8888 -> *********************************
514 static inline void transfer_UYVA8888_to_RGB8(unsigned char *(*output
), unsigned char *input
)
519 y
= ((int)input
[1]) << 16;
522 YUV_TO_RGB(y
, u
, v
, r
, g
, b
);
524 r
= r
* input
[3] / 0xff;
525 g
= g
* input
[3] / 0xff;
526 b
= b
* input
[3] / 0xff;
527 *(*output
) = (unsigned char)((r
& 0xc0) +
533 static inline void transfer_UYVA8888_to_BGR565(unsigned char *(*output
), unsigned char *input
)
538 y
= ((int)input
[1]) << 16;
541 YUV_TO_RGB(y
, u
, v
, r
, g
, b
);
542 r
= r
* input
[3] / 0xff;
543 g
= g
* input
[3] / 0xff;
544 b
= b
* input
[3] / 0xff;
545 *(uint16_t*)(*output
) = ((b
& 0xf8) << 8)
551 static inline void transfer_UYVA8888_to_RGB565(unsigned char *(*output
), unsigned char *input
)
556 y
= ((int)input
[1]) << 16;
559 YUV_TO_RGB(y
, u
, v
, r
, g
, b
);
560 r
= r
* input
[3] / 0xff;
561 g
= g
* input
[3] / 0xff;
562 b
= b
* input
[3] / 0xff;
563 *(uint16_t*)(*output
) = ((r
& 0xf8) << 8)
569 static inline void transfer_UYVA8888_to_BGR888(unsigned char *(*output
), unsigned char *input
)
574 y
= ((int)input
[1]) << 16;
577 YUV_TO_RGB(y
, u
, v
, r
, g
, b
);
578 r
= r
* input
[3] / 0xff;
579 g
= g
* input
[3] / 0xff;
580 b
= b
* input
[3] / 0xff;
588 static inline void transfer_UYVA8888_to_BGR8888(unsigned char *(*output
), unsigned char *input
)
593 y
= ((int)input
[1]) << 16;
596 YUV_TO_RGB(y
, u
, v
, r
, g
, b
);
597 r
= r
* input
[3] / 0xff;
598 g
= g
* input
[3] / 0xff;
599 b
= b
* input
[3] / 0xff;
608 static inline void transfer_UYVA8888_to_RGB888(unsigned char *(*output
), unsigned char *input
)
613 y
= ((int)input
[1]) << 16;
616 YUV_TO_RGB(y
, u
, v
, r
, g
, b
);
617 r
= r
* input
[3] / 0xff;
618 g
= g
* input
[3] / 0xff;
619 b
= b
* input
[3] / 0xff;
627 static inline void transfer_UYVA8888_to_RGBA8888(unsigned char *(*output
), unsigned char *input
)
632 y
= ((int)input
[1]) << 16;
635 YUV_TO_RGB(y
, u
, v
, r
, g
, b
);
640 (*output
)[3] = input
[3];
645 static inline void transfer_UYVA8888_to_RGB161616(uint16_t *(*output
), unsigned char *input
)
650 y
= ((int)input
[1]) << 16;
651 u
= (input
[0] << 8) | input
[0];
652 v
= (input
[2] << 8) | input
[2];
653 YUV_TO_RGB16(y
, u
, v
, r
, g
, b
);
654 r
= r
* input
[3] / 0xff;
655 g
= g
* input
[3] / 0xff;
656 b
= b
* input
[3] / 0xff;
664 static inline void transfer_UYVA8888_to_RGBA16161616(uint16_t *(*output
), unsigned char *input
)
669 y
= ((int)input
[1]) << 16;
670 u
= (input
[0] << 8) | input
[0];
671 v
= (input
[2] << 8) | input
[2];
672 YUV_TO_RGB16(y
, u
, v
, r
, g
, b
);
677 (*output
)[3] = input
[3] << 8;
681 static inline void transfer_UYVA8888_to_RGB_FLOAT(float *(*output
), unsigned char *input
)
688 y
= (float)*input
++ / 0xff;
690 a
= (float)*input
/ 0xff;
691 YUV_TO_FLOAT(y
, u
, v
, r
, g
, b
);
702 static inline void transfer_UYVA8888_to_RGBA_FLOAT(float *(*output
), unsigned char *input
)
709 y
= (float)*input
++ / 0xff;
711 a
= (float)*input
/ 0xff;
712 YUV_TO_FLOAT(y
, u
, v
, r
, g
, b
);
721 static inline void transfer_UYVA8888_to_YUV888(unsigned char *(*output
), unsigned char *input
)
727 (*output
)[0] = (a
* input
[1]) / 0xff;
728 (*output
)[1] = (a
* input
[0] + anti_a
* 0x80) / 0xff;
729 (*output
)[2] = (a
* input
[2] + anti_a
* 0x80) / 0xff;
733 static inline void transfer_UYVA8888_to_YUVA8888(unsigned char *(*output
), unsigned char *input
)
735 (*output
)[0] = input
[1];
736 (*output
)[1] = input
[0];
737 (*output
)[2] = input
[2];
738 (*output
)[3] = input
[3];
743 static inline void transfer_UYVA8888_to_YUV161616(uint16_t *(*output
), unsigned char *input
)
749 (*output
)[0] = a
* input
[1];
750 (*output
)[1] = a
* input
[0] + anti_a
* 0x80;
751 (*output
)[2] = a
* input
[2] + anti_a
* 0x80;
755 static inline void transfer_UYVA8888_to_YUVA16161616(uint16_t *(*output
), unsigned char *input
)
757 (*output
)[0] = input
[1] << 8;
758 (*output
)[1] = input
[0] << 8;
759 (*output
)[2] = input
[2] << 8;
760 (*output
)[3] = input
[3] << 8;
773 #define TRANSFER_FRAME_DEFAULT(output, \
782 switch(in_colormodel) \
785 switch(out_colormodel) \
788 TRANSFER_FRAME_HEAD \
789 transfer_YUV888_to_RGB8((output), (input)); \
790 TRANSFER_FRAME_TAIL \
793 TRANSFER_FRAME_HEAD \
794 transfer_YUV888_to_BGR565((output), (input)); \
795 TRANSFER_FRAME_TAIL \
798 TRANSFER_FRAME_HEAD \
799 transfer_YUV888_to_RGB565((output), (input)); \
800 TRANSFER_FRAME_TAIL \
803 TRANSFER_FRAME_HEAD \
804 transfer_YUV888_to_BGR888((output), (input)); \
805 TRANSFER_FRAME_TAIL \
808 TRANSFER_FRAME_HEAD \
809 transfer_YUV888_to_BGR8888((output), (input)); \
810 TRANSFER_FRAME_TAIL \
813 TRANSFER_FRAME_HEAD \
814 transfer_YUV888_to_RGB888((output), (input)); \
815 TRANSFER_FRAME_TAIL \
818 TRANSFER_FRAME_HEAD \
819 transfer_YUV888_to_RGBA8888((output), (input)); \
820 TRANSFER_FRAME_TAIL \
823 TRANSFER_FRAME_HEAD \
824 transfer_YUV888_to_ARGB8888((output), (input)); \
825 TRANSFER_FRAME_TAIL \
828 TRANSFER_FRAME_HEAD \
829 transfer_YUV888_to_RGB_FLOAT((float**)(output), (input)); \
830 TRANSFER_FRAME_TAIL \
832 case BC_RGBA_FLOAT: \
833 TRANSFER_FRAME_HEAD \
834 transfer_YUV888_to_RGBA_FLOAT((float**)(output), (input)); \
835 TRANSFER_FRAME_TAIL \
838 TRANSFER_FRAME_HEAD \
839 transfer_YUV888_to_YUV101010((output), (input)); \
840 TRANSFER_FRAME_TAIL \
843 TRANSFER_YUV420P_OUT_HEAD \
844 transfer_YUV888_to_YUV420P_YUV422P(output_y, \
849 TRANSFER_FRAME_TAIL \
852 TRANSFER_YUV422P_OUT_HEAD \
853 transfer_YUV888_to_YUV420P_YUV422P(output_y, \
858 TRANSFER_FRAME_TAIL \
861 TRANSFER_YUV444P_OUT_HEAD \
862 transfer_YUV888_to_YUV444P(output_y, \
867 TRANSFER_FRAME_TAIL \
870 TRANSFER_FRAME_HEAD \
871 transfer_YUV888_to_YUV422((output), \
874 TRANSFER_FRAME_TAIL \
877 TRANSFER_FRAME_HEAD \
878 transfer_YUV888_to_YUV888((output), (input)); \
879 TRANSFER_FRAME_TAIL \
882 TRANSFER_FRAME_HEAD \
883 transfer_YUV888_to_YUVA8888((output), (input)); \
884 TRANSFER_FRAME_TAIL \
887 TRANSFER_FRAME_HEAD \
888 transfer_YUV888_to_VYU888((output), (input)); \
889 TRANSFER_FRAME_TAIL \
892 TRANSFER_FRAME_HEAD \
893 transfer_YUV888_to_UYVA8888((output), (input)); \
894 TRANSFER_FRAME_TAIL \
900 switch(out_colormodel) \
903 TRANSFER_FRAME_HEAD \
904 transfer_YUVA8888_to_RGB8((output), (input)); \
905 TRANSFER_FRAME_TAIL \
908 TRANSFER_FRAME_HEAD \
909 transfer_YUVA8888_to_BGR565((output), (input)); \
910 TRANSFER_FRAME_TAIL \
913 TRANSFER_FRAME_HEAD \
914 transfer_YUVA8888_to_RGB565((output), (input)); \
915 TRANSFER_FRAME_TAIL \
918 TRANSFER_FRAME_HEAD \
919 transfer_YUVA8888_to_BGR888((output), (input)); \
920 TRANSFER_FRAME_TAIL \
923 TRANSFER_FRAME_HEAD \
924 transfer_YUVA8888_to_BGR8888((output), (input)); \
925 TRANSFER_FRAME_TAIL \
928 TRANSFER_FRAME_HEAD \
929 transfer_YUVA8888_to_RGB888((output), (input)); \
930 TRANSFER_FRAME_TAIL \
933 TRANSFER_FRAME_HEAD \
934 transfer_YUVA8888_to_RGBA8888((output), (input)); \
935 TRANSFER_FRAME_TAIL \
938 TRANSFER_FRAME_HEAD \
939 transfer_YUVA8888_to_ARGB8888((output), (input)); \
940 TRANSFER_FRAME_TAIL \
943 TRANSFER_FRAME_HEAD \
944 transfer_YUVA8888_to_RGB_FLOAT((float**)(output), (input)); \
945 TRANSFER_FRAME_TAIL \
947 case BC_RGBA_FLOAT: \
948 TRANSFER_FRAME_HEAD \
949 transfer_YUVA8888_to_RGBA_FLOAT((float**)(output), (input)); \
950 TRANSFER_FRAME_TAIL \
953 TRANSFER_FRAME_HEAD \
954 transfer_YUVA8888_to_VYU888((output), (input)); \
955 TRANSFER_FRAME_TAIL \
958 TRANSFER_FRAME_HEAD \
959 transfer_YUVA8888_to_YUVA8888((output), (input)); \
960 TRANSFER_FRAME_TAIL \
963 TRANSFER_FRAME_HEAD \
964 transfer_YUVA8888_to_UYVA8888((output), (input)); \
965 TRANSFER_FRAME_TAIL \
968 TRANSFER_FRAME_HEAD \
969 transfer_YUVA8888_to_YUV101010((output), (input)); \
970 TRANSFER_FRAME_TAIL \
973 TRANSFER_YUV420P_OUT_HEAD \
974 transfer_YUVA8888_to_YUV420P_YUV422P(output_y, \
979 TRANSFER_FRAME_TAIL \
982 TRANSFER_YUV422P_OUT_HEAD \
983 transfer_YUVA8888_to_YUV420P_YUV422P(output_y, \
988 TRANSFER_FRAME_TAIL \
991 TRANSFER_YUV444P_OUT_HEAD \
992 transfer_YUVA8888_to_YUV444P(output_y, \
997 TRANSFER_FRAME_TAIL \
1000 TRANSFER_FRAME_HEAD \
1001 transfer_YUVA8888_to_YUV422((output), \
1004 TRANSFER_FRAME_TAIL \
1009 case BC_YUV161616: \
1010 switch(out_colormodel) \
1013 TRANSFER_FRAME_HEAD \
1014 transfer_YUV161616_to_RGB8((output), (uint16_t*)(input)); \
1015 TRANSFER_FRAME_TAIL \
1018 TRANSFER_FRAME_HEAD \
1019 transfer_YUV161616_to_BGR565((output), (uint16_t*)(input)); \
1020 TRANSFER_FRAME_TAIL \
1023 TRANSFER_FRAME_HEAD \
1024 transfer_YUV161616_to_RGB565((output), (uint16_t*)(input)); \
1025 TRANSFER_FRAME_TAIL \
1028 TRANSFER_FRAME_HEAD \
1029 transfer_YUV161616_to_BGR888((output), (uint16_t*)(input)); \
1030 TRANSFER_FRAME_TAIL \
1033 TRANSFER_FRAME_HEAD \
1034 transfer_YUV161616_to_BGR8888((output), (uint16_t*)(input)); \
1035 TRANSFER_FRAME_TAIL \
1038 TRANSFER_FRAME_HEAD \
1039 transfer_YUV161616_to_RGB888((output), (uint16_t*)(input)); \
1040 TRANSFER_FRAME_TAIL \
1043 TRANSFER_FRAME_HEAD \
1044 transfer_YUV161616_to_RGBA8888((output), (uint16_t*)(input)); \
1045 TRANSFER_FRAME_TAIL \
1048 TRANSFER_FRAME_HEAD \
1049 transfer_YUV161616_to_ARGB8888((output), (uint16_t*)(input)); \
1050 TRANSFER_FRAME_TAIL \
1052 case BC_RGB_FLOAT: \
1053 TRANSFER_FRAME_HEAD \
1054 transfer_YUV161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1055 TRANSFER_FRAME_TAIL \
1057 case BC_RGBA_FLOAT: \
1058 TRANSFER_FRAME_HEAD \
1059 transfer_YUV161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1060 TRANSFER_FRAME_TAIL \
1063 TRANSFER_YUV420P_OUT_HEAD \
1064 transfer_YUV161616_to_YUV420P_YUV422P(output_y, \
1067 (uint16_t*)(input), \
1069 TRANSFER_FRAME_TAIL \
1072 TRANSFER_YUV422P_OUT_HEAD \
1073 transfer_YUV161616_to_YUV420P_YUV422P(output_y, \
1076 (uint16_t*)(input), \
1078 TRANSFER_FRAME_TAIL \
1081 TRANSFER_YUV444P_OUT_HEAD \
1082 transfer_YUV161616_to_YUV444P(output_y, \
1085 (uint16_t*)(input), \
1087 TRANSFER_FRAME_TAIL \
1090 TRANSFER_FRAME_HEAD \
1091 transfer_YUV161616_to_YUV422((output), \
1092 (uint16_t*)(input), \
1094 TRANSFER_FRAME_TAIL \
1096 case BC_YUV101010: \
1097 TRANSFER_FRAME_HEAD \
1098 transfer_YUV161616_to_YUV101010((output), (uint16_t*)(input)); \
1099 TRANSFER_FRAME_TAIL \
1102 TRANSFER_FRAME_HEAD \
1103 transfer_YUV161616_to_YUVA8888((output), \
1104 (uint16_t*)(input)); \
1105 TRANSFER_FRAME_TAIL \
1108 TRANSFER_FRAME_HEAD \
1109 transfer_YUV161616_to_VYU888((output), (uint16_t*)(input)); \
1110 TRANSFER_FRAME_TAIL \
1113 TRANSFER_FRAME_HEAD \
1114 transfer_YUV161616_to_UYVA8888((output), (uint16_t*)(input)); \
1115 TRANSFER_FRAME_TAIL \
1117 case BC_YUV161616: \
1118 TRANSFER_FRAME_HEAD \
1119 transfer_YUV161616_to_YUV161616((uint16_t**)(output), \
1120 (uint16_t*)(input)); \
1121 TRANSFER_FRAME_TAIL \
1126 case BC_YUVA16161616: \
1127 switch(out_colormodel) \
1130 TRANSFER_FRAME_HEAD \
1131 transfer_YUVA16161616_to_RGB8((output), (uint16_t*)(input)); \
1132 TRANSFER_FRAME_TAIL \
1135 TRANSFER_FRAME_HEAD \
1136 transfer_YUVA16161616_to_BGR565((output), (uint16_t*)(input)); \
1137 TRANSFER_FRAME_TAIL \
1140 TRANSFER_FRAME_HEAD \
1141 transfer_YUVA16161616_to_RGB565((output), (uint16_t*)(input)); \
1142 TRANSFER_FRAME_TAIL \
1145 TRANSFER_FRAME_HEAD \
1146 transfer_YUVA16161616_to_BGR888((output), (uint16_t*)(input)); \
1147 TRANSFER_FRAME_TAIL \
1150 TRANSFER_FRAME_HEAD \
1151 transfer_YUVA16161616_to_BGR8888((output), (uint16_t*)(input)); \
1152 TRANSFER_FRAME_TAIL \
1155 TRANSFER_FRAME_HEAD \
1156 transfer_YUVA16161616_to_RGB888((output), (uint16_t*)(input)); \
1157 TRANSFER_FRAME_TAIL \
1160 TRANSFER_FRAME_HEAD \
1161 transfer_YUVA16161616_to_RGBA8888((output), (uint16_t*)(input)); \
1162 TRANSFER_FRAME_TAIL \
1165 TRANSFER_FRAME_HEAD \
1166 transfer_YUVA16161616_to_ARGB8888((output), (uint16_t*)(input)); \
1167 TRANSFER_FRAME_TAIL \
1169 case BC_RGB_FLOAT: \
1170 TRANSFER_FRAME_HEAD \
1171 transfer_YUVA16161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1172 TRANSFER_FRAME_TAIL \
1174 case BC_RGBA_FLOAT: \
1175 TRANSFER_FRAME_HEAD \
1176 transfer_YUVA16161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1177 TRANSFER_FRAME_TAIL \
1179 case BC_YUV101010: \
1180 TRANSFER_FRAME_HEAD \
1181 transfer_YUVA16161616_to_YUV101010((output), (uint16_t*)(input)); \
1182 TRANSFER_FRAME_TAIL \
1185 TRANSFER_FRAME_HEAD \
1186 transfer_YUVA16161616_to_VYU888((output), (uint16_t*)(input)); \
1187 TRANSFER_FRAME_TAIL \
1190 TRANSFER_FRAME_HEAD \
1191 transfer_YUVA16161616_to_UYVA8888((output), (uint16_t*)(input)); \
1192 TRANSFER_FRAME_TAIL \
1194 case BC_YUVA16161616: \
1195 TRANSFER_FRAME_HEAD \
1196 transfer_YUVA16161616_to_YUVA16161616((uint16_t**)(output), (uint16_t*)(input)); \
1197 TRANSFER_FRAME_TAIL \
1200 TRANSFER_YUV420P_OUT_HEAD \
1201 transfer_YUVA16161616_to_YUV420P_YUV422P(output_y, \
1204 (uint16_t*)(input), \
1206 TRANSFER_FRAME_TAIL \
1209 TRANSFER_YUV422P_OUT_HEAD \
1210 transfer_YUVA16161616_to_YUV420P_YUV422P(output_y, \
1213 (uint16_t*)(input), \
1215 TRANSFER_FRAME_TAIL \
1218 TRANSFER_YUV444P_OUT_HEAD \
1219 transfer_YUVA16161616_to_YUV444P(output_y, \
1222 (uint16_t*)(input), \
1224 TRANSFER_FRAME_TAIL \
1227 TRANSFER_FRAME_HEAD \
1228 transfer_YUVA16161616_to_YUV422((output), \
1229 (uint16_t*)(input), \
1231 TRANSFER_FRAME_TAIL \
1236 case BC_YUV101010: \
1237 switch(out_colormodel) \
1240 TRANSFER_FRAME_HEAD \
1241 transfer_YUV101010_to_RGB8((output), (input)); \
1242 TRANSFER_FRAME_TAIL \
1245 TRANSFER_FRAME_HEAD \
1246 transfer_YUV101010_to_BGR565((output), (input)); \
1247 TRANSFER_FRAME_TAIL \
1250 TRANSFER_FRAME_HEAD \
1251 transfer_YUV101010_to_RGB565((output), (input)); \
1252 TRANSFER_FRAME_TAIL \
1255 TRANSFER_FRAME_HEAD \
1256 transfer_YUV101010_to_BGR888((output), (input)); \
1257 TRANSFER_FRAME_TAIL \
1260 TRANSFER_FRAME_HEAD \
1261 transfer_YUV101010_to_BGR8888((output), (input)); \
1262 TRANSFER_FRAME_TAIL \
1265 TRANSFER_FRAME_HEAD \
1266 transfer_YUV101010_to_RGB888((output), (input)); \
1267 TRANSFER_FRAME_TAIL \
1270 TRANSFER_FRAME_HEAD \
1271 transfer_YUV101010_to_RGBA8888((output), (input)); \
1272 TRANSFER_FRAME_TAIL \
1275 TRANSFER_FRAME_HEAD \
1276 transfer_YUV101010_to_YUV888((output), (input)); \
1277 TRANSFER_FRAME_TAIL \
1280 TRANSFER_FRAME_HEAD \
1281 transfer_YUV101010_to_YUVA8888((output), (input)); \
1282 TRANSFER_FRAME_TAIL \
1284 case BC_RGB161616: \
1285 TRANSFER_FRAME_HEAD \
1286 transfer_YUV101010_to_RGB161616((uint16_t**)(output), (input)); \
1287 TRANSFER_FRAME_TAIL \
1289 case BC_RGBA16161616: \
1290 TRANSFER_FRAME_HEAD \
1291 transfer_YUV101010_to_RGBA16161616((uint16_t**)(output), (input)); \
1292 TRANSFER_FRAME_TAIL \
1294 case BC_RGB_FLOAT: \
1295 TRANSFER_FRAME_HEAD \
1296 transfer_YUV101010_to_RGB_FLOAT((float**)(output), (input)); \
1297 TRANSFER_FRAME_TAIL \
1299 case BC_RGBA_FLOAT: \
1300 TRANSFER_FRAME_HEAD \
1301 transfer_YUV101010_to_RGBA_FLOAT((float**)(output), (input)); \
1302 TRANSFER_FRAME_TAIL \
1304 case BC_YUV161616: \
1305 TRANSFER_FRAME_HEAD \
1306 transfer_YUV101010_to_YUV161616((uint16_t**)(output), (input)); \
1307 TRANSFER_FRAME_TAIL \
1309 case BC_YUVA16161616: \
1310 TRANSFER_FRAME_HEAD \
1311 transfer_YUV101010_to_YUVA16161616((uint16_t**)(output), (input)); \
1312 TRANSFER_FRAME_TAIL \
1318 switch(out_colormodel) \
1321 TRANSFER_FRAME_HEAD \
1322 transfer_VYU888_to_RGB8((output), (input)); \
1323 TRANSFER_FRAME_TAIL \
1326 TRANSFER_FRAME_HEAD \
1327 transfer_VYU888_to_BGR565((output), (input)); \
1328 TRANSFER_FRAME_TAIL \
1331 TRANSFER_FRAME_HEAD \
1332 transfer_VYU888_to_RGB565((output), (input)); \
1333 TRANSFER_FRAME_TAIL \
1336 TRANSFER_FRAME_HEAD \
1337 transfer_VYU888_to_BGR888((output), (input)); \
1338 TRANSFER_FRAME_TAIL \
1341 TRANSFER_FRAME_HEAD \
1342 transfer_VYU888_to_BGR8888((output), (input)); \
1343 TRANSFER_FRAME_TAIL \
1346 TRANSFER_FRAME_HEAD \
1347 transfer_VYU888_to_RGB888((output), (input)); \
1348 TRANSFER_FRAME_TAIL \
1351 TRANSFER_FRAME_HEAD \
1352 transfer_VYU888_to_RGBA8888((output), (input)); \
1353 TRANSFER_FRAME_TAIL \
1356 TRANSFER_FRAME_HEAD \
1357 transfer_VYU888_to_YUV888((output), (input)); \
1358 TRANSFER_FRAME_TAIL \
1361 TRANSFER_FRAME_HEAD \
1362 transfer_VYU888_to_YUVA8888((output), (input)); \
1363 TRANSFER_FRAME_TAIL \
1365 case BC_RGB161616: \
1366 TRANSFER_FRAME_HEAD \
1367 transfer_VYU888_to_RGB161616((uint16_t**)(output), (input)); \
1368 TRANSFER_FRAME_TAIL \
1370 case BC_RGBA16161616: \
1371 TRANSFER_FRAME_HEAD \
1372 transfer_VYU888_to_RGBA16161616((uint16_t**)(output), (input)); \
1373 TRANSFER_FRAME_TAIL \
1375 case BC_RGB_FLOAT: \
1376 TRANSFER_FRAME_HEAD \
1377 transfer_VYU888_to_RGB_FLOAT((float**)(output), (input)); \
1378 TRANSFER_FRAME_TAIL \
1380 case BC_RGBA_FLOAT: \
1381 TRANSFER_FRAME_HEAD \
1382 transfer_VYU888_to_RGBA_FLOAT((float**)(output), (input)); \
1383 TRANSFER_FRAME_TAIL \
1385 case BC_YUV161616: \
1386 TRANSFER_FRAME_HEAD \
1387 transfer_VYU888_to_YUV161616((uint16_t**)(output), (input)); \
1388 TRANSFER_FRAME_TAIL \
1390 case BC_YUVA16161616: \
1391 TRANSFER_FRAME_HEAD \
1392 transfer_VYU888_to_YUVA16161616((uint16_t**)(output), (input)); \
1393 TRANSFER_FRAME_TAIL \
1399 switch(out_colormodel) \
1402 TRANSFER_FRAME_HEAD \
1403 transfer_UYVA8888_to_RGB8((output), (input)); \
1404 TRANSFER_FRAME_TAIL \
1407 TRANSFER_FRAME_HEAD \
1408 transfer_UYVA8888_to_BGR565((output), (input)); \
1409 TRANSFER_FRAME_TAIL \
1412 TRANSFER_FRAME_HEAD \
1413 transfer_UYVA8888_to_RGB565((output), (input)); \
1414 TRANSFER_FRAME_TAIL \
1417 TRANSFER_FRAME_HEAD \
1418 transfer_UYVA8888_to_BGR888((output), (input)); \
1419 TRANSFER_FRAME_TAIL \
1422 TRANSFER_FRAME_HEAD \
1423 transfer_UYVA8888_to_BGR8888((output), (input)); \
1424 TRANSFER_FRAME_TAIL \
1427 TRANSFER_FRAME_HEAD \
1428 transfer_UYVA8888_to_RGB888((output), (input)); \
1429 TRANSFER_FRAME_TAIL \
1432 TRANSFER_FRAME_HEAD \
1433 transfer_UYVA8888_to_RGBA8888((output), (input)); \
1434 TRANSFER_FRAME_TAIL \
1437 TRANSFER_FRAME_HEAD \
1438 transfer_UYVA8888_to_YUV888((output), (input)); \
1439 TRANSFER_FRAME_TAIL \
1442 TRANSFER_FRAME_HEAD \
1443 transfer_UYVA8888_to_YUVA8888((output), (input)); \
1444 TRANSFER_FRAME_TAIL \
1446 case BC_RGB161616: \
1447 TRANSFER_FRAME_HEAD \
1448 transfer_UYVA8888_to_RGB161616((uint16_t**)(output), (input)); \
1449 TRANSFER_FRAME_TAIL \
1451 case BC_RGBA16161616: \
1452 TRANSFER_FRAME_HEAD \
1453 transfer_UYVA8888_to_RGBA16161616((uint16_t**)(output), (input)); \
1454 TRANSFER_FRAME_TAIL \
1456 case BC_RGB_FLOAT: \
1457 TRANSFER_FRAME_HEAD \
1458 transfer_UYVA8888_to_RGB_FLOAT((float**)(output), (input)); \
1459 TRANSFER_FRAME_TAIL \
1461 case BC_RGBA_FLOAT: \
1462 TRANSFER_FRAME_HEAD \
1463 transfer_UYVA8888_to_RGBA_FLOAT((float**)(output), (input)); \
1464 TRANSFER_FRAME_TAIL \
1466 case BC_YUV161616: \
1467 TRANSFER_FRAME_HEAD \
1468 transfer_UYVA8888_to_YUV161616((uint16_t**)(output), (input)); \
1469 TRANSFER_FRAME_TAIL \
1471 case BC_YUVA16161616: \
1472 TRANSFER_FRAME_HEAD \
1473 transfer_UYVA8888_to_YUVA16161616((uint16_t**)(output), (input)); \
1474 TRANSFER_FRAME_TAIL \
1481 switch(out_colormodel) \
1485 TRANSFER_FRAME_HEAD \
1486 transfer_ARGB8888_to_ARGB8888((output), (input)); \
1487 TRANSFER_FRAME_TAIL \
1490 TRANSFER_FRAME_HEAD \
1491 transfer_ARGB8888_to_RGBA8888((output), (input)); \
1492 TRANSFER_FRAME_TAIL \
1495 TRANSFER_FRAME_HEAD \
1496 transfer_ARGB8888_to_RGB888((output), (input)); \
1497 TRANSFER_FRAME_TAIL \
1500 TRANSFER_FRAME_HEAD \
1501 transfer_ARGB8888_to_BGR8888((output), (input)); \
1502 TRANSFER_FRAME_TAIL \
1508 switch(out_colormodel) \
1511 TRANSFER_FRAME_HEAD \
1512 transfer_RGB888_to_RGB8((output), (input)); \
1513 TRANSFER_FRAME_TAIL \
1516 TRANSFER_FRAME_HEAD \
1517 transfer_RGB888_to_BGR565((output), (input)); \
1518 TRANSFER_FRAME_TAIL \
1521 TRANSFER_FRAME_HEAD \
1522 transfer_RGB888_to_RGB565((output), (input)); \
1523 TRANSFER_FRAME_TAIL \
1526 TRANSFER_FRAME_HEAD \
1527 transfer_RGB888_to_BGR888((output), (input)); \
1528 TRANSFER_FRAME_TAIL \
1531 TRANSFER_FRAME_HEAD \
1532 transfer_RGB888_to_RGB888((output), (input)); \
1533 TRANSFER_FRAME_TAIL \
1536 TRANSFER_FRAME_HEAD \
1537 transfer_RGB888_to_RGBA8888((output), (input)); \
1538 TRANSFER_FRAME_TAIL \
1541 TRANSFER_FRAME_HEAD \
1542 transfer_RGB888_to_ARGB8888((output), (input)); \
1543 TRANSFER_FRAME_TAIL \
1545 case BC_RGB161616: \
1546 TRANSFER_FRAME_HEAD \
1547 transfer_RGB888_to_RGB161616((uint16_t**)(output), (input)); \
1548 TRANSFER_FRAME_TAIL \
1550 case BC_RGBA16161616: \
1551 TRANSFER_FRAME_HEAD \
1552 transfer_RGB888_to_RGBA16161616((uint16_t**)(output), (input)); \
1553 TRANSFER_FRAME_TAIL \
1555 case BC_RGB_FLOAT: \
1556 TRANSFER_FRAME_HEAD \
1557 transfer_RGB888_to_RGB_FLOAT((float**)(output), (input)); \
1558 TRANSFER_FRAME_TAIL \
1560 case BC_RGBA_FLOAT: \
1561 TRANSFER_FRAME_HEAD \
1562 transfer_RGB888_to_RGBA_FLOAT((float**)(output), (input)); \
1563 TRANSFER_FRAME_TAIL \
1566 TRANSFER_FRAME_HEAD \
1567 transfer_RGB888_to_ABGR8888((output), (input)); \
1568 TRANSFER_FRAME_TAIL \
1571 TRANSFER_FRAME_HEAD \
1572 transfer_RGB888_to_BGR8888((output), (input)); \
1573 TRANSFER_FRAME_TAIL \
1576 TRANSFER_FRAME_HEAD \
1577 transfer_RGB888_to_YUV888((output), (input)); \
1578 TRANSFER_FRAME_TAIL \
1581 TRANSFER_FRAME_HEAD \
1582 transfer_RGB888_to_YUVA8888((output), (input)); \
1583 TRANSFER_FRAME_TAIL \
1585 case BC_YUV161616: \
1586 TRANSFER_FRAME_HEAD \
1587 transfer_RGB888_to_YUV161616((uint16_t**)(output), (input)); \
1588 TRANSFER_FRAME_TAIL \
1590 case BC_YUVA16161616: \
1591 TRANSFER_FRAME_HEAD \
1592 transfer_RGB888_to_YUVA16161616((uint16_t**)(output), (input)); \
1593 TRANSFER_FRAME_TAIL \
1595 case BC_YUV101010: \
1596 TRANSFER_FRAME_HEAD \
1597 transfer_RGB888_to_YUV101010((output), (input)); \
1598 TRANSFER_FRAME_TAIL \
1601 TRANSFER_YUV420P_OUT_HEAD \
1602 transfer_RGB888_to_YUV420P_YUV422P(output_y, \
1607 TRANSFER_FRAME_TAIL \
1610 TRANSFER_FRAME_HEAD \
1611 transfer_RGB888_to_YUV422((output), (input), j); \
1612 TRANSFER_FRAME_TAIL \
1615 TRANSFER_YUV422P_OUT_HEAD \
1616 transfer_RGB888_to_YUV420P_YUV422P(output_y, \
1621 TRANSFER_FRAME_TAIL \
1624 TRANSFER_YUV444P_OUT_HEAD \
1625 transfer_RGB888_to_YUV444P(output_y, \
1630 TRANSFER_FRAME_TAIL \
1636 switch(out_colormodel) \
1638 case BC_TRANSPARENCY: \
1639 TRANSFER_FRAME_HEAD \
1640 transfer_RGBA8888_to_TRANSPARENCY((output), (input), &bit_counter); \
1641 TRANSFER_FRAME_TAIL \
1645 TRANSFER_FRAME_HEAD \
1646 transfer_RGBA8888_to_RGB8bg((output), (input), bg_r, bg_g, bg_b); \
1647 TRANSFER_FRAME_TAIL \
1649 TRANSFER_FRAME_HEAD \
1650 transfer_RGBA8888_to_RGB8((output), (input)); \
1651 TRANSFER_FRAME_TAIL \
1655 TRANSFER_FRAME_HEAD \
1656 transfer_RGBA8888_to_BGR565bg((output), (input), bg_r, bg_g, bg_b); \
1657 TRANSFER_FRAME_TAIL \
1659 TRANSFER_FRAME_HEAD \
1660 transfer_RGBA8888_to_BGR565((output), (input)); \
1661 TRANSFER_FRAME_TAIL \
1665 TRANSFER_FRAME_HEAD \
1666 transfer_RGBA8888_to_RGB565bg((output), (input), bg_r, bg_g, bg_b); \
1667 TRANSFER_FRAME_TAIL \
1669 TRANSFER_FRAME_HEAD \
1670 transfer_RGBA8888_to_RGB565((output), (input)); \
1671 TRANSFER_FRAME_TAIL \
1675 TRANSFER_FRAME_HEAD \
1676 transfer_RGBA8888_to_BGR888bg((output), (input), bg_r, bg_g, bg_b); \
1677 TRANSFER_FRAME_TAIL \
1679 TRANSFER_FRAME_HEAD \
1680 transfer_RGBA8888_to_BGR888((output), (input)); \
1681 TRANSFER_FRAME_TAIL \
1685 TRANSFER_FRAME_HEAD \
1686 transfer_RGBA8888_to_RGB888bg((output), (input), bg_r, bg_g, bg_b); \
1687 TRANSFER_FRAME_TAIL \
1689 TRANSFER_FRAME_HEAD \
1690 transfer_RGBA8888_to_RGB888((output), (input)); \
1691 TRANSFER_FRAME_TAIL \
1694 TRANSFER_FRAME_HEAD \
1695 transfer_RGBA8888_to_RGBA8888((output), (input)); \
1696 TRANSFER_FRAME_TAIL \
1699 TRANSFER_FRAME_HEAD \
1700 transfer_RGBA8888_to_ARGB8888((output), (input)); \
1701 TRANSFER_FRAME_TAIL \
1703 case BC_RGB161616: \
1704 TRANSFER_FRAME_HEAD \
1705 transfer_RGBA8888_to_RGB161616((uint16_t**)(output), (input)); \
1706 TRANSFER_FRAME_TAIL \
1708 case BC_RGBA16161616: \
1709 TRANSFER_FRAME_HEAD \
1710 transfer_RGBA8888_to_RGBA16161616((uint16_t**)(output), (input)); \
1711 TRANSFER_FRAME_TAIL \
1713 case BC_RGB_FLOAT: \
1714 TRANSFER_FRAME_HEAD \
1715 transfer_RGBA8888_to_RGB_FLOAT((float**)(output), (input)); \
1716 TRANSFER_FRAME_TAIL \
1718 case BC_RGBA_FLOAT: \
1719 TRANSFER_FRAME_HEAD \
1720 transfer_RGBA8888_to_RGBA_FLOAT((float**)(output), (input)); \
1721 TRANSFER_FRAME_TAIL \
1725 TRANSFER_FRAME_HEAD \
1726 transfer_RGBA8888_to_BGR8888bg((output), (input), bg_r, bg_g, bg_b); \
1727 TRANSFER_FRAME_TAIL \
1729 TRANSFER_FRAME_HEAD \
1730 transfer_RGBA8888_to_BGR8888((output), (input)); \
1731 TRANSFER_FRAME_TAIL \
1734 TRANSFER_FRAME_HEAD \
1735 transfer_RGBA8888_to_YUV888((output), (input)); \
1736 TRANSFER_FRAME_TAIL \
1739 TRANSFER_FRAME_HEAD \
1740 transfer_RGBA8888_to_YUVA8888((output), (input)); \
1741 TRANSFER_FRAME_TAIL \
1743 case BC_YUV161616: \
1744 TRANSFER_FRAME_HEAD \
1745 transfer_RGBA8888_to_YUV161616((uint16_t**)(output), (input)); \
1746 TRANSFER_FRAME_TAIL \
1748 case BC_YUVA16161616: \
1749 TRANSFER_FRAME_HEAD \
1750 transfer_RGBA8888_to_YUVA16161616((uint16_t**)(output), (input)); \
1751 TRANSFER_FRAME_TAIL \
1753 case BC_YUV101010: \
1754 TRANSFER_FRAME_HEAD \
1755 transfer_RGBA8888_to_YUV101010((output), (input)); \
1756 TRANSFER_FRAME_TAIL \
1759 TRANSFER_YUV420P_OUT_HEAD \
1760 transfer_RGBA888_to_YUV420P_YUV422P(output_y, \
1765 TRANSFER_FRAME_TAIL \
1768 TRANSFER_FRAME_HEAD \
1769 transfer_RGBA888_to_YUV422((output), (input), j); \
1770 TRANSFER_FRAME_TAIL \
1773 TRANSFER_YUV422P_OUT_HEAD \
1774 transfer_RGBA888_to_YUV420P_YUV422P(output_y, \
1779 TRANSFER_FRAME_TAIL \
1782 TRANSFER_YUV444P_OUT_HEAD \
1783 transfer_RGBA888_to_YUV444P(output_y, \
1788 TRANSFER_FRAME_TAIL \
1793 case BC_RGB161616: \
1794 switch(out_colormodel) \
1797 TRANSFER_FRAME_HEAD \
1798 transfer_RGB161616_to_RGB8((output), (uint16_t*)(input)); \
1799 TRANSFER_FRAME_TAIL \
1802 TRANSFER_FRAME_HEAD \
1803 transfer_RGB161616_to_BGR565((output), (uint16_t*)(input)); \
1804 TRANSFER_FRAME_TAIL \
1807 TRANSFER_FRAME_HEAD \
1808 transfer_RGB161616_to_RGB565((output), (uint16_t*)(input)); \
1809 TRANSFER_FRAME_TAIL \
1812 TRANSFER_FRAME_HEAD \
1813 transfer_RGB161616_to_BGR888((output), (uint16_t*)(input)); \
1814 TRANSFER_FRAME_TAIL \
1817 TRANSFER_FRAME_HEAD \
1818 transfer_RGB161616_to_BGR8888((output), (uint16_t*)(input)); \
1819 TRANSFER_FRAME_TAIL \
1822 TRANSFER_FRAME_HEAD \
1823 transfer_RGB161616_to_RGB888((output), (uint16_t*)(input)); \
1824 TRANSFER_FRAME_TAIL \
1827 TRANSFER_FRAME_HEAD \
1828 transfer_RGB161616_to_RGBA8888((output), (uint16_t*)(input)); \
1829 TRANSFER_FRAME_TAIL \
1831 case BC_RGB_FLOAT: \
1832 TRANSFER_FRAME_HEAD \
1833 transfer_RGB161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1834 TRANSFER_FRAME_TAIL \
1836 case BC_RGBA_FLOAT: \
1837 TRANSFER_FRAME_HEAD \
1838 transfer_RGB161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1839 TRANSFER_FRAME_TAIL \
1842 TRANSFER_FRAME_HEAD \
1843 transfer_RGB161616_to_YUV888((output), (uint16_t*)(input)); \
1844 TRANSFER_FRAME_TAIL \
1847 TRANSFER_FRAME_HEAD \
1848 transfer_RGB161616_to_YUVA8888((output), (uint16_t*)(input)); \
1849 TRANSFER_FRAME_TAIL \
1851 case BC_YUV161616: \
1852 TRANSFER_FRAME_HEAD \
1853 transfer_RGB161616_to_YUV161616((uint16_t**)(output), (uint16_t*)(input)); \
1854 TRANSFER_FRAME_TAIL \
1856 case BC_YUVA16161616: \
1857 TRANSFER_FRAME_HEAD \
1858 transfer_RGB161616_to_YUVA16161616((uint16_t**)(output), (uint16_t*)(input)); \
1859 TRANSFER_FRAME_TAIL \
1861 case BC_YUV101010: \
1862 TRANSFER_FRAME_HEAD \
1863 transfer_RGB161616_to_YUV101010((output), (uint16_t*)(input)); \
1864 TRANSFER_FRAME_TAIL \
1867 TRANSFER_YUV420P_OUT_HEAD \
1868 transfer_RGB161616_to_YUV420P_YUV422P(output_y, \
1871 (uint16_t*)(input), \
1873 TRANSFER_FRAME_TAIL \
1876 TRANSFER_YUV422P_OUT_HEAD \
1877 transfer_RGB161616_to_YUV420P_YUV422P(output_y, \
1880 (uint16_t*)(input), \
1882 TRANSFER_FRAME_TAIL \
1885 TRANSFER_YUV444P_OUT_HEAD \
1886 transfer_RGB161616_to_YUV444P(output_y, \
1889 (uint16_t*)(input), \
1891 TRANSFER_FRAME_TAIL \
1896 case BC_RGBA16161616: \
1897 switch(out_colormodel) \
1900 TRANSFER_FRAME_HEAD \
1901 transfer_RGBA16161616_to_RGB8((output), (uint16_t*)(input)); \
1902 TRANSFER_FRAME_TAIL \
1905 TRANSFER_FRAME_HEAD \
1906 transfer_RGBA16161616_to_BGR565((output), (uint16_t*)(input)); \
1907 TRANSFER_FRAME_TAIL \
1910 TRANSFER_FRAME_HEAD \
1911 transfer_RGBA16161616_to_RGB565((output), (uint16_t*)(input)); \
1912 TRANSFER_FRAME_TAIL \
1915 TRANSFER_FRAME_HEAD \
1916 transfer_RGBA16161616_to_BGR888((output), (uint16_t*)(input)); \
1917 TRANSFER_FRAME_TAIL \
1920 TRANSFER_FRAME_HEAD \
1921 transfer_RGBA16161616_to_BGR8888((output), (uint16_t*)(input)); \
1922 TRANSFER_FRAME_TAIL \
1925 TRANSFER_FRAME_HEAD \
1926 transfer_RGBA16161616_to_RGB888((output), (uint16_t*)(input)); \
1927 TRANSFER_FRAME_TAIL \
1930 TRANSFER_FRAME_HEAD \
1931 transfer_RGBA16161616_to_RGBA8888((output), (uint16_t*)(input)); \
1932 TRANSFER_FRAME_TAIL \
1934 case BC_RGB_FLOAT: \
1935 TRANSFER_FRAME_HEAD \
1936 transfer_RGBA16161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1937 TRANSFER_FRAME_TAIL \
1939 case BC_RGBA_FLOAT: \
1940 TRANSFER_FRAME_HEAD \
1941 transfer_RGBA16161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1942 TRANSFER_FRAME_TAIL \
1945 TRANSFER_FRAME_HEAD \
1946 transfer_RGBA16161616_to_YUV888((output), (uint16_t*)(input)); \
1947 TRANSFER_FRAME_TAIL \
1950 TRANSFER_FRAME_HEAD \
1951 transfer_RGBA16161616_to_YUVA8888((output), (uint16_t*)(input)); \
1952 TRANSFER_FRAME_TAIL \
1954 case BC_YUV161616: \
1955 TRANSFER_FRAME_HEAD \
1956 transfer_RGBA16161616_to_YUV161616(((uint16_t**)output), (uint16_t*)(input)); \
1957 TRANSFER_FRAME_TAIL \
1959 case BC_YUVA16161616: \
1960 TRANSFER_FRAME_HEAD \
1961 transfer_RGBA16161616_to_YUVA16161616((uint16_t**)(output), (uint16_t*)(input)); \
1962 TRANSFER_FRAME_TAIL \
1964 case BC_YUV101010: \
1965 TRANSFER_FRAME_HEAD \
1966 transfer_RGBA16161616_to_YUV101010((output), (uint16_t*)(input)); \
1967 TRANSFER_FRAME_TAIL \
1970 TRANSFER_YUV420P_OUT_HEAD \
1971 transfer_RGBA16161616_to_YUV420P_YUV422P(output_y, \
1974 (uint16_t*)(input), \
1976 TRANSFER_FRAME_TAIL \
1979 TRANSFER_YUV422P_OUT_HEAD \
1980 transfer_RGBA16161616_to_YUV420P_YUV422P(output_y, \
1983 (uint16_t*)(input), \
1985 TRANSFER_FRAME_TAIL \
1988 TRANSFER_YUV444P_OUT_HEAD \
1989 transfer_RGBA16161616_to_YUV444P(output_y, \
1992 (uint16_t*)(input), \
1994 TRANSFER_FRAME_TAIL \
2000 switch(out_colormodel) \
2003 TRANSFER_FRAME_HEAD \
2004 transfer_BGR8888_to_RGB888((output), (input)); \
2005 TRANSFER_FRAME_TAIL \
2008 TRANSFER_FRAME_HEAD \
2009 transfer_BGR8888_to_BGR8888((output), (input)); \
2010 TRANSFER_FRAME_TAIL \
2016 switch(out_colormodel) \
2019 TRANSFER_FRAME_HEAD \
2020 transfer_BGR888_to_RGB888((output), (input)); \
2021 TRANSFER_FRAME_TAIL \
2028 int64_t get_difference(struct timeval
*start_time
)
2030 struct timeval new_time
;
2032 gettimeofday(&new_time
, 0);
2034 new_time
.tv_usec
-= start_time
->tv_usec
;
2035 new_time
.tv_sec
-= start_time
->tv_sec
;
2036 if(new_time
.tv_usec
< 0)
2038 new_time
.tv_usec
+= 1000000;
2042 return (int64_t)new_time
.tv_sec
* 1000000 +
2043 (int64_t)new_time
.tv_usec
;
2050 void cmodel_default(PERMUTATION_ARGS
)
2055 switch (in_colormodel
) {
2057 switch (out_colormodel
) {
2060 // struct timeval start_time;
2061 // gettimeofday(&start_time, 0);
2063 short int *utog_tab
= yuv_table
->utog_tab8
;
2064 short int *vtog_tab
= yuv_table
->vtog_tab8
;
2065 short int *vtor_tab
= yuv_table
->vtor_tab8
;
2066 short int *utob_tab
= yuv_table
->utob_tab8
;
2069 for(i
= 0; i
< out_h
; i
++)
2071 unsigned char *input_row
= input_rows
[row_table
[i
]];
2072 unsigned char *output_row
= output_rows
[i
+ out_y
] + out_x
* out_pixelsize
;
2073 unsigned char *input_data
= input_row
+ (column_table
[0] << 2);
2074 __builtin_prefetch (input_data
, 0, 0);
2077 for(j
= 0; j
< out_w
; j
++)
2079 unsigned char y
= input_data
[0];
2080 unsigned char u
= input_data
[1];
2081 unsigned char v
= input_data
[2];
2082 unsigned char a
= input_data
[3];
2084 /* the secret of the speedup ... delayed index calculation */
2085 /* we do not overflow at the end since column table holds + 1 element */
2086 input_data
= input_row
+ (column_table
[j
+ 1] << 2);
2088 short int r
= y
+ vtor_tab
[v
];
2089 short int g
= y
+ utog_tab
[u
] + vtog_tab
[v
];
2090 short int b
= y
+ utob_tab
[u
];
2092 r
= (r
< 0 ? 0 : (r
> 0xff ? 0xff : r
));
2093 g
= (g
< 0 ? 0 : (g
> 0xff ? 0xff : g
));
2094 b
= (b
< 0 ? 0 : (b
> 0xff ? 0xff : b
));
2100 output_row
[0] = ((b
) >> 8);
2101 output_row
[1] = ((g
) >> 8);
2102 output_row
[2] = ((r
) >> 8);
2108 // long long dif= get_difference(&start_time);
2109 // printf("diff_inside: %lli\n", dif);
2120 TRANSFER_FRAME_DEFAULT(&output_row
,
2121 input_row
+ column_table
[j
] * in_pixelsize
,
2130 TRANSFER_FRAME_DEFAULT(&output_row
,
2131 input_row
+ j
* in_pixelsize
,