From fdd3d27274cfb5f0089310e762b42c725cefe910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 18 Jul 2008 08:34:06 +0000 Subject: [PATCH] [MOVED FROM BAD 31/56] Disable the tomsmocomp algorithm for this release as it's buggy and has no C implementation yet. Original commit message from CVS: * 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. --- gst/deinterlace2/Makefile.am | 9 ++++++--- gst/deinterlace2/gstdeinterlace2.c | 12 ++++++++---- gst/deinterlace2/gstdeinterlace2.h | 13 +++++++++---- gst/deinterlace2/tvtime/greedy.c | 6 +++--- gst/deinterlace2/tvtime/greedyh.c | 6 +++--- gst/deinterlace2/tvtime/vfir.c | 6 +++--- 6 files changed, 32 insertions(+), 20 deletions(-) diff --git a/gst/deinterlace2/Makefile.am b/gst/deinterlace2/Makefile.am index 26952e2edc..fbddf189ff 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 14fea794ca..54cde5ffd2 100644 --- a/gst/deinterlace2/gstdeinterlace2.c +++ b/gst/deinterlace2/gstdeinterlace2.c @@ -23,10 +23,11 @@ #include "config.h" #endif -#include "gstdeinterlace2.h" #include #include +#include +#include "gstdeinterlace2.h" #include "tvtime/plugins.h" #include @@ -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 091602a570..ee9a201894 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 -#include -#include - #include #include +#include +#include +#include + +#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 9e398e75c2..e432465710 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 037c4dfc8f..73b572fa08 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 0f46e6f492..85ed155565 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 {