From 25442736e52662be97d93cbde71a713f6a3b8a60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 20 Jun 2008 14:48:40 +0000 Subject: [PATCH] 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. --- ChangeLog | 7 ++++++ gst/deinterlace2/tvtime/vfir.c | 41 +++++++++++++++++++++------------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3eea2871e0..59abd0de9c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-06-20 Sebastian Dröge + + * 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 * gst/deinterlace2/gstdeinterlace2.c: diff --git a/gst/deinterlace2/tvtime/vfir.c b/gst/deinterlace2/tvtime/vfir.c index e9b57b96f3..f32be65475 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,