[gst-cvs] gst-plugins-good: [MOVED FROM BAD 07/56] gst/deinterlace2/tvtime/vfir.c: Make it possible to use the vfir method on X86 CPUs without MMXEXT too but use the MM ...

Sebastian Dröge slomo at kemper.freedesktop.org
Wed May 13 01:50:05 PDT 2009


Module: gst-plugins-good
Branch: master
Commit: 6cc147c5d937f83b9aa9c26c7a297ae73fa5253c
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=6cc147c5d937f83b9aa9c26c7a297ae73fa5253c

Author: Sebastian Dröge <slomo at circular-chaos.org>
Date:   Fri Jun 20 14:48:40 2008 +0000

[MOVED FROM BAD 07/56] gst/deinterlace2/tvtime/vfir.c: Make it possible to use the vfir method on X86 CPUs without MMXEXT too but use the MM...

Original commit message from CVS:
* gst/deinterlace2/tvtime/vfir.c: (deinterlace_line_mmxext),
(deinterlace_line_c), (deinterlace_scanline_vfir):
Make it possible to use the vfir method on X86 CPUs without MMXEXT too
but use the MMXEXT optimized code whenever possible.

---

 gst/deinterlace2/tvtime/vfir.c |   41 +++++++++++++++++++++++++--------------
 1 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/gst/deinterlace2/tvtime/vfir.c b/gst/deinterlace2/tvtime/vfir.c
index e9b57b9..f32be65 100644
--- a/gst/deinterlace2/tvtime/vfir.c
+++ b/gst/deinterlace2/tvtime/vfir.c
@@ -39,7 +39,6 @@
 # include "config.h"
 #endif
 
-#include "mmx.h"
 #include "speedy.h"
 #include "gstdeinterlace2.h"
 
@@ -50,12 +49,13 @@
  * filter taps here are: [-1 4 2 4 -1].
  */
 
+#ifdef HAVE_CPU_I386
+#include "mmx.h"
 static void
-deinterlace_line (uint8_t * dst, uint8_t * lum_m4,
+deinterlace_line_mmxext (uint8_t * dst, uint8_t * lum_m4,
     uint8_t * lum_m3, uint8_t * lum_m2,
     uint8_t * lum_m1, uint8_t * lum, int size)
 {
-#ifdef HAVE_CPU_I386
   mmx_t rounder;
 
   rounder.uw[0] = 4;
@@ -94,10 +94,17 @@ deinterlace_line (uint8_t * dst, uint8_t * lum_m4,
     dst += 4;
   }
   emms ();
-#else
-    /**
-     * C implementation.
-     */
+}
+#endif
+
+/**
+  * C implementation.
+  */
+static void
+deinterlace_line_c (uint8_t * dst, uint8_t * lum_m4,
+    uint8_t * lum_m3, uint8_t * lum_m2,
+    uint8_t * lum_m1, uint8_t * lum, int size)
+{
   int sum;
 
   for (; size > 0; size--) {
@@ -114,10 +121,8 @@ deinterlace_line (uint8_t * dst, uint8_t * lum_m4,
     lum++;
     dst++;
   }
-#endif
 }
 
-
 /*
  * The commented-out method below that uses the bottom_field member is more
  * like the filter as specified in the MPEG2 spec, but it doesn't seem to
@@ -128,8 +133,18 @@ static void
 deinterlace_scanline_vfir (GstDeinterlace2 * object,
     deinterlace_scanline_data_t * data, uint8_t * output)
 {
-  deinterlace_line (output, data->tt1, data->t0, data->m1, data->b0, data->bb1,
-      object->frame_width * 2);
+#ifdef HAVE_CPU_I386
+  if (object->cpu_feature_flags & OIL_IMPL_FLAG_MMXEXT) {
+    deinterlace_line_mmxext (output, data->tt1, data->t0, data->m1, data->b0,
+        data->bb1, object->frame_width * 2);
+  } else {
+    deinterlace_line_c (output, data->tt1, data->t0, data->m1, data->b0,
+        data->bb1, object->frame_width * 2);
+  }
+#else
+  deinterlace_line_c (output, data->tt1, data->t0, data->m1, data->b0,
+      data->bb1, object->frame_width * 2);
+#endif
   // blit_packed422_scanline( output, data->m1, width );
 }
 
@@ -153,11 +168,7 @@ static deinterlace_method_t vfirmethod = {
   "Blur: Vertical",
   "BlurVertical",
   2,
-#ifdef HAVE_CPU_I386
-  OIL_IMPL_FLAG_MMXEXT,
-#else
   0,
-#endif
   0,
   0,
   0,





More information about the Gstreamer-commits mailing list