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