2 * software RGB to RGB converter
3 * pluralize by software PAL8 to RGB converter
4 * software YUV to YUV converter
5 * software YUV to RGB converter
6 * Written by Nick Kurshev.
7 * palette & YUV & runtime CPU stuff by Michael (michaelni@gmx.at)
8 * lot of big-endian byte order fixes by Alex Beregszaszi
10 * This file is part of Libav.
12 * Libav is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Lesser General Public
14 * License as published by the Free Software Foundation; either
15 * version 2.1 of the License, or (at your option) any later version.
17 * Libav is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Lesser General Public License for more details.
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with Libav; if not, write to the Free Software
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29 static inline void rgb24tobgr32_c(const uint8_t *src, uint8_t *dst, long src_size)
32 const uint8_t *s = src;
38 /* RGB24 (= R,G,B) -> RGB32 (= A,B,G,R) */
53 static inline void rgb32tobgr24_c(const uint8_t *src, uint8_t *dst, long src_size)
56 const uint8_t *s = src;
63 /* RGB32 (= A,B,G,R) -> RGB24 (= R,G,B) */
79 original by Strepto/Astral
80 ported to gcc & bugfixed: A'rpi
81 MMX2, 3DNOW optimization by Nick Kurshev
82 32-bit C version, and and&add trick by Michael Niedermayer
84 static inline void rgb15to16_c(const uint8_t *src, uint8_t *dst, long src_size)
86 register const uint8_t* s=src;
87 register uint8_t* d=dst;
88 register const uint8_t *end;
89 const uint8_t *mm_end;
93 register unsigned x= *((const uint32_t *)s);
94 *((uint32_t *)d) = (x&0x7FFF7FFF) + (x&0x7FE07FE0);
99 register unsigned short x= *((const uint16_t *)s);
100 *((uint16_t *)d) = (x&0x7FFF) + (x&0x7FE0);
104 static inline void rgb16to15_c(const uint8_t *src, uint8_t *dst, long src_size)
106 register const uint8_t* s=src;
107 register uint8_t* d=dst;
108 register const uint8_t *end;
109 const uint8_t *mm_end;
114 register uint32_t x= *((const uint32_t*)s);
115 *((uint32_t *)d) = ((x>>1)&0x7FE07FE0) | (x&0x001F001F);
120 register uint16_t x= *((const uint16_t*)s);
121 *((uint16_t *)d) = ((x>>1)&0x7FE0) | (x&0x001F);
125 static inline void rgb32to16_c(const uint8_t *src, uint8_t *dst, long src_size)
127 const uint8_t *s = src;
129 uint16_t *d = (uint16_t *)dst;
133 register int rgb = *(const uint32_t*)s; s += 4;
134 *d++ = ((rgb&0xFF)>>3) + ((rgb&0xFC00)>>5) + ((rgb&0xF80000)>>8);
138 static inline void rgb32tobgr16_c(const uint8_t *src, uint8_t *dst, long src_size)
140 const uint8_t *s = src;
142 uint16_t *d = (uint16_t *)dst;
145 register int rgb = *(const uint32_t*)s; s += 4;
146 *d++ = ((rgb&0xF8)<<8) + ((rgb&0xFC00)>>5) + ((rgb&0xF80000)>>19);
150 static inline void rgb32to15_c(const uint8_t *src, uint8_t *dst, long src_size)
152 const uint8_t *s = src;
154 uint16_t *d = (uint16_t *)dst;
157 register int rgb = *(const uint32_t*)s; s += 4;
158 *d++ = ((rgb&0xFF)>>3) + ((rgb&0xF800)>>6) + ((rgb&0xF80000)>>9);
162 static inline void rgb32tobgr15_c(const uint8_t *src, uint8_t *dst, long src_size)
164 const uint8_t *s = src;
166 uint16_t *d = (uint16_t *)dst;
169 register int rgb = *(const uint32_t*)s; s += 4;
170 *d++ = ((rgb&0xF8)<<7) + ((rgb&0xF800)>>6) + ((rgb&0xF80000)>>19);
174 static inline void rgb24tobgr16_c(const uint8_t *src, uint8_t *dst, long src_size)
176 const uint8_t *s = src;
178 uint16_t *d = (uint16_t *)dst;
184 *d++ = (b>>3) | ((g&0xFC)<<3) | ((r&0xF8)<<8);
188 static inline void rgb24to16_c(const uint8_t *src, uint8_t *dst, long src_size)
190 const uint8_t *s = src;
192 uint16_t *d = (uint16_t *)dst;
198 *d++ = (b>>3) | ((g&0xFC)<<3) | ((r&0xF8)<<8);
202 static inline void rgb24tobgr15_c(const uint8_t *src, uint8_t *dst, long src_size)
204 const uint8_t *s = src;
206 uint16_t *d = (uint16_t *)dst;
212 *d++ = (b>>3) | ((g&0xF8)<<2) | ((r&0xF8)<<7);
216 static inline void rgb24to15_c(const uint8_t *src, uint8_t *dst, long src_size)
218 const uint8_t *s = src;
220 uint16_t *d = (uint16_t *)dst;
226 *d++ = (b>>3) | ((g&0xF8)<<2) | ((r&0xF8)<<7);
231 I use less accurate approximation here by simply left-shifting the input
232 value and filling the low order bits with zeroes. This method improves PNG
233 compression but this scheme cannot reproduce white exactly, since it does
234 not generate an all-ones maximum value; the net effect is to darken the
237 The better method should be "left bit replication":
247 | leftmost bits repeated to fill open bits
251 static inline void rgb15tobgr24_c(const uint8_t *src, uint8_t *dst, long src_size)
255 const uint16_t *s = (const uint16_t*)src;
256 end = s + src_size/2;
258 register uint16_t bgr;
260 *d++ = (bgr&0x1F)<<3;
261 *d++ = (bgr&0x3E0)>>2;
262 *d++ = (bgr&0x7C00)>>7;
266 static inline void rgb16tobgr24_c(const uint8_t *src, uint8_t *dst, long src_size)
269 uint8_t *d = (uint8_t *)dst;
270 const uint16_t *s = (const uint16_t *)src;
271 end = s + src_size/2;
273 register uint16_t bgr;
275 *d++ = (bgr&0x1F)<<3;
276 *d++ = (bgr&0x7E0)>>3;
277 *d++ = (bgr&0xF800)>>8;
282 * mm0 = 00 B3 00 B2 00 B1 00 B0
283 * mm1 = 00 G3 00 G2 00 G1 00 G0
284 * mm2 = 00 R3 00 R2 00 R1 00 R0
285 * mm6 = FF FF FF FF FF FF FF FF
286 * mm7 = 00 00 00 00 00 00 00 00
289 "packuswb %%mm7, %%mm0 \n\t" /* 00 00 00 00 B3 B2 B1 B0 */ \
290 "packuswb %%mm7, %%mm1 \n\t" /* 00 00 00 00 G3 G2 G1 G0 */ \
291 "packuswb %%mm7, %%mm2 \n\t" /* 00 00 00 00 R3 R2 R1 R0 */ \
292 "punpcklbw %%mm1, %%mm0 \n\t" /* G3 B3 G2 B2 G1 B1 G0 B0 */ \
293 "punpcklbw %%mm6, %%mm2 \n\t" /* FF R3 FF R2 FF R1 FF R0 */ \
294 "movq %%mm0, %%mm3 \n\t" \
295 "punpcklwd %%mm2, %%mm0 \n\t" /* FF R1 G1 B1 FF R0 G0 B0 */ \
296 "punpckhwd %%mm2, %%mm3 \n\t" /* FF R3 G3 B3 FF R2 G2 B2 */ \
297 MOVNTQ" %%mm0, %0 \n\t" \
298 MOVNTQ" %%mm3, 8%0 \n\t" \
300 static inline void rgb15to32_c(const uint8_t *src, uint8_t *dst, long src_size)
304 const uint16_t *s = (const uint16_t *)src;
305 end = s + src_size/2;
307 register uint16_t bgr;
311 *d++ = (bgr&0x7C00)>>7;
312 *d++ = (bgr&0x3E0)>>2;
313 *d++ = (bgr&0x1F)<<3;
315 *d++ = (bgr&0x1F)<<3;
316 *d++ = (bgr&0x3E0)>>2;
317 *d++ = (bgr&0x7C00)>>7;
323 static inline void rgb16to32_c(const uint8_t *src, uint8_t *dst, long src_size)
327 const uint16_t *s = (const uint16_t*)src;
328 end = s + src_size/2;
330 register uint16_t bgr;
334 *d++ = (bgr&0xF800)>>8;
335 *d++ = (bgr&0x7E0)>>3;
336 *d++ = (bgr&0x1F)<<3;
338 *d++ = (bgr&0x1F)<<3;
339 *d++ = (bgr&0x7E0)>>3;
340 *d++ = (bgr&0xF800)>>8;
346 static inline void shuffle_bytes_2103_c(const uint8_t *src, uint8_t *dst, long src_size)
348 int idx = 15 - src_size;
349 const uint8_t *s = src-idx;
350 uint8_t *d = dst-idx;
351 for (; idx<15; idx+=4) {
352 register int v = *(const uint32_t *)&s[idx], g = v & 0xff00ff00;
354 *(uint32_t *)&d[idx] = (v>>16) + g + (v<<16);
358 static inline void rgb24tobgr24_c(const uint8_t *src, uint8_t *dst, long src_size)
361 for (i=0; i<src_size; i+=3) {
364 dst[i + 1] = src[i + 1];
365 dst[i + 2] = src[i + 0];
370 static inline void yuvPlanartoyuy2_c(const uint8_t *ysrc, const uint8_t *usrc,
371 const uint8_t *vsrc, uint8_t *dst,
372 long width, long height,
373 long lumStride, long chromStride,
374 long dstStride, long vertLumPerChroma)
377 const int chromWidth = width >> 1;
378 for (y=0; y<height; y++) {
381 uint64_t *ldst = (uint64_t *) dst;
382 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
383 for (i = 0; i < chromWidth; i += 2) {
385 k = yc[0] + (uc[0] << 8) +
386 (yc[1] << 16) + (vc[0] << 24);
387 l = yc[2] + (uc[1] << 8) +
388 (yc[3] << 16) + (vc[1] << 24);
389 *ldst++ = k + (l << 32);
396 int i, *idst = (int32_t *) dst;
397 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
398 for (i = 0; i < chromWidth; i++) {
400 *idst++ = (yc[0] << 24)+ (uc[0] << 16) +
401 (yc[1] << 8) + (vc[0] << 0);
403 *idst++ = yc[0] + (uc[0] << 8) +
404 (yc[1] << 16) + (vc[0] << 24);
411 if ((y&(vertLumPerChroma-1)) == vertLumPerChroma-1) {
421 * Height should be a multiple of 2 and width should be a multiple of 16.
422 * (If this is a problem for anyone then tell me, and I will fix it.)
424 static inline void yv12toyuy2_c(const uint8_t *ysrc, const uint8_t *usrc,
425 const uint8_t *vsrc, uint8_t *dst,
426 long width, long height,
427 long lumStride, long chromStride,
430 //FIXME interpolate chroma
431 yuvPlanartoyuy2_c(ysrc, usrc, vsrc, dst, width, height, lumStride,
432 chromStride, dstStride, 2);
435 static inline void yuvPlanartouyvy_c(const uint8_t *ysrc, const uint8_t *usrc,
436 const uint8_t *vsrc, uint8_t *dst,
437 long width, long height,
438 long lumStride, long chromStride,
439 long dstStride, long vertLumPerChroma)
442 const int chromWidth = width >> 1;
443 for (y=0; y<height; y++) {
446 uint64_t *ldst = (uint64_t *) dst;
447 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
448 for (i = 0; i < chromWidth; i += 2) {
450 k = uc[0] + (yc[0] << 8) +
451 (vc[0] << 16) + (yc[1] << 24);
452 l = uc[1] + (yc[2] << 8) +
453 (vc[1] << 16) + (yc[3] << 24);
454 *ldst++ = k + (l << 32);
461 int i, *idst = (int32_t *) dst;
462 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
463 for (i = 0; i < chromWidth; i++) {
465 *idst++ = (uc[0] << 24)+ (yc[0] << 16) +
466 (vc[0] << 8) + (yc[1] << 0);
468 *idst++ = uc[0] + (yc[0] << 8) +
469 (vc[0] << 16) + (yc[1] << 24);
476 if ((y&(vertLumPerChroma-1)) == vertLumPerChroma-1) {
486 * Height should be a multiple of 2 and width should be a multiple of 16
487 * (If this is a problem for anyone then tell me, and I will fix it.)
489 static inline void yv12touyvy_c(const uint8_t *ysrc, const uint8_t *usrc,
490 const uint8_t *vsrc, uint8_t *dst,
491 long width, long height,
492 long lumStride, long chromStride,
495 //FIXME interpolate chroma
496 yuvPlanartouyvy_c(ysrc, usrc, vsrc, dst, width, height, lumStride,
497 chromStride, dstStride, 2);
501 * Width should be a multiple of 16.
503 static inline void yuv422ptouyvy_c(const uint8_t *ysrc, const uint8_t *usrc,
504 const uint8_t *vsrc, uint8_t *dst,
505 long width, long height,
506 long lumStride, long chromStride,
509 yuvPlanartouyvy_c(ysrc, usrc, vsrc, dst, width, height, lumStride,
510 chromStride, dstStride, 1);
514 * Width should be a multiple of 16.
516 static inline void yuv422ptoyuy2_c(const uint8_t *ysrc, const uint8_t *usrc,
517 const uint8_t *vsrc, uint8_t *dst,
518 long width, long height,
519 long lumStride, long chromStride,
522 yuvPlanartoyuy2_c(ysrc, usrc, vsrc, dst, width, height, lumStride,
523 chromStride, dstStride, 1);
527 * Height should be a multiple of 2 and width should be a multiple of 16.
528 * (If this is a problem for anyone then tell me, and I will fix it.)
530 static inline void yuy2toyv12_c(const uint8_t *src, uint8_t *ydst,
531 uint8_t *udst, uint8_t *vdst,
532 long width, long height,
533 long lumStride, long chromStride,
537 const int chromWidth = width >> 1;
538 for (y=0; y<height; y+=2) {
540 for (i=0; i<chromWidth; i++) {
541 ydst[2*i+0] = src[4*i+0];
542 udst[i] = src[4*i+1];
543 ydst[2*i+1] = src[4*i+2];
544 vdst[i] = src[4*i+3];
549 for (i=0; i<chromWidth; i++) {
550 ydst[2*i+0] = src[4*i+0];
551 ydst[2*i+1] = src[4*i+2];
560 static inline void planar2x_c(const uint8_t *src, uint8_t *dst, long srcWidth,
561 long srcHeight, long srcStride, long dstStride)
568 for (x=0; x<srcWidth-1; x++) {
569 dst[2*x+1]= (3*src[x] + src[x+1])>>2;
570 dst[2*x+2]= ( src[x] + 3*src[x+1])>>2;
572 dst[2*srcWidth-1]= src[srcWidth-1];
576 for (y=1; y<srcHeight; y++) {
577 const int mmxSize = 1;
579 dst[0 ]= (3*src[0] + src[srcStride])>>2;
580 dst[dstStride]= ( src[0] + 3*src[srcStride])>>2;
582 for (x=mmxSize-1; x<srcWidth-1; x++) {
583 dst[2*x +1]= (3*src[x+0] + src[x+srcStride+1])>>2;
584 dst[2*x+dstStride+2]= ( src[x+0] + 3*src[x+srcStride+1])>>2;
585 dst[2*x+dstStride+1]= ( src[x+1] + 3*src[x+srcStride ])>>2;
586 dst[2*x +2]= (3*src[x+1] + src[x+srcStride ])>>2;
588 dst[srcWidth*2 -1 ]= (3*src[srcWidth-1] + src[srcWidth-1 + srcStride])>>2;
589 dst[srcWidth*2 -1 + dstStride]= ( src[srcWidth-1] + 3*src[srcWidth-1 + srcStride])>>2;
599 for (x=0; x<srcWidth-1; x++) {
600 dst[2*x+1]= (3*src[x] + src[x+1])>>2;
601 dst[2*x+2]= ( src[x] + 3*src[x+1])>>2;
603 dst[2*srcWidth-1]= src[srcWidth-1];
605 for (x=0; x<srcWidth; x++) {
613 * Height should be a multiple of 2 and width should be a multiple of 16.
614 * (If this is a problem for anyone then tell me, and I will fix it.)
615 * Chrominance data is only taken from every second line, others are ignored.
616 * FIXME: Write HQ version.
618 static inline void uyvytoyv12_c(const uint8_t *src, uint8_t *ydst,
619 uint8_t *udst, uint8_t *vdst,
620 long width, long height,
621 long lumStride, long chromStride,
625 const int chromWidth = width >> 1;
626 for (y=0; y<height; y+=2) {
628 for (i=0; i<chromWidth; i++) {
629 udst[i] = src[4*i+0];
630 ydst[2*i+0] = src[4*i+1];
631 vdst[i] = src[4*i+2];
632 ydst[2*i+1] = src[4*i+3];
637 for (i=0; i<chromWidth; i++) {
638 ydst[2*i+0] = src[4*i+1];
639 ydst[2*i+1] = src[4*i+3];
649 * Height should be a multiple of 2 and width should be a multiple of 2.
650 * (If this is a problem for anyone then tell me, and I will fix it.)
651 * Chrominance data is only taken from every second line,
652 * others are ignored in the C version.
653 * FIXME: Write HQ version.
655 static inline void rgb24toyv12_c(const uint8_t *src, uint8_t *ydst,
656 uint8_t *udst, uint8_t *vdst,
657 long width, long height,
658 long lumStride, long chromStride,
662 const int chromWidth = width >> 1;
664 for (; y<height; y+=2) {
666 for (i=0; i<chromWidth; i++) {
667 unsigned int b = src[6*i+0];
668 unsigned int g = src[6*i+1];
669 unsigned int r = src[6*i+2];
671 unsigned int Y = ((RY*r + GY*g + BY*b)>>RGB2YUV_SHIFT) + 16;
672 unsigned int V = ((RV*r + GV*g + BV*b)>>RGB2YUV_SHIFT) + 128;
673 unsigned int U = ((RU*r + GU*g + BU*b)>>RGB2YUV_SHIFT) + 128;
683 Y = ((RY*r + GY*g + BY*b)>>RGB2YUV_SHIFT) + 16;
689 for (i=0; i<chromWidth; i++) {
690 unsigned int b = src[6*i+0];
691 unsigned int g = src[6*i+1];
692 unsigned int r = src[6*i+2];
694 unsigned int Y = ((RY*r + GY*g + BY*b)>>RGB2YUV_SHIFT) + 16;
702 Y = ((RY*r + GY*g + BY*b)>>RGB2YUV_SHIFT) + 16;
712 static void interleaveBytes_c(const uint8_t *src1, const uint8_t *src2,
713 uint8_t *dest, long width,
714 long height, long src1Stride,
715 long src2Stride, long dstStride)
719 for (h=0; h < height; h++) {
721 for (w=0; w < width; w++) {
722 dest[2*w+0] = src1[w];
723 dest[2*w+1] = src2[w];
731 static inline void vu9_to_vu12_c(const uint8_t *src1, const uint8_t *src2,
732 uint8_t *dst1, uint8_t *dst2,
733 long width, long height,
734 long srcStride1, long srcStride2,
735 long dstStride1, long dstStride2)
739 w=width/2; h=height/2;
741 const uint8_t* s1=src1+srcStride1*(y>>1);
742 uint8_t* d=dst1+dstStride1*y;
744 for (;x<w;x++) d[2*x]=d[2*x+1]=s1[x];
747 const uint8_t* s2=src2+srcStride2*(y>>1);
748 uint8_t* d=dst2+dstStride2*y;
750 for (;x<w;x++) d[2*x]=d[2*x+1]=s2[x];
754 static inline void yvu9_to_yuy2_c(const uint8_t *src1, const uint8_t *src2,
755 const uint8_t *src3, uint8_t *dst,
756 long width, long height,
757 long srcStride1, long srcStride2,
758 long srcStride3, long dstStride)
764 const uint8_t* yp=src1+srcStride1*y;
765 const uint8_t* up=src2+srcStride2*(y>>2);
766 const uint8_t* vp=src3+srcStride3*(y>>2);
767 uint8_t* d=dst+dstStride*y;
770 const long x2 = x<<2;
783 static void extract_even_c(const uint8_t *src, uint8_t *dst, int count)
790 dst[count]= src[2*count];
795 static void extract_even2_c(const uint8_t *src, uint8_t *dst0, uint8_t *dst1,
803 dst0[count]= src[4*count+0];
804 dst1[count]= src[4*count+2];
809 static void extract_even2avg_c(const uint8_t *src0, const uint8_t *src1,
810 uint8_t *dst0, uint8_t *dst1, int count)
818 dst0[count]= (src0[4*count+0]+src1[4*count+0])>>1;
819 dst1[count]= (src0[4*count+2]+src1[4*count+2])>>1;
824 static void extract_odd2_c(const uint8_t *src, uint8_t *dst0, uint8_t *dst1,
833 dst0[count]= src[4*count+0];
834 dst1[count]= src[4*count+2];
839 static void extract_odd2avg_c(const uint8_t *src0, const uint8_t *src1,
840 uint8_t *dst0, uint8_t *dst1, int count)
850 dst0[count]= (src0[4*count+0]+src1[4*count+0])>>1;
851 dst1[count]= (src0[4*count+2]+src1[4*count+2])>>1;
856 static void yuyvtoyuv420_c(uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
857 const uint8_t *src, long width, long height,
858 long lumStride, long chromStride, long srcStride)
861 const long chromWidth= -((-width)>>1);
863 for (y=0; y<height; y++) {
864 extract_even_c(src, ydst, width);
866 extract_odd2avg_c(src - srcStride, src, udst, vdst, chromWidth);
876 static void yuyvtoyuv422_c(uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
877 const uint8_t *src, long width, long height,
878 long lumStride, long chromStride, long srcStride)
881 const long chromWidth= -((-width)>>1);
883 for (y=0; y<height; y++) {
884 extract_even_c(src, ydst, width);
885 extract_odd2_c(src, udst, vdst, chromWidth);
894 static void uyvytoyuv420_c(uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
895 const uint8_t *src, long width, long height,
896 long lumStride, long chromStride, long srcStride)
899 const long chromWidth= -((-width)>>1);
901 for (y=0; y<height; y++) {
902 extract_even_c(src + 1, ydst, width);
904 extract_even2avg_c(src - srcStride, src, udst, vdst, chromWidth);
914 static void uyvytoyuv422_c(uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
915 const uint8_t *src, long width, long height,
916 long lumStride, long chromStride, long srcStride)
919 const long chromWidth= -((-width)>>1);
921 for (y=0; y<height; y++) {
922 extract_even_c(src + 1, ydst, width);
923 extract_even2_c(src, udst, vdst, chromWidth);
932 static inline void rgb2rgb_init_c(void)
934 rgb15to16 = rgb15to16_c;
935 rgb15tobgr24 = rgb15tobgr24_c;
936 rgb15to32 = rgb15to32_c;
937 rgb16tobgr24 = rgb16tobgr24_c;
938 rgb16to32 = rgb16to32_c;
939 rgb16to15 = rgb16to15_c;
940 rgb24tobgr16 = rgb24tobgr16_c;
941 rgb24tobgr15 = rgb24tobgr15_c;
942 rgb24tobgr32 = rgb24tobgr32_c;
943 rgb32to16 = rgb32to16_c;
944 rgb32to15 = rgb32to15_c;
945 rgb32tobgr24 = rgb32tobgr24_c;
946 rgb24to15 = rgb24to15_c;
947 rgb24to16 = rgb24to16_c;
948 rgb24tobgr24 = rgb24tobgr24_c;
949 shuffle_bytes_2103 = shuffle_bytes_2103_c;
950 rgb32tobgr16 = rgb32tobgr16_c;
951 rgb32tobgr15 = rgb32tobgr15_c;
952 yv12toyuy2 = yv12toyuy2_c;
953 yv12touyvy = yv12touyvy_c;
954 yuv422ptoyuy2 = yuv422ptoyuy2_c;
955 yuv422ptouyvy = yuv422ptouyvy_c;
956 yuy2toyv12 = yuy2toyv12_c;
957 planar2x = planar2x_c;
958 rgb24toyv12 = rgb24toyv12_c;
959 interleaveBytes = interleaveBytes_c;
960 vu9_to_vu12 = vu9_to_vu12_c;
961 yvu9_to_yuy2 = yvu9_to_yuy2_c;
963 uyvytoyuv420 = uyvytoyuv420_c;
964 uyvytoyuv422 = uyvytoyuv422_c;
965 yuyvtoyuv420 = yuyvtoyuv420_c;
966 yuyvtoyuv422 = yuyvtoyuv422_c;