summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2008-06-20 14:48:40 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2008-06-20 14:48:40 +0000
commit25442736e52662be97d93cbde71a713f6a3b8a60 (patch)
treedf18b888e7db49f566d31367ecdf96d42ad5b6bc
parent0c293c5824178509f16c55b7263b24557b5d0d7b (diff)
downloadgst-plugins-bad-25442736e52662be97d93cbde71a713f6a3b8a60.tar.gz
gst-plugins-bad-25442736e52662be97d93cbde71a713f6a3b8a60.tar.bz2
gst-plugins-bad-25442736e52662be97d93cbde71a713f6a3b8a60.zip
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.
-rw-r--r--ChangeLog7
-rw-r--r--gst/deinterlace2/tvtime/vfir.c41
2 files changed, 33 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 3eea2871..59abd0de 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2008-06-20 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * 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.
+
+2008-06-20 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
* gst/deinterlace2/gstdeinterlace2.c:
(gst_deinterlace2_class_init), (gst_deinterlace2_init),
(gst_deinterlace2_reset_history), (gst_deinterlace2_reset),
diff --git a/gst/deinterlace2/tvtime/vfir.c b/gst/deinterlace2/tvtime/vfir.c
index e9b57b96..f32be654 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,