yuv422p -> yuy2 (untested)
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 13 Apr 2002 02:21:12 +0000 (02:21 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 13 Apr 2002 02:21:12 +0000 (02:21 +0000)
Originally committed as revision 5589 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc

postproc/rgb2rgb.c
postproc/rgb2rgb.h
postproc/rgb2rgb_template.c

index b1178b86280405811b3584e643228a4a1772767d..44c8e461e888726e8bd0a6cc4404e62285488ded 100644 (file)
@@ -360,6 +360,29 @@ void yv12toyuy2(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, u
 #endif
 }
 
+/**
+ *
+ * width should be a multiple of 16
+ */
+void yuv422ptoyuy2(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
+       unsigned int width, unsigned int height,
+       unsigned int lumStride, unsigned int chromStride, unsigned int dstStride)
+{
+#ifdef CAN_COMPILE_X86_ASM
+       // ordered per speed fasterst first
+       if(gCpuCaps.hasMMX2)
+               yuv422ptoyuy2_MMX2(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride);
+       else if(gCpuCaps.has3DNow)
+               yuv422ptoyuy2_3DNow(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride);
+       else if(gCpuCaps.hasMMX)
+               yuv422ptoyuy2_MMX(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride);
+       else
+               yuv422ptoyuy2_C(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride);
+#else
+               yuv422ptoyuy2_C(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride);
+#endif
+}
+
 /**
  *
  * height should be a multiple of 2 and width should be a multiple of 16 (if this is a
index 244ed1ed46ceecfff04e24be1a7dfa61d8fa6826..fb4f04590de022a48194ad76a596d91b0a321963 100644 (file)
@@ -28,6 +28,9 @@ extern void palette8torgb24(const uint8_t *src, uint8_t *dst, unsigned num_pixel
 extern void yv12toyuy2(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
        unsigned int width, unsigned int height,
        unsigned int lumStride, unsigned int chromStride, unsigned int dstStride);
+extern void yuv422ptoyuy2(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
+       unsigned int width, unsigned int height,
+       unsigned int lumStride, unsigned int chromStride, unsigned int dstStride);
 extern void yuy2toyv12(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
        unsigned int width, unsigned int height,
        unsigned int lumStride, unsigned int chromStride, unsigned int srcStride);
index 87493ebc1c2f89af31ada1c6ca74a525e9f5f0d4..5c3a4e88d9cc3eab10a0ac34063dd19c4c2b4bed 100644 (file)
@@ -638,14 +638,9 @@ static inline void RENAME(rgb24tobgr24)(const uint8_t *src, uint8_t *dst, unsign
        }
 }
 
-/**
- *
- * height should be a multiple of 2 and width should be a multiple of 16 (if this is a
- * problem for anyone then tell me, and ill fix it)
- */
-static inline void RENAME(yv12toyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
+static inline void RENAME(yuvPlanartoyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
        unsigned int width, unsigned int height,
-       unsigned int lumStride, unsigned int chromStride, unsigned int dstStride)
+       unsigned int lumStride, unsigned int chromStride, unsigned int dstStride, int vertLumPerChroma)
 {
        int y;
        const int chromWidth= width>>1;
@@ -696,7 +691,7 @@ static inline void RENAME(yv12toyuy2)(const uint8_t *ysrc, const uint8_t *usrc,
                        dst[4*i+3] = vsrc[i];
                }
 #endif
-               if(y&1)
+               if((y&(vertLumPerChroma-1))==(vertLumPerChroma-1) )
                {
                        usrc += chromStride;
                        vsrc += chromStride;
@@ -711,6 +706,30 @@ asm(    EMMS" \n\t"
 #endif
 }
 
+/**
+ *
+ * height should be a multiple of 2 and width should be a multiple of 16 (if this is a
+ * problem for anyone then tell me, and ill fix it)
+ */
+static inline void RENAME(yv12toyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
+       unsigned int width, unsigned int height,
+       unsigned int lumStride, unsigned int chromStride, unsigned int dstStride)
+{
+       //FIXME interpolate chroma
+       RENAME(yuvPlanartoyuy2)(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride, 2);
+}
+
+/**
+ *
+ * width should be a multiple of 16
+ */
+static inline void RENAME(yuv422ptoyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
+       unsigned int width, unsigned int height,
+       unsigned int lumStride, unsigned int chromStride, unsigned int dstStride)
+{
+       RENAME(yuvPlanartoyuy2)(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride, 1);
+}
+
 /**
  *
  * height should be a multiple of 2 and width should be a multiple of 16 (if this is a