r370: Heroine Virutal's official release 1.2.1
[cinelerra_cv/mob.git] / hvirtual / quicktime / cmodel_default.c
blob5468abed8b07c9f4b8e4b471879d507626f11fbb
1 /*
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.
6 *
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
15 * USA
17 #include "cmodel_permutation.h"
27 // ********************************* YUV101010 -> *****************************
29 #define READ_YUV101010 \
30 uint64_t y, u, v; \
31 uint32_t input_i = input[0] | \
32 (input[1] << 8) | \
33 (input[2] << 16) | \
34 (input[3] << 24); \
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)
47 int r, g, b;
49 READ_YUV101010
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)
62 int r, g, b;
64 READ_YUV101010
66 y = (y << 8) | (y >> 8);
68 YUV_TO_RGB16(y, u, v, r, g, b);
70 *(uint16_t*)(*output) = (b & 0xf800) |
71 ((g & 0xfc00) >> 5) |
72 ((r & 0xf800) >> 11);
73 (*output) += 2;
76 static inline void transfer_YUV101010_to_RGB565(unsigned char *(*output), unsigned char *input)
78 int r, g, b;
80 READ_YUV101010
82 y = (y << 8) | (y >> 8);
84 YUV_TO_RGB16(y, u, v, r, g, b);
86 *(uint16_t*)(*output) = (r & 0xf800) |
87 ((g & 0xfc00) >> 5) |
88 ((b & 0xf800) >> 11);
89 (*output) += 2;
92 static inline void transfer_YUV101010_to_BGR888(unsigned char *(*output), unsigned char *input)
94 int r, g, b;
96 READ_YUV101010
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)
109 int r, g, b;
111 READ_YUV101010
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;
120 (*output)++;
123 static inline void transfer_YUV101010_to_YUV888(unsigned char *(*output), unsigned char *input)
125 READ_YUV101010
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)
134 READ_YUV101010
136 *(*output)++ = y >> 8;
137 *(*output)++ = u >> 8;
138 *(*output)++ = v >> 8;
139 *(*output)++ = 0xff;
142 static inline void transfer_YUV101010_to_YUV161616(uint16_t *(*output), unsigned char *input)
144 READ_YUV101010
146 *(*output)++ = y;
147 *(*output)++ = u;
148 *(*output)++ = v;
151 static inline void transfer_YUV101010_to_YUVA16161616(uint16_t *(*output), unsigned char *input)
153 READ_YUV101010
155 *(*output)++ = y;
156 *(*output)++ = u;
157 *(*output)++ = v;
158 *(*output)++ = 0xffff;
161 static inline void transfer_YUV101010_to_RGB888(unsigned char *(*output), unsigned char *input)
163 int r, g, b;
165 READ_YUV101010
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)
178 int r, g, b;
180 READ_YUV101010
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;
189 *(*output)++ = 0xff;
192 static inline void transfer_YUV101010_to_RGB161616(uint16_t *(*output), unsigned char *input)
194 int r, g, b;
196 READ_YUV101010
198 y = (y << 8) | (y >> 8);
200 YUV_TO_RGB16(y, u, v, r, g, b);
202 *(*output)++ = r;
203 *(*output)++ = g;
204 *(*output)++ = b;
207 static inline void transfer_YUV101010_to_RGBA16161616(uint16_t *(*output), unsigned char *input)
209 int r, g, b;
211 READ_YUV101010
213 y = (y << 8) | (y >> 8);
215 YUV_TO_RGB16(y, u, v, r, g, b);
217 *(*output)++ = r;
218 *(*output)++ = g;
219 *(*output)++ = b;
220 *(*output)++ = 0xffff;
226 static inline void transfer_YUV101010_to_RGB_FLOAT(float *(*output),
227 unsigned char *input)
229 float r, g, b;
230 float y_f;
232 READ_YUV101010
234 y_f = (float)y / 0xffff;
236 YUV16_TO_RGB_FLOAT(y_f, u, v, r, g, b);
238 *(*output)++ = r;
239 *(*output)++ = g;
240 *(*output)++ = b;
243 static inline void transfer_YUV101010_to_RGBA_FLOAT(float *(*output),
244 unsigned char *input)
246 float r, g, b;
247 float y_f;
249 READ_YUV101010
251 y_f = (float)y / 0xffff;
253 YUV16_TO_RGB_FLOAT(y_f, u, v, r, g, b);
255 *(*output)++ = r;
256 *(*output)++ = g;
257 *(*output)++ = b;
258 *(*output)++ = 1.0;
279 // ******************************** VYU888 -> *********************************
282 static inline void transfer_VYU888_to_RGB8(unsigned char *(*output), unsigned char *input)
284 int y, u, v;
285 int r, g, b;
287 y = ((int)input[1]) << 16;
288 u = input[2];
289 v = input[0];
290 YUV_TO_RGB(y, u, v, r, g, b);
292 *(*output) = (unsigned char)((r & 0xc0) +
293 ((g & 0xe0) >> 2) +
294 ((b & 0xe0) >> 5));
295 (*output)++;
298 static inline void transfer_VYU888_to_BGR565(unsigned char *(*output), unsigned char *input)
300 int y, u, v;
301 int r, g, b;
303 y = ((int)input[1]) << 16;
304 u = input[2];
305 v = input[0];
306 YUV_TO_RGB(y, u, v, r, g, b);
307 *(uint16_t*)(*output) = ((b & 0xf8) << 8)
308 + ((g & 0xfc) << 3)
309 + ((r & 0xf8) >> 3);
310 (*output) += 2;
313 static inline void transfer_VYU888_to_RGB565(unsigned char *(*output), unsigned char *input)
315 int y, u, v;
316 int r, g, b;
318 y = ((int)input[1]) << 16;
319 u = input[2];
320 v = input[0];
321 YUV_TO_RGB(y, u, v, r, g, b);
322 *(uint16_t*)(*output) = ((r & 0xf8) << 8)
323 + ((g & 0xfc) << 3)
324 + ((b & 0xf8) >> 3);
325 (*output) += 2;
328 static inline void transfer_VYU888_to_BGR888(unsigned char *(*output), unsigned char *input)
330 int y, u, v;
331 int r, g, b;
333 y = ((int)input[1]) << 16;
334 u = input[2];
335 v = input[0];
336 YUV_TO_RGB(y, u, v, r, g, b);
338 (*output)[2] = r;
339 (*output)[1] = g;
340 (*output)[0] = b;
341 (*output) += 3;
344 static inline void transfer_VYU888_to_BGR8888(unsigned char *(*output), unsigned char *input)
346 int y, u, v;
347 int r, g, b;
349 y = ((int)input[1]) << 16;
350 u = input[2];
351 v = input[0];
352 YUV_TO_RGB(y, u, v, r, g, b);
353 (*output)[2] = r;
354 (*output)[1] = g;
355 (*output)[0] = b;
356 (*output) += 4;
360 static inline void transfer_VYU888_to_RGB888(unsigned char *(*output), unsigned char *input)
362 int y, u, v;
363 int r, g, b;
365 y = ((int)input[1]) << 16;
366 u = input[2];
367 v = input[0];
368 YUV_TO_RGB(y, u, v, r, g, b);
370 (*output)[0] = r;
371 (*output)[1] = g;
372 (*output)[2] = b;
373 (*output) += 3;
376 static inline void transfer_VYU888_to_RGBA8888(unsigned char *(*output), unsigned char *input)
378 int y, u, v;
379 int r, g, b;
381 y = ((int)input[1]) << 16;
382 u = input[2];
383 v = input[0];
384 YUV_TO_RGB(y, u, v, r, g, b);
386 (*output)[0] = r;
387 (*output)[1] = g;
388 (*output)[2] = b;
389 (*output)[3] = 0xff;
390 (*output) += 4;
394 static inline void transfer_VYU888_to_RGB161616(uint16_t *(*output), unsigned char *input)
396 int y, u, v;
397 int r, g, b;
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);
404 (*output)[0] = r;
405 (*output)[1] = g;
406 (*output)[2] = b;
407 (*output) += 3;
410 static inline void transfer_VYU888_to_RGBA16161616(uint16_t *(*output), unsigned char *input)
412 int y, u, v;
413 int r, g, b;
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);
420 (*output)[0] = r;
421 (*output)[1] = g;
422 (*output)[2] = b;
423 (*output)[3] = 0xffff;
424 (*output) += 3;
428 static inline void transfer_VYU888_to_RGB_FLOAT(float *(*output), unsigned char *input)
430 float y;
431 int u, v;
432 float r, g, b;
434 v = *input++;
435 y = (float)*input++ / 0xff;
436 u = *input;
437 YUV_TO_FLOAT(y, u, v, r, g, b);
439 *(*output)++ = r;
440 *(*output)++ = g;
441 *(*output)++ = b;
444 static inline void transfer_VYU888_to_RGBA_FLOAT(float *(*output), unsigned char *input)
446 float y;
447 int u, v;
448 float r, g, b;
450 v = *input++;
451 y = (float)*input++ / 0xff;
452 u = *input;
453 YUV_TO_FLOAT(y, u, v, r, g, b);
455 *(*output)++ = r;
456 *(*output)++ = g;
457 *(*output)++ = b;
458 *(*output)++ = 1.0;
462 static inline void transfer_VYU888_to_YUV888(unsigned char *(*output), unsigned char *input)
464 (*output)[0] = input[1];
465 (*output)[1] = input[2];
466 (*output)[2] = input[0];
467 (*output) += 3;
470 static inline void transfer_VYU888_to_YUVA8888(unsigned char *(*output), unsigned char *input)
472 (*output)[0] = input[1];
473 (*output)[1] = input[2];
474 (*output)[2] = input[0];
475 (*output)[3] = 0xff;
476 (*output) += 4;
480 static inline void transfer_VYU888_to_YUV161616(uint16_t *(*output), unsigned char *input)
482 (*output)[0] = ((int)input[1]) << 8;
483 (*output)[1] = ((int)input[2]) << 8;
484 (*output)[2] = ((int)input[0]) << 8;
485 (*output) += 3;
488 static inline void transfer_VYU888_to_YUVA16161616(uint16_t *(*output), unsigned char *input)
490 (*output)[0] = ((int)input[1]) << 8;
491 (*output)[1] = ((int)input[2]) << 8;
492 (*output)[2] = ((int)input[0]) << 8;
493 (*output)[3] = 0xff;
494 (*output) += 4;
508 // ******************************** UYVA8888 -> *********************************
511 static inline void transfer_UYVA8888_to_RGB8(unsigned char *(*output), unsigned char *input)
513 int y, u, v;
514 int r, g, b;
516 y = ((int)input[1]) << 16;
517 u = input[0];
518 v = input[2];
519 YUV_TO_RGB(y, u, v, r, g, b);
521 r = r * input[3] / 0xff;
522 g = g * input[3] / 0xff;
523 b = b * input[3] / 0xff;
524 *(*output) = (unsigned char)((r & 0xc0) +
525 ((g & 0xe0) >> 2) +
526 ((b & 0xe0) >> 5));
527 (*output)++;
530 static inline void transfer_UYVA8888_to_BGR565(unsigned char *(*output), unsigned char *input)
532 int y, u, v;
533 int r, g, b;
535 y = ((int)input[1]) << 16;
536 u = input[0];
537 v = input[2];
538 YUV_TO_RGB(y, u, v, r, g, b);
539 r = r * input[3] / 0xff;
540 g = g * input[3] / 0xff;
541 b = b * input[3] / 0xff;
542 *(uint16_t*)(*output) = ((b & 0xf8) << 8)
543 + ((g & 0xfc) << 3)
544 + ((r & 0xf8) >> 3);
545 (*output) += 2;
548 static inline void transfer_UYVA8888_to_RGB565(unsigned char *(*output), unsigned char *input)
550 int y, u, v;
551 int r, g, b;
553 y = ((int)input[1]) << 16;
554 u = input[0];
555 v = input[2];
556 YUV_TO_RGB(y, u, v, r, g, b);
557 r = r * input[3] / 0xff;
558 g = g * input[3] / 0xff;
559 b = b * input[3] / 0xff;
560 *(uint16_t*)(*output) = ((r & 0xf8) << 8)
561 + ((g & 0xfc) << 3)
562 + ((b & 0xf8) >> 3);
563 (*output) += 2;
566 static inline void transfer_UYVA8888_to_BGR888(unsigned char *(*output), unsigned char *input)
568 int y, u, v;
569 int r, g, b;
571 y = ((int)input[1]) << 16;
572 u = input[0];
573 v = input[2];
574 YUV_TO_RGB(y, u, v, r, g, b);
575 r = r * input[3] / 0xff;
576 g = g * input[3] / 0xff;
577 b = b * input[3] / 0xff;
579 (*output)[2] = r;
580 (*output)[1] = g;
581 (*output)[0] = b;
582 (*output) += 3;
585 static inline void transfer_UYVA8888_to_BGR8888(unsigned char *(*output), unsigned char *input)
587 int y, u, v;
588 int r, g, b;
590 y = ((int)input[1]) << 16;
591 u = input[0];
592 v = input[2];
593 YUV_TO_RGB(y, u, v, r, g, b);
594 r = r * input[3] / 0xff;
595 g = g * input[3] / 0xff;
596 b = b * input[3] / 0xff;
598 (*output)[2] = r;
599 (*output)[1] = g;
600 (*output)[0] = b;
601 (*output) += 4;
605 static inline void transfer_UYVA8888_to_RGB888(unsigned char *(*output), unsigned char *input)
607 int y, u, v;
608 int r, g, b;
610 y = ((int)input[1]) << 16;
611 u = input[0];
612 v = input[2];
613 YUV_TO_RGB(y, u, v, r, g, b);
614 r = r * input[3] / 0xff;
615 g = g * input[3] / 0xff;
616 b = b * input[3] / 0xff;
618 (*output)[0] = r;
619 (*output)[1] = g;
620 (*output)[2] = b;
621 (*output) += 3;
624 static inline void transfer_UYVA8888_to_RGBA8888(unsigned char *(*output), unsigned char *input)
626 int y, u, v;
627 int r, g, b;
629 y = ((int)input[1]) << 16;
630 u = input[0];
631 v = input[2];
632 YUV_TO_RGB(y, u, v, r, g, b);
634 (*output)[0] = r;
635 (*output)[1] = g;
636 (*output)[2] = b;
637 (*output)[3] = input[3];
638 (*output) += 4;
642 static inline void transfer_UYVA8888_to_RGB161616(uint16_t *(*output), unsigned char *input)
644 int y, u, v;
645 int r, g, b;
647 y = ((int)input[1]) << 16;
648 u = (input[0] << 8) | input[0];
649 v = (input[2] << 8) | input[2];
650 YUV_TO_RGB16(y, u, v, r, g, b);
651 r = r * input[3] / 0xff;
652 g = g * input[3] / 0xff;
653 b = b * input[3] / 0xff;
655 (*output)[0] = r;
656 (*output)[1] = g;
657 (*output)[2] = b;
658 (*output) += 3;
661 static inline void transfer_UYVA8888_to_RGBA16161616(uint16_t *(*output), unsigned char *input)
663 int y, u, v;
664 int r, g, b;
666 y = ((int)input[1]) << 16;
667 u = (input[0] << 8) | input[0];
668 v = (input[2] << 8) | input[2];
669 YUV_TO_RGB16(y, u, v, r, g, b);
671 (*output)[0] = r;
672 (*output)[1] = g;
673 (*output)[2] = b;
674 (*output)[3] = input[3] << 8;
675 (*output) += 4;
678 static inline void transfer_UYVA8888_to_RGB_FLOAT(float *(*output), unsigned char *input)
680 float y, a;
681 int u, v;
682 float r, g, b;
684 u = *input++;
685 y = (float)*input++ / 0xff;
686 v = *input++;
687 a = (float)*input / 0xff;
688 YUV_TO_FLOAT(y, u, v, r, g, b);
690 r = r * a;
691 g = g * a;
692 b = b * a;
694 *(*output)++ = r;
695 *(*output)++ = g;
696 *(*output)++ = b;
699 static inline void transfer_UYVA8888_to_RGBA_FLOAT(float *(*output), unsigned char *input)
701 float y, a;
702 int u, v;
703 float r, g, b;
705 u = *input++;
706 y = (float)*input++ / 0xff;
707 v = *input++;
708 a = (float)*input / 0xff;
709 YUV_TO_FLOAT(y, u, v, r, g, b);
711 *(*output)++ = r;
712 *(*output)++ = g;
713 *(*output)++ = b;
714 *(*output)++ = a;
718 static inline void transfer_UYVA8888_to_YUV888(unsigned char *(*output), unsigned char *input)
720 int a, anti_a;
721 a = input[3];
722 anti_a = 0xff - a;
724 (*output)[0] = (a * input[1]) / 0xff;
725 (*output)[1] = (a * input[0] + anti_a * 0x80) / 0xff;
726 (*output)[2] = (a * input[2] + anti_a * 0x80) / 0xff;
727 (*output) += 3;
730 static inline void transfer_UYVA8888_to_YUVA8888(unsigned char *(*output), unsigned char *input)
732 (*output)[0] = input[1];
733 (*output)[1] = input[0];
734 (*output)[2] = input[2];
735 (*output)[3] = input[3];
736 (*output) += 4;
740 static inline void transfer_UYVA8888_to_YUV161616(uint16_t *(*output), unsigned char *input)
742 int a, anti_a;
743 a = input[3];
744 anti_a = 0xff - a;
746 (*output)[0] = a * input[1];
747 (*output)[1] = a * input[0] + anti_a * 0x80;
748 (*output)[2] = a * input[2] + anti_a * 0x80;
749 (*output) += 3;
752 static inline void transfer_UYVA8888_to_YUVA16161616(uint16_t *(*output), unsigned char *input)
754 (*output)[0] = input[1] << 8;
755 (*output)[1] = input[0] << 8;
756 (*output)[2] = input[2] << 8;
757 (*output)[3] = input[3] << 8;
758 (*output) += 4;
770 #define TRANSFER_FRAME_DEFAULT(output, \
771 input, \
772 y_in_offset, \
773 u_in_offset, \
774 v_in_offset, \
775 input_column) \
777 register int i, j; \
779 switch(in_colormodel) \
781 case BC_YUV888: \
782 switch(out_colormodel) \
784 case BC_RGB8: \
785 TRANSFER_FRAME_HEAD \
786 transfer_YUV888_to_RGB8((output), (input)); \
787 TRANSFER_FRAME_TAIL \
788 break; \
789 case BC_BGR565: \
790 TRANSFER_FRAME_HEAD \
791 transfer_YUV888_to_BGR565((output), (input)); \
792 TRANSFER_FRAME_TAIL \
793 break; \
794 case BC_RGB565: \
795 TRANSFER_FRAME_HEAD \
796 transfer_YUV888_to_RGB565((output), (input)); \
797 TRANSFER_FRAME_TAIL \
798 break; \
799 case BC_BGR888: \
800 TRANSFER_FRAME_HEAD \
801 transfer_YUV888_to_BGR888((output), (input)); \
802 TRANSFER_FRAME_TAIL \
803 break; \
804 case BC_BGR8888: \
805 TRANSFER_FRAME_HEAD \
806 transfer_YUV888_to_BGR8888((output), (input)); \
807 TRANSFER_FRAME_TAIL \
808 break; \
809 case BC_RGB888: \
810 TRANSFER_FRAME_HEAD \
811 transfer_YUV888_to_RGB888((output), (input)); \
812 TRANSFER_FRAME_TAIL \
813 break; \
814 case BC_RGBA8888: \
815 TRANSFER_FRAME_HEAD \
816 transfer_YUV888_to_RGBA8888((output), (input)); \
817 TRANSFER_FRAME_TAIL \
818 break; \
819 case BC_RGB_FLOAT: \
820 TRANSFER_FRAME_HEAD \
821 transfer_YUV888_to_RGB_FLOAT((float**)(output), (input)); \
822 TRANSFER_FRAME_TAIL \
823 break; \
824 case BC_RGBA_FLOAT: \
825 TRANSFER_FRAME_HEAD \
826 transfer_YUV888_to_RGBA_FLOAT((float**)(output), (input)); \
827 TRANSFER_FRAME_TAIL \
828 break; \
829 case BC_YUV101010: \
830 TRANSFER_FRAME_HEAD \
831 transfer_YUV888_to_YUV101010((output), (input)); \
832 TRANSFER_FRAME_TAIL \
833 break; \
834 case BC_YUV420P: \
835 TRANSFER_YUV420P_OUT_HEAD \
836 transfer_YUV888_to_YUV420P_YUV422P(output_y, \
837 output_u, \
838 output_v, \
839 (input), \
840 j); \
841 TRANSFER_FRAME_TAIL \
842 break; \
843 case BC_YUV422P: \
844 TRANSFER_YUV422P_OUT_HEAD \
845 transfer_YUV888_to_YUV420P_YUV422P(output_y, \
846 output_u, \
847 output_v, \
848 (input), \
849 j); \
850 TRANSFER_FRAME_TAIL \
851 break; \
852 case BC_YUV444P: \
853 TRANSFER_YUV444P_OUT_HEAD \
854 transfer_YUV888_to_YUV444P(output_y, \
855 output_u, \
856 output_v, \
857 (input), \
858 j); \
859 TRANSFER_FRAME_TAIL \
860 break; \
861 case BC_YUV422: \
862 TRANSFER_FRAME_HEAD \
863 transfer_YUV888_to_YUV422((output), \
864 (input), \
865 j); \
866 TRANSFER_FRAME_TAIL \
867 break; \
868 case BC_YUV888: \
869 TRANSFER_FRAME_HEAD \
870 transfer_YUV888_to_YUV888((output), (input)); \
871 TRANSFER_FRAME_TAIL \
872 break; \
873 case BC_YUVA8888: \
874 TRANSFER_FRAME_HEAD \
875 transfer_YUV888_to_YUVA8888((output), (input)); \
876 TRANSFER_FRAME_TAIL \
877 break; \
878 case BC_VYU888: \
879 TRANSFER_FRAME_HEAD \
880 transfer_YUV888_to_VYU888((output), (input)); \
881 TRANSFER_FRAME_TAIL \
882 break; \
883 case BC_UYVA8888: \
884 TRANSFER_FRAME_HEAD \
885 transfer_YUV888_to_UYVA8888((output), (input)); \
886 TRANSFER_FRAME_TAIL \
887 break; \
889 break; \
891 case BC_YUVA8888: \
892 switch(out_colormodel) \
894 case BC_RGB8: \
895 TRANSFER_FRAME_HEAD \
896 transfer_YUVA8888_to_RGB8((output), (input)); \
897 TRANSFER_FRAME_TAIL \
898 break; \
899 case BC_BGR565: \
900 TRANSFER_FRAME_HEAD \
901 transfer_YUVA8888_to_BGR565((output), (input)); \
902 TRANSFER_FRAME_TAIL \
903 break; \
904 case BC_RGB565: \
905 TRANSFER_FRAME_HEAD \
906 transfer_YUVA8888_to_RGB565((output), (input)); \
907 TRANSFER_FRAME_TAIL \
908 break; \
909 case BC_BGR888: \
910 TRANSFER_FRAME_HEAD \
911 transfer_YUVA8888_to_BGR888((output), (input)); \
912 TRANSFER_FRAME_TAIL \
913 break; \
914 case BC_BGR8888: \
915 TRANSFER_FRAME_HEAD \
916 transfer_YUVA8888_to_BGR8888((output), (input)); \
917 TRANSFER_FRAME_TAIL \
918 break; \
919 case BC_RGB888: \
920 TRANSFER_FRAME_HEAD \
921 transfer_YUVA8888_to_RGB888((output), (input)); \
922 TRANSFER_FRAME_TAIL \
923 break; \
924 case BC_RGBA8888: \
925 TRANSFER_FRAME_HEAD \
926 transfer_YUVA8888_to_RGBA8888((output), (input)); \
927 TRANSFER_FRAME_TAIL \
928 break; \
929 case BC_RGB_FLOAT: \
930 TRANSFER_FRAME_HEAD \
931 transfer_YUVA8888_to_RGB_FLOAT((float**)(output), (input)); \
932 TRANSFER_FRAME_TAIL \
933 break; \
934 case BC_RGBA_FLOAT: \
935 TRANSFER_FRAME_HEAD \
936 transfer_YUVA8888_to_RGBA_FLOAT((float**)(output), (input)); \
937 TRANSFER_FRAME_TAIL \
938 break; \
939 case BC_VYU888: \
940 TRANSFER_FRAME_HEAD \
941 transfer_YUVA8888_to_VYU888((output), (input)); \
942 TRANSFER_FRAME_TAIL \
943 break; \
944 case BC_YUVA8888: \
945 TRANSFER_FRAME_HEAD \
946 transfer_YUVA8888_to_YUVA8888((output), (input)); \
947 TRANSFER_FRAME_TAIL \
948 break; \
949 case BC_UYVA8888: \
950 TRANSFER_FRAME_HEAD \
951 transfer_YUVA8888_to_UYVA8888((output), (input)); \
952 TRANSFER_FRAME_TAIL \
953 break; \
954 case BC_YUV101010: \
955 TRANSFER_FRAME_HEAD \
956 transfer_YUVA8888_to_YUV101010((output), (input)); \
957 TRANSFER_FRAME_TAIL \
958 break; \
959 case BC_YUV420P: \
960 TRANSFER_YUV420P_OUT_HEAD \
961 transfer_YUVA8888_to_YUV420P_YUV422P(output_y, \
962 output_u, \
963 output_v, \
964 (input), \
965 j); \
966 TRANSFER_FRAME_TAIL \
967 break; \
968 case BC_YUV422P: \
969 TRANSFER_YUV422P_OUT_HEAD \
970 transfer_YUVA8888_to_YUV420P_YUV422P(output_y, \
971 output_u, \
972 output_v, \
973 (input), \
974 j); \
975 TRANSFER_FRAME_TAIL \
976 break; \
977 case BC_YUV444P: \
978 TRANSFER_YUV444P_OUT_HEAD \
979 transfer_YUVA8888_to_YUV444P(output_y, \
980 output_u, \
981 output_v, \
982 (input), \
983 j); \
984 TRANSFER_FRAME_TAIL \
985 break; \
986 case BC_YUV422: \
987 TRANSFER_FRAME_HEAD \
988 transfer_YUVA8888_to_YUV422((output), \
989 (input), \
990 j); \
991 TRANSFER_FRAME_TAIL \
992 break; \
994 break; \
996 case BC_YUV161616: \
997 switch(out_colormodel) \
999 case BC_RGB8: \
1000 TRANSFER_FRAME_HEAD \
1001 transfer_YUV161616_to_RGB8((output), (uint16_t*)(input)); \
1002 TRANSFER_FRAME_TAIL \
1003 break; \
1004 case BC_BGR565: \
1005 TRANSFER_FRAME_HEAD \
1006 transfer_YUV161616_to_BGR565((output), (uint16_t*)(input)); \
1007 TRANSFER_FRAME_TAIL \
1008 break; \
1009 case BC_RGB565: \
1010 TRANSFER_FRAME_HEAD \
1011 transfer_YUV161616_to_RGB565((output), (uint16_t*)(input)); \
1012 TRANSFER_FRAME_TAIL \
1013 break; \
1014 case BC_BGR888: \
1015 TRANSFER_FRAME_HEAD \
1016 transfer_YUV161616_to_BGR888((output), (uint16_t*)(input)); \
1017 TRANSFER_FRAME_TAIL \
1018 break; \
1019 case BC_BGR8888: \
1020 TRANSFER_FRAME_HEAD \
1021 transfer_YUV161616_to_BGR8888((output), (uint16_t*)(input)); \
1022 TRANSFER_FRAME_TAIL \
1023 break; \
1024 case BC_RGB888: \
1025 TRANSFER_FRAME_HEAD \
1026 transfer_YUV161616_to_RGB888((output), (uint16_t*)(input)); \
1027 TRANSFER_FRAME_TAIL \
1028 break; \
1029 case BC_RGBA8888: \
1030 TRANSFER_FRAME_HEAD \
1031 transfer_YUV161616_to_RGBA8888((output), (uint16_t*)(input)); \
1032 TRANSFER_FRAME_TAIL \
1033 break; \
1034 case BC_RGB_FLOAT: \
1035 TRANSFER_FRAME_HEAD \
1036 transfer_YUV161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1037 TRANSFER_FRAME_TAIL \
1038 break; \
1039 case BC_RGBA_FLOAT: \
1040 TRANSFER_FRAME_HEAD \
1041 transfer_YUV161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1042 TRANSFER_FRAME_TAIL \
1043 break; \
1044 case BC_YUV420P: \
1045 TRANSFER_YUV420P_OUT_HEAD \
1046 transfer_YUV161616_to_YUV420P_YUV422P(output_y, \
1047 output_u, \
1048 output_v, \
1049 (uint16_t*)(input), \
1050 j); \
1051 TRANSFER_FRAME_TAIL \
1052 break; \
1053 case BC_YUV422P: \
1054 TRANSFER_YUV422P_OUT_HEAD \
1055 transfer_YUV161616_to_YUV420P_YUV422P(output_y, \
1056 output_u, \
1057 output_v, \
1058 (uint16_t*)(input), \
1059 j); \
1060 TRANSFER_FRAME_TAIL \
1061 break; \
1062 case BC_YUV444P: \
1063 TRANSFER_YUV444P_OUT_HEAD \
1064 transfer_YUV161616_to_YUV444P(output_y, \
1065 output_u, \
1066 output_v, \
1067 (uint16_t*)(input), \
1068 j); \
1069 TRANSFER_FRAME_TAIL \
1070 break; \
1071 case BC_YUV422: \
1072 TRANSFER_FRAME_HEAD \
1073 transfer_YUV161616_to_YUV422((output), \
1074 (uint16_t*)(input), \
1075 j); \
1076 TRANSFER_FRAME_TAIL \
1077 break; \
1078 case BC_YUV101010: \
1079 TRANSFER_FRAME_HEAD \
1080 transfer_YUV161616_to_YUV101010((output), (uint16_t*)(input)); \
1081 TRANSFER_FRAME_TAIL \
1082 break; \
1083 case BC_YUVA8888: \
1084 TRANSFER_FRAME_HEAD \
1085 transfer_YUV161616_to_YUVA8888((output), \
1086 (uint16_t*)(input)); \
1087 TRANSFER_FRAME_TAIL \
1088 break; \
1089 case BC_VYU888: \
1090 TRANSFER_FRAME_HEAD \
1091 transfer_YUV161616_to_VYU888((output), (uint16_t*)(input)); \
1092 TRANSFER_FRAME_TAIL \
1093 break; \
1094 case BC_UYVA8888: \
1095 TRANSFER_FRAME_HEAD \
1096 transfer_YUV161616_to_UYVA8888((output), (uint16_t*)(input)); \
1097 TRANSFER_FRAME_TAIL \
1098 break; \
1099 case BC_YUV161616: \
1100 TRANSFER_FRAME_HEAD \
1101 transfer_YUV161616_to_YUV161616((uint16_t**)(output), \
1102 (uint16_t*)(input)); \
1103 TRANSFER_FRAME_TAIL \
1104 break; \
1106 break; \
1108 case BC_YUVA16161616: \
1109 switch(out_colormodel) \
1111 case BC_RGB8: \
1112 TRANSFER_FRAME_HEAD \
1113 transfer_YUVA16161616_to_RGB8((output), (uint16_t*)(input)); \
1114 TRANSFER_FRAME_TAIL \
1115 break; \
1116 case BC_BGR565: \
1117 TRANSFER_FRAME_HEAD \
1118 transfer_YUVA16161616_to_BGR565((output), (uint16_t*)(input)); \
1119 TRANSFER_FRAME_TAIL \
1120 break; \
1121 case BC_RGB565: \
1122 TRANSFER_FRAME_HEAD \
1123 transfer_YUVA16161616_to_RGB565((output), (uint16_t*)(input)); \
1124 TRANSFER_FRAME_TAIL \
1125 break; \
1126 case BC_BGR888: \
1127 TRANSFER_FRAME_HEAD \
1128 transfer_YUVA16161616_to_BGR888((output), (uint16_t*)(input)); \
1129 TRANSFER_FRAME_TAIL \
1130 break; \
1131 case BC_BGR8888: \
1132 TRANSFER_FRAME_HEAD \
1133 transfer_YUVA16161616_to_BGR8888((output), (uint16_t*)(input)); \
1134 TRANSFER_FRAME_TAIL \
1135 break; \
1136 case BC_RGB888: \
1137 TRANSFER_FRAME_HEAD \
1138 transfer_YUVA16161616_to_RGB888((output), (uint16_t*)(input)); \
1139 TRANSFER_FRAME_TAIL \
1140 break; \
1141 case BC_RGBA8888: \
1142 TRANSFER_FRAME_HEAD \
1143 transfer_YUVA16161616_to_RGBA8888((output), (uint16_t*)(input)); \
1144 TRANSFER_FRAME_TAIL \
1145 break; \
1146 case BC_RGB_FLOAT: \
1147 TRANSFER_FRAME_HEAD \
1148 transfer_YUVA16161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1149 TRANSFER_FRAME_TAIL \
1150 break; \
1151 case BC_RGBA_FLOAT: \
1152 TRANSFER_FRAME_HEAD \
1153 transfer_YUVA16161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1154 TRANSFER_FRAME_TAIL \
1155 break; \
1156 case BC_YUV101010: \
1157 TRANSFER_FRAME_HEAD \
1158 transfer_YUVA16161616_to_YUV101010((output), (uint16_t*)(input)); \
1159 TRANSFER_FRAME_TAIL \
1160 break; \
1161 case BC_VYU888: \
1162 TRANSFER_FRAME_HEAD \
1163 transfer_YUVA16161616_to_VYU888((output), (uint16_t*)(input)); \
1164 TRANSFER_FRAME_TAIL \
1165 break; \
1166 case BC_UYVA8888: \
1167 TRANSFER_FRAME_HEAD \
1168 transfer_YUVA16161616_to_UYVA8888((output), (uint16_t*)(input)); \
1169 TRANSFER_FRAME_TAIL \
1170 break; \
1171 case BC_YUVA16161616: \
1172 TRANSFER_FRAME_HEAD \
1173 transfer_YUVA16161616_to_YUVA16161616((uint16_t**)(output), (uint16_t*)(input)); \
1174 TRANSFER_FRAME_TAIL \
1175 break; \
1176 case BC_YUV420P: \
1177 TRANSFER_YUV420P_OUT_HEAD \
1178 transfer_YUVA16161616_to_YUV420P_YUV422P(output_y, \
1179 output_u, \
1180 output_v, \
1181 (uint16_t*)(input), \
1182 j); \
1183 TRANSFER_FRAME_TAIL \
1184 break; \
1185 case BC_YUV422P: \
1186 TRANSFER_YUV422P_OUT_HEAD \
1187 transfer_YUVA16161616_to_YUV420P_YUV422P(output_y, \
1188 output_u, \
1189 output_v, \
1190 (uint16_t*)(input), \
1191 j); \
1192 TRANSFER_FRAME_TAIL \
1193 break; \
1194 case BC_YUV444P: \
1195 TRANSFER_YUV444P_OUT_HEAD \
1196 transfer_YUVA16161616_to_YUV444P(output_y, \
1197 output_u, \
1198 output_v, \
1199 (uint16_t*)(input), \
1200 j); \
1201 TRANSFER_FRAME_TAIL \
1202 break; \
1203 case BC_YUV422: \
1204 TRANSFER_FRAME_HEAD \
1205 transfer_YUVA16161616_to_YUV422((output), \
1206 (uint16_t*)(input), \
1207 j); \
1208 TRANSFER_FRAME_TAIL \
1209 break; \
1211 break; \
1213 case BC_YUV101010: \
1214 switch(out_colormodel) \
1216 case BC_RGB8: \
1217 TRANSFER_FRAME_HEAD \
1218 transfer_YUV101010_to_RGB8((output), (input)); \
1219 TRANSFER_FRAME_TAIL \
1220 break; \
1221 case BC_BGR565: \
1222 TRANSFER_FRAME_HEAD \
1223 transfer_YUV101010_to_BGR565((output), (input)); \
1224 TRANSFER_FRAME_TAIL \
1225 break; \
1226 case BC_RGB565: \
1227 TRANSFER_FRAME_HEAD \
1228 transfer_YUV101010_to_RGB565((output), (input)); \
1229 TRANSFER_FRAME_TAIL \
1230 break; \
1231 case BC_BGR888: \
1232 TRANSFER_FRAME_HEAD \
1233 transfer_YUV101010_to_BGR888((output), (input)); \
1234 TRANSFER_FRAME_TAIL \
1235 break; \
1236 case BC_BGR8888: \
1237 TRANSFER_FRAME_HEAD \
1238 transfer_YUV101010_to_BGR8888((output), (input)); \
1239 TRANSFER_FRAME_TAIL \
1240 break; \
1241 case BC_RGB888: \
1242 TRANSFER_FRAME_HEAD \
1243 transfer_YUV101010_to_RGB888((output), (input)); \
1244 TRANSFER_FRAME_TAIL \
1245 break; \
1246 case BC_RGBA8888: \
1247 TRANSFER_FRAME_HEAD \
1248 transfer_YUV101010_to_RGBA8888((output), (input)); \
1249 TRANSFER_FRAME_TAIL \
1250 break; \
1251 case BC_YUV888: \
1252 TRANSFER_FRAME_HEAD \
1253 transfer_YUV101010_to_YUV888((output), (input)); \
1254 TRANSFER_FRAME_TAIL \
1255 break; \
1256 case BC_YUVA8888: \
1257 TRANSFER_FRAME_HEAD \
1258 transfer_YUV101010_to_YUVA8888((output), (input)); \
1259 TRANSFER_FRAME_TAIL \
1260 break; \
1261 case BC_RGB161616: \
1262 TRANSFER_FRAME_HEAD \
1263 transfer_YUV101010_to_RGB161616((uint16_t**)(output), (input)); \
1264 TRANSFER_FRAME_TAIL \
1265 break; \
1266 case BC_RGBA16161616: \
1267 TRANSFER_FRAME_HEAD \
1268 transfer_YUV101010_to_RGBA16161616((uint16_t**)(output), (input)); \
1269 TRANSFER_FRAME_TAIL \
1270 break; \
1271 case BC_RGB_FLOAT: \
1272 TRANSFER_FRAME_HEAD \
1273 transfer_YUV101010_to_RGB_FLOAT((float**)(output), (input)); \
1274 TRANSFER_FRAME_TAIL \
1275 break; \
1276 case BC_RGBA_FLOAT: \
1277 TRANSFER_FRAME_HEAD \
1278 transfer_YUV101010_to_RGBA_FLOAT((float**)(output), (input)); \
1279 TRANSFER_FRAME_TAIL \
1280 break; \
1281 case BC_YUV161616: \
1282 TRANSFER_FRAME_HEAD \
1283 transfer_YUV101010_to_YUV161616((uint16_t**)(output), (input)); \
1284 TRANSFER_FRAME_TAIL \
1285 break; \
1286 case BC_YUVA16161616: \
1287 TRANSFER_FRAME_HEAD \
1288 transfer_YUV101010_to_YUVA16161616((uint16_t**)(output), (input)); \
1289 TRANSFER_FRAME_TAIL \
1290 break; \
1292 break; \
1294 case BC_VYU888: \
1295 switch(out_colormodel) \
1297 case BC_RGB8: \
1298 TRANSFER_FRAME_HEAD \
1299 transfer_VYU888_to_RGB8((output), (input)); \
1300 TRANSFER_FRAME_TAIL \
1301 break; \
1302 case BC_BGR565: \
1303 TRANSFER_FRAME_HEAD \
1304 transfer_VYU888_to_BGR565((output), (input)); \
1305 TRANSFER_FRAME_TAIL \
1306 break; \
1307 case BC_RGB565: \
1308 TRANSFER_FRAME_HEAD \
1309 transfer_VYU888_to_RGB565((output), (input)); \
1310 TRANSFER_FRAME_TAIL \
1311 break; \
1312 case BC_BGR888: \
1313 TRANSFER_FRAME_HEAD \
1314 transfer_VYU888_to_BGR888((output), (input)); \
1315 TRANSFER_FRAME_TAIL \
1316 break; \
1317 case BC_BGR8888: \
1318 TRANSFER_FRAME_HEAD \
1319 transfer_VYU888_to_BGR8888((output), (input)); \
1320 TRANSFER_FRAME_TAIL \
1321 break; \
1322 case BC_RGB888: \
1323 TRANSFER_FRAME_HEAD \
1324 transfer_VYU888_to_RGB888((output), (input)); \
1325 TRANSFER_FRAME_TAIL \
1326 break; \
1327 case BC_RGBA8888: \
1328 TRANSFER_FRAME_HEAD \
1329 transfer_VYU888_to_RGBA8888((output), (input)); \
1330 TRANSFER_FRAME_TAIL \
1331 break; \
1332 case BC_YUV888: \
1333 TRANSFER_FRAME_HEAD \
1334 transfer_VYU888_to_YUV888((output), (input)); \
1335 TRANSFER_FRAME_TAIL \
1336 break; \
1337 case BC_YUVA8888: \
1338 TRANSFER_FRAME_HEAD \
1339 transfer_VYU888_to_YUVA8888((output), (input)); \
1340 TRANSFER_FRAME_TAIL \
1341 break; \
1342 case BC_RGB161616: \
1343 TRANSFER_FRAME_HEAD \
1344 transfer_VYU888_to_RGB161616((uint16_t**)(output), (input)); \
1345 TRANSFER_FRAME_TAIL \
1346 break; \
1347 case BC_RGBA16161616: \
1348 TRANSFER_FRAME_HEAD \
1349 transfer_VYU888_to_RGBA16161616((uint16_t**)(output), (input)); \
1350 TRANSFER_FRAME_TAIL \
1351 break; \
1352 case BC_RGB_FLOAT: \
1353 TRANSFER_FRAME_HEAD \
1354 transfer_VYU888_to_RGB_FLOAT((float**)(output), (input)); \
1355 TRANSFER_FRAME_TAIL \
1356 break; \
1357 case BC_RGBA_FLOAT: \
1358 TRANSFER_FRAME_HEAD \
1359 transfer_VYU888_to_RGBA_FLOAT((float**)(output), (input)); \
1360 TRANSFER_FRAME_TAIL \
1361 break; \
1362 case BC_YUV161616: \
1363 TRANSFER_FRAME_HEAD \
1364 transfer_VYU888_to_YUV161616((uint16_t**)(output), (input)); \
1365 TRANSFER_FRAME_TAIL \
1366 break; \
1367 case BC_YUVA16161616: \
1368 TRANSFER_FRAME_HEAD \
1369 transfer_VYU888_to_YUVA16161616((uint16_t**)(output), (input)); \
1370 TRANSFER_FRAME_TAIL \
1371 break; \
1373 break; \
1375 case BC_UYVA8888: \
1376 switch(out_colormodel) \
1378 case BC_RGB8: \
1379 TRANSFER_FRAME_HEAD \
1380 transfer_UYVA8888_to_RGB8((output), (input)); \
1381 TRANSFER_FRAME_TAIL \
1382 break; \
1383 case BC_BGR565: \
1384 TRANSFER_FRAME_HEAD \
1385 transfer_UYVA8888_to_BGR565((output), (input)); \
1386 TRANSFER_FRAME_TAIL \
1387 break; \
1388 case BC_RGB565: \
1389 TRANSFER_FRAME_HEAD \
1390 transfer_UYVA8888_to_RGB565((output), (input)); \
1391 TRANSFER_FRAME_TAIL \
1392 break; \
1393 case BC_BGR888: \
1394 TRANSFER_FRAME_HEAD \
1395 transfer_UYVA8888_to_BGR888((output), (input)); \
1396 TRANSFER_FRAME_TAIL \
1397 break; \
1398 case BC_BGR8888: \
1399 TRANSFER_FRAME_HEAD \
1400 transfer_UYVA8888_to_BGR8888((output), (input)); \
1401 TRANSFER_FRAME_TAIL \
1402 break; \
1403 case BC_RGB888: \
1404 TRANSFER_FRAME_HEAD \
1405 transfer_UYVA8888_to_RGB888((output), (input)); \
1406 TRANSFER_FRAME_TAIL \
1407 break; \
1408 case BC_RGBA8888: \
1409 TRANSFER_FRAME_HEAD \
1410 transfer_UYVA8888_to_RGBA8888((output), (input)); \
1411 TRANSFER_FRAME_TAIL \
1412 break; \
1413 case BC_YUV888: \
1414 TRANSFER_FRAME_HEAD \
1415 transfer_UYVA8888_to_YUV888((output), (input)); \
1416 TRANSFER_FRAME_TAIL \
1417 break; \
1418 case BC_YUVA8888: \
1419 TRANSFER_FRAME_HEAD \
1420 transfer_UYVA8888_to_YUVA8888((output), (input)); \
1421 TRANSFER_FRAME_TAIL \
1422 break; \
1423 case BC_RGB161616: \
1424 TRANSFER_FRAME_HEAD \
1425 transfer_UYVA8888_to_RGB161616((uint16_t**)(output), (input)); \
1426 TRANSFER_FRAME_TAIL \
1427 break; \
1428 case BC_RGBA16161616: \
1429 TRANSFER_FRAME_HEAD \
1430 transfer_UYVA8888_to_RGBA16161616((uint16_t**)(output), (input)); \
1431 TRANSFER_FRAME_TAIL \
1432 break; \
1433 case BC_RGB_FLOAT: \
1434 TRANSFER_FRAME_HEAD \
1435 transfer_UYVA8888_to_RGB_FLOAT((float**)(output), (input)); \
1436 TRANSFER_FRAME_TAIL \
1437 break; \
1438 case BC_RGBA_FLOAT: \
1439 TRANSFER_FRAME_HEAD \
1440 transfer_UYVA8888_to_RGBA_FLOAT((float**)(output), (input)); \
1441 TRANSFER_FRAME_TAIL \
1442 break; \
1443 case BC_YUV161616: \
1444 TRANSFER_FRAME_HEAD \
1445 transfer_UYVA8888_to_YUV161616((uint16_t**)(output), (input)); \
1446 TRANSFER_FRAME_TAIL \
1447 break; \
1448 case BC_YUVA16161616: \
1449 TRANSFER_FRAME_HEAD \
1450 transfer_UYVA8888_to_YUVA16161616((uint16_t**)(output), (input)); \
1451 TRANSFER_FRAME_TAIL \
1452 break; \
1454 break; \
1456 case BC_ARGB8888: \
1457 case BC_ABGR8888: \
1458 switch(out_colormodel) \
1460 case BC_ARGB8888: \
1461 case BC_ABGR8888: \
1462 TRANSFER_FRAME_HEAD \
1463 transfer_ARGB8888_to_ARGB8888((output), (input)); \
1464 TRANSFER_FRAME_TAIL \
1465 break; \
1467 break; \
1469 case BC_RGB888: \
1470 switch(out_colormodel) \
1472 case BC_RGB8: \
1473 TRANSFER_FRAME_HEAD \
1474 transfer_RGB888_to_RGB8((output), (input)); \
1475 TRANSFER_FRAME_TAIL \
1476 break; \
1477 case BC_BGR565: \
1478 TRANSFER_FRAME_HEAD \
1479 transfer_RGB888_to_BGR565((output), (input)); \
1480 TRANSFER_FRAME_TAIL \
1481 break; \
1482 case BC_RGB565: \
1483 TRANSFER_FRAME_HEAD \
1484 transfer_RGB888_to_RGB565((output), (input)); \
1485 TRANSFER_FRAME_TAIL \
1486 break; \
1487 case BC_BGR888: \
1488 TRANSFER_FRAME_HEAD \
1489 transfer_RGB888_to_BGR888((output), (input)); \
1490 TRANSFER_FRAME_TAIL \
1491 break; \
1492 case BC_RGB888: \
1493 TRANSFER_FRAME_HEAD \
1494 transfer_RGB888_to_RGB888((output), (input)); \
1495 TRANSFER_FRAME_TAIL \
1496 break; \
1497 case BC_RGBA8888: \
1498 TRANSFER_FRAME_HEAD \
1499 transfer_RGB888_to_RGBA8888((output), (input)); \
1500 TRANSFER_FRAME_TAIL \
1501 break; \
1502 case BC_RGB161616: \
1503 TRANSFER_FRAME_HEAD \
1504 transfer_RGB888_to_RGB161616((uint16_t**)(output), (input)); \
1505 TRANSFER_FRAME_TAIL \
1506 break; \
1507 case BC_RGBA16161616: \
1508 TRANSFER_FRAME_HEAD \
1509 transfer_RGB888_to_RGBA16161616((uint16_t**)(output), (input)); \
1510 TRANSFER_FRAME_TAIL \
1511 break; \
1512 case BC_RGB_FLOAT: \
1513 TRANSFER_FRAME_HEAD \
1514 transfer_RGB888_to_RGB_FLOAT((float**)(output), (input)); \
1515 TRANSFER_FRAME_TAIL \
1516 break; \
1517 case BC_RGBA_FLOAT: \
1518 TRANSFER_FRAME_HEAD \
1519 transfer_RGB888_to_RGBA_FLOAT((float**)(output), (input)); \
1520 TRANSFER_FRAME_TAIL \
1521 break; \
1522 case BC_ARGB8888: \
1523 TRANSFER_FRAME_HEAD \
1524 transfer_RGB888_to_ARGB8888((output), (input)); \
1525 TRANSFER_FRAME_TAIL \
1526 break; \
1527 case BC_ABGR8888: \
1528 TRANSFER_FRAME_HEAD \
1529 transfer_RGB888_to_ABGR8888((output), (input)); \
1530 TRANSFER_FRAME_TAIL \
1531 break; \
1532 case BC_BGR8888: \
1533 TRANSFER_FRAME_HEAD \
1534 transfer_RGB888_to_BGR8888((output), (input)); \
1535 TRANSFER_FRAME_TAIL \
1536 break; \
1537 case BC_YUV888: \
1538 TRANSFER_FRAME_HEAD \
1539 transfer_RGB888_to_YUV888((output), (input)); \
1540 TRANSFER_FRAME_TAIL \
1541 break; \
1542 case BC_YUVA8888: \
1543 TRANSFER_FRAME_HEAD \
1544 transfer_RGB888_to_YUVA8888((output), (input)); \
1545 TRANSFER_FRAME_TAIL \
1546 break; \
1547 case BC_YUV161616: \
1548 TRANSFER_FRAME_HEAD \
1549 transfer_RGB888_to_YUV161616((uint16_t**)(output), (input)); \
1550 TRANSFER_FRAME_TAIL \
1551 break; \
1552 case BC_YUVA16161616: \
1553 TRANSFER_FRAME_HEAD \
1554 transfer_RGB888_to_YUVA16161616((uint16_t**)(output), (input)); \
1555 TRANSFER_FRAME_TAIL \
1556 break; \
1557 case BC_YUV101010: \
1558 TRANSFER_FRAME_HEAD \
1559 transfer_RGB888_to_YUV101010((output), (input)); \
1560 TRANSFER_FRAME_TAIL \
1561 break; \
1562 case BC_YUV420P: \
1563 TRANSFER_YUV420P_OUT_HEAD \
1564 transfer_RGB888_to_YUV420P_YUV422P(output_y, \
1565 output_u, \
1566 output_v, \
1567 (input), \
1568 j); \
1569 TRANSFER_FRAME_TAIL \
1570 break; \
1571 case BC_YUV422: \
1572 TRANSFER_FRAME_HEAD \
1573 transfer_RGB888_to_YUV422((output), (input), j); \
1574 TRANSFER_FRAME_TAIL \
1575 break; \
1576 case BC_YUV422P: \
1577 TRANSFER_YUV422P_OUT_HEAD \
1578 transfer_RGB888_to_YUV420P_YUV422P(output_y, \
1579 output_u, \
1580 output_v, \
1581 (input), \
1582 j); \
1583 TRANSFER_FRAME_TAIL \
1584 break; \
1585 case BC_YUV444P: \
1586 TRANSFER_YUV444P_OUT_HEAD \
1587 transfer_RGB888_to_YUV444P(output_y, \
1588 output_u, \
1589 output_v, \
1590 (input), \
1591 j); \
1592 TRANSFER_FRAME_TAIL \
1593 break; \
1595 break; \
1597 case BC_RGBA8888: \
1598 switch(out_colormodel) \
1600 case BC_TRANSPARENCY: \
1601 TRANSFER_FRAME_HEAD \
1602 transfer_RGBA8888_to_TRANSPARENCY((output), (input), &bit_counter); \
1603 TRANSFER_FRAME_TAIL \
1604 break; \
1605 case BC_RGB8: \
1606 if(bg_color > 0) \
1607 TRANSFER_FRAME_HEAD \
1608 transfer_RGBA8888_to_RGB8bg((output), (input), bg_r, bg_g, bg_b); \
1609 TRANSFER_FRAME_TAIL \
1610 else \
1611 TRANSFER_FRAME_HEAD \
1612 transfer_RGBA8888_to_RGB8((output), (input)); \
1613 TRANSFER_FRAME_TAIL \
1614 break; \
1615 case BC_BGR565: \
1616 if(bg_color > 0) \
1617 TRANSFER_FRAME_HEAD \
1618 transfer_RGBA8888_to_BGR565bg((output), (input), bg_r, bg_g, bg_b); \
1619 TRANSFER_FRAME_TAIL \
1620 else \
1621 TRANSFER_FRAME_HEAD \
1622 transfer_RGBA8888_to_BGR565((output), (input)); \
1623 TRANSFER_FRAME_TAIL \
1624 break; \
1625 case BC_RGB565: \
1626 if(bg_color > 0) \
1627 TRANSFER_FRAME_HEAD \
1628 transfer_RGBA8888_to_RGB565bg((output), (input), bg_r, bg_g, bg_b); \
1629 TRANSFER_FRAME_TAIL \
1630 else \
1631 TRANSFER_FRAME_HEAD \
1632 transfer_RGBA8888_to_RGB565((output), (input)); \
1633 TRANSFER_FRAME_TAIL \
1634 break; \
1635 case BC_BGR888: \
1636 if(bg_color > 0) \
1637 TRANSFER_FRAME_HEAD \
1638 transfer_RGBA8888_to_BGR888bg((output), (input), bg_r, bg_g, bg_b); \
1639 TRANSFER_FRAME_TAIL \
1640 else \
1641 TRANSFER_FRAME_HEAD \
1642 transfer_RGBA8888_to_BGR888((output), (input)); \
1643 TRANSFER_FRAME_TAIL \
1644 break; \
1645 case BC_RGB888: \
1646 if(bg_color > 0) \
1647 TRANSFER_FRAME_HEAD \
1648 transfer_RGBA8888_to_RGB888bg((output), (input), bg_r, bg_g, bg_b); \
1649 TRANSFER_FRAME_TAIL \
1650 else \
1651 TRANSFER_FRAME_HEAD \
1652 transfer_RGBA8888_to_RGB888((output), (input)); \
1653 TRANSFER_FRAME_TAIL \
1654 break; \
1655 case BC_RGBA8888: \
1656 TRANSFER_FRAME_HEAD \
1657 transfer_RGBA8888_to_RGBA8888((output), (input)); \
1658 TRANSFER_FRAME_TAIL \
1659 break; \
1660 case BC_RGB161616: \
1661 TRANSFER_FRAME_HEAD \
1662 transfer_RGBA8888_to_RGB161616((uint16_t**)(output), (input)); \
1663 TRANSFER_FRAME_TAIL \
1664 break; \
1665 case BC_RGBA16161616: \
1666 TRANSFER_FRAME_HEAD \
1667 transfer_RGBA8888_to_RGBA16161616((uint16_t**)(output), (input)); \
1668 TRANSFER_FRAME_TAIL \
1669 break; \
1670 case BC_RGB_FLOAT: \
1671 TRANSFER_FRAME_HEAD \
1672 transfer_RGBA8888_to_RGB_FLOAT((float**)(output), (input)); \
1673 TRANSFER_FRAME_TAIL \
1674 break; \
1675 case BC_RGBA_FLOAT: \
1676 TRANSFER_FRAME_HEAD \
1677 transfer_RGBA8888_to_RGBA_FLOAT((float**)(output), (input)); \
1678 TRANSFER_FRAME_TAIL \
1679 break; \
1680 case BC_BGR8888: \
1681 if(bg_color > 0) \
1682 TRANSFER_FRAME_HEAD \
1683 transfer_RGBA8888_to_BGR8888bg((output), (input), bg_r, bg_g, bg_b); \
1684 TRANSFER_FRAME_TAIL \
1685 else \
1686 TRANSFER_FRAME_HEAD \
1687 transfer_RGBA8888_to_BGR8888((output), (input)); \
1688 TRANSFER_FRAME_TAIL \
1689 break; \
1690 case BC_YUV888: \
1691 TRANSFER_FRAME_HEAD \
1692 transfer_RGBA8888_to_YUV888((output), (input)); \
1693 TRANSFER_FRAME_TAIL \
1694 break; \
1695 case BC_YUVA8888: \
1696 TRANSFER_FRAME_HEAD \
1697 transfer_RGBA8888_to_YUVA8888((output), (input)); \
1698 TRANSFER_FRAME_TAIL \
1699 break; \
1700 case BC_YUV161616: \
1701 TRANSFER_FRAME_HEAD \
1702 transfer_RGBA8888_to_YUV161616((uint16_t**)(output), (input)); \
1703 TRANSFER_FRAME_TAIL \
1704 break; \
1705 case BC_YUVA16161616: \
1706 TRANSFER_FRAME_HEAD \
1707 transfer_RGBA8888_to_YUVA16161616((uint16_t**)(output), (input)); \
1708 TRANSFER_FRAME_TAIL \
1709 break; \
1710 case BC_YUV101010: \
1711 TRANSFER_FRAME_HEAD \
1712 transfer_RGBA8888_to_YUV101010((output), (input)); \
1713 TRANSFER_FRAME_TAIL \
1714 break; \
1715 case BC_YUV420P: \
1716 TRANSFER_YUV420P_OUT_HEAD \
1717 transfer_RGBA888_to_YUV420P_YUV422P(output_y, \
1718 output_u, \
1719 output_v, \
1720 (input), \
1721 j); \
1722 TRANSFER_FRAME_TAIL \
1723 break; \
1724 case BC_YUV422: \
1725 TRANSFER_FRAME_HEAD \
1726 transfer_RGBA888_to_YUV422((output), (input), j); \
1727 TRANSFER_FRAME_TAIL \
1728 break; \
1729 case BC_YUV422P: \
1730 TRANSFER_YUV422P_OUT_HEAD \
1731 transfer_RGBA888_to_YUV420P_YUV422P(output_y, \
1732 output_u, \
1733 output_v, \
1734 (input), \
1735 j); \
1736 TRANSFER_FRAME_TAIL \
1737 break; \
1738 case BC_YUV444P: \
1739 TRANSFER_YUV444P_OUT_HEAD \
1740 transfer_RGBA888_to_YUV444P(output_y, \
1741 output_u, \
1742 output_v, \
1743 (input), \
1744 j); \
1745 TRANSFER_FRAME_TAIL \
1746 break; \
1748 break; \
1750 case BC_RGB161616: \
1751 switch(out_colormodel) \
1753 case BC_RGB8: \
1754 TRANSFER_FRAME_HEAD \
1755 transfer_RGB161616_to_RGB8((output), (uint16_t*)(input)); \
1756 TRANSFER_FRAME_TAIL \
1757 break; \
1758 case BC_BGR565: \
1759 TRANSFER_FRAME_HEAD \
1760 transfer_RGB161616_to_BGR565((output), (uint16_t*)(input)); \
1761 TRANSFER_FRAME_TAIL \
1762 break; \
1763 case BC_RGB565: \
1764 TRANSFER_FRAME_HEAD \
1765 transfer_RGB161616_to_RGB565((output), (uint16_t*)(input)); \
1766 TRANSFER_FRAME_TAIL \
1767 break; \
1768 case BC_BGR888: \
1769 TRANSFER_FRAME_HEAD \
1770 transfer_RGB161616_to_BGR888((output), (uint16_t*)(input)); \
1771 TRANSFER_FRAME_TAIL \
1772 break; \
1773 case BC_BGR8888: \
1774 TRANSFER_FRAME_HEAD \
1775 transfer_RGB161616_to_BGR8888((output), (uint16_t*)(input)); \
1776 TRANSFER_FRAME_TAIL \
1777 break; \
1778 case BC_RGB888: \
1779 TRANSFER_FRAME_HEAD \
1780 transfer_RGB161616_to_RGB888((output), (uint16_t*)(input)); \
1781 TRANSFER_FRAME_TAIL \
1782 break; \
1783 case BC_RGBA8888: \
1784 TRANSFER_FRAME_HEAD \
1785 transfer_RGB161616_to_RGBA8888((output), (uint16_t*)(input)); \
1786 TRANSFER_FRAME_TAIL \
1787 break; \
1788 case BC_YUV888: \
1789 TRANSFER_FRAME_HEAD \
1790 transfer_RGB161616_to_YUV888((output), (uint16_t*)(input)); \
1791 TRANSFER_FRAME_TAIL \
1792 break; \
1793 case BC_YUVA8888: \
1794 TRANSFER_FRAME_HEAD \
1795 transfer_RGB161616_to_YUVA8888((output), (uint16_t*)(input)); \
1796 TRANSFER_FRAME_TAIL \
1797 break; \
1798 case BC_YUV101010: \
1799 TRANSFER_FRAME_HEAD \
1800 transfer_RGB161616_to_YUV101010((output), (uint16_t*)(input)); \
1801 TRANSFER_FRAME_TAIL \
1802 break; \
1803 case BC_YUV420P: \
1804 TRANSFER_YUV420P_OUT_HEAD \
1805 transfer_RGB161616_to_YUV420P_YUV422P(output_y, \
1806 output_u, \
1807 output_v, \
1808 (uint16_t*)(input), \
1809 j); \
1810 TRANSFER_FRAME_TAIL \
1811 break; \
1812 case BC_YUV422P: \
1813 TRANSFER_YUV422P_OUT_HEAD \
1814 transfer_RGB161616_to_YUV420P_YUV422P(output_y, \
1815 output_u, \
1816 output_v, \
1817 (uint16_t*)(input), \
1818 j); \
1819 TRANSFER_FRAME_TAIL \
1820 break; \
1821 case BC_YUV444P: \
1822 TRANSFER_YUV444P_OUT_HEAD \
1823 transfer_RGB161616_to_YUV444P(output_y, \
1824 output_u, \
1825 output_v, \
1826 (uint16_t*)(input), \
1827 j); \
1828 TRANSFER_FRAME_TAIL \
1829 break; \
1831 break; \
1833 case BC_RGBA16161616: \
1834 switch(out_colormodel) \
1836 case BC_RGB8: \
1837 TRANSFER_FRAME_HEAD \
1838 transfer_RGBA16161616_to_RGB8((output), (uint16_t*)(input)); \
1839 TRANSFER_FRAME_TAIL \
1840 break; \
1841 case BC_BGR565: \
1842 TRANSFER_FRAME_HEAD \
1843 transfer_RGBA16161616_to_BGR565((output), (uint16_t*)(input)); \
1844 TRANSFER_FRAME_TAIL \
1845 break; \
1846 case BC_RGB565: \
1847 TRANSFER_FRAME_HEAD \
1848 transfer_RGBA16161616_to_RGB565((output), (uint16_t*)(input)); \
1849 TRANSFER_FRAME_TAIL \
1850 break; \
1851 case BC_BGR888: \
1852 TRANSFER_FRAME_HEAD \
1853 transfer_RGBA16161616_to_BGR888((output), (uint16_t*)(input)); \
1854 TRANSFER_FRAME_TAIL \
1855 break; \
1856 case BC_BGR8888: \
1857 TRANSFER_FRAME_HEAD \
1858 transfer_RGBA16161616_to_BGR8888((output), (uint16_t*)(input)); \
1859 TRANSFER_FRAME_TAIL \
1860 break; \
1861 case BC_RGB888: \
1862 TRANSFER_FRAME_HEAD \
1863 transfer_RGBA16161616_to_RGB888((output), (uint16_t*)(input)); \
1864 TRANSFER_FRAME_TAIL \
1865 break; \
1866 case BC_RGBA8888: \
1867 TRANSFER_FRAME_HEAD \
1868 transfer_RGBA16161616_to_RGBA8888((output), (input)); \
1869 TRANSFER_FRAME_TAIL \
1870 break; \
1871 case BC_YUV101010: \
1872 TRANSFER_FRAME_HEAD \
1873 transfer_RGBA16161616_to_YUV101010((output), (uint16_t*)(input)); \
1874 TRANSFER_FRAME_TAIL \
1875 break; \
1876 case BC_YUV420P: \
1877 TRANSFER_YUV420P_OUT_HEAD \
1878 transfer_RGBA16161616_to_YUV420P_YUV422P(output_y, \
1879 output_u, \
1880 output_v, \
1881 (uint16_t*)(input), \
1882 j); \
1883 TRANSFER_FRAME_TAIL \
1884 break; \
1885 case BC_YUV422P: \
1886 TRANSFER_YUV422P_OUT_HEAD \
1887 transfer_RGBA16161616_to_YUV420P_YUV422P(output_y, \
1888 output_u, \
1889 output_v, \
1890 (uint16_t*)(input), \
1891 j); \
1892 TRANSFER_FRAME_TAIL \
1893 break; \
1894 case BC_YUV444P: \
1895 TRANSFER_YUV444P_OUT_HEAD \
1896 transfer_RGBA16161616_to_YUV444P(output_y, \
1897 output_u, \
1898 output_v, \
1899 (uint16_t*)(input), \
1900 j); \
1901 TRANSFER_FRAME_TAIL \
1902 break; \
1904 break; \
1906 case BC_BGR8888: \
1907 switch(out_colormodel) \
1909 case BC_RGB888: \
1910 TRANSFER_FRAME_HEAD \
1911 transfer_BGR8888_to_RGB888((output), (input)); \
1912 TRANSFER_FRAME_TAIL \
1913 break; \
1914 case BC_BGR8888: \
1915 TRANSFER_FRAME_HEAD \
1916 transfer_BGR8888_to_BGR8888((output), (input)); \
1917 TRANSFER_FRAME_TAIL \
1918 break; \
1920 break; \
1922 case BC_BGR888: \
1923 switch(out_colormodel) \
1925 case BC_RGB888: \
1926 TRANSFER_FRAME_HEAD \
1927 transfer_BGR888_to_RGB888((output), (input)); \
1928 TRANSFER_FRAME_TAIL \
1929 break; \
1931 break; \
1938 void cmodel_default(PERMUTATION_ARGS)
1940 if(scale)
1942 TRANSFER_FRAME_DEFAULT(&output_row,
1943 input_row + column_table[j] * in_pixelsize,
1949 else
1951 TRANSFER_FRAME_DEFAULT(&output_row,
1952 input_row + j * in_pixelsize,