summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog23
-rw-r--r--configure.ac6
-rw-r--r--gst/deinterlace2/Makefile.am9
-rw-r--r--gst/deinterlace2/gstdeinterlace2.c12
-rw-r--r--gst/deinterlace2/gstdeinterlace2.h11
-rw-r--r--gst/deinterlace2/tvtime/greedy.c6
-rw-r--r--gst/deinterlace2/tvtime/greedyh.c6
-rw-r--r--gst/deinterlace2/tvtime/vfir.c6
8 files changed, 54 insertions, 25 deletions
diff --git a/ChangeLog b/ChangeLog
index 4d59b9a6..b380c64a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,26 @@
+2008-07-18 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * gst/deinterlace2/Makefile.am:
+ * gst/deinterlace2/gstdeinterlace2.c:
+ (gst_deinterlace2_methods_get_type), (gst_deinterlace2_set_method),
+ (gst_deinterlace2_class_init), (gst_deinterlace2_init):
+ * gst/deinterlace2/gstdeinterlace2.h:
+ * gst/deinterlace2/tvtime/greedy.c:
+ (gst_deinterlace_method_greedy_l_class_init):
+ * gst/deinterlace2/tvtime/greedyh.c:
+ (gst_deinterlace_method_greedy_h_class_init):
+ * gst/deinterlace2/tvtime/vfir.c:
+ (gst_deinterlace_method_vfir_class_init):
+ Disable the tomsmocomp algorithm for this release as it's buggy
+ and has no C implementation yet.
+
+ Build the deinterlace2 plugin on all architectures but still mark it
+ as experimental.
+
+ Build the x86 inline assembly only if GCC inline assembly is supported
+ and only on x86 or amd64. Fixes bug #543286.
+
2008-07-16 Jan Schmidt <Jan.Schmidt@sun.com>
* gst/real/gstrealvideodec.c: (open_library):
diff --git a/configure.ac b/configure.ac
index 70ebaca5..7aea13f0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -146,9 +146,6 @@ AS_GCC_INLINE_ASSEMBLY([HAVE_GCC_ASM=yes], [HAVE_GCC_ASM=no])
if test x$HAVE_GCC_ASM = xyes ; then
AC_DEFINE(HAVE_GCC_ASM, 1,
[Define if compiler supports gcc inline assembly])
-else
- AC_MSG_WARN([Not building deinterlace2 plugin, needs GCC inline assembly for now])
- AG_GST_DISABLE_PLUGIN(deinterlace2)
fi
AM_CONDITIONAL(HAVE_GCC_ASM, test "x$HAVE_GCC_ASM" = "xyes")
@@ -287,9 +284,6 @@ dnl real plugin only works on i386 and x86_64 for the time being.
if test "x$HAVE_CPU_I386" != "xyes" && test "x$HAVE_CPU_X86_64" != "xyes"; then
AC_MSG_WARN([Not building real plugin, only works on 32bit and 64bit x86 platforms])
AG_GST_DISABLE_PLUGIN(real)
-
- AC_MSG_WARN([Not building deinterlace2 plugin, only works on 32bit and 64bit x86 platforms for now])
- AG_GST_DISABLE_PLUGIN(deinterlace2)
fi
dnl disable experimental plug-ins
diff --git a/gst/deinterlace2/Makefile.am b/gst/deinterlace2/Makefile.am
index 26952e2e..fbddf189 100644
--- a/gst/deinterlace2/Makefile.am
+++ b/gst/deinterlace2/Makefile.am
@@ -4,15 +4,18 @@ libgstdeinterlace2_la_SOURCES = \
gstdeinterlace2.c \
tvtime/greedy.c \
tvtime/greedyh.c \
- tvtime/vfir.c \
- tvtime/tomsmocomp.c
+ tvtime/vfir.c
+
+# tvtime/tomsmocomp.c
libgstdeinterlace2_la_CFLAGS = $(GST_CFLAGS) \
- $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(LIBOIL_CFLAGS) -DHAVE_MMX -DHAVE_SSE
+ $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(LIBOIL_CFLAGS)
libgstdeinterlace2_la_LIBADD = $(GST_LIBS) \
$(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_MAJORMINOR) $(GST_BASE_LIBS) $(LIBOIL_LIBS)
libgstdeinterlace2_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+EXTRA_DIST = tvtime/tomsmocomp.c
+
noinst_HEADERS = \
gstdeinterlace2.h \
tvtime/mmx.h \
diff --git a/gst/deinterlace2/gstdeinterlace2.c b/gst/deinterlace2/gstdeinterlace2.c
index 14fea794..54cde5ff 100644
--- a/gst/deinterlace2/gstdeinterlace2.c
+++ b/gst/deinterlace2/gstdeinterlace2.c
@@ -23,10 +23,11 @@
#include "config.h"
#endif
-#include "gstdeinterlace2.h"
#include <gst/gst.h>
#include <gst/video/video.h>
+#include <liboil/liboil.h>
+#include "gstdeinterlace2.h"
#include "tvtime/plugins.h"
#include <string.h>
@@ -95,7 +96,9 @@ gst_deinterlace2_methods_get_type (void)
static GType deinterlace2_methods_type = 0;
static const GEnumValue methods_types[] = {
+#if 0
{GST_DEINTERLACE2_TOMSMOCOMP, "Toms Motion Compensation", "tomsmocomp"},
+#endif
{GST_DEINTERLACE2_GREEDY_H, "Greedy High Motion", "greedyh"},
{GST_DEINTERLACE2_GREEDY_L, "Greedy Low Motion", "greedyl"},
{GST_DEINTERLACE2_VFIR, "Vertical Blur", "vfir"},
@@ -212,9 +215,11 @@ gst_deinterlace2_set_method (GstDeinterlace2 * self,
}
switch (method) {
+#if 0
case GST_DEINTERLACE2_TOMSMOCOMP:
self->method = g_object_new (GST_TYPE_DEINTERLACE_TOMSMOCOMP, NULL);
break;
+#endif
case GST_DEINTERLACE2_GREEDY_H:
self->method = g_object_new (GST_TYPE_DEINTERLACE_GREEDY_H, NULL);
break;
@@ -270,8 +275,7 @@ gst_deinterlace2_class_init (GstDeinterlace2Class * klass)
"Method",
"Deinterlace Method",
GST_TYPE_DEINTERLACE2_METHODS,
- GST_DEINTERLACE2_TOMSMOCOMP,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ GST_DEINTERLACE2_GREEDY_H, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
);
g_object_class_install_property (gobject_class, ARG_FIELDS,
@@ -351,7 +355,7 @@ gst_deinterlace2_init (GstDeinterlace2 * self, GstDeinterlace2Class * klass)
gst_element_no_more_pads (GST_ELEMENT (self));
- gst_deinterlace2_set_method (self, GST_DEINTERLACE2_TOMSMOCOMP);
+ gst_deinterlace2_set_method (self, GST_DEINTERLACE2_GREEDY_H);
self->field_layout = GST_DEINTERLACE2_LAYOUT_AUTO;
self->fields = GST_DEINTERLACE2_ALL;
diff --git a/gst/deinterlace2/gstdeinterlace2.h b/gst/deinterlace2/gstdeinterlace2.h
index 091602a5..ee9a2018 100644
--- a/gst/deinterlace2/gstdeinterlace2.h
+++ b/gst/deinterlace2/gstdeinterlace2.h
@@ -22,12 +22,17 @@
#ifndef __GST_DEINTERLACE_2_H__
#define __GST_DEINTERLACE_2_H__
+#include <gst/gst.h>
+#include <gst/base/gstbasetransform.h>
#include <liboil/liboil.h>
-#include <liboil/liboilfunction.h>
#include <liboil/liboilcpu.h>
+#include <liboil/liboilfunction.h>
-#include <gst/gst.h>
-#include <gst/base/gstbasetransform.h>
+#ifdef HAVE_GCC_ASM
+#if defined(HAVE_CPU_I386) || defined(HAVE_CPU_X86_64)
+#define BUILD_X86_ASM
+#endif
+#endif
G_BEGIN_DECLS
diff --git a/gst/deinterlace2/tvtime/greedy.c b/gst/deinterlace2/tvtime/greedy.c
index 9e398e75..e4324657 100644
--- a/gst/deinterlace2/tvtime/greedy.c
+++ b/gst/deinterlace2/tvtime/greedy.c
@@ -121,7 +121,7 @@ deinterlace_greedy_packed422_scanline_c (GstDeinterlaceMethodGreedyL * self,
}
}
-#ifdef HAVE_CPU_I386
+#ifdef BUILD_X86_ASM
#include "mmx.h"
static void
deinterlace_greedy_packed422_scanline_mmx (GstDeinterlaceMethodGreedyL * self,
@@ -449,7 +449,7 @@ gst_deinterlace_method_greedy_l_class_init (GstDeinterlaceMethodGreedyLClass *
{
GstDeinterlaceMethodClass *dim_class = (GstDeinterlaceMethodClass *) klass;
GObjectClass *gobject_class = (GObjectClass *) klass;
-#ifdef HAVE_CPU_I386
+#ifdef BUILD_X86_ASM
guint cpu_flags = oil_cpu_get_flags ();
#endif
@@ -468,7 +468,7 @@ gst_deinterlace_method_greedy_l_class_init (GstDeinterlaceMethodGreedyLClass *
dim_class->nick = "greedyl";
dim_class->latency = 1;
-#ifdef HAVE_CPU_I386
+#ifdef BUILD_X86_ASM
if (cpu_flags & OIL_IMPL_FLAG_MMXEXT) {
klass->scanline = deinterlace_greedy_packed422_scanline_mmxext;
} else if (cpu_flags & OIL_IMPL_FLAG_MMX) {
diff --git a/gst/deinterlace2/tvtime/greedyh.c b/gst/deinterlace2/tvtime/greedyh.c
index 037c4dfc..73b572fa 100644
--- a/gst/deinterlace2/tvtime/greedyh.c
+++ b/gst/deinterlace2/tvtime/greedyh.c
@@ -205,7 +205,7 @@ greedyDScaler_C (GstDeinterlaceMethodGreedyH * self, uint8_t * L1, uint8_t * L2,
}
}
-#ifdef HAVE_CPU_I386
+#ifdef BUILD_X86_ASM
#define IS_MMXEXT
#define SIMD_TYPE MMXEXT
@@ -363,7 +363,7 @@ gst_deinterlace_method_greedy_h_class_init (GstDeinterlaceMethodGreedyHClass *
{
GstDeinterlaceMethodClass *dim_class = (GstDeinterlaceMethodClass *) klass;
GObjectClass *gobject_class = (GObjectClass *) klass;
-#ifdef HAVE_CPU_I386
+#ifdef BUILD_X86_ASM
guint cpu_flags = oil_cpu_get_flags ();
#endif
@@ -396,7 +396,7 @@ gst_deinterlace_method_greedy_h_class_init (GstDeinterlaceMethodGreedyHClass *
dim_class->nick = "greedyh";
dim_class->latency = 1;
-#ifdef HAVE_CPU_I386
+#ifdef BUILD_X86_ASM
if (cpu_flags & OIL_IMPL_FLAG_MMXEXT) {
klass->scanline = greedyDScaler_MMXEXT;
} else if (cpu_flags & OIL_IMPL_FLAG_3DNOW) {
diff --git a/gst/deinterlace2/tvtime/vfir.c b/gst/deinterlace2/tvtime/vfir.c
index 0f46e6f4..85ed1555 100644
--- a/gst/deinterlace2/tvtime/vfir.c
+++ b/gst/deinterlace2/tvtime/vfir.c
@@ -90,7 +90,7 @@ deinterlace_line_c (uint8_t * dst, uint8_t * lum_m4,
}
}
-#ifdef HAVE_CPU_I386
+#ifdef BUILD_X86_ASM
#include "mmx.h"
static void
deinterlace_line_mmx (uint8_t * dst, uint8_t * lum_m4,
@@ -207,7 +207,7 @@ static void
gst_deinterlace_method_vfir_class_init (GstDeinterlaceMethodVFIRClass * klass)
{
GstDeinterlaceMethodClass *dim_class = (GstDeinterlaceMethodClass *) klass;
-#ifdef HAVE_CPU_I386
+#ifdef BUILD_X86_ASM
guint cpu_flags = oil_cpu_get_flags ();
#endif
@@ -217,7 +217,7 @@ gst_deinterlace_method_vfir_class_init (GstDeinterlaceMethodVFIRClass * klass)
dim_class->nick = "vfir";
dim_class->latency = 0;
-#ifdef HAVE_CPU_I386
+#ifdef BUILD_X86_ASM
if (cpu_flags & OIL_IMPL_FLAG_MMX) {
klass->scanline = deinterlace_line_mmx;
} else {