1 #include "cmodel_permutation.h"
2 #include "colormodels.h"
3 #include "workarounds.h"
4 // ********************************** RGB FLOAT -> *******************************
8 static inline void transfer_RGB_FLOAT_to_RGB8(unsigned char *(*output), float *input)
10 unsigned char r, g, b;
11 r = (unsigned char)(CLIP(input[0], 0, 1) * 0x3);
12 g = (unsigned char)(CLIP(input[1], 0, 1) * 0x7);
13 b = (unsigned char)(CLIP(input[2], 0, 1) * 0x3);
15 *(*output) = (r << 6) +
21 static inline void transfer_RGB_FLOAT_to_BGR565(unsigned char *(*output), float *input)
23 unsigned char r, g, b;
24 r = (unsigned char)(CLIP(input[0], 0, 1) * 0x1f);
25 g = (unsigned char)(CLIP(input[1], 0, 1) * 0x3f);
26 b = (unsigned char)(CLIP(input[2], 0, 1) * 0x1f);
28 *(uint16_t*)(*output) = (b << 11) |
34 static inline void transfer_RGB_FLOAT_to_RGB565(unsigned char *(*output), float *input)
36 unsigned char r, g, b;
37 r = (unsigned char)(CLIP(input[0], 0, 1) * 0x1f);
38 g = (unsigned char)(CLIP(input[1], 0, 1) * 0x3f);
39 b = (unsigned char)(CLIP(input[2], 0, 1) * 0x1f);
41 *(uint16_t*)(*output) = (r << 11) |
47 static inline void transfer_RGB_FLOAT_to_BGR888(unsigned char *(*output),
50 unsigned char r = (unsigned char)(CLIP(input[0], 0, 1) * 0xff);
51 unsigned char g = (unsigned char)(CLIP(input[1], 0, 1) * 0xff);
52 unsigned char b = (unsigned char)(CLIP(input[2], 0, 1) * 0xff);
58 static inline void transfer_RGB_FLOAT_to_RGB888(unsigned char *(*output),
61 unsigned char r = (unsigned char)(CLIP(input[0], 0, 1) * 0xff);
62 unsigned char g = (unsigned char)(CLIP(input[1], 0, 1) * 0xff);
63 unsigned char b = (unsigned char)(CLIP(input[2], 0, 1) * 0xff);
69 static inline void transfer_RGB_FLOAT_to_RGBA8888(unsigned char *(*output),
72 unsigned char r = (unsigned char)(CLIP(input[0], 0, 1) * 0xff);
73 unsigned char g = (unsigned char)(CLIP(input[1], 0, 1) * 0xff);
74 unsigned char b = (unsigned char)(CLIP(input[2], 0, 1) * 0xff);
81 static inline void transfer_RGB_FLOAT_to_ARGB8888(unsigned char *(*output),
84 unsigned char r = (unsigned char)(CLIP(input[0], 0, 1) * 0xff);
85 unsigned char g = (unsigned char)(CLIP(input[1], 0, 1) * 0xff);
86 unsigned char b = (unsigned char)(CLIP(input[2], 0, 1) * 0xff);
93 static inline void transfer_RGB_FLOAT_to_RGBA_FLOAT(float *(*output),
96 *(*output)++ = input[0];
97 *(*output)++ = input[1];
98 *(*output)++ = input[2];
102 static inline void transfer_RGB_FLOAT_to_BGR8888(unsigned char *(*output),
105 unsigned char r = (unsigned char)(CLIP(input[0], 0, 1) * 0xff);
106 unsigned char g = (unsigned char)(CLIP(input[1], 0, 1) * 0xff);
107 unsigned char b = (unsigned char)(CLIP(input[2], 0, 1) * 0xff);
114 static inline void transfer_RGB_FLOAT_to_YUV888(unsigned char *(*output),
117 int y, u, v, r, g, b;
118 r = (int)(CLIP(input[0], 0, 1) * 0xffff);
119 g = (int)(CLIP(input[1], 0, 1) * 0xffff);
120 b = (int)(CLIP(input[2], 0, 1) * 0xffff);
122 RGB_TO_YUV16(y, u, v, r, g, b);
124 *(*output)++ = y >> 8;
125 *(*output)++ = u >> 8;
126 *(*output)++ = v >> 8;
129 static inline void transfer_RGB_FLOAT_to_YUVA8888(unsigned char *(*output),
132 int y, u, v, r, g, b;
134 r = (int)(CLIP(input[0], 0, 1) * 0xffff);
135 g = (int)(CLIP(input[1], 0, 1) * 0xffff);
136 b = (int)(CLIP(input[2], 0, 1) * 0xffff);
138 RGB_TO_YUV16(y, u, v, r, g, b);
140 *(*output)++ = y >> 8;
141 *(*output)++ = u >> 8;
142 *(*output)++ = v >> 8;
146 static inline void transfer_RGB_FLOAT_to_YUV161616(uint16_t *(*output),
149 int y, u, v, r, g, b;
150 r = (int)(CLIP(input[0], 0, 1) * 0xffff);
151 g = (int)(CLIP(input[1], 0, 1) * 0xffff);
152 b = (int)(CLIP(input[2], 0, 1) * 0xffff);
154 RGB_TO_YUV16(y, u, v, r, g, b);
156 *(*output)++ = quicktime_copy(y);
157 *(*output)++ = quicktime_copy(u);
158 *(*output)++ = quicktime_copy(v);
161 static inline void transfer_RGB_FLOAT_to_YUVA16161616(uint16_t *(*output),
164 int y, u, v, r, g, b;
166 r = (int)(CLIP(input[0], 0, 1) * 0xffff);
167 g = (int)(CLIP(input[1], 0, 1) * 0xffff);
168 b = (int)(CLIP(input[2], 0, 1) * 0xffff);
170 RGB_TO_YUV16(y, u, v, r, g, b);
172 *(*output)++ = quicktime_copy(y);
173 *(*output)++ = quicktime_copy(u);
174 *(*output)++ = quicktime_copy(v);
175 *(*output)++ = 0xffff;
179 static inline void transfer_RGB_FLOAT_to_YUV101010(unsigned char *(*output),
185 r = (int)(CLIP(input[0], 0, 1) * 0xffff);
186 g = (int)(CLIP(input[1], 0, 1) * 0xffff);
187 b = (int)(CLIP(input[2], 0, 1) * 0xffff);
188 RGB_TO_YUV16(y, u, v, r, g, b);
189 WRITE_YUV101010(y, u, v);
192 static inline void transfer_RGB_FLOAT_to_VYU888(unsigned char *(*output),
195 int y, u, v, r, g, b;
196 r = (int)(CLIP(input[0], 0, 1) * 0xffff);
197 g = (int)(CLIP(input[1], 0, 1) * 0xffff);
198 b = (int)(CLIP(input[2], 0, 1) * 0xffff);
200 RGB_TO_YUV16(y, u, v, r, g, b);
202 *(*output)++ = v >> 8;
203 *(*output)++ = y >> 8;
204 *(*output)++ = u >> 8;
207 static inline void transfer_RGB_FLOAT_to_UYVA8888(unsigned char *(*output),
210 int y, u, v, r, g, b;
212 r = (int)(CLIP(input[0], 0, 1) * 0xffff);
213 g = (int)(CLIP(input[1], 0, 1) * 0xffff);
214 b = (int)(CLIP(input[2], 0, 1) * 0xffff);
216 RGB_TO_YUV16(y, u, v, r, g, b);
218 *(*output)++ = u >> 8;
219 *(*output)++ = y >> 8;
220 *(*output)++ = v >> 8;
225 static inline void transfer_RGB_FLOAT_to_YUV420P_YUV422P(unsigned char *output_y,
226 unsigned char *output_u,
227 unsigned char *output_v,
231 int y, u, v, r, g, b;
232 r = (int)(CLIP(input[0], 0, 1) * 0xffff);
233 g = (int)(CLIP(input[1], 0, 1) * 0xffff);
234 b = (int)(CLIP(input[2], 0, 1) * 0xffff);
236 RGB_TO_YUV16(y, u, v, r, g, b);
238 output_y[output_column] = y >> 8;
239 output_u[output_column / 2] = u >> 8;
240 output_v[output_column / 2] = v >> 8;
243 static inline void transfer_RGB_FLOAT_to_YUV422(unsigned char *(*output),
247 int y, u, v, r, g, b;
248 r = (int)(CLIP(input[0], 0, 1) * 0xffff);
249 g = (int)(CLIP(input[1], 0, 1) * 0xffff);
250 b = (int)(CLIP(input[2], 0, 1) * 0xffff);
252 RGB_TO_YUV16(y, u, v, r, g, b);
255 // Store U and V for even pixels only
256 (*output)[1] = u >> 8;
257 (*output)[3] = v >> 8;
258 (*output)[0] = y >> 8;
262 // Store Y and advance output for odd pixels only
263 (*output)[2] = y >> 8;
268 static inline void transfer_RGB_FLOAT_to_YUV444P(unsigned char *output_y,
269 unsigned char *output_u,
270 unsigned char *output_v,
274 int y, u, v, r, g, b;
275 r = (int)(CLIP(input[0], 0, 1) * 0xffff);
276 g = (int)(CLIP(input[1], 0, 1) * 0xffff);
277 b = (int)(CLIP(input[2], 0, 1) * 0xffff);
279 RGB_TO_YUV16(y, u, v, r, g, b);
281 output_y[output_column] = y >> 8;
282 output_u[output_column] = u >> 8;
283 output_v[output_column] = v >> 8;
295 // ****************************** RGBA FLOAT -> *********************************
297 static inline void transfer_RGBA_FLOAT_to_RGB8(unsigned char *(*output),
301 a = (uint32_t)(CLIP(input[3], 0, 1) * 0x10000);
302 r = (uint32_t)(CLIP(input[0], 0, 1) * 0xff * a);
303 g = (uint32_t)(CLIP(input[1], 0, 1) * 0xff * a);
304 b = (uint32_t)(CLIP(input[2], 0, 1) * 0xff * a);
306 *(*output) = (unsigned char)(((r & 0xc00000) >> 16) +
307 ((g & 0xe00000) >> 18) +
308 ((b & 0xe00000) >> 21));
312 static inline void transfer_RGBA_FLOAT_to_BGR565(unsigned char *(*output),
316 a = (uint32_t)(CLIP(input[3], 0, 1) * 0x10000);
317 r = (uint32_t)(CLIP(input[0], 0, 1) * 0xff * a);
318 g = (uint32_t)(CLIP(input[1], 0, 1) * 0xff * a);
319 b = (uint32_t)(CLIP(input[2], 0, 1) * 0xff * a);
321 *(uint16_t*)(*output) = (uint16_t)(((b & 0xf80000) >> 8) +
322 ((g & 0xfc0000) >> 13) +
323 ((r & 0xf80000) >> 19));
327 static inline void transfer_RGBA_FLOAT_to_RGB565(unsigned char *(*output),
331 a = (uint32_t)(CLIP(input[3], 0, 1) * 0x10000);
332 r = (uint32_t)(CLIP(input[0], 0, 1) * 0xff * a);
333 g = (uint32_t)(CLIP(input[1], 0, 1) * 0xff * a);
334 b = (uint32_t)(CLIP(input[2], 0, 1) * 0xff * a);
336 *(uint16_t*)(*output) = (uint16_t)(((r & 0xf80000) >> 8) +
337 ((g & 0xfc0000) >> 13) +
338 ((b & 0xf80000) >> 19));
342 static inline void transfer_RGBA_FLOAT_to_BGR888(unsigned char *(*output),
346 a = (uint32_t)(CLIP(input[3], 0, 1) * 0xff);
347 r = (uint32_t)(CLIP(input[0], 0, 1) * a);
348 g = (uint32_t)(CLIP(input[1], 0, 1) * a);
349 b = (uint32_t)(CLIP(input[2], 0, 1) * a);
351 *(*output)++ = (unsigned char)b;
352 *(*output)++ = (unsigned char)g;
353 *(*output)++ = (unsigned char)r;
356 static inline void transfer_RGBA_FLOAT_to_RGB888(unsigned char *(*output),
360 a = (uint32_t)(CLIP(input[3], 0, 1) * 0xff);
361 r = (uint32_t)(CLIP(input[0], 0, 1) * a);
362 g = (uint32_t)(CLIP(input[1], 0, 1) * a);
363 b = (uint32_t)(CLIP(input[2], 0, 1) * a);
365 *(*output)++ = (unsigned char)r;
366 *(*output)++ = (unsigned char)g;
367 *(*output)++ = (unsigned char)b;
370 static inline void transfer_RGBA_FLOAT_to_RGB_FLOAT(float *(*output),
376 *(*output)++ = input[0] * a;
377 *(*output)++ = input[1] * a;
378 *(*output)++ = input[2] * a;
382 static inline void transfer_RGBA_FLOAT_to_RGBA8888(unsigned char *(*output),
385 *(*output)++ = (unsigned char)(CLIP(input[0], 0, 1) * 0xff);
386 *(*output)++ = (unsigned char)(CLIP(input[1], 0, 1) * 0xff);
387 *(*output)++ = (unsigned char)(CLIP(input[2], 0, 1) * 0xff);
388 *(*output)++ = (unsigned char)(CLIP(input[3], 0, 1) * 0xff);
391 static inline void transfer_RGBA_FLOAT_to_ARGB8888(unsigned char *(*output),
394 *(*output)++ = (unsigned char)(CLIP(input[3], 0, 1) * 0xff);
395 *(*output)++ = (unsigned char)(CLIP(input[0], 0, 1) * 0xff);
396 *(*output)++ = (unsigned char)(CLIP(input[1], 0, 1) * 0xff);
397 *(*output)++ = (unsigned char)(CLIP(input[2], 0, 1) * 0xff);
401 static inline void transfer_RGBA_FLOAT_to_BGR8888(unsigned char *(*output),
405 a = (uint32_t)(CLIP(input[3], 0, 1) * 0xff);
406 r = (uint32_t)(CLIP(input[0], 0, 1) * a);
407 g = (uint32_t)(CLIP(input[1], 0, 1) * a);
408 b = (uint32_t)(CLIP(input[2], 0, 1) * a);
410 *(*output)++ = (unsigned char)(b);
411 *(*output)++ = (unsigned char)(g);
412 *(*output)++ = (unsigned char)(r);
416 static inline void transfer_RGBA_FLOAT_to_YUV888(unsigned char *(*output),
419 int y, u, v, r, g, b, a;
420 a = (int)(CLIP(input[3], 0, 1) * 0x101);
421 r = (int)(CLIP(input[0], 0, 1) * 0xff * a);
422 g = (int)(CLIP(input[1], 0, 1) * 0xff * a);
423 b = (int)(CLIP(input[2], 0, 1) * 0xff * a);
425 RGB_TO_YUV16(y, u, v, r, g, b);
427 *(*output)++ = y >> 8;
428 *(*output)++ = u >> 8;
429 *(*output)++ = v >> 8;
432 static inline void transfer_RGBA_FLOAT_to_YUVA8888(unsigned char *(*output),
435 int y, u, v, r, g, b, a;
437 a = (int)(CLIP(input[3], 0, 1) * 0xff);
438 r = (int)(CLIP(input[0], 0, 1) * 0xffff);
439 g = (int)(CLIP(input[1], 0, 1) * 0xffff);
440 b = (int)(CLIP(input[2], 0, 1) * 0xffff);
442 RGB_TO_YUV16(y, u, v, r, g, b);
444 *(*output)++ = y >> 8;
445 *(*output)++ = u >> 8;
446 *(*output)++ = v >> 8;
450 static inline void transfer_RGBA_FLOAT_to_YUV161616(uint16_t *(*output),
453 int y, u, v, r, g, b, a;
455 a = (int)(CLIP(input[3], 0, 1) * 0x101);
456 r = (int)(CLIP(input[0], 0, 1) * 0xff * a);
457 g = (int)(CLIP(input[1], 0, 1) * 0xff * a);
458 b = (int)(CLIP(input[2], 0, 1) * 0xff * a);
460 RGB_TO_YUV16(y, u, v, r, g, b);
462 // GCC 3.3 optimization error
463 *(*output)++ = quicktime_copy(y);
464 *(*output)++ = quicktime_copy(u);
465 *(*output)++ = quicktime_copy(v);
468 static inline void transfer_RGBA_FLOAT_to_YUVA16161616(uint16_t *(*output),
471 int y, u, v, r, g, b, a;
473 r = (int)(CLIP(input[0], 0, 1) * 0xffff);
474 g = (int)(CLIP(input[1], 0, 1) * 0xffff);
475 b = (int)(CLIP(input[2], 0, 1) * 0xffff);
476 a = (int)(CLIP(input[3], 0, 1) * 0xffff);
478 RGB_TO_YUV16(y, u, v, r, g, b);
480 // GCC 3.3 optimization error
481 *(*output)++ = quicktime_copy(y);
482 *(*output)++ = quicktime_copy(u);
483 *(*output)++ = quicktime_copy(v);
484 *(*output)++ = quicktime_copy(a);
487 static inline void transfer_RGBA_FLOAT_to_YUV101010(unsigned char *(*output),
490 int y, u, v, r, g, b, a;
492 a = (int)(CLIP(input[3], 0, 1) * 0x101);
493 r = (int)(CLIP(input[0], 0, 1) * 0xff * a);
494 g = (int)(CLIP(input[1], 0, 1) * 0xff * a);
495 b = (int)(CLIP(input[2], 0, 1) * 0xff * a);
497 RGB_TO_YUV16(y, u, v, r, g, b);
498 WRITE_YUV101010(y, u, v);
502 static inline void transfer_RGBA_FLOAT_to_YUV420P_YUV422P(unsigned char *output_y,
503 unsigned char *output_u,
504 unsigned char *output_v,
508 int y, u, v, r, g, b, a;
509 a = (int)(CLIP(input[3], 0, 1) * 0x101);
510 r = (int)(CLIP(input[0], 0, 1) * 0xff * a);
511 g = (int)(CLIP(input[1], 0, 1) * 0xff * a);
512 b = (int)(CLIP(input[2], 0, 1) * 0xff * a);
514 RGB_TO_YUV16(y, u, v, r, g, b);
516 output_y[output_column] = y >> 8;
517 output_u[output_column / 2] = u >> 8;
518 output_v[output_column / 2] = v >> 8;
521 static inline void transfer_RGBA_FLOAT_to_YUV422(unsigned char *(*output),
525 int y, u, v, r, g, b;
526 float a = CLIP(input[3], 0, 1);
527 r = (int)(CLIP(input[0], 0, 1) * a * 0xffff);
528 g = (int)(CLIP(input[1], 0, 1) * a * 0xffff);
529 b = (int)(CLIP(input[2], 0, 1) * a * 0xffff);
531 RGB_TO_YUV16(y, u, v, r, g, b);
534 // Store U and V for even pixels only
535 (*output)[1] = u >> 8;
536 (*output)[3] = v >> 8;
537 (*output)[0] = y >> 8;
541 // Store Y and advance output for odd pixels only
542 (*output)[2] = y >> 8;
548 static inline void transfer_RGBA_FLOAT_to_YUV444P(unsigned char *output_y,
549 unsigned char *output_u,
550 unsigned char *output_v,
554 int y, u, v, r, g, b, a;
555 a = (int)(CLIP(input[3], 0, 1) * 0x101);
556 r = (int)(CLIP(input[0], 0, 1) * 0xff * a);
557 g = (int)(CLIP(input[1], 0, 1) * 0xff * a);
558 b = (int)(CLIP(input[2], 0, 1) * 0xff * a);
560 RGB_TO_YUV16(y, u, v, r, g, b);
562 output_y[output_column] = y >> 8;
563 output_u[output_column] = u >> 8;
564 output_v[output_column] = v >> 8;
567 static inline void transfer_RGBA_FLOAT_to_VYU888(unsigned char *(*output),
570 int y, u, v, r, g, b;
571 float a = CLIP(input[3], 0, 1);
572 r = (int)(CLIP(input[0], 0, 1) * a * 0xffff);
573 g = (int)(CLIP(input[1], 0, 1) * a * 0xffff);
574 b = (int)(CLIP(input[2], 0, 1) * a * 0xffff);
576 RGB_TO_YUV16(y, u, v, r, g, b);
578 *(*output)++ = v >> 8;
579 *(*output)++ = y >> 8;
580 *(*output)++ = u >> 8;
583 static inline void transfer_RGBA_FLOAT_to_UYVA8888(unsigned char *(*output),
586 int y, u, v, r, g, b;
587 float a = CLIP(input[3], 0, 1);
588 r = (int)(CLIP(input[0], 0, 1) * a * 0xffff);
589 g = (int)(CLIP(input[1], 0, 1) * a * 0xffff);
590 b = (int)(CLIP(input[2], 0, 1) * a * 0xffff);
592 RGB_TO_YUV16(y, u, v, r, g, b);
594 *(*output)++ = u >> 8;
595 *(*output)++ = y >> 8;
596 *(*output)++ = v >> 8;
614 #define TRANSFER_DEFAULT(output, \
623 switch(in_colormodel) \
626 switch(out_colormodel) \
629 TRANSFER_FRAME_HEAD \
630 transfer_RGB_FLOAT_to_RGB8((output), (float*)(input)); \
631 TRANSFER_FRAME_TAIL \
634 TRANSFER_FRAME_HEAD \
635 transfer_RGB_FLOAT_to_BGR565((output), (float*)(input)); \
636 TRANSFER_FRAME_TAIL \
639 TRANSFER_FRAME_HEAD \
640 transfer_RGB_FLOAT_to_RGB565((output), (float*)(input)); \
641 TRANSFER_FRAME_TAIL \
644 TRANSFER_FRAME_HEAD \
645 transfer_RGB_FLOAT_to_BGR888((output), (float*)(input)); \
646 TRANSFER_FRAME_TAIL \
649 TRANSFER_FRAME_HEAD \
650 transfer_RGB_FLOAT_to_BGR8888((output), (float*)(input)); \
651 TRANSFER_FRAME_TAIL \
654 TRANSFER_FRAME_HEAD \
655 transfer_RGB_FLOAT_to_RGB888((output), (float*)(input)); \
656 TRANSFER_FRAME_TAIL \
659 TRANSFER_FRAME_HEAD \
660 transfer_RGB_FLOAT_to_RGBA8888((output), (float*)(input)); \
661 TRANSFER_FRAME_TAIL \
664 TRANSFER_FRAME_HEAD \
665 transfer_RGB_FLOAT_to_ARGB8888((output), (float*)(input)); \
666 TRANSFER_FRAME_TAIL \
668 case BC_RGBA_FLOAT: \
669 TRANSFER_FRAME_HEAD \
670 transfer_RGB_FLOAT_to_RGBA_FLOAT((float**)(output), (float*)(input)); \
671 TRANSFER_FRAME_TAIL \
674 TRANSFER_FRAME_HEAD \
675 transfer_RGB_FLOAT_to_YUV888((output), (float*)(input)); \
676 TRANSFER_FRAME_TAIL \
679 TRANSFER_FRAME_HEAD \
680 transfer_RGB_FLOAT_to_YUVA8888((output), (float*)(input)); \
681 TRANSFER_FRAME_TAIL \
684 TRANSFER_FRAME_HEAD \
685 transfer_RGB_FLOAT_to_YUV161616((uint16_t**)(output), (float*)(input)); \
686 TRANSFER_FRAME_TAIL \
688 case BC_YUVA16161616: \
689 TRANSFER_FRAME_HEAD \
690 transfer_RGB_FLOAT_to_YUVA16161616((uint16_t**)(output), (float*)(input)); \
691 TRANSFER_FRAME_TAIL \
694 TRANSFER_FRAME_HEAD \
695 transfer_RGB_FLOAT_to_YUV101010((output), (float*)(input)); \
696 TRANSFER_FRAME_TAIL \
699 TRANSFER_YUV420P_OUT_HEAD \
700 transfer_RGB_FLOAT_to_YUV420P_YUV422P(output_y, \
705 TRANSFER_FRAME_TAIL \
708 TRANSFER_YUV422P_OUT_HEAD \
709 transfer_RGB_FLOAT_to_YUV420P_YUV422P(output_y, \
714 TRANSFER_FRAME_TAIL \
717 TRANSFER_FRAME_HEAD \
718 transfer_RGB_FLOAT_to_YUV422((output), \
721 TRANSFER_FRAME_TAIL \
724 TRANSFER_YUV444P_OUT_HEAD \
725 transfer_RGB_FLOAT_to_YUV444P(output_y, \
730 TRANSFER_FRAME_TAIL \
733 TRANSFER_FRAME_HEAD \
734 transfer_RGB_FLOAT_to_VYU888((output), \
736 TRANSFER_FRAME_TAIL \
739 TRANSFER_FRAME_HEAD \
740 transfer_RGB_FLOAT_to_UYVA8888((output), \
742 TRANSFER_FRAME_TAIL \
747 case BC_RGBA_FLOAT: \
748 switch(out_colormodel) \
751 TRANSFER_FRAME_HEAD \
752 transfer_RGBA_FLOAT_to_RGB8((output), (float*)(input)); \
753 TRANSFER_FRAME_TAIL \
756 TRANSFER_FRAME_HEAD \
757 transfer_RGBA_FLOAT_to_BGR565((output), (float*)(input)); \
758 TRANSFER_FRAME_TAIL \
761 TRANSFER_FRAME_HEAD \
762 transfer_RGBA_FLOAT_to_RGB565((output), (float*)(input)); \
763 TRANSFER_FRAME_TAIL \
766 TRANSFER_FRAME_HEAD \
767 transfer_RGBA_FLOAT_to_BGR888((output), (float*)(input)); \
768 TRANSFER_FRAME_TAIL \
771 TRANSFER_FRAME_HEAD \
772 transfer_RGBA_FLOAT_to_BGR8888((output), (float*)(input)); \
773 TRANSFER_FRAME_TAIL \
776 TRANSFER_FRAME_HEAD \
777 transfer_RGBA_FLOAT_to_RGB888((output), (float*)(input)); \
778 TRANSFER_FRAME_TAIL \
781 TRANSFER_FRAME_HEAD \
782 transfer_RGBA_FLOAT_to_RGB_FLOAT((float**)(output), (float*)(input)); \
783 TRANSFER_FRAME_TAIL \
786 TRANSFER_FRAME_HEAD \
787 transfer_RGBA_FLOAT_to_RGBA8888((output), (float*)(input)); \
788 TRANSFER_FRAME_TAIL \
791 TRANSFER_FRAME_HEAD \
792 transfer_RGBA_FLOAT_to_ARGB8888((output), (float*)(input)); \
793 TRANSFER_FRAME_TAIL \
796 TRANSFER_FRAME_HEAD \
797 transfer_RGBA_FLOAT_to_YUV888((output), (float*)(input)); \
798 TRANSFER_FRAME_TAIL \
801 TRANSFER_FRAME_HEAD \
802 transfer_RGBA_FLOAT_to_YUVA8888((output), (float*)(input)); \
803 TRANSFER_FRAME_TAIL \
806 TRANSFER_FRAME_HEAD \
807 transfer_RGBA_FLOAT_to_YUV161616((uint16_t**)(output), (float*)(input)); \
808 TRANSFER_FRAME_TAIL \
810 case BC_YUVA16161616: \
811 TRANSFER_FRAME_HEAD \
812 transfer_RGBA_FLOAT_to_YUVA16161616((uint16_t**)(output), (float*)(input)); \
813 TRANSFER_FRAME_TAIL \
816 TRANSFER_FRAME_HEAD \
817 transfer_RGBA_FLOAT_to_YUV101010((output), (float*)(input)); \
818 TRANSFER_FRAME_TAIL \
821 TRANSFER_YUV420P_OUT_HEAD \
822 transfer_RGBA_FLOAT_to_YUV420P_YUV422P(output_y, \
827 TRANSFER_FRAME_TAIL \
830 TRANSFER_YUV422P_OUT_HEAD \
831 transfer_RGBA_FLOAT_to_YUV420P_YUV422P(output_y, \
836 TRANSFER_FRAME_TAIL \
839 TRANSFER_FRAME_HEAD \
840 transfer_RGBA_FLOAT_to_YUV422((output), \
843 TRANSFER_FRAME_TAIL \
846 TRANSFER_YUV444P_OUT_HEAD \
847 transfer_RGBA_FLOAT_to_YUV444P(output_y, \
852 TRANSFER_FRAME_TAIL \
855 TRANSFER_FRAME_HEAD \
856 transfer_RGBA_FLOAT_to_VYU888((output), \
858 TRANSFER_FRAME_TAIL \
861 TRANSFER_FRAME_HEAD \
862 transfer_RGBA_FLOAT_to_UYVA8888((output), \
864 TRANSFER_FRAME_TAIL \
873 void cmodel_float(PERMUTATION_ARGS)
877 TRANSFER_DEFAULT(&output_row,
878 input_row + column_table[j] * in_pixelsize,
886 TRANSFER_DEFAULT(&output_row,
887 input_row + j * in_pixelsize,