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
17 #include "cmodel_permutation.h"
27 // ********************************* YUV101010 -> *****************************
29 #define READ_YUV101010 \
31 uint32_t input_i = input[0] | \
36 y = ((input_i & 0xffc00000) >> 16) | 0x3f; \
37 u = ((input_i & 0x3ff000) >> 6) | 0x3f; \
38 v = ((input_i & 0xffc) << 4) | 0x3f;
45 static inline void transfer_YUV101010_to_RGB8(unsigned char *(*output), unsigned char *input)
51 y = (y << 8) | (y >> 8);
53 YUV_TO_RGB16(y, u, v, r, g, b);
55 *(*output)++ = (unsigned char)(((input[0] & 0xc000) >> 8) +
56 ((input[1] & 0xe000) >> 10) +
57 ((input[2] & 0xe000) >> 13));
60 static inline void transfer_YUV101010_to_BGR565(unsigned char *(*output), unsigned char *input)
66 y = (y << 8) | (y >> 8);
68 YUV_TO_RGB16(y, u, v, r, g, b);
70 *(uint16_t*)(*output) = (b & 0xf800) |
76 static inline void transfer_YUV101010_to_RGB565(unsigned char *(*output), unsigned char *input)
82 y = (y << 8) | (y >> 8);
84 YUV_TO_RGB16(y, u, v, r, g, b);
86 *(uint16_t*)(*output) = (r & 0xf800) |
92 static inline void transfer_YUV101010_to_BGR888(unsigned char *(*output), unsigned char *input)
98 y = (y << 8) | (y >> 8);
100 YUV_TO_RGB16(y, u, v, r, g, b);
102 *(*output)++ = b >> 8;
103 *(*output)++ = g >> 8;
104 *(*output)++ = r >> 8;
107 static inline void transfer_YUV101010_to_BGR8888(unsigned char *(*output), unsigned char *input)
113 y = (y << 8) | (y >> 8);
115 YUV_TO_RGB16(y, u, v, r, g, b);
117 *(*output)++ = b >> 8;
118 *(*output)++ = g >> 8;
119 *(*output)++ = r >> 8;
123 static inline void transfer_YUV101010_to_YUV888(unsigned char *(*output), unsigned char *input)
127 *(*output)++ = y >> 8;
128 *(*output)++ = u >> 8;
129 *(*output)++ = v >> 8;
132 static inline void transfer_YUV101010_to_YUVA8888(unsigned char *(*output), unsigned char *input)
136 *(*output)++ = y >> 8;
137 *(*output)++ = u >> 8;
138 *(*output)++ = v >> 8;
142 static inline void transfer_YUV101010_to_YUV161616(uint16_t *(*output), unsigned char *input)
151 static inline void transfer_YUV101010_to_YUVA16161616(uint16_t *(*output), unsigned char *input)
158 *(*output)++ = 0xffff;
161 static inline void transfer_YUV101010_to_RGB888(unsigned char *(*output), unsigned char *input)
167 y = (y << 8) | (y >> 8);
169 YUV_TO_RGB16(y, u, v, r, g, b);
171 *(*output)++ = r >> 8;
172 *(*output)++ = g >> 8;
173 *(*output)++ = b >> 8;
176 static inline void transfer_YUV101010_to_RGBA8888(unsigned char *(*output), unsigned char *input)
182 y = (y << 8) | (y >> 8);
184 YUV_TO_RGB16(y, u, v, r, g, b);
186 *(*output)++ = r >> 8;
187 *(*output)++ = g >> 8;
188 *(*output)++ = b >> 8;
192 static inline void transfer_YUV101010_to_RGB161616(uint16_t *(*output), unsigned char *input)
198 y = (y << 8) | (y >> 8);
200 YUV_TO_RGB16(y, u, v, r, g, b);
207 static inline void transfer_YUV101010_to_RGBA16161616(uint16_t *(*output), unsigned char *input)
213 y = (y << 8) | (y >> 8);
215 YUV_TO_RGB16(y, u, v, r, g, b);
220 *(*output)++ = 0xffff;
226 static inline void transfer_YUV101010_to_RGB_FLOAT(float *(*output),
227 unsigned char *input)
234 y_f = (float)y / 0xffff;
236 YUV16_TO_RGB_FLOAT(y_f, u, v, r, g, b);
243 static inline void transfer_YUV101010_to_RGBA_FLOAT(float *(*output),
244 unsigned char *input)
251 y_f = (float)y / 0xffff;
253 YUV16_TO_RGB_FLOAT(y_f, u, v, r, g, b);
279 // ******************************** VYU888 -> *********************************
282 static inline void transfer_VYU888_to_RGB8(unsigned char *(*output), unsigned char *input)
287 y = ((int)input[1]) << 16;
290 YUV_TO_RGB(y, u, v, r, g, b);
292 *(*output) = (unsigned char)((r & 0xc0) +
298 static inline void transfer_VYU888_to_BGR565(unsigned char *(*output), unsigned char *input)
303 y = ((int)input[1]) << 16;
306 YUV_TO_RGB(y, u, v, r, g, b);
307 *(uint16_t*)(*output) = ((b & 0xf8) << 8)
313 static inline void transfer_VYU888_to_RGB565(unsigned char *(*output), unsigned char *input)
318 y = ((int)input[1]) << 16;
321 YUV_TO_RGB(y, u, v, r, g, b);
322 *(uint16_t*)(*output) = ((r & 0xf8) << 8)
328 static inline void transfer_VYU888_to_BGR888(unsigned char *(*output), unsigned char *input)
333 y = ((int)input[1]) << 16;
336 YUV_TO_RGB(y, u, v, r, g, b);
344 static inline void transfer_VYU888_to_BGR8888(unsigned char *(*output), unsigned char *input)
349 y = ((int)input[1]) << 16;
352 YUV_TO_RGB(y, u, v, r, g, b);
360 static inline void transfer_VYU888_to_RGB888(unsigned char *(*output), unsigned char *input)
365 y = ((int)input[1]) << 16;
368 YUV_TO_RGB(y, u, v, r, g, b);
376 static inline void transfer_VYU888_to_RGBA8888(unsigned char *(*output), unsigned char *input)
381 y = ((int)input[1]) << 16;
384 YUV_TO_RGB(y, u, v, r, g, b);
394 static inline void transfer_VYU888_to_RGB161616(uint16_t *(*output), unsigned char *input)
399 y = (input[1] << 16) | (input[1] << 8) | input[1];
400 u = (input[2] << 8) | input[2];
401 v = (input[0] << 8) | input[0];
402 YUV_TO_RGB16(y, u, v, r, g, b);
410 static inline void transfer_VYU888_to_RGBA16161616(uint16_t *(*output), unsigned char *input)
415 y = (input[1] << 16) | (input[1] << 8) | input[1];
416 u = (input[2] << 8) | input[2];
417 v = (input[0] << 8) | input[0];
418 YUV_TO_RGB16(y, u, v, r, g, b);
423 (*output)[3] = 0xffff;
428 static inline void transfer_VYU888_to_RGB_FLOAT(float *(*output), unsigned char *input)
435 y = (float)*input++ / 0xff;
437 YUV_TO_FLOAT(y, u, v, r, g, b);
439 //printf("transfer_VYU888_to_RGB_FLOAT %d (*output)=%p\n", __LINE__, *output);
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);
466 static inline void transfer_VYU888_to_YUV888(unsigned char *(*output), unsigned char *input)
468 (*output)[0] = input[1];
469 (*output)[1] = input[2];
470 (*output)[2] = input[0];
474 static inline void transfer_VYU888_to_YUVA8888(unsigned char *(*output), unsigned char *input)
476 (*output)[0] = input[1];
477 (*output)[1] = input[2];
478 (*output)[2] = input[0];
484 static inline void transfer_VYU888_to_YUV161616(uint16_t *(*output), unsigned char *input)
486 (*output)[0] = ((int)input[1]) << 8;
487 (*output)[1] = ((int)input[2]) << 8;
488 (*output)[2] = ((int)input[0]) << 8;
492 static inline void transfer_VYU888_to_YUVA16161616(uint16_t *(*output), unsigned char *input)
494 (*output)[0] = ((int)input[1]) << 8;
495 (*output)[1] = ((int)input[2]) << 8;
496 (*output)[2] = ((int)input[0]) << 8;
512 // ******************************** UYVA8888 -> *********************************
515 static inline void transfer_UYVA8888_to_RGB8(unsigned char *(*output), unsigned char *input)
520 y = ((int)input[1]) << 16;
523 YUV_TO_RGB(y, u, v, r, g, b);
525 r = r * input[3] / 0xff;
526 g = g * input[3] / 0xff;
527 b = b * input[3] / 0xff;
528 *(*output) = (unsigned char)((r & 0xc0) +
534 static inline void transfer_UYVA8888_to_BGR565(unsigned char *(*output), unsigned char *input)
539 y = ((int)input[1]) << 16;
542 YUV_TO_RGB(y, u, v, r, g, b);
543 r = r * input[3] / 0xff;
544 g = g * input[3] / 0xff;
545 b = b * input[3] / 0xff;
546 *(uint16_t*)(*output) = ((b & 0xf8) << 8)
552 static inline void transfer_UYVA8888_to_RGB565(unsigned char *(*output), unsigned char *input)
557 y = ((int)input[1]) << 16;
560 YUV_TO_RGB(y, u, v, r, g, b);
561 r = r * input[3] / 0xff;
562 g = g * input[3] / 0xff;
563 b = b * input[3] / 0xff;
564 *(uint16_t*)(*output) = ((r & 0xf8) << 8)
570 static inline void transfer_UYVA8888_to_BGR888(unsigned char *(*output), unsigned char *input)
575 y = ((int)input[1]) << 16;
578 YUV_TO_RGB(y, u, v, r, g, b);
579 r = r * input[3] / 0xff;
580 g = g * input[3] / 0xff;
581 b = b * input[3] / 0xff;
589 static inline void transfer_UYVA8888_to_BGR8888(unsigned char *(*output), unsigned char *input)
594 y = ((int)input[1]) << 16;
597 YUV_TO_RGB(y, u, v, r, g, b);
598 r = r * input[3] / 0xff;
599 g = g * input[3] / 0xff;
600 b = b * input[3] / 0xff;
609 static inline void transfer_UYVA8888_to_RGB888(unsigned char *(*output), unsigned char *input)
614 y = ((int)input[1]) << 16;
617 YUV_TO_RGB(y, u, v, r, g, b);
618 r = r * input[3] / 0xff;
619 g = g * input[3] / 0xff;
620 b = b * input[3] / 0xff;
628 static inline void transfer_UYVA8888_to_RGBA8888(unsigned char *(*output), unsigned char *input)
633 y = ((int)input[1]) << 16;
636 YUV_TO_RGB(y, u, v, r, g, b);
641 (*output)[3] = input[3];
646 static inline void transfer_UYVA8888_to_RGB161616(uint16_t *(*output), unsigned char *input)
651 y = ((int)input[1]) << 16;
652 u = (input[0] << 8) | input[0];
653 v = (input[2] << 8) | input[2];
654 YUV_TO_RGB16(y, u, v, r, g, b);
655 r = r * input[3] / 0xff;
656 g = g * input[3] / 0xff;
657 b = b * input[3] / 0xff;
665 static inline void transfer_UYVA8888_to_RGBA16161616(uint16_t *(*output), unsigned char *input)
670 y = ((int)input[1]) << 16;
671 u = (input[0] << 8) | input[0];
672 v = (input[2] << 8) | input[2];
673 YUV_TO_RGB16(y, u, v, r, g, b);
678 (*output)[3] = input[3] << 8;
682 static inline void transfer_UYVA8888_to_RGB_FLOAT(float *(*output), unsigned char *input)
689 y = (float)*input++ / 0xff;
691 a = (float)*input / 0xff;
692 YUV_TO_FLOAT(y, u, v, r, g, b);
703 static inline void transfer_UYVA8888_to_RGBA_FLOAT(float *(*output), unsigned char *input)
710 y = (float)*input++ / 0xff;
712 a = (float)*input / 0xff;
713 YUV_TO_FLOAT(y, u, v, r, g, b);
722 static inline void transfer_UYVA8888_to_YUV888(unsigned char *(*output), unsigned char *input)
728 (*output)[0] = (a * input[1]) / 0xff;
729 (*output)[1] = (a * input[0] + anti_a * 0x80) / 0xff;
730 (*output)[2] = (a * input[2] + anti_a * 0x80) / 0xff;
734 static inline void transfer_UYVA8888_to_YUVA8888(unsigned char *(*output), unsigned char *input)
736 (*output)[0] = input[1];
737 (*output)[1] = input[0];
738 (*output)[2] = input[2];
739 (*output)[3] = input[3];
744 static inline void transfer_UYVA8888_to_YUV161616(uint16_t *(*output), unsigned char *input)
750 (*output)[0] = a * input[1];
751 (*output)[1] = a * input[0] + anti_a * 0x80;
752 (*output)[2] = a * input[2] + anti_a * 0x80;
756 static inline void transfer_UYVA8888_to_YUVA16161616(uint16_t *(*output), unsigned char *input)
758 (*output)[0] = input[1] << 8;
759 (*output)[1] = input[0] << 8;
760 (*output)[2] = input[2] << 8;
761 (*output)[3] = input[3] << 8;
774 #define TRANSFER_FRAME_DEFAULT(output, \
783 switch(in_colormodel) \
786 switch(out_colormodel) \
789 TRANSFER_FRAME_HEAD \
790 transfer_YUV888_to_RGB8((output), (input)); \
791 TRANSFER_FRAME_TAIL \
794 TRANSFER_FRAME_HEAD \
795 transfer_YUV888_to_BGR565((output), (input)); \
796 TRANSFER_FRAME_TAIL \
799 TRANSFER_FRAME_HEAD \
800 transfer_YUV888_to_RGB565((output), (input)); \
801 TRANSFER_FRAME_TAIL \
804 TRANSFER_FRAME_HEAD \
805 transfer_YUV888_to_BGR888((output), (input)); \
806 TRANSFER_FRAME_TAIL \
809 TRANSFER_FRAME_HEAD \
810 transfer_YUV888_to_BGR8888((output), (input)); \
811 TRANSFER_FRAME_TAIL \
814 TRANSFER_FRAME_HEAD \
815 transfer_YUV888_to_RGB888((output), (input)); \
816 TRANSFER_FRAME_TAIL \
819 TRANSFER_FRAME_HEAD \
820 transfer_YUV888_to_RGBA8888((output), (input)); \
821 TRANSFER_FRAME_TAIL \
824 TRANSFER_FRAME_HEAD \
825 transfer_YUV888_to_ARGB8888((output), (input)); \
826 TRANSFER_FRAME_TAIL \
829 TRANSFER_FRAME_HEAD \
830 transfer_YUV888_to_RGB_FLOAT((float**)(output), (input)); \
831 TRANSFER_FRAME_TAIL \
833 case BC_RGBA_FLOAT: \
834 TRANSFER_FRAME_HEAD \
835 transfer_YUV888_to_RGBA_FLOAT((float**)(output), (input)); \
836 TRANSFER_FRAME_TAIL \
839 TRANSFER_FRAME_HEAD \
840 transfer_YUV888_to_YUV101010((output), (input)); \
841 TRANSFER_FRAME_TAIL \
844 TRANSFER_YUV420P_OUT_HEAD \
845 transfer_YUV888_to_YUV420P_YUV422P(output_y, \
850 TRANSFER_FRAME_TAIL \
853 TRANSFER_YUV422P_OUT_HEAD \
854 transfer_YUV888_to_YUV420P_YUV422P(output_y, \
859 TRANSFER_FRAME_TAIL \
862 TRANSFER_YUV444P_OUT_HEAD \
863 transfer_YUV888_to_YUV444P(output_y, \
868 TRANSFER_FRAME_TAIL \
871 TRANSFER_FRAME_HEAD \
872 transfer_YUV888_to_YUV422((output), \
875 TRANSFER_FRAME_TAIL \
878 TRANSFER_FRAME_HEAD \
879 transfer_YUV888_to_YUV888((output), (input)); \
880 TRANSFER_FRAME_TAIL \
883 TRANSFER_FRAME_HEAD \
884 transfer_YUV888_to_YUVA8888((output), (input)); \
885 TRANSFER_FRAME_TAIL \
888 TRANSFER_FRAME_HEAD \
889 transfer_YUV888_to_VYU888((output), (input)); \
890 TRANSFER_FRAME_TAIL \
893 TRANSFER_FRAME_HEAD \
894 transfer_YUV888_to_UYVA8888((output), (input)); \
895 TRANSFER_FRAME_TAIL \
901 switch(out_colormodel) \
904 TRANSFER_FRAME_HEAD \
905 transfer_YUVA8888_to_RGB8((output), (input)); \
906 TRANSFER_FRAME_TAIL \
909 TRANSFER_FRAME_HEAD \
910 transfer_YUVA8888_to_BGR565((output), (input)); \
911 TRANSFER_FRAME_TAIL \
914 TRANSFER_FRAME_HEAD \
915 transfer_YUVA8888_to_RGB565((output), (input)); \
916 TRANSFER_FRAME_TAIL \
919 TRANSFER_FRAME_HEAD \
920 transfer_YUVA8888_to_BGR888((output), (input)); \
921 TRANSFER_FRAME_TAIL \
924 TRANSFER_FRAME_HEAD \
925 transfer_YUVA8888_to_BGR8888((output), (input)); \
926 TRANSFER_FRAME_TAIL \
929 TRANSFER_FRAME_HEAD \
930 transfer_YUVA8888_to_RGB888((output), (input)); \
931 TRANSFER_FRAME_TAIL \
934 TRANSFER_FRAME_HEAD \
935 transfer_YUVA8888_to_RGBA8888((output), (input)); \
936 TRANSFER_FRAME_TAIL \
939 TRANSFER_FRAME_HEAD \
940 transfer_YUVA8888_to_ARGB8888((output), (input)); \
941 TRANSFER_FRAME_TAIL \
944 TRANSFER_FRAME_HEAD \
945 transfer_YUVA8888_to_RGB_FLOAT((float**)(output), (input)); \
946 TRANSFER_FRAME_TAIL \
948 case BC_RGBA_FLOAT: \
949 TRANSFER_FRAME_HEAD \
950 transfer_YUVA8888_to_RGBA_FLOAT((float**)(output), (input)); \
951 TRANSFER_FRAME_TAIL \
954 TRANSFER_FRAME_HEAD \
955 transfer_YUVA8888_to_VYU888((output), (input)); \
956 TRANSFER_FRAME_TAIL \
959 TRANSFER_FRAME_HEAD \
960 transfer_YUVA8888_to_YUV888((output), (input)); \
961 TRANSFER_FRAME_TAIL \
964 TRANSFER_FRAME_HEAD \
965 transfer_YUVA8888_to_YUVA8888((output), (input)); \
966 TRANSFER_FRAME_TAIL \
969 TRANSFER_FRAME_HEAD \
970 transfer_YUVA8888_to_UYVA8888((output), (input)); \
971 TRANSFER_FRAME_TAIL \
974 TRANSFER_FRAME_HEAD \
975 transfer_YUVA8888_to_YUV101010((output), (input)); \
976 TRANSFER_FRAME_TAIL \
979 TRANSFER_YUV420P_OUT_HEAD \
980 transfer_YUVA8888_to_YUV420P_YUV422P(output_y, \
985 TRANSFER_FRAME_TAIL \
988 TRANSFER_YUV422P_OUT_HEAD \
989 transfer_YUVA8888_to_YUV420P_YUV422P(output_y, \
994 TRANSFER_FRAME_TAIL \
997 TRANSFER_YUV444P_OUT_HEAD \
998 transfer_YUVA8888_to_YUV444P(output_y, \
1003 TRANSFER_FRAME_TAIL \
1006 TRANSFER_FRAME_HEAD \
1007 transfer_YUVA8888_to_YUV422((output), \
1010 TRANSFER_FRAME_TAIL \
1015 case BC_YUV161616: \
1016 switch(out_colormodel) \
1019 TRANSFER_FRAME_HEAD \
1020 transfer_YUV161616_to_RGB8((output), (uint16_t*)(input)); \
1021 TRANSFER_FRAME_TAIL \
1024 TRANSFER_FRAME_HEAD \
1025 transfer_YUV161616_to_BGR565((output), (uint16_t*)(input)); \
1026 TRANSFER_FRAME_TAIL \
1029 TRANSFER_FRAME_HEAD \
1030 transfer_YUV161616_to_RGB565((output), (uint16_t*)(input)); \
1031 TRANSFER_FRAME_TAIL \
1034 TRANSFER_FRAME_HEAD \
1035 transfer_YUV161616_to_BGR888((output), (uint16_t*)(input)); \
1036 TRANSFER_FRAME_TAIL \
1039 TRANSFER_FRAME_HEAD \
1040 transfer_YUV161616_to_BGR8888((output), (uint16_t*)(input)); \
1041 TRANSFER_FRAME_TAIL \
1044 TRANSFER_FRAME_HEAD \
1045 transfer_YUV161616_to_RGB888((output), (uint16_t*)(input)); \
1046 TRANSFER_FRAME_TAIL \
1049 TRANSFER_FRAME_HEAD \
1050 transfer_YUV161616_to_RGBA8888((output), (uint16_t*)(input)); \
1051 TRANSFER_FRAME_TAIL \
1054 TRANSFER_FRAME_HEAD \
1055 transfer_YUV161616_to_ARGB8888((output), (uint16_t*)(input)); \
1056 TRANSFER_FRAME_TAIL \
1058 case BC_RGB_FLOAT: \
1059 TRANSFER_FRAME_HEAD \
1060 transfer_YUV161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1061 TRANSFER_FRAME_TAIL \
1063 case BC_RGBA_FLOAT: \
1064 TRANSFER_FRAME_HEAD \
1065 transfer_YUV161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1066 TRANSFER_FRAME_TAIL \
1069 TRANSFER_YUV420P_OUT_HEAD \
1070 transfer_YUV161616_to_YUV420P_YUV422P(output_y, \
1073 (uint16_t*)(input), \
1075 TRANSFER_FRAME_TAIL \
1078 TRANSFER_YUV422P_OUT_HEAD \
1079 transfer_YUV161616_to_YUV420P_YUV422P(output_y, \
1082 (uint16_t*)(input), \
1084 TRANSFER_FRAME_TAIL \
1087 TRANSFER_YUV444P_OUT_HEAD \
1088 transfer_YUV161616_to_YUV444P(output_y, \
1091 (uint16_t*)(input), \
1093 TRANSFER_FRAME_TAIL \
1096 TRANSFER_FRAME_HEAD \
1097 transfer_YUV161616_to_YUV422((output), \
1098 (uint16_t*)(input), \
1100 TRANSFER_FRAME_TAIL \
1102 case BC_YUV101010: \
1103 TRANSFER_FRAME_HEAD \
1104 transfer_YUV161616_to_YUV101010((output), (uint16_t*)(input)); \
1105 TRANSFER_FRAME_TAIL \
1108 TRANSFER_FRAME_HEAD \
1109 transfer_YUV161616_to_YUVA8888((output), \
1110 (uint16_t*)(input)); \
1111 TRANSFER_FRAME_TAIL \
1114 TRANSFER_FRAME_HEAD \
1115 transfer_YUV161616_to_VYU888((output), (uint16_t*)(input)); \
1116 TRANSFER_FRAME_TAIL \
1119 TRANSFER_FRAME_HEAD \
1120 transfer_YUV161616_to_UYVA8888((output), (uint16_t*)(input)); \
1121 TRANSFER_FRAME_TAIL \
1123 case BC_YUV161616: \
1124 TRANSFER_FRAME_HEAD \
1125 transfer_YUV161616_to_YUV161616((uint16_t**)(output), \
1126 (uint16_t*)(input)); \
1127 TRANSFER_FRAME_TAIL \
1132 case BC_YUVA16161616: \
1133 switch(out_colormodel) \
1136 TRANSFER_FRAME_HEAD \
1137 transfer_YUVA16161616_to_RGB8((output), (uint16_t*)(input)); \
1138 TRANSFER_FRAME_TAIL \
1141 TRANSFER_FRAME_HEAD \
1142 transfer_YUVA16161616_to_BGR565((output), (uint16_t*)(input)); \
1143 TRANSFER_FRAME_TAIL \
1146 TRANSFER_FRAME_HEAD \
1147 transfer_YUVA16161616_to_RGB565((output), (uint16_t*)(input)); \
1148 TRANSFER_FRAME_TAIL \
1151 TRANSFER_FRAME_HEAD \
1152 transfer_YUVA16161616_to_BGR888((output), (uint16_t*)(input)); \
1153 TRANSFER_FRAME_TAIL \
1156 TRANSFER_FRAME_HEAD \
1157 transfer_YUVA16161616_to_BGR8888((output), (uint16_t*)(input)); \
1158 TRANSFER_FRAME_TAIL \
1161 TRANSFER_FRAME_HEAD \
1162 transfer_YUVA16161616_to_RGB888((output), (uint16_t*)(input)); \
1163 TRANSFER_FRAME_TAIL \
1166 TRANSFER_FRAME_HEAD \
1167 transfer_YUVA16161616_to_RGBA8888((output), (uint16_t*)(input)); \
1168 TRANSFER_FRAME_TAIL \
1171 TRANSFER_FRAME_HEAD \
1172 transfer_YUVA16161616_to_ARGB8888((output), (uint16_t*)(input)); \
1173 TRANSFER_FRAME_TAIL \
1175 case BC_RGB_FLOAT: \
1176 TRANSFER_FRAME_HEAD \
1177 transfer_YUVA16161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1178 TRANSFER_FRAME_TAIL \
1180 case BC_RGBA_FLOAT: \
1181 TRANSFER_FRAME_HEAD \
1182 transfer_YUVA16161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1183 TRANSFER_FRAME_TAIL \
1185 case BC_YUV101010: \
1186 TRANSFER_FRAME_HEAD \
1187 transfer_YUVA16161616_to_YUV101010((output), (uint16_t*)(input)); \
1188 TRANSFER_FRAME_TAIL \
1191 TRANSFER_FRAME_HEAD \
1192 transfer_YUVA16161616_to_VYU888((output), (uint16_t*)(input)); \
1193 TRANSFER_FRAME_TAIL \
1196 TRANSFER_FRAME_HEAD \
1197 transfer_YUVA16161616_to_UYVA8888((output), (uint16_t*)(input)); \
1198 TRANSFER_FRAME_TAIL \
1200 case BC_YUVA16161616: \
1201 TRANSFER_FRAME_HEAD \
1202 transfer_YUVA16161616_to_YUVA16161616((uint16_t**)(output), (uint16_t*)(input)); \
1203 TRANSFER_FRAME_TAIL \
1206 TRANSFER_YUV420P_OUT_HEAD \
1207 transfer_YUVA16161616_to_YUV420P_YUV422P(output_y, \
1210 (uint16_t*)(input), \
1212 TRANSFER_FRAME_TAIL \
1215 TRANSFER_YUV422P_OUT_HEAD \
1216 transfer_YUVA16161616_to_YUV420P_YUV422P(output_y, \
1219 (uint16_t*)(input), \
1221 TRANSFER_FRAME_TAIL \
1224 TRANSFER_YUV444P_OUT_HEAD \
1225 transfer_YUVA16161616_to_YUV444P(output_y, \
1228 (uint16_t*)(input), \
1230 TRANSFER_FRAME_TAIL \
1233 TRANSFER_FRAME_HEAD \
1234 transfer_YUVA16161616_to_YUV422((output), \
1235 (uint16_t*)(input), \
1237 TRANSFER_FRAME_TAIL \
1242 case BC_YUV101010: \
1243 switch(out_colormodel) \
1246 TRANSFER_FRAME_HEAD \
1247 transfer_YUV101010_to_RGB8((output), (input)); \
1248 TRANSFER_FRAME_TAIL \
1251 TRANSFER_FRAME_HEAD \
1252 transfer_YUV101010_to_BGR565((output), (input)); \
1253 TRANSFER_FRAME_TAIL \
1256 TRANSFER_FRAME_HEAD \
1257 transfer_YUV101010_to_RGB565((output), (input)); \
1258 TRANSFER_FRAME_TAIL \
1261 TRANSFER_FRAME_HEAD \
1262 transfer_YUV101010_to_BGR888((output), (input)); \
1263 TRANSFER_FRAME_TAIL \
1266 TRANSFER_FRAME_HEAD \
1267 transfer_YUV101010_to_BGR8888((output), (input)); \
1268 TRANSFER_FRAME_TAIL \
1271 TRANSFER_FRAME_HEAD \
1272 transfer_YUV101010_to_RGB888((output), (input)); \
1273 TRANSFER_FRAME_TAIL \
1276 TRANSFER_FRAME_HEAD \
1277 transfer_YUV101010_to_RGBA8888((output), (input)); \
1278 TRANSFER_FRAME_TAIL \
1281 TRANSFER_FRAME_HEAD \
1282 transfer_YUV101010_to_YUV888((output), (input)); \
1283 TRANSFER_FRAME_TAIL \
1286 TRANSFER_FRAME_HEAD \
1287 transfer_YUV101010_to_YUVA8888((output), (input)); \
1288 TRANSFER_FRAME_TAIL \
1290 case BC_RGB161616: \
1291 TRANSFER_FRAME_HEAD \
1292 transfer_YUV101010_to_RGB161616((uint16_t**)(output), (input)); \
1293 TRANSFER_FRAME_TAIL \
1295 case BC_RGBA16161616: \
1296 TRANSFER_FRAME_HEAD \
1297 transfer_YUV101010_to_RGBA16161616((uint16_t**)(output), (input)); \
1298 TRANSFER_FRAME_TAIL \
1300 case BC_RGB_FLOAT: \
1301 TRANSFER_FRAME_HEAD \
1302 transfer_YUV101010_to_RGB_FLOAT((float**)(output), (input)); \
1303 TRANSFER_FRAME_TAIL \
1305 case BC_RGBA_FLOAT: \
1306 TRANSFER_FRAME_HEAD \
1307 transfer_YUV101010_to_RGBA_FLOAT((float**)(output), (input)); \
1308 TRANSFER_FRAME_TAIL \
1310 case BC_YUV161616: \
1311 TRANSFER_FRAME_HEAD \
1312 transfer_YUV101010_to_YUV161616((uint16_t**)(output), (input)); \
1313 TRANSFER_FRAME_TAIL \
1315 case BC_YUVA16161616: \
1316 TRANSFER_FRAME_HEAD \
1317 transfer_YUV101010_to_YUVA16161616((uint16_t**)(output), (input)); \
1318 TRANSFER_FRAME_TAIL \
1324 switch(out_colormodel) \
1327 TRANSFER_FRAME_HEAD \
1328 transfer_VYU888_to_RGB8((output), (input)); \
1329 TRANSFER_FRAME_TAIL \
1332 TRANSFER_FRAME_HEAD \
1333 transfer_VYU888_to_BGR565((output), (input)); \
1334 TRANSFER_FRAME_TAIL \
1337 TRANSFER_FRAME_HEAD \
1338 transfer_VYU888_to_RGB565((output), (input)); \
1339 TRANSFER_FRAME_TAIL \
1342 TRANSFER_FRAME_HEAD \
1343 transfer_VYU888_to_BGR888((output), (input)); \
1344 TRANSFER_FRAME_TAIL \
1347 TRANSFER_FRAME_HEAD \
1348 transfer_VYU888_to_BGR8888((output), (input)); \
1349 TRANSFER_FRAME_TAIL \
1352 TRANSFER_FRAME_HEAD \
1353 transfer_VYU888_to_RGB888((output), (input)); \
1354 TRANSFER_FRAME_TAIL \
1357 TRANSFER_FRAME_HEAD \
1358 transfer_VYU888_to_RGBA8888((output), (input)); \
1359 TRANSFER_FRAME_TAIL \
1362 TRANSFER_FRAME_HEAD \
1363 transfer_VYU888_to_YUV888((output), (input)); \
1364 TRANSFER_FRAME_TAIL \
1367 TRANSFER_FRAME_HEAD \
1368 transfer_VYU888_to_YUVA8888((output), (input)); \
1369 TRANSFER_FRAME_TAIL \
1371 case BC_RGB161616: \
1372 TRANSFER_FRAME_HEAD \
1373 transfer_VYU888_to_RGB161616((uint16_t**)(output), (input)); \
1374 TRANSFER_FRAME_TAIL \
1376 case BC_RGBA16161616: \
1377 TRANSFER_FRAME_HEAD \
1378 transfer_VYU888_to_RGBA16161616((uint16_t**)(output), (input)); \
1379 TRANSFER_FRAME_TAIL \
1381 case BC_RGB_FLOAT: \
1382 /* printf("%s %d %d %d\n", __FUNCTION__, __LINE__, out_w, out_pixelsize); */ \
1383 TRANSFER_FRAME_HEAD \
1384 transfer_VYU888_to_RGB_FLOAT((float**)(output), (input)); \
1385 TRANSFER_FRAME_TAIL \
1387 case BC_RGBA_FLOAT: \
1388 TRANSFER_FRAME_HEAD \
1389 transfer_VYU888_to_RGBA_FLOAT((float**)(output), (input)); \
1390 TRANSFER_FRAME_TAIL \
1392 case BC_YUV161616: \
1393 TRANSFER_FRAME_HEAD \
1394 transfer_VYU888_to_YUV161616((uint16_t**)(output), (input)); \
1395 TRANSFER_FRAME_TAIL \
1397 case BC_YUVA16161616: \
1398 TRANSFER_FRAME_HEAD \
1399 transfer_VYU888_to_YUVA16161616((uint16_t**)(output), (input)); \
1400 TRANSFER_FRAME_TAIL \
1406 switch(out_colormodel) \
1409 TRANSFER_FRAME_HEAD \
1410 transfer_UYVA8888_to_RGB8((output), (input)); \
1411 TRANSFER_FRAME_TAIL \
1414 TRANSFER_FRAME_HEAD \
1415 transfer_UYVA8888_to_BGR565((output), (input)); \
1416 TRANSFER_FRAME_TAIL \
1419 TRANSFER_FRAME_HEAD \
1420 transfer_UYVA8888_to_RGB565((output), (input)); \
1421 TRANSFER_FRAME_TAIL \
1424 TRANSFER_FRAME_HEAD \
1425 transfer_UYVA8888_to_BGR888((output), (input)); \
1426 TRANSFER_FRAME_TAIL \
1429 TRANSFER_FRAME_HEAD \
1430 transfer_UYVA8888_to_BGR8888((output), (input)); \
1431 TRANSFER_FRAME_TAIL \
1434 TRANSFER_FRAME_HEAD \
1435 transfer_UYVA8888_to_RGB888((output), (input)); \
1436 TRANSFER_FRAME_TAIL \
1439 TRANSFER_FRAME_HEAD \
1440 transfer_UYVA8888_to_RGBA8888((output), (input)); \
1441 TRANSFER_FRAME_TAIL \
1444 TRANSFER_FRAME_HEAD \
1445 transfer_UYVA8888_to_YUV888((output), (input)); \
1446 TRANSFER_FRAME_TAIL \
1449 TRANSFER_FRAME_HEAD \
1450 transfer_UYVA8888_to_YUVA8888((output), (input)); \
1451 TRANSFER_FRAME_TAIL \
1453 case BC_RGB161616: \
1454 TRANSFER_FRAME_HEAD \
1455 transfer_UYVA8888_to_RGB161616((uint16_t**)(output), (input)); \
1456 TRANSFER_FRAME_TAIL \
1458 case BC_RGBA16161616: \
1459 TRANSFER_FRAME_HEAD \
1460 transfer_UYVA8888_to_RGBA16161616((uint16_t**)(output), (input)); \
1461 TRANSFER_FRAME_TAIL \
1463 case BC_RGB_FLOAT: \
1464 TRANSFER_FRAME_HEAD \
1465 transfer_UYVA8888_to_RGB_FLOAT((float**)(output), (input)); \
1466 TRANSFER_FRAME_TAIL \
1468 case BC_RGBA_FLOAT: \
1469 TRANSFER_FRAME_HEAD \
1470 transfer_UYVA8888_to_RGBA_FLOAT((float**)(output), (input)); \
1471 TRANSFER_FRAME_TAIL \
1473 case BC_YUV161616: \
1474 TRANSFER_FRAME_HEAD \
1475 transfer_UYVA8888_to_YUV161616((uint16_t**)(output), (input)); \
1476 TRANSFER_FRAME_TAIL \
1478 case BC_YUVA16161616: \
1479 TRANSFER_FRAME_HEAD \
1480 transfer_UYVA8888_to_YUVA16161616((uint16_t**)(output), (input)); \
1481 TRANSFER_FRAME_TAIL \
1488 switch(out_colormodel) \
1492 TRANSFER_FRAME_HEAD \
1493 transfer_ARGB8888_to_ARGB8888((output), (input)); \
1494 TRANSFER_FRAME_TAIL \
1497 TRANSFER_FRAME_HEAD \
1498 transfer_ARGB8888_to_RGBA8888((output), (input)); \
1499 TRANSFER_FRAME_TAIL \
1502 TRANSFER_FRAME_HEAD \
1503 transfer_ARGB8888_to_RGB888((output), (input)); \
1504 TRANSFER_FRAME_TAIL \
1507 TRANSFER_FRAME_HEAD \
1508 transfer_ARGB8888_to_BGR8888((output), (input)); \
1509 TRANSFER_FRAME_TAIL \
1515 switch(out_colormodel) \
1518 TRANSFER_FRAME_HEAD \
1519 transfer_RGB888_to_RGB8((output), (input)); \
1520 TRANSFER_FRAME_TAIL \
1523 TRANSFER_FRAME_HEAD \
1524 transfer_RGB888_to_BGR565((output), (input)); \
1525 TRANSFER_FRAME_TAIL \
1528 TRANSFER_FRAME_HEAD \
1529 transfer_RGB888_to_RGB565((output), (input)); \
1530 TRANSFER_FRAME_TAIL \
1533 TRANSFER_FRAME_HEAD \
1534 transfer_RGB888_to_BGR888((output), (input)); \
1535 TRANSFER_FRAME_TAIL \
1538 TRANSFER_FRAME_HEAD \
1539 transfer_RGB888_to_RGB888((output), (input)); \
1540 TRANSFER_FRAME_TAIL \
1543 TRANSFER_FRAME_HEAD \
1544 transfer_RGB888_to_RGBA8888((output), (input)); \
1545 TRANSFER_FRAME_TAIL \
1548 TRANSFER_FRAME_HEAD \
1549 transfer_RGB888_to_ARGB8888((output), (input)); \
1550 TRANSFER_FRAME_TAIL \
1552 case BC_RGB161616: \
1553 TRANSFER_FRAME_HEAD \
1554 transfer_RGB888_to_RGB161616((uint16_t**)(output), (input)); \
1555 TRANSFER_FRAME_TAIL \
1557 case BC_RGBA16161616: \
1558 TRANSFER_FRAME_HEAD \
1559 transfer_RGB888_to_RGBA16161616((uint16_t**)(output), (input)); \
1560 TRANSFER_FRAME_TAIL \
1562 case BC_RGB_FLOAT: \
1563 TRANSFER_FRAME_HEAD \
1564 transfer_RGB888_to_RGB_FLOAT((float**)(output), (input)); \
1565 TRANSFER_FRAME_TAIL \
1567 case BC_RGBA_FLOAT: \
1568 TRANSFER_FRAME_HEAD \
1569 transfer_RGB888_to_RGBA_FLOAT((float**)(output), (input)); \
1570 TRANSFER_FRAME_TAIL \
1573 TRANSFER_FRAME_HEAD \
1574 transfer_RGB888_to_ABGR8888((output), (input)); \
1575 TRANSFER_FRAME_TAIL \
1578 TRANSFER_FRAME_HEAD \
1579 transfer_RGB888_to_BGR8888((output), (input)); \
1580 TRANSFER_FRAME_TAIL \
1583 TRANSFER_FRAME_HEAD \
1584 transfer_RGB888_to_YUV888((output), (input)); \
1585 TRANSFER_FRAME_TAIL \
1588 TRANSFER_FRAME_HEAD \
1589 transfer_RGB888_to_YUVA8888((output), (input)); \
1590 TRANSFER_FRAME_TAIL \
1592 case BC_YUV161616: \
1593 TRANSFER_FRAME_HEAD \
1594 transfer_RGB888_to_YUV161616((uint16_t**)(output), (input)); \
1595 TRANSFER_FRAME_TAIL \
1597 case BC_YUVA16161616: \
1598 TRANSFER_FRAME_HEAD \
1599 transfer_RGB888_to_YUVA16161616((uint16_t**)(output), (input)); \
1600 TRANSFER_FRAME_TAIL \
1602 case BC_YUV101010: \
1603 TRANSFER_FRAME_HEAD \
1604 transfer_RGB888_to_YUV101010((output), (input)); \
1605 TRANSFER_FRAME_TAIL \
1608 TRANSFER_YUV420P_OUT_HEAD \
1609 transfer_RGB888_to_YUV420P_YUV422P(output_y, \
1614 TRANSFER_FRAME_TAIL \
1617 TRANSFER_FRAME_HEAD \
1618 transfer_RGB888_to_YUV422((output), (input), j); \
1619 TRANSFER_FRAME_TAIL \
1622 TRANSFER_YUV422P_OUT_HEAD \
1623 transfer_RGB888_to_YUV420P_YUV422P(output_y, \
1628 TRANSFER_FRAME_TAIL \
1631 TRANSFER_YUV444P_OUT_HEAD \
1632 transfer_RGB888_to_YUV444P(output_y, \
1637 TRANSFER_FRAME_TAIL \
1640 TRANSFER_FRAME_HEAD \
1641 transfer_RGB888_to_VYU888((output), (input)); \
1642 TRANSFER_FRAME_TAIL \
1645 TRANSFER_FRAME_HEAD \
1646 transfer_RGB888_to_UYVA8888((output), (input)); \
1647 TRANSFER_FRAME_TAIL \
1653 switch(out_colormodel) \
1655 case BC_TRANSPARENCY: \
1656 TRANSFER_FRAME_HEAD \
1657 transfer_RGBA8888_to_TRANSPARENCY((output), (input), &bit_counter); \
1658 TRANSFER_FRAME_TAIL \
1662 TRANSFER_FRAME_HEAD \
1663 transfer_RGBA8888_to_RGB8bg((output), (input), bg_r, bg_g, bg_b); \
1664 TRANSFER_FRAME_TAIL \
1666 TRANSFER_FRAME_HEAD \
1667 transfer_RGBA8888_to_RGB8((output), (input)); \
1668 TRANSFER_FRAME_TAIL \
1672 TRANSFER_FRAME_HEAD \
1673 transfer_RGBA8888_to_BGR565bg((output), (input), bg_r, bg_g, bg_b); \
1674 TRANSFER_FRAME_TAIL \
1676 TRANSFER_FRAME_HEAD \
1677 transfer_RGBA8888_to_BGR565((output), (input)); \
1678 TRANSFER_FRAME_TAIL \
1682 TRANSFER_FRAME_HEAD \
1683 transfer_RGBA8888_to_RGB565bg((output), (input), bg_r, bg_g, bg_b); \
1684 TRANSFER_FRAME_TAIL \
1686 TRANSFER_FRAME_HEAD \
1687 transfer_RGBA8888_to_RGB565((output), (input)); \
1688 TRANSFER_FRAME_TAIL \
1692 TRANSFER_FRAME_HEAD \
1693 transfer_RGBA8888_to_BGR888bg((output), (input), bg_r, bg_g, bg_b); \
1694 TRANSFER_FRAME_TAIL \
1696 TRANSFER_FRAME_HEAD \
1697 transfer_RGBA8888_to_BGR888((output), (input)); \
1698 TRANSFER_FRAME_TAIL \
1702 TRANSFER_FRAME_HEAD \
1703 transfer_RGBA8888_to_RGB888bg((output), (input), bg_r, bg_g, bg_b); \
1704 TRANSFER_FRAME_TAIL \
1706 TRANSFER_FRAME_HEAD \
1707 transfer_RGBA8888_to_RGB888((output), (input)); \
1708 TRANSFER_FRAME_TAIL \
1711 TRANSFER_FRAME_HEAD \
1712 transfer_RGBA8888_to_RGBA8888((output), (input)); \
1713 TRANSFER_FRAME_TAIL \
1716 TRANSFER_FRAME_HEAD \
1717 transfer_RGBA8888_to_ARGB8888((output), (input)); \
1718 TRANSFER_FRAME_TAIL \
1720 case BC_RGB161616: \
1721 TRANSFER_FRAME_HEAD \
1722 transfer_RGBA8888_to_RGB161616((uint16_t**)(output), (input)); \
1723 TRANSFER_FRAME_TAIL \
1725 case BC_RGBA16161616: \
1726 TRANSFER_FRAME_HEAD \
1727 transfer_RGBA8888_to_RGBA16161616((uint16_t**)(output), (input)); \
1728 TRANSFER_FRAME_TAIL \
1730 case BC_RGB_FLOAT: \
1731 TRANSFER_FRAME_HEAD \
1732 transfer_RGBA8888_to_RGB_FLOAT((float**)(output), (input)); \
1733 TRANSFER_FRAME_TAIL \
1735 case BC_RGBA_FLOAT: \
1736 TRANSFER_FRAME_HEAD \
1737 transfer_RGBA8888_to_RGBA_FLOAT((float**)(output), (input)); \
1738 TRANSFER_FRAME_TAIL \
1742 TRANSFER_FRAME_HEAD \
1743 transfer_RGBA8888_to_BGR8888bg((output), (input), bg_r, bg_g, bg_b); \
1744 TRANSFER_FRAME_TAIL \
1746 TRANSFER_FRAME_HEAD \
1747 transfer_RGBA8888_to_BGR8888((output), (input)); \
1748 TRANSFER_FRAME_TAIL \
1751 TRANSFER_FRAME_HEAD \
1752 transfer_RGBA8888_to_YUV888((output), (input)); \
1753 TRANSFER_FRAME_TAIL \
1756 TRANSFER_FRAME_HEAD \
1757 transfer_RGBA8888_to_YUVA8888((output), (input)); \
1758 TRANSFER_FRAME_TAIL \
1760 case BC_YUV161616: \
1761 TRANSFER_FRAME_HEAD \
1762 transfer_RGBA8888_to_YUV161616((uint16_t**)(output), (input)); \
1763 TRANSFER_FRAME_TAIL \
1765 case BC_YUVA16161616: \
1766 TRANSFER_FRAME_HEAD \
1767 transfer_RGBA8888_to_YUVA16161616((uint16_t**)(output), (input)); \
1768 TRANSFER_FRAME_TAIL \
1770 case BC_YUV101010: \
1771 TRANSFER_FRAME_HEAD \
1772 transfer_RGBA8888_to_YUV101010((output), (input)); \
1773 TRANSFER_FRAME_TAIL \
1776 TRANSFER_YUV420P_OUT_HEAD \
1777 transfer_RGBA888_to_YUV420P_YUV422P(output_y, \
1782 TRANSFER_FRAME_TAIL \
1785 TRANSFER_FRAME_HEAD \
1786 transfer_RGBA888_to_YUV422((output), (input), j); \
1787 TRANSFER_FRAME_TAIL \
1790 TRANSFER_YUV422P_OUT_HEAD \
1791 transfer_RGBA888_to_YUV420P_YUV422P(output_y, \
1796 TRANSFER_FRAME_TAIL \
1799 TRANSFER_FRAME_HEAD \
1800 transfer_RGBA8888_to_VYU888((output), (input)); \
1801 TRANSFER_FRAME_TAIL \
1804 TRANSFER_FRAME_HEAD \
1805 transfer_RGBA8888_to_UYVA8888((output), (input)); \
1806 TRANSFER_FRAME_TAIL \
1809 TRANSFER_YUV444P_OUT_HEAD \
1810 transfer_RGBA888_to_YUV444P(output_y, \
1815 TRANSFER_FRAME_TAIL \
1820 case BC_RGB161616: \
1821 switch(out_colormodel) \
1824 TRANSFER_FRAME_HEAD \
1825 transfer_RGB161616_to_RGB8((output), (uint16_t*)(input)); \
1826 TRANSFER_FRAME_TAIL \
1829 TRANSFER_FRAME_HEAD \
1830 transfer_RGB161616_to_BGR565((output), (uint16_t*)(input)); \
1831 TRANSFER_FRAME_TAIL \
1834 TRANSFER_FRAME_HEAD \
1835 transfer_RGB161616_to_RGB565((output), (uint16_t*)(input)); \
1836 TRANSFER_FRAME_TAIL \
1839 TRANSFER_FRAME_HEAD \
1840 transfer_RGB161616_to_BGR888((output), (uint16_t*)(input)); \
1841 TRANSFER_FRAME_TAIL \
1844 TRANSFER_FRAME_HEAD \
1845 transfer_RGB161616_to_BGR8888((output), (uint16_t*)(input)); \
1846 TRANSFER_FRAME_TAIL \
1849 TRANSFER_FRAME_HEAD \
1850 transfer_RGB161616_to_RGB888((output), (uint16_t*)(input)); \
1851 TRANSFER_FRAME_TAIL \
1854 TRANSFER_FRAME_HEAD \
1855 transfer_RGB161616_to_RGBA8888((output), (uint16_t*)(input)); \
1856 TRANSFER_FRAME_TAIL \
1858 case BC_RGB_FLOAT: \
1859 TRANSFER_FRAME_HEAD \
1860 transfer_RGB161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1861 TRANSFER_FRAME_TAIL \
1863 case BC_RGBA_FLOAT: \
1864 TRANSFER_FRAME_HEAD \
1865 transfer_RGB161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1866 TRANSFER_FRAME_TAIL \
1869 TRANSFER_FRAME_HEAD \
1870 transfer_RGB161616_to_YUV888((output), (uint16_t*)(input)); \
1871 TRANSFER_FRAME_TAIL \
1874 TRANSFER_FRAME_HEAD \
1875 transfer_RGB161616_to_YUVA8888((output), (uint16_t*)(input)); \
1876 TRANSFER_FRAME_TAIL \
1878 case BC_YUV161616: \
1879 TRANSFER_FRAME_HEAD \
1880 transfer_RGB161616_to_YUV161616((uint16_t**)(output), (uint16_t*)(input)); \
1881 TRANSFER_FRAME_TAIL \
1883 case BC_YUVA16161616: \
1884 TRANSFER_FRAME_HEAD \
1885 transfer_RGB161616_to_YUVA16161616((uint16_t**)(output), (uint16_t*)(input)); \
1886 TRANSFER_FRAME_TAIL \
1888 case BC_YUV101010: \
1889 TRANSFER_FRAME_HEAD \
1890 transfer_RGB161616_to_YUV101010((output), (uint16_t*)(input)); \
1891 TRANSFER_FRAME_TAIL \
1894 TRANSFER_YUV420P_OUT_HEAD \
1895 transfer_RGB161616_to_YUV420P_YUV422P(output_y, \
1898 (uint16_t*)(input), \
1900 TRANSFER_FRAME_TAIL \
1903 TRANSFER_YUV422P_OUT_HEAD \
1904 transfer_RGB161616_to_YUV420P_YUV422P(output_y, \
1907 (uint16_t*)(input), \
1909 TRANSFER_FRAME_TAIL \
1912 TRANSFER_YUV444P_OUT_HEAD \
1913 transfer_RGB161616_to_YUV444P(output_y, \
1916 (uint16_t*)(input), \
1918 TRANSFER_FRAME_TAIL \
1923 case BC_RGBA16161616: \
1924 switch(out_colormodel) \
1927 TRANSFER_FRAME_HEAD \
1928 transfer_RGBA16161616_to_RGB8((output), (uint16_t*)(input)); \
1929 TRANSFER_FRAME_TAIL \
1932 TRANSFER_FRAME_HEAD \
1933 transfer_RGBA16161616_to_BGR565((output), (uint16_t*)(input)); \
1934 TRANSFER_FRAME_TAIL \
1937 TRANSFER_FRAME_HEAD \
1938 transfer_RGBA16161616_to_RGB565((output), (uint16_t*)(input)); \
1939 TRANSFER_FRAME_TAIL \
1942 TRANSFER_FRAME_HEAD \
1943 transfer_RGBA16161616_to_BGR888((output), (uint16_t*)(input)); \
1944 TRANSFER_FRAME_TAIL \
1947 TRANSFER_FRAME_HEAD \
1948 transfer_RGBA16161616_to_BGR8888((output), (uint16_t*)(input)); \
1949 TRANSFER_FRAME_TAIL \
1952 TRANSFER_FRAME_HEAD \
1953 transfer_RGBA16161616_to_RGB888((output), (uint16_t*)(input)); \
1954 TRANSFER_FRAME_TAIL \
1957 TRANSFER_FRAME_HEAD \
1958 transfer_RGBA16161616_to_RGBA8888((output),(uint16_t*)(input)); \
1959 TRANSFER_FRAME_TAIL \
1961 case BC_RGB_FLOAT: \
1962 TRANSFER_FRAME_HEAD \
1963 transfer_RGBA16161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1964 TRANSFER_FRAME_TAIL \
1966 case BC_RGBA_FLOAT: \
1967 TRANSFER_FRAME_HEAD \
1968 transfer_RGBA16161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1969 TRANSFER_FRAME_TAIL \
1972 TRANSFER_FRAME_HEAD \
1973 transfer_RGBA16161616_to_YUV888((output), (uint16_t*)(input)); \
1974 TRANSFER_FRAME_TAIL \
1977 TRANSFER_FRAME_HEAD \
1978 transfer_RGBA16161616_to_YUVA8888((output), (uint16_t*)(input)); \
1979 TRANSFER_FRAME_TAIL \
1981 case BC_YUV161616: \
1982 TRANSFER_FRAME_HEAD \
1983 transfer_RGBA16161616_to_YUV161616(((uint16_t**)output), (uint16_t*)(input)); \
1984 TRANSFER_FRAME_TAIL \
1986 case BC_YUVA16161616: \
1987 TRANSFER_FRAME_HEAD \
1988 transfer_RGBA16161616_to_YUVA16161616((uint16_t**)(output), (uint16_t*)(input)); \
1989 TRANSFER_FRAME_TAIL \
1991 case BC_YUV101010: \
1992 TRANSFER_FRAME_HEAD \
1993 transfer_RGBA16161616_to_YUV101010((output), (uint16_t*)(input)); \
1994 TRANSFER_FRAME_TAIL \
1997 TRANSFER_YUV420P_OUT_HEAD \
1998 transfer_RGBA16161616_to_YUV420P_YUV422P(output_y, \
2001 (uint16_t*)(input), \
2003 TRANSFER_FRAME_TAIL \
2006 TRANSFER_YUV422P_OUT_HEAD \
2007 transfer_RGBA16161616_to_YUV420P_YUV422P(output_y, \
2010 (uint16_t*)(input), \
2012 TRANSFER_FRAME_TAIL \
2015 TRANSFER_YUV444P_OUT_HEAD \
2016 transfer_RGBA16161616_to_YUV444P(output_y, \
2019 (uint16_t*)(input), \
2021 TRANSFER_FRAME_TAIL \
2027 switch(out_colormodel) \
2030 TRANSFER_FRAME_HEAD \
2031 transfer_BGR8888_to_RGB888((output), (input)); \
2032 TRANSFER_FRAME_TAIL \
2035 TRANSFER_FRAME_HEAD \
2036 transfer_BGR8888_to_BGR8888((output), (input)); \
2037 TRANSFER_FRAME_TAIL \
2043 switch(out_colormodel) \
2046 TRANSFER_FRAME_HEAD \
2047 transfer_BGR888_to_RGB888((output), (input)); \
2048 TRANSFER_FRAME_TAIL \
2056 #include <sys/time.h>
2059 static int64_t get_difference(struct timeval *start_time)
2061 struct timeval new_time;
2063 gettimeofday(&new_time, 0);
2065 new_time.tv_usec -= start_time->tv_usec;
2066 new_time.tv_sec -= start_time->tv_sec;
2067 if(new_time.tv_usec < 0)
2069 new_time.tv_usec += 1000000;
2073 return (int64_t)new_time.tv_sec * 1000000 +
2074 (int64_t)new_time.tv_usec;
2082 void cmodel_default(PERMUTATION_ARGS)
2087 switch (in_colormodel) {
2089 switch (out_colormodel) {
2092 // struct timeval start_time;
2093 // gettimeofday(&start_time, 0);
2095 short int *utog_tab = yuv_table->utog_tab8;
2096 short int *vtog_tab = yuv_table->vtog_tab8;
2097 short int *vtor_tab = yuv_table->vtor_tab8;
2098 short int *utob_tab = yuv_table->utob_tab8;
2101 for(i = 0; i < out_h; i++)
2103 unsigned char *input_row = input_rows[row_table[i]];
2104 unsigned char *output_row = output_rows[i + out_y] + out_x * out_pixelsize;
2105 unsigned char *input_data = input_row + (column_table[0] << 2);
2106 __builtin_prefetch (input_data, 0, 0);
2109 for(j = 0; j < out_w; j++)
2111 unsigned char y = input_data[0];
2112 unsigned char u = input_data[1];
2113 unsigned char v = input_data[2];
2114 unsigned char a = input_data[3];
2116 /* the secret of the speedup ... delayed index calculation */
2117 /* we do not overflow at the end since column table holds + 1 element */
2118 input_data = input_row + (column_table[j + 1] << 2);
2120 short int r = y + vtor_tab[v];
2121 short int g = y + utog_tab[u] + vtog_tab[v];
2122 short int b = y + utob_tab[u];
2124 r = (r < 0 ? 0 : (r > 0xff ? 0xff : r));
2125 g = (g < 0 ? 0 : (g > 0xff ? 0xff : g));
2126 b = (b < 0 ? 0 : (b > 0xff ? 0xff : b));
2132 output_row[0] = ((b) >> 8);
2133 output_row[1] = ((g) >> 8);
2134 output_row[2] = ((r) >> 8);
2140 // long long dif= get_difference(&start_time);
2141 // printf("diff_inside: %lli\n", dif);
2152 TRANSFER_FRAME_DEFAULT(&output_row,
2153 input_row + column_table[j] * in_pixelsize,
2162 TRANSFER_FRAME_DEFAULT(&output_row,
2163 input_row + j * in_pixelsize,