pre-yvu9toyv12 converter, only grayscale Y-plane coping :)
authorAlex Beregszaszi <alex@rtfs.hu>
Fri, 21 Jun 2002 17:37:00 +0000 (17:37 +0000)
committerAlex Beregszaszi <alex@rtfs.hu>
Fri, 21 Jun 2002 17:37:00 +0000 (17:37 +0000)
Originally committed as revision 6485 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc

postproc/rgb2rgb.c
postproc/rgb2rgb_template.c

index 44c8e461e888726e8bd0a6cc4404e62285488ded..91983bea0aeed474de4a272f214ae8e7e6f57def 100644 (file)
@@ -214,6 +214,23 @@ void palette8torgb24(const uint8_t *src, uint8_t *dst, unsigned num_pixels, cons
        }
 }
 
+void bgr24torgb24(const uint8_t *src, uint8_t *dst, unsigned src_size)
+{
+#ifdef CAN_COMPILE_X86_ASM
+       // ordered per speed fasterst first
+       if(gCpuCaps.hasMMX2)
+               bgr24torgb24_MMX2(src, dst, src_size);
+       else if(gCpuCaps.has3DNow)
+               bgr24torgb24_3DNow(src, dst, src_size);
+       else if(gCpuCaps.hasMMX)
+               bgr24torgb24_MMX(src, dst, src_size);
+       else
+               bgr24torgb24_C(src, dst, src_size);
+#else
+               bgr24torgb24_C(src, dst, src_size);
+#endif
+}
+
 void rgb32to16(const uint8_t *src, uint8_t *dst, unsigned src_size)
 {
 #ifdef CAN_COMPILE_X86_ASM
@@ -432,6 +449,26 @@ void uyvytoyv12(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
 #endif
 }
 
+void yvu9toyv12(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc,
+       uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
+       unsigned int width, unsigned int height,
+       unsigned int lumStride, unsigned int chromStride)
+{
+#ifdef CAN_COMPILE_X86_ASM
+       // ordered per speed fasterst first
+       if(gCpuCaps.hasMMX2)
+               yvu9toyv12_MMX2(ysrc, usrc, vsrc, ydst, udst, vdst, width, height, lumStride, chromStride);
+       else if(gCpuCaps.has3DNow)
+               yvu9toyv12_3DNow(ysrc, usrc, vsrc, ydst, udst, vdst, width, height, lumStride, chromStride);
+       else if(gCpuCaps.hasMMX)
+               yvu9toyv12_MMX(ysrc, usrc, vsrc, ydst, udst, vdst, width, height, lumStride, chromStride);
+       else
+               yvu9toyv12_C(ysrc, usrc, vsrc, ydst, udst, vdst, width, height, lumStride, chromStride);
+#else
+               yvu9toyv12_C(ysrc, usrc, vsrc, ydst, udst, vdst, width, height, lumStride, chromStride);
+#endif
+}
+
 /**
  *
  * height should be a multiple of 2 and width should be a multiple of 2 (if this is a
index 9f0dc4e18c8bd3a8d5f30246f6a865ffab6a57d0..9d59eabc70628bf4c9dcace099cce5106fb6350b 100644 (file)
@@ -244,6 +244,17 @@ static inline void RENAME(rgb15to16)(const uint8_t *src,uint8_t *dst,unsigned sr
 #endif
 }
 
+static inline void RENAME(bgr24torgb24)(const uint8_t *src, uint8_t *dst, unsigned src_size)
+{
+       unsigned j,i,num_pixels=src_size/3;
+       for(i=0,j=0; j<num_pixels; i+=3,j+=3)
+       {
+               dst[j+0] = src[i+2];
+               dst[j+1] = src[i+1];
+               dst[j+2] = src[i+0];
+       }
+}
+
 static inline void RENAME(rgb32to16)(const uint8_t *src, uint8_t *dst, unsigned src_size)
 {
 #ifdef HAVE_MMX
@@ -853,6 +864,16 @@ asm volatile(   EMMS" \n\t"
 #endif
 }
 
+static inline void RENAME(yvu9toyv12)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc,
+       uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
+       unsigned int width, unsigned int height, unsigned int lumStride, unsigned int chromStride)
+{
+       /* Y Plane */
+       memcpy(ydst, ysrc, width*height);
+
+       /* XXX: implement upscaling for U,V */
+}
+
 /**
  *
  * height should be a multiple of 2 and width should be a multiple of 16 (if this is a