r999: maintainers added to README_en.
[cinelerra_cv/mob.git] / quicktime / cmodel_default.c
blob961dbc34f21565173cd7c713bd6ed853abca90be
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"
29 // ********************************* YUV101010 -> *****************************
31 #define READ_YUV101010 \
32 uint64_t y, u, v; \
33 uint32_t input_i = input[0] | \
34 (input[1] << 8) | \
35 (input[2] << 16) | \
36 (input[3] << 24); \
38 y = ((input_i & 0xffc00000) >> 16) | 0x3f; \
39 u = ((input_i & 0x3ff000) >> 6) | 0x3f; \
40 v = ((input_i & 0xffc) << 4) | 0x3f;
47 static inline void transfer_YUV101010_to_RGB8(unsigned char *(*output), unsigned char *input)
49 int r, g, b;
51 READ_YUV101010
53 y = (y << 8) | (y >> 8);
55 YUV_TO_RGB16(y, u, v, r, g, b);
57 *(*output)++ = (unsigned char)(((input[0] & 0xc000) >> 8) +
58 ((input[1] & 0xe000) >> 10) +
59 ((input[2] & 0xe000) >> 13));
62 static inline void transfer_YUV101010_to_BGR565(unsigned char *(*output), unsigned char *input)
64 int r, g, b;
66 READ_YUV101010
68 y = (y << 8) | (y >> 8);
70 YUV_TO_RGB16(y, u, v, r, g, b);
72 *(uint16_t*)(*output) = (b & 0xf800) |
73 ((g & 0xfc00) >> 5) |
74 ((r & 0xf800) >> 11);
75 (*output) += 2;
78 static inline void transfer_YUV101010_to_RGB565(unsigned char *(*output), unsigned char *input)
80 int r, g, b;
82 READ_YUV101010
84 y = (y << 8) | (y >> 8);
86 YUV_TO_RGB16(y, u, v, r, g, b);
88 *(uint16_t*)(*output) = (r & 0xf800) |
89 ((g & 0xfc00) >> 5) |
90 ((b & 0xf800) >> 11);
91 (*output) += 2;
94 static inline void transfer_YUV101010_to_BGR888(unsigned char *(*output), unsigned char *input)
96 int r, g, b;
98 READ_YUV101010
100 y = (y << 8) | (y >> 8);
102 YUV_TO_RGB16(y, u, v, r, g, b);
104 *(*output)++ = b >> 8;
105 *(*output)++ = g >> 8;
106 *(*output)++ = r >> 8;
109 static inline void transfer_YUV101010_to_BGR8888(unsigned char *(*output), unsigned char *input)
111 int r, g, b;
113 READ_YUV101010
115 y = (y << 8) | (y >> 8);
117 YUV_TO_RGB16(y, u, v, r, g, b);
119 *(*output)++ = b >> 8;
120 *(*output)++ = g >> 8;
121 *(*output)++ = r >> 8;
122 (*output)++;
125 static inline void transfer_YUV101010_to_YUV888(unsigned char *(*output), unsigned char *input)
127 READ_YUV101010
129 *(*output)++ = y >> 8;
130 *(*output)++ = u >> 8;
131 *(*output)++ = v >> 8;
134 static inline void transfer_YUV101010_to_YUVA8888(unsigned char *(*output), unsigned char *input)
136 READ_YUV101010
138 *(*output)++ = y >> 8;
139 *(*output)++ = u >> 8;
140 *(*output)++ = v >> 8;
141 *(*output)++ = 0xff;
144 static inline void transfer_YUV101010_to_YUV161616(uint16_t *(*output), unsigned char *input)
146 READ_YUV101010
148 *(*output)++ = y;
149 *(*output)++ = u;
150 *(*output)++ = v;
153 static inline void transfer_YUV101010_to_YUVA16161616(uint16_t *(*output), unsigned char *input)
155 READ_YUV101010
157 *(*output)++ = y;
158 *(*output)++ = u;
159 *(*output)++ = v;
160 *(*output)++ = 0xffff;
163 static inline void transfer_YUV101010_to_RGB888(unsigned char *(*output), unsigned char *input)
165 int r, g, b;
167 READ_YUV101010
169 y = (y << 8) | (y >> 8);
171 YUV_TO_RGB16(y, u, v, r, g, b);
173 *(*output)++ = r >> 8;
174 *(*output)++ = g >> 8;
175 *(*output)++ = b >> 8;
178 static inline void transfer_YUV101010_to_RGBA8888(unsigned char *(*output), unsigned char *input)
180 int r, g, b;
182 READ_YUV101010
184 y = (y << 8) | (y >> 8);
186 YUV_TO_RGB16(y, u, v, r, g, b);
188 *(*output)++ = r >> 8;
189 *(*output)++ = g >> 8;
190 *(*output)++ = b >> 8;
191 *(*output)++ = 0xff;
194 static inline void transfer_YUV101010_to_RGB161616(uint16_t *(*output), unsigned char *input)
196 int r, g, b;
198 READ_YUV101010
200 y = (y << 8) | (y >> 8);
202 YUV_TO_RGB16(y, u, v, r, g, b);
204 *(*output)++ = r;
205 *(*output)++ = g;
206 *(*output)++ = b;
209 static inline void transfer_YUV101010_to_RGBA16161616(uint16_t *(*output), unsigned char *input)
211 int r, g, b;
213 READ_YUV101010
215 y = (y << 8) | (y >> 8);
217 YUV_TO_RGB16(y, u, v, r, g, b);
219 *(*output)++ = r;
220 *(*output)++ = g;
221 *(*output)++ = b;
222 *(*output)++ = 0xffff;
228 static inline void transfer_YUV101010_to_RGB_FLOAT(float *(*output),
229 unsigned char *input)
231 float r, g, b;
232 float y_f;
234 READ_YUV101010
236 y_f = (float)y / 0xffff;
238 YUV16_TO_RGB_FLOAT(y_f, u, v, r, g, b);
240 *(*output)++ = r;
241 *(*output)++ = g;
242 *(*output)++ = b;
245 static inline void transfer_YUV101010_to_RGBA_FLOAT(float *(*output),
246 unsigned char *input)
248 float r, g, b;
249 float y_f;
251 READ_YUV101010
253 y_f = (float)y / 0xffff;
255 YUV16_TO_RGB_FLOAT(y_f, u, v, r, g, b);
257 *(*output)++ = r;
258 *(*output)++ = g;
259 *(*output)++ = b;
260 *(*output)++ = 1.0;
281 // ******************************** VYU888 -> *********************************
284 static inline void transfer_VYU888_to_RGB8(unsigned char *(*output), unsigned char *input)
286 int y, u, v;
287 int r, g, b;
289 y = ((int)input[1]) << 16;
290 u = input[2];
291 v = input[0];
292 YUV_TO_RGB(y, u, v, r, g, b);
294 *(*output) = (unsigned char)((r & 0xc0) +
295 ((g & 0xe0) >> 2) +
296 ((b & 0xe0) >> 5));
297 (*output)++;
300 static inline void transfer_VYU888_to_BGR565(unsigned char *(*output), unsigned char *input)
302 int y, u, v;
303 int r, g, b;
305 y = ((int)input[1]) << 16;
306 u = input[2];
307 v = input[0];
308 YUV_TO_RGB(y, u, v, r, g, b);
309 *(uint16_t*)(*output) = ((b & 0xf8) << 8)
310 + ((g & 0xfc) << 3)
311 + ((r & 0xf8) >> 3);
312 (*output) += 2;
315 static inline void transfer_VYU888_to_RGB565(unsigned char *(*output), unsigned char *input)
317 int y, u, v;
318 int r, g, b;
320 y = ((int)input[1]) << 16;
321 u = input[2];
322 v = input[0];
323 YUV_TO_RGB(y, u, v, r, g, b);
324 *(uint16_t*)(*output) = ((r & 0xf8) << 8)
325 + ((g & 0xfc) << 3)
326 + ((b & 0xf8) >> 3);
327 (*output) += 2;
330 static inline void transfer_VYU888_to_BGR888(unsigned char *(*output), unsigned char *input)
332 int y, u, v;
333 int r, g, b;
335 y = ((int)input[1]) << 16;
336 u = input[2];
337 v = input[0];
338 YUV_TO_RGB(y, u, v, r, g, b);
340 (*output)[2] = r;
341 (*output)[1] = g;
342 (*output)[0] = b;
343 (*output) += 3;
346 static inline void transfer_VYU888_to_BGR8888(unsigned char *(*output), unsigned char *input)
348 int y, u, v;
349 int r, g, b;
351 y = ((int)input[1]) << 16;
352 u = input[2];
353 v = input[0];
354 YUV_TO_RGB(y, u, v, r, g, b);
355 (*output)[2] = r;
356 (*output)[1] = g;
357 (*output)[0] = b;
358 (*output) += 4;
362 static inline void transfer_VYU888_to_RGB888(unsigned char *(*output), unsigned char *input)
364 int y, u, v;
365 int r, g, b;
367 y = ((int)input[1]) << 16;
368 u = input[2];
369 v = input[0];
370 YUV_TO_RGB(y, u, v, r, g, b);
372 (*output)[0] = r;
373 (*output)[1] = g;
374 (*output)[2] = b;
375 (*output) += 3;
378 static inline void transfer_VYU888_to_RGBA8888(unsigned char *(*output), unsigned char *input)
380 int y, u, v;
381 int r, g, b;
383 y = ((int)input[1]) << 16;
384 u = input[2];
385 v = input[0];
386 YUV_TO_RGB(y, u, v, r, g, b);
388 (*output)[0] = r;
389 (*output)[1] = g;
390 (*output)[2] = b;
391 (*output)[3] = 0xff;
392 (*output) += 4;
396 static inline void transfer_VYU888_to_RGB161616(uint16_t *(*output), unsigned char *input)
398 int y, u, v;
399 int r, g, b;
401 y = (input[1] << 16) | (input[1] << 8) | input[1];
402 u = (input[2] << 8) | input[2];
403 v = (input[0] << 8) | input[0];
404 YUV_TO_RGB16(y, u, v, r, g, b);
406 (*output)[0] = r;
407 (*output)[1] = g;
408 (*output)[2] = b;
409 (*output) += 3;
412 static inline void transfer_VYU888_to_RGBA16161616(uint16_t *(*output), unsigned char *input)
414 int y, u, v;
415 int r, g, b;
417 y = (input[1] << 16) | (input[1] << 8) | input[1];
418 u = (input[2] << 8) | input[2];
419 v = (input[0] << 8) | input[0];
420 YUV_TO_RGB16(y, u, v, r, g, b);
422 (*output)[0] = r;
423 (*output)[1] = g;
424 (*output)[2] = b;
425 (*output)[3] = 0xffff;
426 (*output) += 3;
430 static inline void transfer_VYU888_to_RGB_FLOAT(float *(*output), unsigned char *input)
432 float y;
433 int u, v;
434 float r, g, b;
436 v = *input++;
437 y = (float)*input++ / 0xff;
438 u = *input;
439 YUV_TO_FLOAT(y, u, v, r, g, b);
441 *(*output)++ = r;
442 *(*output)++ = g;
443 *(*output)++ = b;
446 static inline void transfer_VYU888_to_RGBA_FLOAT(float *(*output), unsigned char *input)
448 float y;
449 int u, v;
450 float r, g, b;
452 v = *input++;
453 y = (float)*input++ / 0xff;
454 u = *input;
455 YUV_TO_FLOAT(y, u, v, r, g, b);
457 *(*output)++ = r;
458 *(*output)++ = g;
459 *(*output)++ = b;
460 *(*output)++ = 1.0;
464 static inline void transfer_VYU888_to_YUV888(unsigned char *(*output), unsigned char *input)
466 (*output)[0] = input[1];
467 (*output)[1] = input[2];
468 (*output)[2] = input[0];
469 (*output) += 3;
472 static inline void transfer_VYU888_to_YUVA8888(unsigned char *(*output), unsigned char *input)
474 (*output)[0] = input[1];
475 (*output)[1] = input[2];
476 (*output)[2] = input[0];
477 (*output)[3] = 0xff;
478 (*output) += 4;
482 static inline void transfer_VYU888_to_YUV161616(uint16_t *(*output), unsigned char *input)
484 (*output)[0] = ((int)input[1]) << 8;
485 (*output)[1] = ((int)input[2]) << 8;
486 (*output)[2] = ((int)input[0]) << 8;
487 (*output) += 3;
490 static inline void transfer_VYU888_to_YUVA16161616(uint16_t *(*output), unsigned char *input)
492 (*output)[0] = ((int)input[1]) << 8;
493 (*output)[1] = ((int)input[2]) << 8;
494 (*output)[2] = ((int)input[0]) << 8;
495 (*output)[3] = 0xff;
496 (*output) += 4;
510 // ******************************** UYVA8888 -> *********************************
513 static inline void transfer_UYVA8888_to_RGB8(unsigned char *(*output), unsigned char *input)
515 int y, u, v;
516 int r, g, b;
518 y = ((int)input[1]) << 16;
519 u = input[0];
520 v = input[2];
521 YUV_TO_RGB(y, u, v, r, g, b);
523 r = r * input[3] / 0xff;
524 g = g * input[3] / 0xff;
525 b = b * input[3] / 0xff;
526 *(*output) = (unsigned char)((r & 0xc0) +
527 ((g & 0xe0) >> 2) +
528 ((b & 0xe0) >> 5));
529 (*output)++;
532 static inline void transfer_UYVA8888_to_BGR565(unsigned char *(*output), unsigned char *input)
534 int y, u, v;
535 int r, g, b;
537 y = ((int)input[1]) << 16;
538 u = input[0];
539 v = input[2];
540 YUV_TO_RGB(y, u, v, r, g, b);
541 r = r * input[3] / 0xff;
542 g = g * input[3] / 0xff;
543 b = b * input[3] / 0xff;
544 *(uint16_t*)(*output) = ((b & 0xf8) << 8)
545 + ((g & 0xfc) << 3)
546 + ((r & 0xf8) >> 3);
547 (*output) += 2;
550 static inline void transfer_UYVA8888_to_RGB565(unsigned char *(*output), unsigned char *input)
552 int y, u, v;
553 int r, g, b;
555 y = ((int)input[1]) << 16;
556 u = input[0];
557 v = input[2];
558 YUV_TO_RGB(y, u, v, r, g, b);
559 r = r * input[3] / 0xff;
560 g = g * input[3] / 0xff;
561 b = b * input[3] / 0xff;
562 *(uint16_t*)(*output) = ((r & 0xf8) << 8)
563 + ((g & 0xfc) << 3)
564 + ((b & 0xf8) >> 3);
565 (*output) += 2;
568 static inline void transfer_UYVA8888_to_BGR888(unsigned char *(*output), unsigned char *input)
570 int y, u, v;
571 int r, g, b;
573 y = ((int)input[1]) << 16;
574 u = input[0];
575 v = input[2];
576 YUV_TO_RGB(y, u, v, r, g, b);
577 r = r * input[3] / 0xff;
578 g = g * input[3] / 0xff;
579 b = b * input[3] / 0xff;
581 (*output)[2] = r;
582 (*output)[1] = g;
583 (*output)[0] = b;
584 (*output) += 3;
587 static inline void transfer_UYVA8888_to_BGR8888(unsigned char *(*output), unsigned char *input)
589 int y, u, v;
590 int r, g, b;
592 y = ((int)input[1]) << 16;
593 u = input[0];
594 v = input[2];
595 YUV_TO_RGB(y, u, v, r, g, b);
596 r = r * input[3] / 0xff;
597 g = g * input[3] / 0xff;
598 b = b * input[3] / 0xff;
600 (*output)[2] = r;
601 (*output)[1] = g;
602 (*output)[0] = b;
603 (*output) += 4;
607 static inline void transfer_UYVA8888_to_RGB888(unsigned char *(*output), unsigned char *input)
609 int y, u, v;
610 int r, g, b;
612 y = ((int)input[1]) << 16;
613 u = input[0];
614 v = input[2];
615 YUV_TO_RGB(y, u, v, r, g, b);
616 r = r * input[3] / 0xff;
617 g = g * input[3] / 0xff;
618 b = b * input[3] / 0xff;
620 (*output)[0] = r;
621 (*output)[1] = g;
622 (*output)[2] = b;
623 (*output) += 3;
626 static inline void transfer_UYVA8888_to_RGBA8888(unsigned char *(*output), unsigned char *input)
628 int y, u, v;
629 int r, g, b;
631 y = ((int)input[1]) << 16;
632 u = input[0];
633 v = input[2];
634 YUV_TO_RGB(y, u, v, r, g, b);
636 (*output)[0] = r;
637 (*output)[1] = g;
638 (*output)[2] = b;
639 (*output)[3] = input[3];
640 (*output) += 4;
644 static inline void transfer_UYVA8888_to_RGB161616(uint16_t *(*output), unsigned char *input)
646 int y, u, v;
647 int r, g, b;
649 y = ((int)input[1]) << 16;
650 u = (input[0] << 8) | input[0];
651 v = (input[2] << 8) | input[2];
652 YUV_TO_RGB16(y, u, v, r, g, b);
653 r = r * input[3] / 0xff;
654 g = g * input[3] / 0xff;
655 b = b * input[3] / 0xff;
657 (*output)[0] = r;
658 (*output)[1] = g;
659 (*output)[2] = b;
660 (*output) += 3;
663 static inline void transfer_UYVA8888_to_RGBA16161616(uint16_t *(*output), unsigned char *input)
665 int y, u, v;
666 int r, g, b;
668 y = ((int)input[1]) << 16;
669 u = (input[0] << 8) | input[0];
670 v = (input[2] << 8) | input[2];
671 YUV_TO_RGB16(y, u, v, r, g, b);
673 (*output)[0] = r;
674 (*output)[1] = g;
675 (*output)[2] = b;
676 (*output)[3] = input[3] << 8;
677 (*output) += 4;
680 static inline void transfer_UYVA8888_to_RGB_FLOAT(float *(*output), unsigned char *input)
682 float y, a;
683 int u, v;
684 float r, g, b;
686 u = *input++;
687 y = (float)*input++ / 0xff;
688 v = *input++;
689 a = (float)*input / 0xff;
690 YUV_TO_FLOAT(y, u, v, r, g, b);
692 r = r * a;
693 g = g * a;
694 b = b * a;
696 *(*output)++ = r;
697 *(*output)++ = g;
698 *(*output)++ = b;
701 static inline void transfer_UYVA8888_to_RGBA_FLOAT(float *(*output), unsigned char *input)
703 float y, a;
704 int u, v;
705 float r, g, b;
707 u = *input++;
708 y = (float)*input++ / 0xff;
709 v = *input++;
710 a = (float)*input / 0xff;
711 YUV_TO_FLOAT(y, u, v, r, g, b);
713 *(*output)++ = r;
714 *(*output)++ = g;
715 *(*output)++ = b;
716 *(*output)++ = a;
720 static inline void transfer_UYVA8888_to_YUV888(unsigned char *(*output), unsigned char *input)
722 int a, anti_a;
723 a = input[3];
724 anti_a = 0xff - a;
726 (*output)[0] = (a * input[1]) / 0xff;
727 (*output)[1] = (a * input[0] + anti_a * 0x80) / 0xff;
728 (*output)[2] = (a * input[2] + anti_a * 0x80) / 0xff;
729 (*output) += 3;
732 static inline void transfer_UYVA8888_to_YUVA8888(unsigned char *(*output), unsigned char *input)
734 (*output)[0] = input[1];
735 (*output)[1] = input[0];
736 (*output)[2] = input[2];
737 (*output)[3] = input[3];
738 (*output) += 4;
742 static inline void transfer_UYVA8888_to_YUV161616(uint16_t *(*output), unsigned char *input)
744 int a, anti_a;
745 a = input[3];
746 anti_a = 0xff - a;
748 (*output)[0] = a * input[1];
749 (*output)[1] = a * input[0] + anti_a * 0x80;
750 (*output)[2] = a * input[2] + anti_a * 0x80;
751 (*output) += 3;
754 static inline void transfer_UYVA8888_to_YUVA16161616(uint16_t *(*output), unsigned char *input)
756 (*output)[0] = input[1] << 8;
757 (*output)[1] = input[0] << 8;
758 (*output)[2] = input[2] << 8;
759 (*output)[3] = input[3] << 8;
760 (*output) += 4;
772 #define TRANSFER_FRAME_DEFAULT(output, \
773 input, \
774 y_in_offset, \
775 u_in_offset, \
776 v_in_offset, \
777 input_column) \
779 register int i, j; \
781 switch(in_colormodel) \
783 case BC_YUV888: \
784 switch(out_colormodel) \
786 case BC_RGB8: \
787 TRANSFER_FRAME_HEAD \
788 transfer_YUV888_to_RGB8((output), (input)); \
789 TRANSFER_FRAME_TAIL \
790 break; \
791 case BC_BGR565: \
792 TRANSFER_FRAME_HEAD \
793 transfer_YUV888_to_BGR565((output), (input)); \
794 TRANSFER_FRAME_TAIL \
795 break; \
796 case BC_RGB565: \
797 TRANSFER_FRAME_HEAD \
798 transfer_YUV888_to_RGB565((output), (input)); \
799 TRANSFER_FRAME_TAIL \
800 break; \
801 case BC_BGR888: \
802 TRANSFER_FRAME_HEAD \
803 transfer_YUV888_to_BGR888((output), (input)); \
804 TRANSFER_FRAME_TAIL \
805 break; \
806 case BC_BGR8888: \
807 TRANSFER_FRAME_HEAD \
808 transfer_YUV888_to_BGR8888((output), (input)); \
809 TRANSFER_FRAME_TAIL \
810 break; \
811 case BC_RGB888: \
812 TRANSFER_FRAME_HEAD \
813 transfer_YUV888_to_RGB888((output), (input)); \
814 TRANSFER_FRAME_TAIL \
815 break; \
816 case BC_RGBA8888: \
817 TRANSFER_FRAME_HEAD \
818 transfer_YUV888_to_RGBA8888((output), (input)); \
819 TRANSFER_FRAME_TAIL \
820 break; \
821 case BC_ARGB8888: \
822 TRANSFER_FRAME_HEAD \
823 transfer_YUV888_to_ARGB8888((output), (input)); \
824 TRANSFER_FRAME_TAIL \
825 break; \
826 case BC_RGB_FLOAT: \
827 TRANSFER_FRAME_HEAD \
828 transfer_YUV888_to_RGB_FLOAT((float**)(output), (input)); \
829 TRANSFER_FRAME_TAIL \
830 break; \
831 case BC_RGBA_FLOAT: \
832 TRANSFER_FRAME_HEAD \
833 transfer_YUV888_to_RGBA_FLOAT((float**)(output), (input)); \
834 TRANSFER_FRAME_TAIL \
835 break; \
836 case BC_YUV101010: \
837 TRANSFER_FRAME_HEAD \
838 transfer_YUV888_to_YUV101010((output), (input)); \
839 TRANSFER_FRAME_TAIL \
840 break; \
841 case BC_YUV420P: \
842 TRANSFER_YUV420P_OUT_HEAD \
843 transfer_YUV888_to_YUV420P_YUV422P(output_y, \
844 output_u, \
845 output_v, \
846 (input), \
847 j); \
848 TRANSFER_FRAME_TAIL \
849 break; \
850 case BC_YUV422P: \
851 TRANSFER_YUV422P_OUT_HEAD \
852 transfer_YUV888_to_YUV420P_YUV422P(output_y, \
853 output_u, \
854 output_v, \
855 (input), \
856 j); \
857 TRANSFER_FRAME_TAIL \
858 break; \
859 case BC_YUV444P: \
860 TRANSFER_YUV444P_OUT_HEAD \
861 transfer_YUV888_to_YUV444P(output_y, \
862 output_u, \
863 output_v, \
864 (input), \
865 j); \
866 TRANSFER_FRAME_TAIL \
867 break; \
868 case BC_YUV422: \
869 TRANSFER_FRAME_HEAD \
870 transfer_YUV888_to_YUV422((output), \
871 (input), \
872 j); \
873 TRANSFER_FRAME_TAIL \
874 break; \
875 case BC_YUV888: \
876 TRANSFER_FRAME_HEAD \
877 transfer_YUV888_to_YUV888((output), (input)); \
878 TRANSFER_FRAME_TAIL \
879 break; \
880 case BC_YUVA8888: \
881 TRANSFER_FRAME_HEAD \
882 transfer_YUV888_to_YUVA8888((output), (input)); \
883 TRANSFER_FRAME_TAIL \
884 break; \
885 case BC_VYU888: \
886 TRANSFER_FRAME_HEAD \
887 transfer_YUV888_to_VYU888((output), (input)); \
888 TRANSFER_FRAME_TAIL \
889 break; \
890 case BC_UYVA8888: \
891 TRANSFER_FRAME_HEAD \
892 transfer_YUV888_to_UYVA8888((output), (input)); \
893 TRANSFER_FRAME_TAIL \
894 break; \
896 break; \
898 case BC_YUVA8888: \
899 switch(out_colormodel) \
901 case BC_RGB8: \
902 TRANSFER_FRAME_HEAD \
903 transfer_YUVA8888_to_RGB8((output), (input)); \
904 TRANSFER_FRAME_TAIL \
905 break; \
906 case BC_BGR565: \
907 TRANSFER_FRAME_HEAD \
908 transfer_YUVA8888_to_BGR565((output), (input)); \
909 TRANSFER_FRAME_TAIL \
910 break; \
911 case BC_RGB565: \
912 TRANSFER_FRAME_HEAD \
913 transfer_YUVA8888_to_RGB565((output), (input)); \
914 TRANSFER_FRAME_TAIL \
915 break; \
916 case BC_BGR888: \
917 TRANSFER_FRAME_HEAD \
918 transfer_YUVA8888_to_BGR888((output), (input)); \
919 TRANSFER_FRAME_TAIL \
920 break; \
921 case BC_BGR8888: \
922 TRANSFER_FRAME_HEAD \
923 transfer_YUVA8888_to_BGR8888((output), (input)); \
924 TRANSFER_FRAME_TAIL \
925 break; \
926 case BC_RGB888: \
927 TRANSFER_FRAME_HEAD \
928 transfer_YUVA8888_to_RGB888((output), (input)); \
929 TRANSFER_FRAME_TAIL \
930 break; \
931 case BC_RGBA8888: \
932 TRANSFER_FRAME_HEAD \
933 transfer_YUVA8888_to_RGBA8888((output), (input)); \
934 TRANSFER_FRAME_TAIL \
935 break; \
936 case BC_ARGB8888: \
937 TRANSFER_FRAME_HEAD \
938 transfer_YUVA8888_to_ARGB8888((output), (input)); \
939 TRANSFER_FRAME_TAIL \
940 break; \
941 case BC_RGB_FLOAT: \
942 TRANSFER_FRAME_HEAD \
943 transfer_YUVA8888_to_RGB_FLOAT((float**)(output), (input)); \
944 TRANSFER_FRAME_TAIL \
945 break; \
946 case BC_RGBA_FLOAT: \
947 TRANSFER_FRAME_HEAD \
948 transfer_YUVA8888_to_RGBA_FLOAT((float**)(output), (input)); \
949 TRANSFER_FRAME_TAIL \
950 break; \
951 case BC_VYU888: \
952 TRANSFER_FRAME_HEAD \
953 transfer_YUVA8888_to_VYU888((output), (input)); \
954 TRANSFER_FRAME_TAIL \
955 break; \
956 case BC_YUVA8888: \
957 TRANSFER_FRAME_HEAD \
958 transfer_YUVA8888_to_YUVA8888((output), (input)); \
959 TRANSFER_FRAME_TAIL \
960 break; \
961 case BC_UYVA8888: \
962 TRANSFER_FRAME_HEAD \
963 transfer_YUVA8888_to_UYVA8888((output), (input)); \
964 TRANSFER_FRAME_TAIL \
965 break; \
966 case BC_YUV101010: \
967 TRANSFER_FRAME_HEAD \
968 transfer_YUVA8888_to_YUV101010((output), (input)); \
969 TRANSFER_FRAME_TAIL \
970 break; \
971 case BC_YUV420P: \
972 TRANSFER_YUV420P_OUT_HEAD \
973 transfer_YUVA8888_to_YUV420P_YUV422P(output_y, \
974 output_u, \
975 output_v, \
976 (input), \
977 j); \
978 TRANSFER_FRAME_TAIL \
979 break; \
980 case BC_YUV422P: \
981 TRANSFER_YUV422P_OUT_HEAD \
982 transfer_YUVA8888_to_YUV420P_YUV422P(output_y, \
983 output_u, \
984 output_v, \
985 (input), \
986 j); \
987 TRANSFER_FRAME_TAIL \
988 break; \
989 case BC_YUV444P: \
990 TRANSFER_YUV444P_OUT_HEAD \
991 transfer_YUVA8888_to_YUV444P(output_y, \
992 output_u, \
993 output_v, \
994 (input), \
995 j); \
996 TRANSFER_FRAME_TAIL \
997 break; \
998 case BC_YUV422: \
999 TRANSFER_FRAME_HEAD \
1000 transfer_YUVA8888_to_YUV422((output), \
1001 (input), \
1002 j); \
1003 TRANSFER_FRAME_TAIL \
1004 break; \
1006 break; \
1008 case BC_YUV161616: \
1009 switch(out_colormodel) \
1011 case BC_RGB8: \
1012 TRANSFER_FRAME_HEAD \
1013 transfer_YUV161616_to_RGB8((output), (uint16_t*)(input)); \
1014 TRANSFER_FRAME_TAIL \
1015 break; \
1016 case BC_BGR565: \
1017 TRANSFER_FRAME_HEAD \
1018 transfer_YUV161616_to_BGR565((output), (uint16_t*)(input)); \
1019 TRANSFER_FRAME_TAIL \
1020 break; \
1021 case BC_RGB565: \
1022 TRANSFER_FRAME_HEAD \
1023 transfer_YUV161616_to_RGB565((output), (uint16_t*)(input)); \
1024 TRANSFER_FRAME_TAIL \
1025 break; \
1026 case BC_BGR888: \
1027 TRANSFER_FRAME_HEAD \
1028 transfer_YUV161616_to_BGR888((output), (uint16_t*)(input)); \
1029 TRANSFER_FRAME_TAIL \
1030 break; \
1031 case BC_BGR8888: \
1032 TRANSFER_FRAME_HEAD \
1033 transfer_YUV161616_to_BGR8888((output), (uint16_t*)(input)); \
1034 TRANSFER_FRAME_TAIL \
1035 break; \
1036 case BC_RGB888: \
1037 TRANSFER_FRAME_HEAD \
1038 transfer_YUV161616_to_RGB888((output), (uint16_t*)(input)); \
1039 TRANSFER_FRAME_TAIL \
1040 break; \
1041 case BC_RGBA8888: \
1042 TRANSFER_FRAME_HEAD \
1043 transfer_YUV161616_to_RGBA8888((output), (uint16_t*)(input)); \
1044 TRANSFER_FRAME_TAIL \
1045 break; \
1046 case BC_ARGB8888: \
1047 TRANSFER_FRAME_HEAD \
1048 transfer_YUV161616_to_ARGB8888((output), (uint16_t*)(input)); \
1049 TRANSFER_FRAME_TAIL \
1050 break; \
1051 case BC_RGB_FLOAT: \
1052 TRANSFER_FRAME_HEAD \
1053 transfer_YUV161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1054 TRANSFER_FRAME_TAIL \
1055 break; \
1056 case BC_RGBA_FLOAT: \
1057 TRANSFER_FRAME_HEAD \
1058 transfer_YUV161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1059 TRANSFER_FRAME_TAIL \
1060 break; \
1061 case BC_YUV420P: \
1062 TRANSFER_YUV420P_OUT_HEAD \
1063 transfer_YUV161616_to_YUV420P_YUV422P(output_y, \
1064 output_u, \
1065 output_v, \
1066 (uint16_t*)(input), \
1067 j); \
1068 TRANSFER_FRAME_TAIL \
1069 break; \
1070 case BC_YUV422P: \
1071 TRANSFER_YUV422P_OUT_HEAD \
1072 transfer_YUV161616_to_YUV420P_YUV422P(output_y, \
1073 output_u, \
1074 output_v, \
1075 (uint16_t*)(input), \
1076 j); \
1077 TRANSFER_FRAME_TAIL \
1078 break; \
1079 case BC_YUV444P: \
1080 TRANSFER_YUV444P_OUT_HEAD \
1081 transfer_YUV161616_to_YUV444P(output_y, \
1082 output_u, \
1083 output_v, \
1084 (uint16_t*)(input), \
1085 j); \
1086 TRANSFER_FRAME_TAIL \
1087 break; \
1088 case BC_YUV422: \
1089 TRANSFER_FRAME_HEAD \
1090 transfer_YUV161616_to_YUV422((output), \
1091 (uint16_t*)(input), \
1092 j); \
1093 TRANSFER_FRAME_TAIL \
1094 break; \
1095 case BC_YUV101010: \
1096 TRANSFER_FRAME_HEAD \
1097 transfer_YUV161616_to_YUV101010((output), (uint16_t*)(input)); \
1098 TRANSFER_FRAME_TAIL \
1099 break; \
1100 case BC_YUVA8888: \
1101 TRANSFER_FRAME_HEAD \
1102 transfer_YUV161616_to_YUVA8888((output), \
1103 (uint16_t*)(input)); \
1104 TRANSFER_FRAME_TAIL \
1105 break; \
1106 case BC_VYU888: \
1107 TRANSFER_FRAME_HEAD \
1108 transfer_YUV161616_to_VYU888((output), (uint16_t*)(input)); \
1109 TRANSFER_FRAME_TAIL \
1110 break; \
1111 case BC_UYVA8888: \
1112 TRANSFER_FRAME_HEAD \
1113 transfer_YUV161616_to_UYVA8888((output), (uint16_t*)(input)); \
1114 TRANSFER_FRAME_TAIL \
1115 break; \
1116 case BC_YUV161616: \
1117 TRANSFER_FRAME_HEAD \
1118 transfer_YUV161616_to_YUV161616((uint16_t**)(output), \
1119 (uint16_t*)(input)); \
1120 TRANSFER_FRAME_TAIL \
1121 break; \
1123 break; \
1125 case BC_YUVA16161616: \
1126 switch(out_colormodel) \
1128 case BC_RGB8: \
1129 TRANSFER_FRAME_HEAD \
1130 transfer_YUVA16161616_to_RGB8((output), (uint16_t*)(input)); \
1131 TRANSFER_FRAME_TAIL \
1132 break; \
1133 case BC_BGR565: \
1134 TRANSFER_FRAME_HEAD \
1135 transfer_YUVA16161616_to_BGR565((output), (uint16_t*)(input)); \
1136 TRANSFER_FRAME_TAIL \
1137 break; \
1138 case BC_RGB565: \
1139 TRANSFER_FRAME_HEAD \
1140 transfer_YUVA16161616_to_RGB565((output), (uint16_t*)(input)); \
1141 TRANSFER_FRAME_TAIL \
1142 break; \
1143 case BC_BGR888: \
1144 TRANSFER_FRAME_HEAD \
1145 transfer_YUVA16161616_to_BGR888((output), (uint16_t*)(input)); \
1146 TRANSFER_FRAME_TAIL \
1147 break; \
1148 case BC_BGR8888: \
1149 TRANSFER_FRAME_HEAD \
1150 transfer_YUVA16161616_to_BGR8888((output), (uint16_t*)(input)); \
1151 TRANSFER_FRAME_TAIL \
1152 break; \
1153 case BC_RGB888: \
1154 TRANSFER_FRAME_HEAD \
1155 transfer_YUVA16161616_to_RGB888((output), (uint16_t*)(input)); \
1156 TRANSFER_FRAME_TAIL \
1157 break; \
1158 case BC_RGBA8888: \
1159 TRANSFER_FRAME_HEAD \
1160 transfer_YUVA16161616_to_RGBA8888((output), (uint16_t*)(input)); \
1161 TRANSFER_FRAME_TAIL \
1162 break; \
1163 case BC_ARGB8888: \
1164 TRANSFER_FRAME_HEAD \
1165 transfer_YUVA16161616_to_ARGB8888((output), (uint16_t*)(input)); \
1166 TRANSFER_FRAME_TAIL \
1167 break; \
1168 case BC_RGB_FLOAT: \
1169 TRANSFER_FRAME_HEAD \
1170 transfer_YUVA16161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1171 TRANSFER_FRAME_TAIL \
1172 break; \
1173 case BC_RGBA_FLOAT: \
1174 TRANSFER_FRAME_HEAD \
1175 transfer_YUVA16161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1176 TRANSFER_FRAME_TAIL \
1177 break; \
1178 case BC_YUV101010: \
1179 TRANSFER_FRAME_HEAD \
1180 transfer_YUVA16161616_to_YUV101010((output), (uint16_t*)(input)); \
1181 TRANSFER_FRAME_TAIL \
1182 break; \
1183 case BC_VYU888: \
1184 TRANSFER_FRAME_HEAD \
1185 transfer_YUVA16161616_to_VYU888((output), (uint16_t*)(input)); \
1186 TRANSFER_FRAME_TAIL \
1187 break; \
1188 case BC_UYVA8888: \
1189 TRANSFER_FRAME_HEAD \
1190 transfer_YUVA16161616_to_UYVA8888((output), (uint16_t*)(input)); \
1191 TRANSFER_FRAME_TAIL \
1192 break; \
1193 case BC_YUVA16161616: \
1194 TRANSFER_FRAME_HEAD \
1195 transfer_YUVA16161616_to_YUVA16161616((uint16_t**)(output), (uint16_t*)(input)); \
1196 TRANSFER_FRAME_TAIL \
1197 break; \
1198 case BC_YUV420P: \
1199 TRANSFER_YUV420P_OUT_HEAD \
1200 transfer_YUVA16161616_to_YUV420P_YUV422P(output_y, \
1201 output_u, \
1202 output_v, \
1203 (uint16_t*)(input), \
1204 j); \
1205 TRANSFER_FRAME_TAIL \
1206 break; \
1207 case BC_YUV422P: \
1208 TRANSFER_YUV422P_OUT_HEAD \
1209 transfer_YUVA16161616_to_YUV420P_YUV422P(output_y, \
1210 output_u, \
1211 output_v, \
1212 (uint16_t*)(input), \
1213 j); \
1214 TRANSFER_FRAME_TAIL \
1215 break; \
1216 case BC_YUV444P: \
1217 TRANSFER_YUV444P_OUT_HEAD \
1218 transfer_YUVA16161616_to_YUV444P(output_y, \
1219 output_u, \
1220 output_v, \
1221 (uint16_t*)(input), \
1222 j); \
1223 TRANSFER_FRAME_TAIL \
1224 break; \
1225 case BC_YUV422: \
1226 TRANSFER_FRAME_HEAD \
1227 transfer_YUVA16161616_to_YUV422((output), \
1228 (uint16_t*)(input), \
1229 j); \
1230 TRANSFER_FRAME_TAIL \
1231 break; \
1233 break; \
1235 case BC_YUV101010: \
1236 switch(out_colormodel) \
1238 case BC_RGB8: \
1239 TRANSFER_FRAME_HEAD \
1240 transfer_YUV101010_to_RGB8((output), (input)); \
1241 TRANSFER_FRAME_TAIL \
1242 break; \
1243 case BC_BGR565: \
1244 TRANSFER_FRAME_HEAD \
1245 transfer_YUV101010_to_BGR565((output), (input)); \
1246 TRANSFER_FRAME_TAIL \
1247 break; \
1248 case BC_RGB565: \
1249 TRANSFER_FRAME_HEAD \
1250 transfer_YUV101010_to_RGB565((output), (input)); \
1251 TRANSFER_FRAME_TAIL \
1252 break; \
1253 case BC_BGR888: \
1254 TRANSFER_FRAME_HEAD \
1255 transfer_YUV101010_to_BGR888((output), (input)); \
1256 TRANSFER_FRAME_TAIL \
1257 break; \
1258 case BC_BGR8888: \
1259 TRANSFER_FRAME_HEAD \
1260 transfer_YUV101010_to_BGR8888((output), (input)); \
1261 TRANSFER_FRAME_TAIL \
1262 break; \
1263 case BC_RGB888: \
1264 TRANSFER_FRAME_HEAD \
1265 transfer_YUV101010_to_RGB888((output), (input)); \
1266 TRANSFER_FRAME_TAIL \
1267 break; \
1268 case BC_RGBA8888: \
1269 TRANSFER_FRAME_HEAD \
1270 transfer_YUV101010_to_RGBA8888((output), (input)); \
1271 TRANSFER_FRAME_TAIL \
1272 break; \
1273 case BC_YUV888: \
1274 TRANSFER_FRAME_HEAD \
1275 transfer_YUV101010_to_YUV888((output), (input)); \
1276 TRANSFER_FRAME_TAIL \
1277 break; \
1278 case BC_YUVA8888: \
1279 TRANSFER_FRAME_HEAD \
1280 transfer_YUV101010_to_YUVA8888((output), (input)); \
1281 TRANSFER_FRAME_TAIL \
1282 break; \
1283 case BC_RGB161616: \
1284 TRANSFER_FRAME_HEAD \
1285 transfer_YUV101010_to_RGB161616((uint16_t**)(output), (input)); \
1286 TRANSFER_FRAME_TAIL \
1287 break; \
1288 case BC_RGBA16161616: \
1289 TRANSFER_FRAME_HEAD \
1290 transfer_YUV101010_to_RGBA16161616((uint16_t**)(output), (input)); \
1291 TRANSFER_FRAME_TAIL \
1292 break; \
1293 case BC_RGB_FLOAT: \
1294 TRANSFER_FRAME_HEAD \
1295 transfer_YUV101010_to_RGB_FLOAT((float**)(output), (input)); \
1296 TRANSFER_FRAME_TAIL \
1297 break; \
1298 case BC_RGBA_FLOAT: \
1299 TRANSFER_FRAME_HEAD \
1300 transfer_YUV101010_to_RGBA_FLOAT((float**)(output), (input)); \
1301 TRANSFER_FRAME_TAIL \
1302 break; \
1303 case BC_YUV161616: \
1304 TRANSFER_FRAME_HEAD \
1305 transfer_YUV101010_to_YUV161616((uint16_t**)(output), (input)); \
1306 TRANSFER_FRAME_TAIL \
1307 break; \
1308 case BC_YUVA16161616: \
1309 TRANSFER_FRAME_HEAD \
1310 transfer_YUV101010_to_YUVA16161616((uint16_t**)(output), (input)); \
1311 TRANSFER_FRAME_TAIL \
1312 break; \
1314 break; \
1316 case BC_VYU888: \
1317 switch(out_colormodel) \
1319 case BC_RGB8: \
1320 TRANSFER_FRAME_HEAD \
1321 transfer_VYU888_to_RGB8((output), (input)); \
1322 TRANSFER_FRAME_TAIL \
1323 break; \
1324 case BC_BGR565: \
1325 TRANSFER_FRAME_HEAD \
1326 transfer_VYU888_to_BGR565((output), (input)); \
1327 TRANSFER_FRAME_TAIL \
1328 break; \
1329 case BC_RGB565: \
1330 TRANSFER_FRAME_HEAD \
1331 transfer_VYU888_to_RGB565((output), (input)); \
1332 TRANSFER_FRAME_TAIL \
1333 break; \
1334 case BC_BGR888: \
1335 TRANSFER_FRAME_HEAD \
1336 transfer_VYU888_to_BGR888((output), (input)); \
1337 TRANSFER_FRAME_TAIL \
1338 break; \
1339 case BC_BGR8888: \
1340 TRANSFER_FRAME_HEAD \
1341 transfer_VYU888_to_BGR8888((output), (input)); \
1342 TRANSFER_FRAME_TAIL \
1343 break; \
1344 case BC_RGB888: \
1345 TRANSFER_FRAME_HEAD \
1346 transfer_VYU888_to_RGB888((output), (input)); \
1347 TRANSFER_FRAME_TAIL \
1348 break; \
1349 case BC_RGBA8888: \
1350 TRANSFER_FRAME_HEAD \
1351 transfer_VYU888_to_RGBA8888((output), (input)); \
1352 TRANSFER_FRAME_TAIL \
1353 break; \
1354 case BC_YUV888: \
1355 TRANSFER_FRAME_HEAD \
1356 transfer_VYU888_to_YUV888((output), (input)); \
1357 TRANSFER_FRAME_TAIL \
1358 break; \
1359 case BC_YUVA8888: \
1360 TRANSFER_FRAME_HEAD \
1361 transfer_VYU888_to_YUVA8888((output), (input)); \
1362 TRANSFER_FRAME_TAIL \
1363 break; \
1364 case BC_RGB161616: \
1365 TRANSFER_FRAME_HEAD \
1366 transfer_VYU888_to_RGB161616((uint16_t**)(output), (input)); \
1367 TRANSFER_FRAME_TAIL \
1368 break; \
1369 case BC_RGBA16161616: \
1370 TRANSFER_FRAME_HEAD \
1371 transfer_VYU888_to_RGBA16161616((uint16_t**)(output), (input)); \
1372 TRANSFER_FRAME_TAIL \
1373 break; \
1374 case BC_RGB_FLOAT: \
1375 TRANSFER_FRAME_HEAD \
1376 transfer_VYU888_to_RGB_FLOAT((float**)(output), (input)); \
1377 TRANSFER_FRAME_TAIL \
1378 break; \
1379 case BC_RGBA_FLOAT: \
1380 TRANSFER_FRAME_HEAD \
1381 transfer_VYU888_to_RGBA_FLOAT((float**)(output), (input)); \
1382 TRANSFER_FRAME_TAIL \
1383 break; \
1384 case BC_YUV161616: \
1385 TRANSFER_FRAME_HEAD \
1386 transfer_VYU888_to_YUV161616((uint16_t**)(output), (input)); \
1387 TRANSFER_FRAME_TAIL \
1388 break; \
1389 case BC_YUVA16161616: \
1390 TRANSFER_FRAME_HEAD \
1391 transfer_VYU888_to_YUVA16161616((uint16_t**)(output), (input)); \
1392 TRANSFER_FRAME_TAIL \
1393 break; \
1395 break; \
1397 case BC_UYVA8888: \
1398 switch(out_colormodel) \
1400 case BC_RGB8: \
1401 TRANSFER_FRAME_HEAD \
1402 transfer_UYVA8888_to_RGB8((output), (input)); \
1403 TRANSFER_FRAME_TAIL \
1404 break; \
1405 case BC_BGR565: \
1406 TRANSFER_FRAME_HEAD \
1407 transfer_UYVA8888_to_BGR565((output), (input)); \
1408 TRANSFER_FRAME_TAIL \
1409 break; \
1410 case BC_RGB565: \
1411 TRANSFER_FRAME_HEAD \
1412 transfer_UYVA8888_to_RGB565((output), (input)); \
1413 TRANSFER_FRAME_TAIL \
1414 break; \
1415 case BC_BGR888: \
1416 TRANSFER_FRAME_HEAD \
1417 transfer_UYVA8888_to_BGR888((output), (input)); \
1418 TRANSFER_FRAME_TAIL \
1419 break; \
1420 case BC_BGR8888: \
1421 TRANSFER_FRAME_HEAD \
1422 transfer_UYVA8888_to_BGR8888((output), (input)); \
1423 TRANSFER_FRAME_TAIL \
1424 break; \
1425 case BC_RGB888: \
1426 TRANSFER_FRAME_HEAD \
1427 transfer_UYVA8888_to_RGB888((output), (input)); \
1428 TRANSFER_FRAME_TAIL \
1429 break; \
1430 case BC_RGBA8888: \
1431 TRANSFER_FRAME_HEAD \
1432 transfer_UYVA8888_to_RGBA8888((output), (input)); \
1433 TRANSFER_FRAME_TAIL \
1434 break; \
1435 case BC_YUV888: \
1436 TRANSFER_FRAME_HEAD \
1437 transfer_UYVA8888_to_YUV888((output), (input)); \
1438 TRANSFER_FRAME_TAIL \
1439 break; \
1440 case BC_YUVA8888: \
1441 TRANSFER_FRAME_HEAD \
1442 transfer_UYVA8888_to_YUVA8888((output), (input)); \
1443 TRANSFER_FRAME_TAIL \
1444 break; \
1445 case BC_RGB161616: \
1446 TRANSFER_FRAME_HEAD \
1447 transfer_UYVA8888_to_RGB161616((uint16_t**)(output), (input)); \
1448 TRANSFER_FRAME_TAIL \
1449 break; \
1450 case BC_RGBA16161616: \
1451 TRANSFER_FRAME_HEAD \
1452 transfer_UYVA8888_to_RGBA16161616((uint16_t**)(output), (input)); \
1453 TRANSFER_FRAME_TAIL \
1454 break; \
1455 case BC_RGB_FLOAT: \
1456 TRANSFER_FRAME_HEAD \
1457 transfer_UYVA8888_to_RGB_FLOAT((float**)(output), (input)); \
1458 TRANSFER_FRAME_TAIL \
1459 break; \
1460 case BC_RGBA_FLOAT: \
1461 TRANSFER_FRAME_HEAD \
1462 transfer_UYVA8888_to_RGBA_FLOAT((float**)(output), (input)); \
1463 TRANSFER_FRAME_TAIL \
1464 break; \
1465 case BC_YUV161616: \
1466 TRANSFER_FRAME_HEAD \
1467 transfer_UYVA8888_to_YUV161616((uint16_t**)(output), (input)); \
1468 TRANSFER_FRAME_TAIL \
1469 break; \
1470 case BC_YUVA16161616: \
1471 TRANSFER_FRAME_HEAD \
1472 transfer_UYVA8888_to_YUVA16161616((uint16_t**)(output), (input)); \
1473 TRANSFER_FRAME_TAIL \
1474 break; \
1476 break; \
1478 case BC_ARGB8888: \
1479 case BC_ABGR8888: \
1480 switch(out_colormodel) \
1482 case BC_ARGB8888: \
1483 case BC_ABGR8888: \
1484 TRANSFER_FRAME_HEAD \
1485 transfer_ARGB8888_to_ARGB8888((output), (input)); \
1486 TRANSFER_FRAME_TAIL \
1487 break; \
1488 case BC_RGBA8888: \
1489 TRANSFER_FRAME_HEAD \
1490 transfer_ARGB8888_to_RGBA8888((output), (input)); \
1491 TRANSFER_FRAME_TAIL \
1492 break; \
1493 case BC_RGB888: \
1494 TRANSFER_FRAME_HEAD \
1495 transfer_ARGB8888_to_RGB888((output), (input)); \
1496 TRANSFER_FRAME_TAIL \
1497 break; \
1498 case BC_BGR8888: \
1499 TRANSFER_FRAME_HEAD \
1500 transfer_ARGB8888_to_BGR8888((output), (input)); \
1501 TRANSFER_FRAME_TAIL \
1502 break; \
1504 break; \
1506 case BC_RGB888: \
1507 switch(out_colormodel) \
1509 case BC_RGB8: \
1510 TRANSFER_FRAME_HEAD \
1511 transfer_RGB888_to_RGB8((output), (input)); \
1512 TRANSFER_FRAME_TAIL \
1513 break; \
1514 case BC_BGR565: \
1515 TRANSFER_FRAME_HEAD \
1516 transfer_RGB888_to_BGR565((output), (input)); \
1517 TRANSFER_FRAME_TAIL \
1518 break; \
1519 case BC_RGB565: \
1520 TRANSFER_FRAME_HEAD \
1521 transfer_RGB888_to_RGB565((output), (input)); \
1522 TRANSFER_FRAME_TAIL \
1523 break; \
1524 case BC_BGR888: \
1525 TRANSFER_FRAME_HEAD \
1526 transfer_RGB888_to_BGR888((output), (input)); \
1527 TRANSFER_FRAME_TAIL \
1528 break; \
1529 case BC_RGB888: \
1530 TRANSFER_FRAME_HEAD \
1531 transfer_RGB888_to_RGB888((output), (input)); \
1532 TRANSFER_FRAME_TAIL \
1533 break; \
1534 case BC_RGBA8888: \
1535 TRANSFER_FRAME_HEAD \
1536 transfer_RGB888_to_RGBA8888((output), (input)); \
1537 TRANSFER_FRAME_TAIL \
1538 break; \
1539 case BC_ARGB8888: \
1540 TRANSFER_FRAME_HEAD \
1541 transfer_RGB888_to_ARGB8888((output), (input)); \
1542 TRANSFER_FRAME_TAIL \
1543 break; \
1544 case BC_RGB161616: \
1545 TRANSFER_FRAME_HEAD \
1546 transfer_RGB888_to_RGB161616((uint16_t**)(output), (input)); \
1547 TRANSFER_FRAME_TAIL \
1548 break; \
1549 case BC_RGBA16161616: \
1550 TRANSFER_FRAME_HEAD \
1551 transfer_RGB888_to_RGBA16161616((uint16_t**)(output), (input)); \
1552 TRANSFER_FRAME_TAIL \
1553 break; \
1554 case BC_RGB_FLOAT: \
1555 TRANSFER_FRAME_HEAD \
1556 transfer_RGB888_to_RGB_FLOAT((float**)(output), (input)); \
1557 TRANSFER_FRAME_TAIL \
1558 break; \
1559 case BC_RGBA_FLOAT: \
1560 TRANSFER_FRAME_HEAD \
1561 transfer_RGB888_to_RGBA_FLOAT((float**)(output), (input)); \
1562 TRANSFER_FRAME_TAIL \
1563 break; \
1564 case BC_ABGR8888: \
1565 TRANSFER_FRAME_HEAD \
1566 transfer_RGB888_to_ABGR8888((output), (input)); \
1567 TRANSFER_FRAME_TAIL \
1568 break; \
1569 case BC_BGR8888: \
1570 TRANSFER_FRAME_HEAD \
1571 transfer_RGB888_to_BGR8888((output), (input)); \
1572 TRANSFER_FRAME_TAIL \
1573 break; \
1574 case BC_YUV888: \
1575 TRANSFER_FRAME_HEAD \
1576 transfer_RGB888_to_YUV888((output), (input)); \
1577 TRANSFER_FRAME_TAIL \
1578 break; \
1579 case BC_YUVA8888: \
1580 TRANSFER_FRAME_HEAD \
1581 transfer_RGB888_to_YUVA8888((output), (input)); \
1582 TRANSFER_FRAME_TAIL \
1583 break; \
1584 case BC_YUV161616: \
1585 TRANSFER_FRAME_HEAD \
1586 transfer_RGB888_to_YUV161616((uint16_t**)(output), (input)); \
1587 TRANSFER_FRAME_TAIL \
1588 break; \
1589 case BC_YUVA16161616: \
1590 TRANSFER_FRAME_HEAD \
1591 transfer_RGB888_to_YUVA16161616((uint16_t**)(output), (input)); \
1592 TRANSFER_FRAME_TAIL \
1593 break; \
1594 case BC_YUV101010: \
1595 TRANSFER_FRAME_HEAD \
1596 transfer_RGB888_to_YUV101010((output), (input)); \
1597 TRANSFER_FRAME_TAIL \
1598 break; \
1599 case BC_YUV420P: \
1600 TRANSFER_YUV420P_OUT_HEAD \
1601 transfer_RGB888_to_YUV420P_YUV422P(output_y, \
1602 output_u, \
1603 output_v, \
1604 (input), \
1605 j); \
1606 TRANSFER_FRAME_TAIL \
1607 break; \
1608 case BC_YUV422: \
1609 TRANSFER_FRAME_HEAD \
1610 transfer_RGB888_to_YUV422((output), (input), j); \
1611 TRANSFER_FRAME_TAIL \
1612 break; \
1613 case BC_YUV422P: \
1614 TRANSFER_YUV422P_OUT_HEAD \
1615 transfer_RGB888_to_YUV420P_YUV422P(output_y, \
1616 output_u, \
1617 output_v, \
1618 (input), \
1619 j); \
1620 TRANSFER_FRAME_TAIL \
1621 break; \
1622 case BC_YUV444P: \
1623 TRANSFER_YUV444P_OUT_HEAD \
1624 transfer_RGB888_to_YUV444P(output_y, \
1625 output_u, \
1626 output_v, \
1627 (input), \
1628 j); \
1629 TRANSFER_FRAME_TAIL \
1630 break; \
1632 break; \
1634 case BC_RGBA8888: \
1635 switch(out_colormodel) \
1637 case BC_TRANSPARENCY: \
1638 TRANSFER_FRAME_HEAD \
1639 transfer_RGBA8888_to_TRANSPARENCY((output), (input), &bit_counter); \
1640 TRANSFER_FRAME_TAIL \
1641 break; \
1642 case BC_RGB8: \
1643 if(bg_color > 0) \
1644 TRANSFER_FRAME_HEAD \
1645 transfer_RGBA8888_to_RGB8bg((output), (input), bg_r, bg_g, bg_b); \
1646 TRANSFER_FRAME_TAIL \
1647 else \
1648 TRANSFER_FRAME_HEAD \
1649 transfer_RGBA8888_to_RGB8((output), (input)); \
1650 TRANSFER_FRAME_TAIL \
1651 break; \
1652 case BC_BGR565: \
1653 if(bg_color > 0) \
1654 TRANSFER_FRAME_HEAD \
1655 transfer_RGBA8888_to_BGR565bg((output), (input), bg_r, bg_g, bg_b); \
1656 TRANSFER_FRAME_TAIL \
1657 else \
1658 TRANSFER_FRAME_HEAD \
1659 transfer_RGBA8888_to_BGR565((output), (input)); \
1660 TRANSFER_FRAME_TAIL \
1661 break; \
1662 case BC_RGB565: \
1663 if(bg_color > 0) \
1664 TRANSFER_FRAME_HEAD \
1665 transfer_RGBA8888_to_RGB565bg((output), (input), bg_r, bg_g, bg_b); \
1666 TRANSFER_FRAME_TAIL \
1667 else \
1668 TRANSFER_FRAME_HEAD \
1669 transfer_RGBA8888_to_RGB565((output), (input)); \
1670 TRANSFER_FRAME_TAIL \
1671 break; \
1672 case BC_BGR888: \
1673 if(bg_color > 0) \
1674 TRANSFER_FRAME_HEAD \
1675 transfer_RGBA8888_to_BGR888bg((output), (input), bg_r, bg_g, bg_b); \
1676 TRANSFER_FRAME_TAIL \
1677 else \
1678 TRANSFER_FRAME_HEAD \
1679 transfer_RGBA8888_to_BGR888((output), (input)); \
1680 TRANSFER_FRAME_TAIL \
1681 break; \
1682 case BC_RGB888: \
1683 if(bg_color > 0) \
1684 TRANSFER_FRAME_HEAD \
1685 transfer_RGBA8888_to_RGB888bg((output), (input), bg_r, bg_g, bg_b); \
1686 TRANSFER_FRAME_TAIL \
1687 else \
1688 TRANSFER_FRAME_HEAD \
1689 transfer_RGBA8888_to_RGB888((output), (input)); \
1690 TRANSFER_FRAME_TAIL \
1691 break; \
1692 case BC_RGBA8888: \
1693 TRANSFER_FRAME_HEAD \
1694 transfer_RGBA8888_to_RGBA8888((output), (input)); \
1695 TRANSFER_FRAME_TAIL \
1696 break; \
1697 case BC_ARGB8888: \
1698 TRANSFER_FRAME_HEAD \
1699 transfer_RGBA8888_to_ARGB8888((output), (input)); \
1700 TRANSFER_FRAME_TAIL \
1701 break; \
1702 case BC_RGB161616: \
1703 TRANSFER_FRAME_HEAD \
1704 transfer_RGBA8888_to_RGB161616((uint16_t**)(output), (input)); \
1705 TRANSFER_FRAME_TAIL \
1706 break; \
1707 case BC_RGBA16161616: \
1708 TRANSFER_FRAME_HEAD \
1709 transfer_RGBA8888_to_RGBA16161616((uint16_t**)(output), (input)); \
1710 TRANSFER_FRAME_TAIL \
1711 break; \
1712 case BC_RGB_FLOAT: \
1713 TRANSFER_FRAME_HEAD \
1714 transfer_RGBA8888_to_RGB_FLOAT((float**)(output), (input)); \
1715 TRANSFER_FRAME_TAIL \
1716 break; \
1717 case BC_RGBA_FLOAT: \
1718 TRANSFER_FRAME_HEAD \
1719 transfer_RGBA8888_to_RGBA_FLOAT((float**)(output), (input)); \
1720 TRANSFER_FRAME_TAIL \
1721 break; \
1722 case BC_BGR8888: \
1723 if(bg_color > 0) \
1724 TRANSFER_FRAME_HEAD \
1725 transfer_RGBA8888_to_BGR8888bg((output), (input), bg_r, bg_g, bg_b); \
1726 TRANSFER_FRAME_TAIL \
1727 else \
1728 TRANSFER_FRAME_HEAD \
1729 transfer_RGBA8888_to_BGR8888((output), (input)); \
1730 TRANSFER_FRAME_TAIL \
1731 break; \
1732 case BC_YUV888: \
1733 TRANSFER_FRAME_HEAD \
1734 transfer_RGBA8888_to_YUV888((output), (input)); \
1735 TRANSFER_FRAME_TAIL \
1736 break; \
1737 case BC_YUVA8888: \
1738 TRANSFER_FRAME_HEAD \
1739 transfer_RGBA8888_to_YUVA8888((output), (input)); \
1740 TRANSFER_FRAME_TAIL \
1741 break; \
1742 case BC_YUV161616: \
1743 TRANSFER_FRAME_HEAD \
1744 transfer_RGBA8888_to_YUV161616((uint16_t**)(output), (input)); \
1745 TRANSFER_FRAME_TAIL \
1746 break; \
1747 case BC_YUVA16161616: \
1748 TRANSFER_FRAME_HEAD \
1749 transfer_RGBA8888_to_YUVA16161616((uint16_t**)(output), (input)); \
1750 TRANSFER_FRAME_TAIL \
1751 break; \
1752 case BC_YUV101010: \
1753 TRANSFER_FRAME_HEAD \
1754 transfer_RGBA8888_to_YUV101010((output), (input)); \
1755 TRANSFER_FRAME_TAIL \
1756 break; \
1757 case BC_YUV420P: \
1758 TRANSFER_YUV420P_OUT_HEAD \
1759 transfer_RGBA888_to_YUV420P_YUV422P(output_y, \
1760 output_u, \
1761 output_v, \
1762 (input), \
1763 j); \
1764 TRANSFER_FRAME_TAIL \
1765 break; \
1766 case BC_YUV422: \
1767 TRANSFER_FRAME_HEAD \
1768 transfer_RGBA888_to_YUV422((output), (input), j); \
1769 TRANSFER_FRAME_TAIL \
1770 break; \
1771 case BC_YUV422P: \
1772 TRANSFER_YUV422P_OUT_HEAD \
1773 transfer_RGBA888_to_YUV420P_YUV422P(output_y, \
1774 output_u, \
1775 output_v, \
1776 (input), \
1777 j); \
1778 TRANSFER_FRAME_TAIL \
1779 break; \
1780 case BC_YUV444P: \
1781 TRANSFER_YUV444P_OUT_HEAD \
1782 transfer_RGBA888_to_YUV444P(output_y, \
1783 output_u, \
1784 output_v, \
1785 (input), \
1786 j); \
1787 TRANSFER_FRAME_TAIL \
1788 break; \
1790 break; \
1792 case BC_RGB161616: \
1793 switch(out_colormodel) \
1795 case BC_RGB8: \
1796 TRANSFER_FRAME_HEAD \
1797 transfer_RGB161616_to_RGB8((output), (uint16_t*)(input)); \
1798 TRANSFER_FRAME_TAIL \
1799 break; \
1800 case BC_BGR565: \
1801 TRANSFER_FRAME_HEAD \
1802 transfer_RGB161616_to_BGR565((output), (uint16_t*)(input)); \
1803 TRANSFER_FRAME_TAIL \
1804 break; \
1805 case BC_RGB565: \
1806 TRANSFER_FRAME_HEAD \
1807 transfer_RGB161616_to_RGB565((output), (uint16_t*)(input)); \
1808 TRANSFER_FRAME_TAIL \
1809 break; \
1810 case BC_BGR888: \
1811 TRANSFER_FRAME_HEAD \
1812 transfer_RGB161616_to_BGR888((output), (uint16_t*)(input)); \
1813 TRANSFER_FRAME_TAIL \
1814 break; \
1815 case BC_BGR8888: \
1816 TRANSFER_FRAME_HEAD \
1817 transfer_RGB161616_to_BGR8888((output), (uint16_t*)(input)); \
1818 TRANSFER_FRAME_TAIL \
1819 break; \
1820 case BC_RGB888: \
1821 TRANSFER_FRAME_HEAD \
1822 transfer_RGB161616_to_RGB888((output), (uint16_t*)(input)); \
1823 TRANSFER_FRAME_TAIL \
1824 break; \
1825 case BC_RGBA8888: \
1826 TRANSFER_FRAME_HEAD \
1827 transfer_RGB161616_to_RGBA8888((output), (uint16_t*)(input)); \
1828 TRANSFER_FRAME_TAIL \
1829 break; \
1830 case BC_RGB_FLOAT: \
1831 TRANSFER_FRAME_HEAD \
1832 transfer_RGB161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1833 TRANSFER_FRAME_TAIL \
1834 break; \
1835 case BC_RGBA_FLOAT: \
1836 TRANSFER_FRAME_HEAD \
1837 transfer_RGB161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1838 TRANSFER_FRAME_TAIL \
1839 break; \
1840 case BC_YUV888: \
1841 TRANSFER_FRAME_HEAD \
1842 transfer_RGB161616_to_YUV888((output), (uint16_t*)(input)); \
1843 TRANSFER_FRAME_TAIL \
1844 break; \
1845 case BC_YUVA8888: \
1846 TRANSFER_FRAME_HEAD \
1847 transfer_RGB161616_to_YUVA8888((output), (uint16_t*)(input)); \
1848 TRANSFER_FRAME_TAIL \
1849 break; \
1850 case BC_YUV161616: \
1851 TRANSFER_FRAME_HEAD \
1852 transfer_RGB161616_to_YUV161616((uint16_t**)(output), (uint16_t*)(input)); \
1853 TRANSFER_FRAME_TAIL \
1854 break; \
1855 case BC_YUVA16161616: \
1856 TRANSFER_FRAME_HEAD \
1857 transfer_RGB161616_to_YUVA16161616((uint16_t**)(output), (uint16_t*)(input)); \
1858 TRANSFER_FRAME_TAIL \
1859 break; \
1860 case BC_YUV101010: \
1861 TRANSFER_FRAME_HEAD \
1862 transfer_RGB161616_to_YUV101010((output), (uint16_t*)(input)); \
1863 TRANSFER_FRAME_TAIL \
1864 break; \
1865 case BC_YUV420P: \
1866 TRANSFER_YUV420P_OUT_HEAD \
1867 transfer_RGB161616_to_YUV420P_YUV422P(output_y, \
1868 output_u, \
1869 output_v, \
1870 (uint16_t*)(input), \
1871 j); \
1872 TRANSFER_FRAME_TAIL \
1873 break; \
1874 case BC_YUV422P: \
1875 TRANSFER_YUV422P_OUT_HEAD \
1876 transfer_RGB161616_to_YUV420P_YUV422P(output_y, \
1877 output_u, \
1878 output_v, \
1879 (uint16_t*)(input), \
1880 j); \
1881 TRANSFER_FRAME_TAIL \
1882 break; \
1883 case BC_YUV444P: \
1884 TRANSFER_YUV444P_OUT_HEAD \
1885 transfer_RGB161616_to_YUV444P(output_y, \
1886 output_u, \
1887 output_v, \
1888 (uint16_t*)(input), \
1889 j); \
1890 TRANSFER_FRAME_TAIL \
1891 break; \
1893 break; \
1895 case BC_RGBA16161616: \
1896 switch(out_colormodel) \
1898 case BC_RGB8: \
1899 TRANSFER_FRAME_HEAD \
1900 transfer_RGBA16161616_to_RGB8((output), (uint16_t*)(input)); \
1901 TRANSFER_FRAME_TAIL \
1902 break; \
1903 case BC_BGR565: \
1904 TRANSFER_FRAME_HEAD \
1905 transfer_RGBA16161616_to_BGR565((output), (uint16_t*)(input)); \
1906 TRANSFER_FRAME_TAIL \
1907 break; \
1908 case BC_RGB565: \
1909 TRANSFER_FRAME_HEAD \
1910 transfer_RGBA16161616_to_RGB565((output), (uint16_t*)(input)); \
1911 TRANSFER_FRAME_TAIL \
1912 break; \
1913 case BC_BGR888: \
1914 TRANSFER_FRAME_HEAD \
1915 transfer_RGBA16161616_to_BGR888((output), (uint16_t*)(input)); \
1916 TRANSFER_FRAME_TAIL \
1917 break; \
1918 case BC_BGR8888: \
1919 TRANSFER_FRAME_HEAD \
1920 transfer_RGBA16161616_to_BGR8888((output), (uint16_t*)(input)); \
1921 TRANSFER_FRAME_TAIL \
1922 break; \
1923 case BC_RGB888: \
1924 TRANSFER_FRAME_HEAD \
1925 transfer_RGBA16161616_to_RGB888((output), (uint16_t*)(input)); \
1926 TRANSFER_FRAME_TAIL \
1927 break; \
1928 case BC_RGBA8888: \
1929 TRANSFER_FRAME_HEAD \
1930 transfer_RGBA16161616_to_RGBA8888((output), (uint16_t*)(input)); \
1931 TRANSFER_FRAME_TAIL \
1932 break; \
1933 case BC_RGB_FLOAT: \
1934 TRANSFER_FRAME_HEAD \
1935 transfer_RGBA16161616_to_RGB_FLOAT((float**)(output), (uint16_t*)(input)); \
1936 TRANSFER_FRAME_TAIL \
1937 break; \
1938 case BC_RGBA_FLOAT: \
1939 TRANSFER_FRAME_HEAD \
1940 transfer_RGBA16161616_to_RGBA_FLOAT((float**)(output), (uint16_t*)(input)); \
1941 TRANSFER_FRAME_TAIL \
1942 break; \
1943 case BC_YUV888: \
1944 TRANSFER_FRAME_HEAD \
1945 transfer_RGBA16161616_to_YUV888((output), (uint16_t*)(input)); \
1946 TRANSFER_FRAME_TAIL \
1947 break; \
1948 case BC_YUVA8888: \
1949 TRANSFER_FRAME_HEAD \
1950 transfer_RGBA16161616_to_YUVA8888((output), (uint16_t*)(input)); \
1951 TRANSFER_FRAME_TAIL \
1952 break; \
1953 case BC_YUV161616: \
1954 TRANSFER_FRAME_HEAD \
1955 transfer_RGBA16161616_to_YUV161616(((uint16_t**)output), (uint16_t*)(input)); \
1956 TRANSFER_FRAME_TAIL \
1957 break; \
1958 case BC_YUVA16161616: \
1959 TRANSFER_FRAME_HEAD \
1960 transfer_RGBA16161616_to_YUVA16161616((uint16_t**)(output), (uint16_t*)(input)); \
1961 TRANSFER_FRAME_TAIL \
1962 break; \
1963 case BC_YUV101010: \
1964 TRANSFER_FRAME_HEAD \
1965 transfer_RGBA16161616_to_YUV101010((output), (uint16_t*)(input)); \
1966 TRANSFER_FRAME_TAIL \
1967 break; \
1968 case BC_YUV420P: \
1969 TRANSFER_YUV420P_OUT_HEAD \
1970 transfer_RGBA16161616_to_YUV420P_YUV422P(output_y, \
1971 output_u, \
1972 output_v, \
1973 (uint16_t*)(input), \
1974 j); \
1975 TRANSFER_FRAME_TAIL \
1976 break; \
1977 case BC_YUV422P: \
1978 TRANSFER_YUV422P_OUT_HEAD \
1979 transfer_RGBA16161616_to_YUV420P_YUV422P(output_y, \
1980 output_u, \
1981 output_v, \
1982 (uint16_t*)(input), \
1983 j); \
1984 TRANSFER_FRAME_TAIL \
1985 break; \
1986 case BC_YUV444P: \
1987 TRANSFER_YUV444P_OUT_HEAD \
1988 transfer_RGBA16161616_to_YUV444P(output_y, \
1989 output_u, \
1990 output_v, \
1991 (uint16_t*)(input), \
1992 j); \
1993 TRANSFER_FRAME_TAIL \
1994 break; \
1996 break; \
1998 case BC_BGR8888: \
1999 switch(out_colormodel) \
2001 case BC_RGB888: \
2002 TRANSFER_FRAME_HEAD \
2003 transfer_BGR8888_to_RGB888((output), (input)); \
2004 TRANSFER_FRAME_TAIL \
2005 break; \
2006 case BC_BGR8888: \
2007 TRANSFER_FRAME_HEAD \
2008 transfer_BGR8888_to_BGR8888((output), (input)); \
2009 TRANSFER_FRAME_TAIL \
2010 break; \
2012 break; \
2014 case BC_BGR888: \
2015 switch(out_colormodel) \
2017 case BC_RGB888: \
2018 TRANSFER_FRAME_HEAD \
2019 transfer_BGR888_to_RGB888((output), (input)); \
2020 TRANSFER_FRAME_TAIL \
2021 break; \
2023 break; \
2027 int64_t get_difference(struct timeval *start_time)
2029 struct timeval new_time;
2031 gettimeofday(&new_time, 0);
2033 new_time.tv_usec -= start_time->tv_usec;
2034 new_time.tv_sec -= start_time->tv_sec;
2035 if(new_time.tv_usec < 0)
2037 new_time.tv_usec += 1000000;
2038 new_time.tv_sec--;
2041 return (int64_t)new_time.tv_sec * 1000000 +
2042 (int64_t)new_time.tv_usec;
2049 void cmodel_default(PERMUTATION_ARGS)
2051 if(scale)
2053 int done = 0;
2054 switch (in_colormodel) {
2055 case BC_YUVA8888:
2056 switch (out_colormodel) {
2057 case BC_BGR8888:
2059 // struct timeval start_time;
2060 // gettimeofday(&start_time, 0);
2062 short int *utog_tab = yuv_table->utog_tab8;
2063 short int *vtog_tab = yuv_table->vtog_tab8;
2064 short int *vtor_tab = yuv_table->vtor_tab8;
2065 short int *utob_tab = yuv_table->utob_tab8;
2067 short int i ;
2068 for(i = 0; i < out_h; i++)
2070 unsigned char *input_row = input_rows[row_table[i]];
2071 unsigned char *output_row = output_rows[i + out_y] + out_x * out_pixelsize;
2072 unsigned char *input_data = input_row + (column_table[0] << 2);
2073 __builtin_prefetch (input_data, 0, 0);
2075 short int j;
2076 for(j = 0; j < out_w; j++)
2078 unsigned char y = input_data[0];
2079 unsigned char u = input_data[1];
2080 unsigned char v = input_data[2];
2081 unsigned char a = input_data[3];
2083 /* the secret of the speedup ... delayed index calculation */
2084 /* we do not overflow at the end since column table holds + 1 element */
2085 input_data = input_row + (column_table[j + 1] << 2);
2087 short int r = y + vtor_tab[v];
2088 short int g = y + utog_tab[u] + vtog_tab[v];
2089 short int b = y + utob_tab[u];
2091 r = (r < 0 ? 0 : (r > 0xff ? 0xff : r));
2092 g = (g < 0 ? 0 : (g > 0xff ? 0xff : g));
2093 b = (b < 0 ? 0 : (b > 0xff ? 0xff : b));
2095 r *= a;
2096 g *= a;
2097 b *= a;
2099 output_row[0] = ((b) >> 8);
2100 output_row[1] = ((g) >> 8);
2101 output_row[2] = ((r) >> 8);
2103 output_row += 4;
2107 // long long dif= get_difference(&start_time);
2108 // printf("diff_inside: %lli\n", dif);
2110 done = 1;
2112 break;
2114 break;
2117 if (!done)
2119 TRANSFER_FRAME_DEFAULT(&output_row,
2120 input_row + column_table[j] * in_pixelsize,
2127 else
2129 TRANSFER_FRAME_DEFAULT(&output_row,
2130 input_row + j * in_pixelsize,