r858: Merge 2.1:
[cinelerra_cv/ct.git] / quicktime / cmodel_default.c
blob127ff51ca775e701fbcb409b88f7e44ff2cbb342
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 <sys/time.h>
18 #include <time.h>
19 #include "cmodel_permutation.h"
30 // ********************************* YUV101010 -> *****************************
32 #define READ_YUV101010 \
33 uint64_t y, u, v; \
34 uint32_t input_i = input[0] | \
35 (input[1] << 8) | \
36 (input[2] << 16) | \
37 (input[3] << 24); \
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)
50 int r, g, b;
52 READ_YUV101010
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)
65 int r, g, b;
67 READ_YUV101010
69 y = (y << 8) | (y >> 8);
71 YUV_TO_RGB16(y, u, v, r, g, b);
73 *(uint16_t*)(*output) = (b & 0xf800) |
74 ((g & 0xfc00) >> 5) |
75 ((r & 0xf800) >> 11);
76 (*output) += 2;
79 static inline void transfer_YUV101010_to_RGB565(unsigned char *(*output), unsigned char *input)
81 int r, g, b;
83 READ_YUV101010
85 y = (y << 8) | (y >> 8);
87 YUV_TO_RGB16(y, u, v, r, g, b);
89 *(uint16_t*)(*output) = (r & 0xf800) |
90 ((g & 0xfc00) >> 5) |
91 ((b & 0xf800) >> 11);
92 (*output) += 2;
95 static inline void transfer_YUV101010_to_BGR888(unsigned char *(*output), unsigned char *input)
97 int r, g, b;
99 READ_YUV101010
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)
112 int r, g, b;
114 READ_YUV101010
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;
123 (*output)++;
126 static inline void transfer_YUV101010_to_YUV888(unsigned char *(*output), unsigned char *input)
128 READ_YUV101010
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)
137 READ_YUV101010
139 *(*output)++ = y >> 8;
140 *(*output)++ = u >> 8;
141 *(*output)++ = v >> 8;
142 *(*output)++ = 0xff;
145 static inline void transfer_YUV101010_to_YUV161616(uint16_t *(*output), unsigned char *input)
147 READ_YUV101010
149 *(*output)++ = y;
150 *(*output)++ = u;
151 *(*output)++ = v;
154 static inline void transfer_YUV101010_to_YUVA16161616(uint16_t *(*output), unsigned char *input)
156 READ_YUV101010
158 *(*output)++ = y;
159 *(*output)++ = u;
160 *(*output)++ = v;
161 *(*output)++ = 0xffff;
164 static inline void transfer_YUV101010_to_RGB888(unsigned char *(*output), unsigned char *input)
166 int r, g, b;
168 READ_YUV101010
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)
181 int r, g, b;
183 READ_YUV101010
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;
192 *(*output)++ = 0xff;
195 static inline void transfer_YUV101010_to_RGB161616(uint16_t *(*output), unsigned char *input)
197 int r, g, b;
199 READ_YUV101010
201 y = (y << 8) | (y >> 8);
203 YUV_TO_RGB16(y, u, v, r, g, b);
205 *(*output)++ = r;
206 *(*output)++ = g;
207 *(*output)++ = b;
210 static inline void transfer_YUV101010_to_RGBA16161616(uint16_t *(*output), unsigned char *input)
212 int r, g, b;
214 READ_YUV101010
216 y = (y << 8) | (y >> 8);
218 YUV_TO_RGB16(y, u, v, r, g, b);
220 *(*output)++ = r;
221 *(*output)++ = g;
222 *(*output)++ = b;
223 *(*output)++ = 0xffff;
229 static inline void transfer_YUV101010_to_RGB_FLOAT(float *(*output),
230 unsigned char *input)
232 float r, g, b;
233 float y_f;
235 READ_YUV101010
237 y_f = (float)y / 0xffff;
239 YUV16_TO_RGB_FLOAT(y_f, u, v, r, g, b);
241 *(*output)++ = r;
242 *(*output)++ = g;
243 *(*output)++ = b;
246 static inline void transfer_YUV101010_to_RGBA_FLOAT(float *(*output),
247 unsigned char *input)
249 float r, g, b;
250 float y_f;
252 READ_YUV101010
254 y_f = (float)y / 0xffff;
256 YUV16_TO_RGB_FLOAT(y_f, u, v, r, g, b);
258 *(*output)++ = r;
259 *(*output)++ = g;
260 *(*output)++ = b;
261 *(*output)++ = 1.0;
282 // ******************************** VYU888 -> *********************************
285 static inline void transfer_VYU888_to_RGB8(unsigned char *(*output), unsigned char *input)
287 int y, u, v;
288 int r, g, b;
290 y = ((int)input[1]) << 16;
291 u = input[2];
292 v = input[0];
293 YUV_TO_RGB(y, u, v, r, g, b);
295 *(*output) = (unsigned char)((r & 0xc0) +
296 ((g & 0xe0) >> 2) +
297 ((b & 0xe0) >> 5));
298 (*output)++;
301 static inline void transfer_VYU888_to_BGR565(unsigned char *(*output), unsigned char *input)
303 int y, u, v;
304 int r, g, b;
306 y = ((int)input[1]) << 16;
307 u = input[2];
308 v = input[0];
309 YUV_TO_RGB(y, u, v, r, g, b);
310 *(uint16_t*)(*output) = ((b & 0xf8) << 8)
311 + ((g & 0xfc) << 3)
312 + ((r & 0xf8) >> 3);
313 (*output) += 2;
316 static inline void transfer_VYU888_to_RGB565(unsigned char *(*output), unsigned char *input)
318 int y, u, v;
319 int r, g, b;
321 y = ((int)input[1]) << 16;
322 u = input[2];
323 v = input[0];
324 YUV_TO_RGB(y, u, v, r, g, b);
325 *(uint16_t*)(*output) = ((r & 0xf8) << 8)
326 + ((g & 0xfc) << 3)
327 + ((b & 0xf8) >> 3);
328 (*output) += 2;
331 static inline void transfer_VYU888_to_BGR888(unsigned char *(*output), unsigned char *input)
333 int y, u, v;
334 int r, g, b;
336 y = ((int)input[1]) << 16;
337 u = input[2];
338 v = input[0];
339 YUV_TO_RGB(y, u, v, r, g, b);
341 (*output)[2] = r;
342 (*output)[1] = g;
343 (*output)[0] = b;
344 (*output) += 3;
347 static inline void transfer_VYU888_to_BGR8888(unsigned char *(*output), unsigned char *input)
349 int y, u, v;
350 int r, g, b;
352 y = ((int)input[1]) << 16;
353 u = input[2];
354 v = input[0];
355 YUV_TO_RGB(y, u, v, r, g, b);
356 (*output)[2] = r;
357 (*output)[1] = g;
358 (*output)[0] = b;
359 (*output) += 4;
363 static inline void transfer_VYU888_to_RGB888(unsigned char *(*output), unsigned char *input)
365 int y, u, v;
366 int r, g, b;
368 y = ((int)input[1]) << 16;
369 u = input[2];
370 v = input[0];
371 YUV_TO_RGB(y, u, v, r, g, b);
373 (*output)[0] = r;
374 (*output)[1] = g;
375 (*output)[2] = b;
376 (*output) += 3;
379 static inline void transfer_VYU888_to_RGBA8888(unsigned char *(*output), unsigned char *input)
381 int y, u, v;
382 int r, g, b;
384 y = ((int)input[1]) << 16;
385 u = input[2];
386 v = input[0];
387 YUV_TO_RGB(y, u, v, r, g, b);
389 (*output)[0] = r;
390 (*output)[1] = g;
391 (*output)[2] = b;
392 (*output)[3] = 0xff;
393 (*output) += 4;
397 static inline void transfer_VYU888_to_RGB161616(uint16_t *(*output), unsigned char *input)
399 int y, u, v;
400 int r, g, b;
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);
407 (*output)[0] = r;
408 (*output)[1] = g;
409 (*output)[2] = b;
410 (*output) += 3;
413 static inline void transfer_VYU888_to_RGBA16161616(uint16_t *(*output), unsigned char *input)
415 int y, u, v;
416 int r, g, b;
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);
423 (*output)[0] = r;
424 (*output)[1] = g;
425 (*output)[2] = b;
426 (*output)[3] = 0xffff;
427 (*output) += 3;
431 static inline void transfer_VYU888_to_RGB_FLOAT(float *(*output), unsigned char *input)
433 float y;
434 int u, v;
435 float r, g, b;
437 v = *input++;
438 y = (float)*input++ / 0xff;
439 u = *input;
440 YUV_TO_FLOAT(y, u, v, r, g, b);
442 *(*output)++ = r;
443 *(*output)++ = g;
444 *(*output)++ = b;
447 static inline void transfer_VYU888_to_RGBA_FLOAT(float *(*output), unsigned char *input)
449 float y;
450 int u, v;
451 float r, g, b;
453 v = *input++;
454 y = (float)*input++ / 0xff;
455 u = *input;
456 YUV_TO_FLOAT(y, u, v, r, g, b);
458 *(*output)++ = r;
459 *(*output)++ = g;
460 *(*output)++ = b;
461 *(*output)++ = 1.0;
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];
470 (*output) += 3;
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];
478 (*output)[3] = 0xff;
479 (*output) += 4;
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;
488 (*output) += 3;
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;
496 (*output)[3] = 0xff;
497 (*output) += 4;
511 // ******************************** UYVA8888 -> *********************************
514 static inline void transfer_UYVA8888_to_RGB8(unsigned char *(*output), unsigned char *input)
516 int y, u, v;
517 int r, g, b;
519 y = ((int)input[1]) << 16;
520 u = input[0];
521 v = input[2];
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) +
528 ((g & 0xe0) >> 2) +
529 ((b & 0xe0) >> 5));
530 (*output)++;
533 static inline void transfer_UYVA8888_to_BGR565(unsigned char *(*output), unsigned char *input)
535 int y, u, v;
536 int r, g, b;
538 y = ((int)input[1]) << 16;
539 u = input[0];
540 v = input[2];
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)
546 + ((g & 0xfc) << 3)
547 + ((r & 0xf8) >> 3);
548 (*output) += 2;
551 static inline void transfer_UYVA8888_to_RGB565(unsigned char *(*output), unsigned char *input)
553 int y, u, v;
554 int r, g, b;
556 y = ((int)input[1]) << 16;
557 u = input[0];
558 v = input[2];
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)
564 + ((g & 0xfc) << 3)
565 + ((b & 0xf8) >> 3);
566 (*output) += 2;
569 static inline void transfer_UYVA8888_to_BGR888(unsigned char *(*output), unsigned char *input)
571 int y, u, v;
572 int r, g, b;
574 y = ((int)input[1]) << 16;
575 u = input[0];
576 v = input[2];
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;
582 (*output)[2] = r;
583 (*output)[1] = g;
584 (*output)[0] = b;
585 (*output) += 3;
588 static inline void transfer_UYVA8888_to_BGR8888(unsigned char *(*output), unsigned char *input)
590 int y, u, v;
591 int r, g, b;
593 y = ((int)input[1]) << 16;
594 u = input[0];
595 v = input[2];
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;
601 (*output)[2] = r;
602 (*output)[1] = g;
603 (*output)[0] = b;
604 (*output) += 4;
608 static inline void transfer_UYVA8888_to_RGB888(unsigned char *(*output), unsigned char *input)
610 int y, u, v;
611 int r, g, b;
613 y = ((int)input[1]) << 16;
614 u = input[0];
615 v = input[2];
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;
621 (*output)[0] = r;
622 (*output)[1] = g;
623 (*output)[2] = b;
624 (*output) += 3;
627 static inline void transfer_UYVA8888_to_RGBA8888(unsigned char *(*output), unsigned char *input)
629 int y, u, v;
630 int r, g, b;
632 y = ((int)input[1]) << 16;
633 u = input[0];
634 v = input[2];
635 YUV_TO_RGB(y, u, v, r, g, b);
637 (*output)[0] = r;
638 (*output)[1] = g;
639 (*output)[2] = b;
640 (*output)[3] = input[3];
641 (*output) += 4;
645 static inline void transfer_UYVA8888_to_RGB161616(uint16_t *(*output), unsigned char *input)
647 int y, u, v;
648 int r, g, b;
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;
658 (*output)[0] = r;
659 (*output)[1] = g;
660 (*output)[2] = b;
661 (*output) += 3;
664 static inline void transfer_UYVA8888_to_RGBA16161616(uint16_t *(*output), unsigned char *input)
666 int y, u, v;
667 int r, g, b;
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);
674 (*output)[0] = r;
675 (*output)[1] = g;
676 (*output)[2] = b;
677 (*output)[3] = input[3] << 8;
678 (*output) += 4;
681 static inline void transfer_UYVA8888_to_RGB_FLOAT(float *(*output), unsigned char *input)
683 float y, a;
684 int u, v;
685 float r, g, b;
687 u = *input++;
688 y = (float)*input++ / 0xff;
689 v = *input++;
690 a = (float)*input / 0xff;
691 YUV_TO_FLOAT(y, u, v, r, g, b);
693 r = r * a;
694 g = g * a;
695 b = b * a;
697 *(*output)++ = r;
698 *(*output)++ = g;
699 *(*output)++ = b;
702 static inline void transfer_UYVA8888_to_RGBA_FLOAT(float *(*output), unsigned char *input)
704 float y, a;
705 int u, v;
706 float r, g, b;
708 u = *input++;
709 y = (float)*input++ / 0xff;
710 v = *input++;
711 a = (float)*input / 0xff;
712 YUV_TO_FLOAT(y, u, v, r, g, b);
714 *(*output)++ = r;
715 *(*output)++ = g;
716 *(*output)++ = b;
717 *(*output)++ = a;
721 static inline void transfer_UYVA8888_to_YUV888(unsigned char *(*output), unsigned char *input)
723 int a, anti_a;
724 a = input[3];
725 anti_a = 0xff - a;
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;
730 (*output) += 3;
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];
739 (*output) += 4;
743 static inline void transfer_UYVA8888_to_YUV161616(uint16_t *(*output), unsigned char *input)
745 int a, anti_a;
746 a = input[3];
747 anti_a = 0xff - a;
749 (*output)[0] = a * input[1];
750 (*output)[1] = a * input[0] + anti_a * 0x80;
751 (*output)[2] = a * input[2] + anti_a * 0x80;
752 (*output) += 3;
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;
761 (*output) += 4;
773 #define TRANSFER_FRAME_DEFAULT(output, \
774 input, \
775 y_in_offset, \
776 u_in_offset, \
777 v_in_offset, \
778 input_column) \
780 register int i, j; \
782 switch(in_colormodel) \
784 case BC_YUV888: \
785 switch(out_colormodel) \
787 case BC_RGB8: \
788 TRANSFER_FRAME_HEAD \
789 transfer_YUV888_to_RGB8((output), (input)); \
790 TRANSFER_FRAME_TAIL \
791 break; \
792 case BC_BGR565: \
793 TRANSFER_FRAME_HEAD \
794 transfer_YUV888_to_BGR565((output), (input)); \
795 TRANSFER_FRAME_TAIL \
796 break; \
797 case BC_RGB565: \
798 TRANSFER_FRAME_HEAD \
799 transfer_YUV888_to_RGB565((output), (input)); \
800 TRANSFER_FRAME_TAIL \
801 break; \
802 case BC_BGR888: \
803 TRANSFER_FRAME_HEAD \
804 transfer_YUV888_to_BGR888((output), (input)); \
805 TRANSFER_FRAME_TAIL \
806 break; \
807 case BC_BGR8888: \
808 TRANSFER_FRAME_HEAD \
809 transfer_YUV888_to_BGR8888((output), (input)); \
810 TRANSFER_FRAME_TAIL \
811 break; \
812 case BC_RGB888: \
813 TRANSFER_FRAME_HEAD \
814 transfer_YUV888_to_RGB888((output), (input)); \
815 TRANSFER_FRAME_TAIL \
816 break; \
817 case BC_RGBA8888: \
818 TRANSFER_FRAME_HEAD \
819 transfer_YUV888_to_RGBA8888((output), (input)); \
820 TRANSFER_FRAME_TAIL \
821 break; \
822 case BC_ARGB8888: \
823 TRANSFER_FRAME_HEAD \
824 transfer_YUV888_to_ARGB8888((output), (input)); \
825 TRANSFER_FRAME_TAIL \
826 break; \
827 case BC_RGB_FLOAT: \
828 TRANSFER_FRAME_HEAD \
829 transfer_YUV888_to_RGB_FLOAT((float**)(output), (input)); \
830 TRANSFER_FRAME_TAIL \
831 break; \
832 case BC_RGBA_FLOAT: \
833 TRANSFER_FRAME_HEAD \
834 transfer_YUV888_to_RGBA_FLOAT((float**)(output), (input)); \
835 TRANSFER_FRAME_TAIL \
836 break; \
837 case BC_YUV101010: \
838 TRANSFER_FRAME_HEAD \
839 transfer_YUV888_to_YUV101010((output), (input)); \
840 TRANSFER_FRAME_TAIL \
841 break; \
842 case BC_YUV420P: \
843 TRANSFER_YUV420P_OUT_HEAD \
844 transfer_YUV888_to_YUV420P_YUV422P(output_y, \
845 output_u, \
846 output_v, \
847 (input), \
848 j); \
849 TRANSFER_FRAME_TAIL \
850 break; \
851 case BC_YUV422P: \
852 TRANSFER_YUV422P_OUT_HEAD \
853 transfer_YUV888_to_YUV420P_YUV422P(output_y, \
854 output_u, \
855 output_v, \
856 (input), \
857 j); \
858 TRANSFER_FRAME_TAIL \
859 break; \
860 case BC_YUV444P: \
861 TRANSFER_YUV444P_OUT_HEAD \
862 transfer_YUV888_to_YUV444P(output_y, \
863 output_u, \
864 output_v, \
865 (input), \
866 j); \
867 TRANSFER_FRAME_TAIL \
868 break; \
869 case BC_YUV422: \
870 TRANSFER_FRAME_HEAD \
871 transfer_YUV888_to_YUV422((output), \
872 (input), \
873 j); \
874 TRANSFER_FRAME_TAIL \
875 break; \
876 case BC_YUV888: \
877 TRANSFER_FRAME_HEAD \
878 transfer_YUV888_to_YUV888((output), (input)); \
879 TRANSFER_FRAME_TAIL \
880 break; \
881 case BC_YUVA8888: \
882 TRANSFER_FRAME_HEAD \
883 transfer_YUV888_to_YUVA8888((output), (input)); \
884 TRANSFER_FRAME_TAIL \
885 break; \
886 case BC_VYU888: \
887 TRANSFER_FRAME_HEAD \
888 transfer_YUV888_to_VYU888((output), (input)); \
889 TRANSFER_FRAME_TAIL \
890 break; \
891 case BC_UYVA8888: \
892 TRANSFER_FRAME_HEAD \
893 transfer_YUV888_to_UYVA8888((output), (input)); \
894 TRANSFER_FRAME_TAIL \
895 break; \
897 break; \
899 case BC_YUVA8888: \
900 switch(out_colormodel) \
902 case BC_RGB8: \
903 TRANSFER_FRAME_HEAD \
904 transfer_YUVA8888_to_RGB8((output), (input)); \
905 TRANSFER_FRAME_TAIL \
906 break; \
907 case BC_BGR565: \
908 TRANSFER_FRAME_HEAD \
909 transfer_YUVA8888_to_BGR565((output), (input)); \
910 TRANSFER_FRAME_TAIL \
911 break; \
912 case BC_RGB565: \
913 TRANSFER_FRAME_HEAD \
914 transfer_YUVA8888_to_RGB565((output), (input)); \
915 TRANSFER_FRAME_TAIL \
916 break; \
917 case BC_BGR888: \
918 TRANSFER_FRAME_HEAD \
919 transfer_YUVA8888_to_BGR888((output), (input)); \
920 TRANSFER_FRAME_TAIL \
921 break; \
922 case BC_BGR8888: \
923 TRANSFER_FRAME_HEAD \
924 transfer_YUVA8888_to_BGR8888((output), (input)); \
925 TRANSFER_FRAME_TAIL \
926 break; \
927 case BC_RGB888: \
928 TRANSFER_FRAME_HEAD \
929 transfer_YUVA8888_to_RGB888((output), (input)); \
930 TRANSFER_FRAME_TAIL \
931 break; \
932 case BC_RGBA8888: \
933 TRANSFER_FRAME_HEAD \
934 transfer_YUVA8888_to_RGBA8888((output), (input)); \
935 TRANSFER_FRAME_TAIL \
936 break; \
937 case BC_ARGB8888: \
938 TRANSFER_FRAME_HEAD \
939 transfer_YUVA8888_to_ARGB8888((output), (input)); \
940 TRANSFER_FRAME_TAIL \
941 break; \
942 case BC_RGB_FLOAT: \
943 TRANSFER_FRAME_HEAD \
944 transfer_YUVA8888_to_RGB_FLOAT((float**)(output), (input)); \
945 TRANSFER_FRAME_TAIL \
946 break; \
947 case BC_RGBA_FLOAT: \
948 TRANSFER_FRAME_HEAD \
949 transfer_YUVA8888_to_RGBA_FLOAT((float**)(output), (input)); \
950 TRANSFER_FRAME_TAIL \
951 break; \
952 case BC_VYU888: \
953 TRANSFER_FRAME_HEAD \
954 transfer_YUVA8888_to_VYU888((output), (input)); \
955 TRANSFER_FRAME_TAIL \
956 break; \
957 case BC_YUVA8888: \
958 TRANSFER_FRAME_HEAD \
959 transfer_YUVA8888_to_YUVA8888((output), (input)); \
960 TRANSFER_FRAME_TAIL \
961 break; \
962 case BC_UYVA8888: \
963 TRANSFER_FRAME_HEAD \
964 transfer_YUVA8888_to_UYVA8888((output), (input)); \
965 TRANSFER_FRAME_TAIL \
966 break; \
967 case BC_YUV101010: \
968 TRANSFER_FRAME_HEAD \
969 transfer_YUVA8888_to_YUV101010((output), (input)); \
970 TRANSFER_FRAME_TAIL \
971 break; \
972 case BC_YUV420P: \
973 TRANSFER_YUV420P_OUT_HEAD \
974 transfer_YUVA8888_to_YUV420P_YUV422P(output_y, \
975 output_u, \
976 output_v, \
977 (input), \
978 j); \
979 TRANSFER_FRAME_TAIL \
980 break; \
981 case BC_YUV422P: \
982 TRANSFER_YUV422P_OUT_HEAD \
983 transfer_YUVA8888_to_YUV420P_YUV422P(output_y, \
984 output_u, \
985 output_v, \
986 (input), \
987 j); \
988 TRANSFER_FRAME_TAIL \
989 break; \
990 case BC_YUV444P: \
991 TRANSFER_YUV444P_OUT_HEAD \
992 transfer_YUVA8888_to_YUV444P(output_y, \
993 output_u, \
994 output_v, \
995 (input), \
996 j); \
997 TRANSFER_FRAME_TAIL \
998 break; \
999 case BC_YUV422: \
1000 TRANSFER_FRAME_HEAD \
1001 transfer_YUVA8888_to_YUV422((output), \
1002 (input), \
1003 j); \
1004 TRANSFER_FRAME_TAIL \
1005 break; \
1007 break; \
1009 case BC_YUV161616: \
1010 switch(out_colormodel) \
1012 case BC_RGB8: \
1013 TRANSFER_FRAME_HEAD \
1014 transfer_YUV161616_to_RGB8((output), (uint16_t*)(input)); \
1015 TRANSFER_FRAME_TAIL \
1016 break; \
1017 case BC_BGR565: \
1018 TRANSFER_FRAME_HEAD \
1019 transfer_YUV161616_to_BGR565((output), (uint16_t*)(input)); \
1020 TRANSFER_FRAME_TAIL \
1021 break; \
1022 case BC_RGB565: \
1023 TRANSFER_FRAME_HEAD \
1024 transfer_YUV161616_to_RGB565((output), (uint16_t*)(input)); \
1025 TRANSFER_FRAME_TAIL \
1026 break; \
1027 case BC_BGR888: \
1028 TRANSFER_FRAME_HEAD \
1029 transfer_YUV161616_to_BGR888((output), (uint16_t*)(input)); \
1030 TRANSFER_FRAME_TAIL \
1031 break; \
1032 case BC_BGR8888: \
1033 TRANSFER_FRAME_HEAD \
1034 transfer_YUV161616_to_BGR8888((output), (uint16_t*)(input)); \
1035 TRANSFER_FRAME_TAIL \
1036 break; \
1037 case BC_RGB888: \
1038 TRANSFER_FRAME_HEAD \
1039 transfer_YUV161616_to_RGB888((output), (uint16_t*)(input)); \
1040 TRANSFER_FRAME_TAIL \
1041 break; \
1042 case BC_RGBA8888: \
1043 TRANSFER_FRAME_HEAD \
1044 transfer_YUV161616_to_RGBA8888((output), (uint16_t*)(input)); \
1045 TRANSFER_FRAME_TAIL \
1046 break; \
1047 case BC_ARGB8888: \
1048 TRANSFER_FRAME_HEAD \
1049 transfer_YUV161616_to_ARGB8888((output), (uint16_t*)(input)); \
1050 TRANSFER_FRAME_TAIL \
1051 break; \
1052 case BC_RGB_FLOAT: \
1053 TRANSFER_FRAME_HEAD \
1054 transfer_YUV161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1055 TRANSFER_FRAME_TAIL \
1056 break; \
1057 case BC_RGBA_FLOAT: \
1058 TRANSFER_FRAME_HEAD \
1059 transfer_YUV161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1060 TRANSFER_FRAME_TAIL \
1061 break; \
1062 case BC_YUV420P: \
1063 TRANSFER_YUV420P_OUT_HEAD \
1064 transfer_YUV161616_to_YUV420P_YUV422P(output_y, \
1065 output_u, \
1066 output_v, \
1067 (uint16_t*)(input), \
1068 j); \
1069 TRANSFER_FRAME_TAIL \
1070 break; \
1071 case BC_YUV422P: \
1072 TRANSFER_YUV422P_OUT_HEAD \
1073 transfer_YUV161616_to_YUV420P_YUV422P(output_y, \
1074 output_u, \
1075 output_v, \
1076 (uint16_t*)(input), \
1077 j); \
1078 TRANSFER_FRAME_TAIL \
1079 break; \
1080 case BC_YUV444P: \
1081 TRANSFER_YUV444P_OUT_HEAD \
1082 transfer_YUV161616_to_YUV444P(output_y, \
1083 output_u, \
1084 output_v, \
1085 (uint16_t*)(input), \
1086 j); \
1087 TRANSFER_FRAME_TAIL \
1088 break; \
1089 case BC_YUV422: \
1090 TRANSFER_FRAME_HEAD \
1091 transfer_YUV161616_to_YUV422((output), \
1092 (uint16_t*)(input), \
1093 j); \
1094 TRANSFER_FRAME_TAIL \
1095 break; \
1096 case BC_YUV101010: \
1097 TRANSFER_FRAME_HEAD \
1098 transfer_YUV161616_to_YUV101010((output), (uint16_t*)(input)); \
1099 TRANSFER_FRAME_TAIL \
1100 break; \
1101 case BC_YUVA8888: \
1102 TRANSFER_FRAME_HEAD \
1103 transfer_YUV161616_to_YUVA8888((output), \
1104 (uint16_t*)(input)); \
1105 TRANSFER_FRAME_TAIL \
1106 break; \
1107 case BC_VYU888: \
1108 TRANSFER_FRAME_HEAD \
1109 transfer_YUV161616_to_VYU888((output), (uint16_t*)(input)); \
1110 TRANSFER_FRAME_TAIL \
1111 break; \
1112 case BC_UYVA8888: \
1113 TRANSFER_FRAME_HEAD \
1114 transfer_YUV161616_to_UYVA8888((output), (uint16_t*)(input)); \
1115 TRANSFER_FRAME_TAIL \
1116 break; \
1117 case BC_YUV161616: \
1118 TRANSFER_FRAME_HEAD \
1119 transfer_YUV161616_to_YUV161616((uint16_t**)(output), \
1120 (uint16_t*)(input)); \
1121 TRANSFER_FRAME_TAIL \
1122 break; \
1124 break; \
1126 case BC_YUVA16161616: \
1127 switch(out_colormodel) \
1129 case BC_RGB8: \
1130 TRANSFER_FRAME_HEAD \
1131 transfer_YUVA16161616_to_RGB8((output), (uint16_t*)(input)); \
1132 TRANSFER_FRAME_TAIL \
1133 break; \
1134 case BC_BGR565: \
1135 TRANSFER_FRAME_HEAD \
1136 transfer_YUVA16161616_to_BGR565((output), (uint16_t*)(input)); \
1137 TRANSFER_FRAME_TAIL \
1138 break; \
1139 case BC_RGB565: \
1140 TRANSFER_FRAME_HEAD \
1141 transfer_YUVA16161616_to_RGB565((output), (uint16_t*)(input)); \
1142 TRANSFER_FRAME_TAIL \
1143 break; \
1144 case BC_BGR888: \
1145 TRANSFER_FRAME_HEAD \
1146 transfer_YUVA16161616_to_BGR888((output), (uint16_t*)(input)); \
1147 TRANSFER_FRAME_TAIL \
1148 break; \
1149 case BC_BGR8888: \
1150 TRANSFER_FRAME_HEAD \
1151 transfer_YUVA16161616_to_BGR8888((output), (uint16_t*)(input)); \
1152 TRANSFER_FRAME_TAIL \
1153 break; \
1154 case BC_RGB888: \
1155 TRANSFER_FRAME_HEAD \
1156 transfer_YUVA16161616_to_RGB888((output), (uint16_t*)(input)); \
1157 TRANSFER_FRAME_TAIL \
1158 break; \
1159 case BC_RGBA8888: \
1160 TRANSFER_FRAME_HEAD \
1161 transfer_YUVA16161616_to_RGBA8888((output), (uint16_t*)(input)); \
1162 TRANSFER_FRAME_TAIL \
1163 break; \
1164 case BC_ARGB8888: \
1165 TRANSFER_FRAME_HEAD \
1166 transfer_YUVA16161616_to_ARGB8888((output), (uint16_t*)(input)); \
1167 TRANSFER_FRAME_TAIL \
1168 break; \
1169 case BC_RGB_FLOAT: \
1170 TRANSFER_FRAME_HEAD \
1171 transfer_YUVA16161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1172 TRANSFER_FRAME_TAIL \
1173 break; \
1174 case BC_RGBA_FLOAT: \
1175 TRANSFER_FRAME_HEAD \
1176 transfer_YUVA16161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1177 TRANSFER_FRAME_TAIL \
1178 break; \
1179 case BC_YUV101010: \
1180 TRANSFER_FRAME_HEAD \
1181 transfer_YUVA16161616_to_YUV101010((output), (uint16_t*)(input)); \
1182 TRANSFER_FRAME_TAIL \
1183 break; \
1184 case BC_VYU888: \
1185 TRANSFER_FRAME_HEAD \
1186 transfer_YUVA16161616_to_VYU888((output), (uint16_t*)(input)); \
1187 TRANSFER_FRAME_TAIL \
1188 break; \
1189 case BC_UYVA8888: \
1190 TRANSFER_FRAME_HEAD \
1191 transfer_YUVA16161616_to_UYVA8888((output), (uint16_t*)(input)); \
1192 TRANSFER_FRAME_TAIL \
1193 break; \
1194 case BC_YUVA16161616: \
1195 TRANSFER_FRAME_HEAD \
1196 transfer_YUVA16161616_to_YUVA16161616((uint16_t**)(output), (uint16_t*)(input)); \
1197 TRANSFER_FRAME_TAIL \
1198 break; \
1199 case BC_YUV420P: \
1200 TRANSFER_YUV420P_OUT_HEAD \
1201 transfer_YUVA16161616_to_YUV420P_YUV422P(output_y, \
1202 output_u, \
1203 output_v, \
1204 (uint16_t*)(input), \
1205 j); \
1206 TRANSFER_FRAME_TAIL \
1207 break; \
1208 case BC_YUV422P: \
1209 TRANSFER_YUV422P_OUT_HEAD \
1210 transfer_YUVA16161616_to_YUV420P_YUV422P(output_y, \
1211 output_u, \
1212 output_v, \
1213 (uint16_t*)(input), \
1214 j); \
1215 TRANSFER_FRAME_TAIL \
1216 break; \
1217 case BC_YUV444P: \
1218 TRANSFER_YUV444P_OUT_HEAD \
1219 transfer_YUVA16161616_to_YUV444P(output_y, \
1220 output_u, \
1221 output_v, \
1222 (uint16_t*)(input), \
1223 j); \
1224 TRANSFER_FRAME_TAIL \
1225 break; \
1226 case BC_YUV422: \
1227 TRANSFER_FRAME_HEAD \
1228 transfer_YUVA16161616_to_YUV422((output), \
1229 (uint16_t*)(input), \
1230 j); \
1231 TRANSFER_FRAME_TAIL \
1232 break; \
1234 break; \
1236 case BC_YUV101010: \
1237 switch(out_colormodel) \
1239 case BC_RGB8: \
1240 TRANSFER_FRAME_HEAD \
1241 transfer_YUV101010_to_RGB8((output), (input)); \
1242 TRANSFER_FRAME_TAIL \
1243 break; \
1244 case BC_BGR565: \
1245 TRANSFER_FRAME_HEAD \
1246 transfer_YUV101010_to_BGR565((output), (input)); \
1247 TRANSFER_FRAME_TAIL \
1248 break; \
1249 case BC_RGB565: \
1250 TRANSFER_FRAME_HEAD \
1251 transfer_YUV101010_to_RGB565((output), (input)); \
1252 TRANSFER_FRAME_TAIL \
1253 break; \
1254 case BC_BGR888: \
1255 TRANSFER_FRAME_HEAD \
1256 transfer_YUV101010_to_BGR888((output), (input)); \
1257 TRANSFER_FRAME_TAIL \
1258 break; \
1259 case BC_BGR8888: \
1260 TRANSFER_FRAME_HEAD \
1261 transfer_YUV101010_to_BGR8888((output), (input)); \
1262 TRANSFER_FRAME_TAIL \
1263 break; \
1264 case BC_RGB888: \
1265 TRANSFER_FRAME_HEAD \
1266 transfer_YUV101010_to_RGB888((output), (input)); \
1267 TRANSFER_FRAME_TAIL \
1268 break; \
1269 case BC_RGBA8888: \
1270 TRANSFER_FRAME_HEAD \
1271 transfer_YUV101010_to_RGBA8888((output), (input)); \
1272 TRANSFER_FRAME_TAIL \
1273 break; \
1274 case BC_YUV888: \
1275 TRANSFER_FRAME_HEAD \
1276 transfer_YUV101010_to_YUV888((output), (input)); \
1277 TRANSFER_FRAME_TAIL \
1278 break; \
1279 case BC_YUVA8888: \
1280 TRANSFER_FRAME_HEAD \
1281 transfer_YUV101010_to_YUVA8888((output), (input)); \
1282 TRANSFER_FRAME_TAIL \
1283 break; \
1284 case BC_RGB161616: \
1285 TRANSFER_FRAME_HEAD \
1286 transfer_YUV101010_to_RGB161616((uint16_t**)(output), (input)); \
1287 TRANSFER_FRAME_TAIL \
1288 break; \
1289 case BC_RGBA16161616: \
1290 TRANSFER_FRAME_HEAD \
1291 transfer_YUV101010_to_RGBA16161616((uint16_t**)(output), (input)); \
1292 TRANSFER_FRAME_TAIL \
1293 break; \
1294 case BC_RGB_FLOAT: \
1295 TRANSFER_FRAME_HEAD \
1296 transfer_YUV101010_to_RGB_FLOAT((float**)(output), (input)); \
1297 TRANSFER_FRAME_TAIL \
1298 break; \
1299 case BC_RGBA_FLOAT: \
1300 TRANSFER_FRAME_HEAD \
1301 transfer_YUV101010_to_RGBA_FLOAT((float**)(output), (input)); \
1302 TRANSFER_FRAME_TAIL \
1303 break; \
1304 case BC_YUV161616: \
1305 TRANSFER_FRAME_HEAD \
1306 transfer_YUV101010_to_YUV161616((uint16_t**)(output), (input)); \
1307 TRANSFER_FRAME_TAIL \
1308 break; \
1309 case BC_YUVA16161616: \
1310 TRANSFER_FRAME_HEAD \
1311 transfer_YUV101010_to_YUVA16161616((uint16_t**)(output), (input)); \
1312 TRANSFER_FRAME_TAIL \
1313 break; \
1315 break; \
1317 case BC_VYU888: \
1318 switch(out_colormodel) \
1320 case BC_RGB8: \
1321 TRANSFER_FRAME_HEAD \
1322 transfer_VYU888_to_RGB8((output), (input)); \
1323 TRANSFER_FRAME_TAIL \
1324 break; \
1325 case BC_BGR565: \
1326 TRANSFER_FRAME_HEAD \
1327 transfer_VYU888_to_BGR565((output), (input)); \
1328 TRANSFER_FRAME_TAIL \
1329 break; \
1330 case BC_RGB565: \
1331 TRANSFER_FRAME_HEAD \
1332 transfer_VYU888_to_RGB565((output), (input)); \
1333 TRANSFER_FRAME_TAIL \
1334 break; \
1335 case BC_BGR888: \
1336 TRANSFER_FRAME_HEAD \
1337 transfer_VYU888_to_BGR888((output), (input)); \
1338 TRANSFER_FRAME_TAIL \
1339 break; \
1340 case BC_BGR8888: \
1341 TRANSFER_FRAME_HEAD \
1342 transfer_VYU888_to_BGR8888((output), (input)); \
1343 TRANSFER_FRAME_TAIL \
1344 break; \
1345 case BC_RGB888: \
1346 TRANSFER_FRAME_HEAD \
1347 transfer_VYU888_to_RGB888((output), (input)); \
1348 TRANSFER_FRAME_TAIL \
1349 break; \
1350 case BC_RGBA8888: \
1351 TRANSFER_FRAME_HEAD \
1352 transfer_VYU888_to_RGBA8888((output), (input)); \
1353 TRANSFER_FRAME_TAIL \
1354 break; \
1355 case BC_YUV888: \
1356 TRANSFER_FRAME_HEAD \
1357 transfer_VYU888_to_YUV888((output), (input)); \
1358 TRANSFER_FRAME_TAIL \
1359 break; \
1360 case BC_YUVA8888: \
1361 TRANSFER_FRAME_HEAD \
1362 transfer_VYU888_to_YUVA8888((output), (input)); \
1363 TRANSFER_FRAME_TAIL \
1364 break; \
1365 case BC_RGB161616: \
1366 TRANSFER_FRAME_HEAD \
1367 transfer_VYU888_to_RGB161616((uint16_t**)(output), (input)); \
1368 TRANSFER_FRAME_TAIL \
1369 break; \
1370 case BC_RGBA16161616: \
1371 TRANSFER_FRAME_HEAD \
1372 transfer_VYU888_to_RGBA16161616((uint16_t**)(output), (input)); \
1373 TRANSFER_FRAME_TAIL \
1374 break; \
1375 case BC_RGB_FLOAT: \
1376 TRANSFER_FRAME_HEAD \
1377 transfer_VYU888_to_RGB_FLOAT((float**)(output), (input)); \
1378 TRANSFER_FRAME_TAIL \
1379 break; \
1380 case BC_RGBA_FLOAT: \
1381 TRANSFER_FRAME_HEAD \
1382 transfer_VYU888_to_RGBA_FLOAT((float**)(output), (input)); \
1383 TRANSFER_FRAME_TAIL \
1384 break; \
1385 case BC_YUV161616: \
1386 TRANSFER_FRAME_HEAD \
1387 transfer_VYU888_to_YUV161616((uint16_t**)(output), (input)); \
1388 TRANSFER_FRAME_TAIL \
1389 break; \
1390 case BC_YUVA16161616: \
1391 TRANSFER_FRAME_HEAD \
1392 transfer_VYU888_to_YUVA16161616((uint16_t**)(output), (input)); \
1393 TRANSFER_FRAME_TAIL \
1394 break; \
1396 break; \
1398 case BC_UYVA8888: \
1399 switch(out_colormodel) \
1401 case BC_RGB8: \
1402 TRANSFER_FRAME_HEAD \
1403 transfer_UYVA8888_to_RGB8((output), (input)); \
1404 TRANSFER_FRAME_TAIL \
1405 break; \
1406 case BC_BGR565: \
1407 TRANSFER_FRAME_HEAD \
1408 transfer_UYVA8888_to_BGR565((output), (input)); \
1409 TRANSFER_FRAME_TAIL \
1410 break; \
1411 case BC_RGB565: \
1412 TRANSFER_FRAME_HEAD \
1413 transfer_UYVA8888_to_RGB565((output), (input)); \
1414 TRANSFER_FRAME_TAIL \
1415 break; \
1416 case BC_BGR888: \
1417 TRANSFER_FRAME_HEAD \
1418 transfer_UYVA8888_to_BGR888((output), (input)); \
1419 TRANSFER_FRAME_TAIL \
1420 break; \
1421 case BC_BGR8888: \
1422 TRANSFER_FRAME_HEAD \
1423 transfer_UYVA8888_to_BGR8888((output), (input)); \
1424 TRANSFER_FRAME_TAIL \
1425 break; \
1426 case BC_RGB888: \
1427 TRANSFER_FRAME_HEAD \
1428 transfer_UYVA8888_to_RGB888((output), (input)); \
1429 TRANSFER_FRAME_TAIL \
1430 break; \
1431 case BC_RGBA8888: \
1432 TRANSFER_FRAME_HEAD \
1433 transfer_UYVA8888_to_RGBA8888((output), (input)); \
1434 TRANSFER_FRAME_TAIL \
1435 break; \
1436 case BC_YUV888: \
1437 TRANSFER_FRAME_HEAD \
1438 transfer_UYVA8888_to_YUV888((output), (input)); \
1439 TRANSFER_FRAME_TAIL \
1440 break; \
1441 case BC_YUVA8888: \
1442 TRANSFER_FRAME_HEAD \
1443 transfer_UYVA8888_to_YUVA8888((output), (input)); \
1444 TRANSFER_FRAME_TAIL \
1445 break; \
1446 case BC_RGB161616: \
1447 TRANSFER_FRAME_HEAD \
1448 transfer_UYVA8888_to_RGB161616((uint16_t**)(output), (input)); \
1449 TRANSFER_FRAME_TAIL \
1450 break; \
1451 case BC_RGBA16161616: \
1452 TRANSFER_FRAME_HEAD \
1453 transfer_UYVA8888_to_RGBA16161616((uint16_t**)(output), (input)); \
1454 TRANSFER_FRAME_TAIL \
1455 break; \
1456 case BC_RGB_FLOAT: \
1457 TRANSFER_FRAME_HEAD \
1458 transfer_UYVA8888_to_RGB_FLOAT((float**)(output), (input)); \
1459 TRANSFER_FRAME_TAIL \
1460 break; \
1461 case BC_RGBA_FLOAT: \
1462 TRANSFER_FRAME_HEAD \
1463 transfer_UYVA8888_to_RGBA_FLOAT((float**)(output), (input)); \
1464 TRANSFER_FRAME_TAIL \
1465 break; \
1466 case BC_YUV161616: \
1467 TRANSFER_FRAME_HEAD \
1468 transfer_UYVA8888_to_YUV161616((uint16_t**)(output), (input)); \
1469 TRANSFER_FRAME_TAIL \
1470 break; \
1471 case BC_YUVA16161616: \
1472 TRANSFER_FRAME_HEAD \
1473 transfer_UYVA8888_to_YUVA16161616((uint16_t**)(output), (input)); \
1474 TRANSFER_FRAME_TAIL \
1475 break; \
1477 break; \
1479 case BC_ARGB8888: \
1480 case BC_ABGR8888: \
1481 switch(out_colormodel) \
1483 case BC_ARGB8888: \
1484 case BC_ABGR8888: \
1485 TRANSFER_FRAME_HEAD \
1486 transfer_ARGB8888_to_ARGB8888((output), (input)); \
1487 TRANSFER_FRAME_TAIL \
1488 break; \
1489 case BC_RGBA8888: \
1490 TRANSFER_FRAME_HEAD \
1491 transfer_ARGB8888_to_RGBA8888((output), (input)); \
1492 TRANSFER_FRAME_TAIL \
1493 break; \
1494 case BC_RGB888: \
1495 TRANSFER_FRAME_HEAD \
1496 transfer_ARGB8888_to_RGB888((output), (input)); \
1497 TRANSFER_FRAME_TAIL \
1498 break; \
1499 case BC_BGR8888: \
1500 TRANSFER_FRAME_HEAD \
1501 transfer_ARGB8888_to_BGR8888((output), (input)); \
1502 TRANSFER_FRAME_TAIL \
1503 break; \
1505 break; \
1507 case BC_RGB888: \
1508 switch(out_colormodel) \
1510 case BC_RGB8: \
1511 TRANSFER_FRAME_HEAD \
1512 transfer_RGB888_to_RGB8((output), (input)); \
1513 TRANSFER_FRAME_TAIL \
1514 break; \
1515 case BC_BGR565: \
1516 TRANSFER_FRAME_HEAD \
1517 transfer_RGB888_to_BGR565((output), (input)); \
1518 TRANSFER_FRAME_TAIL \
1519 break; \
1520 case BC_RGB565: \
1521 TRANSFER_FRAME_HEAD \
1522 transfer_RGB888_to_RGB565((output), (input)); \
1523 TRANSFER_FRAME_TAIL \
1524 break; \
1525 case BC_BGR888: \
1526 TRANSFER_FRAME_HEAD \
1527 transfer_RGB888_to_BGR888((output), (input)); \
1528 TRANSFER_FRAME_TAIL \
1529 break; \
1530 case BC_RGB888: \
1531 TRANSFER_FRAME_HEAD \
1532 transfer_RGB888_to_RGB888((output), (input)); \
1533 TRANSFER_FRAME_TAIL \
1534 break; \
1535 case BC_RGBA8888: \
1536 TRANSFER_FRAME_HEAD \
1537 transfer_RGB888_to_RGBA8888((output), (input)); \
1538 TRANSFER_FRAME_TAIL \
1539 break; \
1540 case BC_ARGB8888: \
1541 TRANSFER_FRAME_HEAD \
1542 transfer_RGB888_to_ARGB8888((output), (input)); \
1543 TRANSFER_FRAME_TAIL \
1544 break; \
1545 case BC_RGB161616: \
1546 TRANSFER_FRAME_HEAD \
1547 transfer_RGB888_to_RGB161616((uint16_t**)(output), (input)); \
1548 TRANSFER_FRAME_TAIL \
1549 break; \
1550 case BC_RGBA16161616: \
1551 TRANSFER_FRAME_HEAD \
1552 transfer_RGB888_to_RGBA16161616((uint16_t**)(output), (input)); \
1553 TRANSFER_FRAME_TAIL \
1554 break; \
1555 case BC_RGB_FLOAT: \
1556 TRANSFER_FRAME_HEAD \
1557 transfer_RGB888_to_RGB_FLOAT((float**)(output), (input)); \
1558 TRANSFER_FRAME_TAIL \
1559 break; \
1560 case BC_RGBA_FLOAT: \
1561 TRANSFER_FRAME_HEAD \
1562 transfer_RGB888_to_RGBA_FLOAT((float**)(output), (input)); \
1563 TRANSFER_FRAME_TAIL \
1564 break; \
1565 case BC_ABGR8888: \
1566 TRANSFER_FRAME_HEAD \
1567 transfer_RGB888_to_ABGR8888((output), (input)); \
1568 TRANSFER_FRAME_TAIL \
1569 break; \
1570 case BC_BGR8888: \
1571 TRANSFER_FRAME_HEAD \
1572 transfer_RGB888_to_BGR8888((output), (input)); \
1573 TRANSFER_FRAME_TAIL \
1574 break; \
1575 case BC_YUV888: \
1576 TRANSFER_FRAME_HEAD \
1577 transfer_RGB888_to_YUV888((output), (input)); \
1578 TRANSFER_FRAME_TAIL \
1579 break; \
1580 case BC_YUVA8888: \
1581 TRANSFER_FRAME_HEAD \
1582 transfer_RGB888_to_YUVA8888((output), (input)); \
1583 TRANSFER_FRAME_TAIL \
1584 break; \
1585 case BC_YUV161616: \
1586 TRANSFER_FRAME_HEAD \
1587 transfer_RGB888_to_YUV161616((uint16_t**)(output), (input)); \
1588 TRANSFER_FRAME_TAIL \
1589 break; \
1590 case BC_YUVA16161616: \
1591 TRANSFER_FRAME_HEAD \
1592 transfer_RGB888_to_YUVA16161616((uint16_t**)(output), (input)); \
1593 TRANSFER_FRAME_TAIL \
1594 break; \
1595 case BC_YUV101010: \
1596 TRANSFER_FRAME_HEAD \
1597 transfer_RGB888_to_YUV101010((output), (input)); \
1598 TRANSFER_FRAME_TAIL \
1599 break; \
1600 case BC_YUV420P: \
1601 TRANSFER_YUV420P_OUT_HEAD \
1602 transfer_RGB888_to_YUV420P_YUV422P(output_y, \
1603 output_u, \
1604 output_v, \
1605 (input), \
1606 j); \
1607 TRANSFER_FRAME_TAIL \
1608 break; \
1609 case BC_YUV422: \
1610 TRANSFER_FRAME_HEAD \
1611 transfer_RGB888_to_YUV422((output), (input), j); \
1612 TRANSFER_FRAME_TAIL \
1613 break; \
1614 case BC_YUV422P: \
1615 TRANSFER_YUV422P_OUT_HEAD \
1616 transfer_RGB888_to_YUV420P_YUV422P(output_y, \
1617 output_u, \
1618 output_v, \
1619 (input), \
1620 j); \
1621 TRANSFER_FRAME_TAIL \
1622 break; \
1623 case BC_YUV444P: \
1624 TRANSFER_YUV444P_OUT_HEAD \
1625 transfer_RGB888_to_YUV444P(output_y, \
1626 output_u, \
1627 output_v, \
1628 (input), \
1629 j); \
1630 TRANSFER_FRAME_TAIL \
1631 break; \
1633 break; \
1635 case BC_RGBA8888: \
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 \
1642 break; \
1643 case BC_RGB8: \
1644 if(bg_color > 0) \
1645 TRANSFER_FRAME_HEAD \
1646 transfer_RGBA8888_to_RGB8bg((output), (input), bg_r, bg_g, bg_b); \
1647 TRANSFER_FRAME_TAIL \
1648 else \
1649 TRANSFER_FRAME_HEAD \
1650 transfer_RGBA8888_to_RGB8((output), (input)); \
1651 TRANSFER_FRAME_TAIL \
1652 break; \
1653 case BC_BGR565: \
1654 if(bg_color > 0) \
1655 TRANSFER_FRAME_HEAD \
1656 transfer_RGBA8888_to_BGR565bg((output), (input), bg_r, bg_g, bg_b); \
1657 TRANSFER_FRAME_TAIL \
1658 else \
1659 TRANSFER_FRAME_HEAD \
1660 transfer_RGBA8888_to_BGR565((output), (input)); \
1661 TRANSFER_FRAME_TAIL \
1662 break; \
1663 case BC_RGB565: \
1664 if(bg_color > 0) \
1665 TRANSFER_FRAME_HEAD \
1666 transfer_RGBA8888_to_RGB565bg((output), (input), bg_r, bg_g, bg_b); \
1667 TRANSFER_FRAME_TAIL \
1668 else \
1669 TRANSFER_FRAME_HEAD \
1670 transfer_RGBA8888_to_RGB565((output), (input)); \
1671 TRANSFER_FRAME_TAIL \
1672 break; \
1673 case BC_BGR888: \
1674 if(bg_color > 0) \
1675 TRANSFER_FRAME_HEAD \
1676 transfer_RGBA8888_to_BGR888bg((output), (input), bg_r, bg_g, bg_b); \
1677 TRANSFER_FRAME_TAIL \
1678 else \
1679 TRANSFER_FRAME_HEAD \
1680 transfer_RGBA8888_to_BGR888((output), (input)); \
1681 TRANSFER_FRAME_TAIL \
1682 break; \
1683 case BC_RGB888: \
1684 if(bg_color > 0) \
1685 TRANSFER_FRAME_HEAD \
1686 transfer_RGBA8888_to_RGB888bg((output), (input), bg_r, bg_g, bg_b); \
1687 TRANSFER_FRAME_TAIL \
1688 else \
1689 TRANSFER_FRAME_HEAD \
1690 transfer_RGBA8888_to_RGB888((output), (input)); \
1691 TRANSFER_FRAME_TAIL \
1692 break; \
1693 case BC_RGBA8888: \
1694 TRANSFER_FRAME_HEAD \
1695 transfer_RGBA8888_to_RGBA8888((output), (input)); \
1696 TRANSFER_FRAME_TAIL \
1697 break; \
1698 case BC_ARGB8888: \
1699 TRANSFER_FRAME_HEAD \
1700 transfer_RGBA8888_to_ARGB8888((output), (input)); \
1701 TRANSFER_FRAME_TAIL \
1702 break; \
1703 case BC_RGB161616: \
1704 TRANSFER_FRAME_HEAD \
1705 transfer_RGBA8888_to_RGB161616((uint16_t**)(output), (input)); \
1706 TRANSFER_FRAME_TAIL \
1707 break; \
1708 case BC_RGBA16161616: \
1709 TRANSFER_FRAME_HEAD \
1710 transfer_RGBA8888_to_RGBA16161616((uint16_t**)(output), (input)); \
1711 TRANSFER_FRAME_TAIL \
1712 break; \
1713 case BC_RGB_FLOAT: \
1714 TRANSFER_FRAME_HEAD \
1715 transfer_RGBA8888_to_RGB_FLOAT((float**)(output), (input)); \
1716 TRANSFER_FRAME_TAIL \
1717 break; \
1718 case BC_RGBA_FLOAT: \
1719 TRANSFER_FRAME_HEAD \
1720 transfer_RGBA8888_to_RGBA_FLOAT((float**)(output), (input)); \
1721 TRANSFER_FRAME_TAIL \
1722 break; \
1723 case BC_BGR8888: \
1724 if(bg_color > 0) \
1725 TRANSFER_FRAME_HEAD \
1726 transfer_RGBA8888_to_BGR8888bg((output), (input), bg_r, bg_g, bg_b); \
1727 TRANSFER_FRAME_TAIL \
1728 else \
1729 TRANSFER_FRAME_HEAD \
1730 transfer_RGBA8888_to_BGR8888((output), (input)); \
1731 TRANSFER_FRAME_TAIL \
1732 break; \
1733 case BC_YUV888: \
1734 TRANSFER_FRAME_HEAD \
1735 transfer_RGBA8888_to_YUV888((output), (input)); \
1736 TRANSFER_FRAME_TAIL \
1737 break; \
1738 case BC_YUVA8888: \
1739 TRANSFER_FRAME_HEAD \
1740 transfer_RGBA8888_to_YUVA8888((output), (input)); \
1741 TRANSFER_FRAME_TAIL \
1742 break; \
1743 case BC_YUV161616: \
1744 TRANSFER_FRAME_HEAD \
1745 transfer_RGBA8888_to_YUV161616((uint16_t**)(output), (input)); \
1746 TRANSFER_FRAME_TAIL \
1747 break; \
1748 case BC_YUVA16161616: \
1749 TRANSFER_FRAME_HEAD \
1750 transfer_RGBA8888_to_YUVA16161616((uint16_t**)(output), (input)); \
1751 TRANSFER_FRAME_TAIL \
1752 break; \
1753 case BC_YUV101010: \
1754 TRANSFER_FRAME_HEAD \
1755 transfer_RGBA8888_to_YUV101010((output), (input)); \
1756 TRANSFER_FRAME_TAIL \
1757 break; \
1758 case BC_YUV420P: \
1759 TRANSFER_YUV420P_OUT_HEAD \
1760 transfer_RGBA888_to_YUV420P_YUV422P(output_y, \
1761 output_u, \
1762 output_v, \
1763 (input), \
1764 j); \
1765 TRANSFER_FRAME_TAIL \
1766 break; \
1767 case BC_YUV422: \
1768 TRANSFER_FRAME_HEAD \
1769 transfer_RGBA888_to_YUV422((output), (input), j); \
1770 TRANSFER_FRAME_TAIL \
1771 break; \
1772 case BC_YUV422P: \
1773 TRANSFER_YUV422P_OUT_HEAD \
1774 transfer_RGBA888_to_YUV420P_YUV422P(output_y, \
1775 output_u, \
1776 output_v, \
1777 (input), \
1778 j); \
1779 TRANSFER_FRAME_TAIL \
1780 break; \
1781 case BC_YUV444P: \
1782 TRANSFER_YUV444P_OUT_HEAD \
1783 transfer_RGBA888_to_YUV444P(output_y, \
1784 output_u, \
1785 output_v, \
1786 (input), \
1787 j); \
1788 TRANSFER_FRAME_TAIL \
1789 break; \
1791 break; \
1793 case BC_RGB161616: \
1794 switch(out_colormodel) \
1796 case BC_RGB8: \
1797 TRANSFER_FRAME_HEAD \
1798 transfer_RGB161616_to_RGB8((output), (uint16_t*)(input)); \
1799 TRANSFER_FRAME_TAIL \
1800 break; \
1801 case BC_BGR565: \
1802 TRANSFER_FRAME_HEAD \
1803 transfer_RGB161616_to_BGR565((output), (uint16_t*)(input)); \
1804 TRANSFER_FRAME_TAIL \
1805 break; \
1806 case BC_RGB565: \
1807 TRANSFER_FRAME_HEAD \
1808 transfer_RGB161616_to_RGB565((output), (uint16_t*)(input)); \
1809 TRANSFER_FRAME_TAIL \
1810 break; \
1811 case BC_BGR888: \
1812 TRANSFER_FRAME_HEAD \
1813 transfer_RGB161616_to_BGR888((output), (uint16_t*)(input)); \
1814 TRANSFER_FRAME_TAIL \
1815 break; \
1816 case BC_BGR8888: \
1817 TRANSFER_FRAME_HEAD \
1818 transfer_RGB161616_to_BGR8888((output), (uint16_t*)(input)); \
1819 TRANSFER_FRAME_TAIL \
1820 break; \
1821 case BC_RGB888: \
1822 TRANSFER_FRAME_HEAD \
1823 transfer_RGB161616_to_RGB888((output), (uint16_t*)(input)); \
1824 TRANSFER_FRAME_TAIL \
1825 break; \
1826 case BC_RGBA8888: \
1827 TRANSFER_FRAME_HEAD \
1828 transfer_RGB161616_to_RGBA8888((output), (uint16_t*)(input)); \
1829 TRANSFER_FRAME_TAIL \
1830 break; \
1831 case BC_RGB_FLOAT: \
1832 TRANSFER_FRAME_HEAD \
1833 transfer_RGB161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1834 TRANSFER_FRAME_TAIL \
1835 break; \
1836 case BC_RGBA_FLOAT: \
1837 TRANSFER_FRAME_HEAD \
1838 transfer_RGB161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1839 TRANSFER_FRAME_TAIL \
1840 break; \
1841 case BC_YUV888: \
1842 TRANSFER_FRAME_HEAD \
1843 transfer_RGB161616_to_YUV888((output), (uint16_t*)(input)); \
1844 TRANSFER_FRAME_TAIL \
1845 break; \
1846 case BC_YUVA8888: \
1847 TRANSFER_FRAME_HEAD \
1848 transfer_RGB161616_to_YUVA8888((output), (uint16_t*)(input)); \
1849 TRANSFER_FRAME_TAIL \
1850 break; \
1851 case BC_YUV161616: \
1852 TRANSFER_FRAME_HEAD \
1853 transfer_RGB161616_to_YUV161616((uint16_t**)(output), (uint16_t*)(input)); \
1854 TRANSFER_FRAME_TAIL \
1855 break; \
1856 case BC_YUVA16161616: \
1857 TRANSFER_FRAME_HEAD \
1858 transfer_RGB161616_to_YUVA16161616((uint16_t**)(output), (uint16_t*)(input)); \
1859 TRANSFER_FRAME_TAIL \
1860 break; \
1861 case BC_YUV101010: \
1862 TRANSFER_FRAME_HEAD \
1863 transfer_RGB161616_to_YUV101010((output), (uint16_t*)(input)); \
1864 TRANSFER_FRAME_TAIL \
1865 break; \
1866 case BC_YUV420P: \
1867 TRANSFER_YUV420P_OUT_HEAD \
1868 transfer_RGB161616_to_YUV420P_YUV422P(output_y, \
1869 output_u, \
1870 output_v, \
1871 (uint16_t*)(input), \
1872 j); \
1873 TRANSFER_FRAME_TAIL \
1874 break; \
1875 case BC_YUV422P: \
1876 TRANSFER_YUV422P_OUT_HEAD \
1877 transfer_RGB161616_to_YUV420P_YUV422P(output_y, \
1878 output_u, \
1879 output_v, \
1880 (uint16_t*)(input), \
1881 j); \
1882 TRANSFER_FRAME_TAIL \
1883 break; \
1884 case BC_YUV444P: \
1885 TRANSFER_YUV444P_OUT_HEAD \
1886 transfer_RGB161616_to_YUV444P(output_y, \
1887 output_u, \
1888 output_v, \
1889 (uint16_t*)(input), \
1890 j); \
1891 TRANSFER_FRAME_TAIL \
1892 break; \
1894 break; \
1896 case BC_RGBA16161616: \
1897 switch(out_colormodel) \
1899 case BC_RGB8: \
1900 TRANSFER_FRAME_HEAD \
1901 transfer_RGBA16161616_to_RGB8((output), (uint16_t*)(input)); \
1902 TRANSFER_FRAME_TAIL \
1903 break; \
1904 case BC_BGR565: \
1905 TRANSFER_FRAME_HEAD \
1906 transfer_RGBA16161616_to_BGR565((output), (uint16_t*)(input)); \
1907 TRANSFER_FRAME_TAIL \
1908 break; \
1909 case BC_RGB565: \
1910 TRANSFER_FRAME_HEAD \
1911 transfer_RGBA16161616_to_RGB565((output), (uint16_t*)(input)); \
1912 TRANSFER_FRAME_TAIL \
1913 break; \
1914 case BC_BGR888: \
1915 TRANSFER_FRAME_HEAD \
1916 transfer_RGBA16161616_to_BGR888((output), (uint16_t*)(input)); \
1917 TRANSFER_FRAME_TAIL \
1918 break; \
1919 case BC_BGR8888: \
1920 TRANSFER_FRAME_HEAD \
1921 transfer_RGBA16161616_to_BGR8888((output), (uint16_t*)(input)); \
1922 TRANSFER_FRAME_TAIL \
1923 break; \
1924 case BC_RGB888: \
1925 TRANSFER_FRAME_HEAD \
1926 transfer_RGBA16161616_to_RGB888((output), (uint16_t*)(input)); \
1927 TRANSFER_FRAME_TAIL \
1928 break; \
1929 case BC_RGBA8888: \
1930 TRANSFER_FRAME_HEAD \
1931 transfer_RGBA16161616_to_RGBA8888((output), (uint16_t*)(input)); \
1932 TRANSFER_FRAME_TAIL \
1933 break; \
1934 case BC_RGB_FLOAT: \
1935 TRANSFER_FRAME_HEAD \
1936 transfer_RGBA16161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1937 TRANSFER_FRAME_TAIL \
1938 break; \
1939 case BC_RGBA_FLOAT: \
1940 TRANSFER_FRAME_HEAD \
1941 transfer_RGBA16161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1942 TRANSFER_FRAME_TAIL \
1943 break; \
1944 case BC_YUV888: \
1945 TRANSFER_FRAME_HEAD \
1946 transfer_RGBA16161616_to_YUV888((output), (uint16_t*)(input)); \
1947 TRANSFER_FRAME_TAIL \
1948 break; \
1949 case BC_YUVA8888: \
1950 TRANSFER_FRAME_HEAD \
1951 transfer_RGBA16161616_to_YUVA8888((output), (uint16_t*)(input)); \
1952 TRANSFER_FRAME_TAIL \
1953 break; \
1954 case BC_YUV161616: \
1955 TRANSFER_FRAME_HEAD \
1956 transfer_RGBA16161616_to_YUV161616(((uint16_t**)output), (uint16_t*)(input)); \
1957 TRANSFER_FRAME_TAIL \
1958 break; \
1959 case BC_YUVA16161616: \
1960 TRANSFER_FRAME_HEAD \
1961 transfer_RGBA16161616_to_YUVA16161616((uint16_t**)(output), (uint16_t*)(input)); \
1962 TRANSFER_FRAME_TAIL \
1963 break; \
1964 case BC_YUV101010: \
1965 TRANSFER_FRAME_HEAD \
1966 transfer_RGBA16161616_to_YUV101010((output), (uint16_t*)(input)); \
1967 TRANSFER_FRAME_TAIL \
1968 break; \
1969 case BC_YUV420P: \
1970 TRANSFER_YUV420P_OUT_HEAD \
1971 transfer_RGBA16161616_to_YUV420P_YUV422P(output_y, \
1972 output_u, \
1973 output_v, \
1974 (uint16_t*)(input), \
1975 j); \
1976 TRANSFER_FRAME_TAIL \
1977 break; \
1978 case BC_YUV422P: \
1979 TRANSFER_YUV422P_OUT_HEAD \
1980 transfer_RGBA16161616_to_YUV420P_YUV422P(output_y, \
1981 output_u, \
1982 output_v, \
1983 (uint16_t*)(input), \
1984 j); \
1985 TRANSFER_FRAME_TAIL \
1986 break; \
1987 case BC_YUV444P: \
1988 TRANSFER_YUV444P_OUT_HEAD \
1989 transfer_RGBA16161616_to_YUV444P(output_y, \
1990 output_u, \
1991 output_v, \
1992 (uint16_t*)(input), \
1993 j); \
1994 TRANSFER_FRAME_TAIL \
1995 break; \
1997 break; \
1999 case BC_BGR8888: \
2000 switch(out_colormodel) \
2002 case BC_RGB888: \
2003 TRANSFER_FRAME_HEAD \
2004 transfer_BGR8888_to_RGB888((output), (input)); \
2005 TRANSFER_FRAME_TAIL \
2006 break; \
2007 case BC_BGR8888: \
2008 TRANSFER_FRAME_HEAD \
2009 transfer_BGR8888_to_BGR8888((output), (input)); \
2010 TRANSFER_FRAME_TAIL \
2011 break; \
2013 break; \
2015 case BC_BGR888: \
2016 switch(out_colormodel) \
2018 case BC_RGB888: \
2019 TRANSFER_FRAME_HEAD \
2020 transfer_BGR888_to_RGB888((output), (input)); \
2021 TRANSFER_FRAME_TAIL \
2022 break; \
2024 break; \
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;
2039 new_time.tv_sec--;
2042 return (int64_t)new_time.tv_sec * 1000000 +
2043 (int64_t)new_time.tv_usec;
2050 void cmodel_default(PERMUTATION_ARGS)
2052 if(scale)
2054 int done = 0;
2055 switch (in_colormodel) {
2056 case BC_YUVA8888:
2057 switch (out_colormodel) {
2058 case BC_BGR8888:
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;
2068 short int i ;
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);
2076 short int j;
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));
2096 r *= a;
2097 g *= a;
2098 b *= a;
2100 output_row[0] = ((b) >> 8);
2101 output_row[1] = ((g) >> 8);
2102 output_row[2] = ((r) >> 8);
2104 output_row += 4;
2108 // long long dif= get_difference(&start_time);
2109 // printf("diff_inside: %lli\n", dif);
2111 done = 1;
2113 break;
2115 break;
2118 if (!done)
2120 TRANSFER_FRAME_DEFAULT(&output_row,
2121 input_row + column_table[j] * in_pixelsize,
2128 else
2130 TRANSFER_FRAME_DEFAULT(&output_row,
2131 input_row + j * in_pixelsize,