29 static inline void rgb24tobgr32_c(
const uint8_t *src, uint8_t *dst,
int src_size)
32 const uint8_t *s = src;
53 static inline void rgb32tobgr24_c(
const uint8_t *src, uint8_t *dst,
int src_size)
56 const uint8_t *s = src;
84 static inline void rgb15to16_c(
const uint8_t *src, uint8_t *dst,
int 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,
int 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,
int 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,
int 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,
int 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,
int 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,
int 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,
int 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,
int 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,
int 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);
251 static inline void rgb15tobgr24_c(
const uint8_t *src, uint8_t *dst,
int 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,
int 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;
281 static inline void rgb15to32_c(
const uint8_t *src, uint8_t *dst,
int src_size)
285 const uint16_t *s = (
const uint16_t *)src;
286 end = s + src_size/2;
288 register uint16_t bgr;
292 *d++ = (bgr&0x7C00)>>7;
293 *d++ = (bgr&0x3E0)>>2;
294 *d++ = (bgr&0x1F)<<3;
296 *d++ = (bgr&0x1F)<<3;
297 *d++ = (bgr&0x3E0)>>2;
298 *d++ = (bgr&0x7C00)>>7;
304 static inline void rgb16to32_c(
const uint8_t *src, uint8_t *dst,
int src_size)
308 const uint16_t *s = (
const uint16_t*)src;
309 end = s + src_size/2;
311 register uint16_t bgr;
315 *d++ = (bgr&0xF800)>>8;
316 *d++ = (bgr&0x7E0)>>3;
317 *d++ = (bgr&0x1F)<<3;
319 *d++ = (bgr&0x1F)<<3;
320 *d++ = (bgr&0x7E0)>>3;
321 *d++ = (bgr&0xF800)>>8;
329 int idx = 15 - src_size;
330 const uint8_t *s = src-idx;
331 uint8_t *d = dst-idx;
332 for (; idx<15; idx+=4) {
333 register int v = *(
const uint32_t *)&s[idx],
g = v & 0xff00ff00;
335 *(uint32_t *)&d[idx] = (v>>16) +
g + (v<<16);
339 static inline void rgb24tobgr24_c(
const uint8_t *src, uint8_t *dst,
int src_size)
342 for (i=0; i<src_size; i+=3) {
345 dst[i + 1] = src[i + 1];
346 dst[i + 2] = src[i + 0];
352 const uint8_t *vsrc, uint8_t *dst,
354 int lumStride,
int chromStride,
355 int dstStride,
int vertLumPerChroma)
358 const int chromWidth = width >> 1;
359 for (y=0; y<
height; y++) {
362 uint64_t *ldst = (uint64_t *) dst;
363 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
364 for (i = 0; i < chromWidth; i += 2) {
366 k = yc[0] + (uc[0] << 8) +
367 (yc[1] << 16) + (vc[0] << 24);
368 l = yc[2] + (uc[1] << 8) +
369 (yc[3] << 16) + (vc[1] << 24);
370 *ldst++ = k + (l << 32);
377 int i, *idst = (int32_t *) dst;
378 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
379 for (i = 0; i < chromWidth; i++) {
381 *idst++ = (yc[0] << 24)+ (uc[0] << 16) +
382 (yc[1] << 8) + (vc[0] << 0);
384 *idst++ = yc[0] + (uc[0] << 8) +
385 (yc[1] << 16) + (vc[0] << 24);
392 if ((y&(vertLumPerChroma-1)) == vertLumPerChroma-1) {
405 static inline void yv12toyuy2_c(
const uint8_t *ysrc,
const uint8_t *usrc,
406 const uint8_t *vsrc, uint8_t *dst,
408 int lumStride,
int chromStride,
413 chromStride, dstStride, 2);
417 const uint8_t *vsrc, uint8_t *dst,
419 int lumStride,
int chromStride,
420 int dstStride,
int vertLumPerChroma)
423 const int chromWidth = width >> 1;
424 for (y=0; y<
height; y++) {
427 uint64_t *ldst = (uint64_t *) dst;
428 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
429 for (i = 0; i < chromWidth; i += 2) {
431 k = uc[0] + (yc[0] << 8) +
432 (vc[0] << 16) + (yc[1] << 24);
433 l = uc[1] + (yc[2] << 8) +
434 (vc[1] << 16) + (yc[3] << 24);
435 *ldst++ = k + (l << 32);
442 int i, *idst = (int32_t *) dst;
443 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
444 for (i = 0; i < chromWidth; i++) {
446 *idst++ = (uc[0] << 24)+ (yc[0] << 16) +
447 (vc[0] << 8) + (yc[1] << 0);
449 *idst++ = uc[0] + (yc[0] << 8) +
450 (vc[0] << 16) + (yc[1] << 24);
457 if ((y&(vertLumPerChroma-1)) == vertLumPerChroma-1) {
470 static inline void yv12touyvy_c(
const uint8_t *ysrc,
const uint8_t *usrc,
471 const uint8_t *vsrc, uint8_t *dst,
473 int lumStride,
int chromStride,
478 chromStride, dstStride, 2);
485 const uint8_t *vsrc, uint8_t *dst,
487 int lumStride,
int chromStride,
491 chromStride, dstStride, 1);
498 const uint8_t *vsrc, uint8_t *dst,
500 int lumStride,
int chromStride,
504 chromStride, dstStride, 1);
512 uint8_t *udst, uint8_t *vdst,
514 int lumStride,
int chromStride,
518 const int chromWidth = width >> 1;
519 for (y=0; y<
height; y+=2) {
521 for (i=0; i<chromWidth; i++) {
522 ydst[2*i+0] = src[4*i+0];
523 udst[i] = src[4*i+1];
524 ydst[2*i+1] = src[4*i+2];
525 vdst[i] = src[4*i+3];
530 for (i=0; i<chromWidth; i++) {
531 ydst[2*i+0] = src[4*i+0];
532 ydst[2*i+1] = src[4*i+2];
541 static inline void planar2x_c(
const uint8_t *src, uint8_t *dst,
int srcWidth,
542 int srcHeight,
int srcStride,
int dstStride)
549 for (x=0; x<srcWidth-1; x++) {
550 dst[2*x+1]= (3*src[x] + src[x+1])>>2;
551 dst[2*x+2]= ( src[x] + 3*src[x+1])>>2;
553 dst[2*srcWidth-1]= src[srcWidth-1];
557 for (y=1; y<srcHeight; y++) {
558 const int mmxSize = 1;
560 dst[0 ]= (3*src[0] + src[srcStride])>>2;
561 dst[dstStride]= ( src[0] + 3*src[srcStride])>>2;
563 for (x=mmxSize-1; x<srcWidth-1; x++) {
564 dst[2*x +1]= (3*src[x+0] + src[x+srcStride+1])>>2;
565 dst[2*x+dstStride+2]= ( src[x+0] + 3*src[x+srcStride+1])>>2;
566 dst[2*x+dstStride+1]= ( src[x+1] + 3*src[x+srcStride ])>>2;
567 dst[2*x +2]= (3*src[x+1] + src[x+srcStride ])>>2;
569 dst[srcWidth*2 -1 ]= (3*src[srcWidth-1] + src[srcWidth-1 + srcStride])>>2;
570 dst[srcWidth*2 -1 + dstStride]= ( src[srcWidth-1] + 3*src[srcWidth-1 + srcStride])>>2;
579 for (x=0; x<srcWidth-1; x++) {
580 dst[2*x+1]= (3*src[x] + src[x+1])>>2;
581 dst[2*x+2]= ( src[x] + 3*src[x+1])>>2;
583 dst[2*srcWidth-1]= src[srcWidth-1];
593 uint8_t *udst, uint8_t *vdst,
595 int lumStride,
int chromStride,
599 const int chromWidth = width >> 1;
600 for (y=0; y<
height; y+=2) {
602 for (i=0; i<chromWidth; i++) {
603 udst[i] = src[4*i+0];
604 ydst[2*i+0] = src[4*i+1];
605 vdst[i] = src[4*i+2];
606 ydst[2*i+1] = src[4*i+3];
611 for (i=0; i<chromWidth; i++) {
612 ydst[2*i+0] = src[4*i+1];
613 ydst[2*i+1] = src[4*i+3];
630 uint8_t *vdst,
int width,
int height,
int lumStride,
631 int chromStride,
int srcStride)
634 const int chromWidth = width >> 1;
638 for (i=0; i<chromWidth; i++) {
639 unsigned int b = src[6*i+0];
640 unsigned int g = src[6*i+1];
641 unsigned int r = src[6*i+2];
661 for (i=0; i<chromWidth; i++) {
662 unsigned int b = src[6*i+0];
663 unsigned int g = src[6*i+1];
664 unsigned int r = src[6*i+2];
685 uint8_t *dest,
int width,
686 int height,
int src1Stride,
687 int src2Stride,
int dstStride)
691 for (h=0; h <
height; h++) {
693 for (w=0; w <
width; w++) {
694 dest[2*w+0] = src1[w];
695 dest[2*w+1] = src2[w];
704 uint8_t *dst1, uint8_t *dst2,
706 int srcStride1,
int srcStride2,
707 int dstStride1,
int dstStride2)
711 w=width/2; h=height/2;
713 const uint8_t*
s1=src1+srcStride1*(y>>1);
714 uint8_t* d=dst1+dstStride1*y;
716 for (;x<w;x++) d[2*x]=d[2*x+1]=s1[x];
719 const uint8_t*
s2=src2+srcStride2*(y>>1);
720 uint8_t* d=dst2+dstStride2*y;
722 for (;x<w;x++) d[2*x]=d[2*x+1]=s2[x];
727 const uint8_t *src3, uint8_t *dst,
729 int srcStride1,
int srcStride2,
730 int srcStride3,
int dstStride)
736 const uint8_t* yp=src1+srcStride1*y;
737 const uint8_t* up=src2+srcStride2*(y>>2);
738 const uint8_t* vp=src3+srcStride3*(y>>2);
739 uint8_t* d=dst+dstStride*y;
762 dst[count]= src[2*count];
775 dst0[count]= src[4*count+0];
776 dst1[count]= src[4*count+2];
782 uint8_t *dst0, uint8_t *dst1,
int count)
790 dst0[count]= (src0[4*count+0]+src1[4*count+0])>>1;
791 dst1[count]= (src0[4*count+2]+src1[4*count+2])>>1;
805 dst0[count]= src[4*count+0];
806 dst1[count]= src[4*count+2];
812 uint8_t *dst0, uint8_t *dst1,
int count)
822 dst0[count]= (src0[4*count+0]+src1[4*count+0])>>1;
823 dst1[count]= (src0[4*count+2]+src1[4*count+2])>>1;
830 int lumStride,
int chromStride,
int srcStride)
833 const int chromWidth= -((-
width)>>1);
835 for (y=0; y<
height; y++) {
850 int lumStride,
int chromStride,
int srcStride)
853 const int chromWidth= -((-
width)>>1);
855 for (y=0; y<
height; y++) {
868 int lumStride,
int chromStride,
int srcStride)
871 const int chromWidth= -((-
width)>>1);
873 for (y=0; y<
height; y++) {
888 int lumStride,
int chromStride,
int srcStride)
891 const int chromWidth= -((-
width)>>1);
893 for (y=0; y<
height; y++) {