diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2008-06-20 14:48:40 +0000 |
---|---|---|
committer | Sebastian Dröge <slomo@circular-chaos.org> | 2008-06-20 14:48:40 +0000 |
commit | 25442736e52662be97d93cbde71a713f6a3b8a60 (patch) | |
tree | df18b888e7db49f566d31367ecdf96d42ad5b6bc | |
parent | 0c293c5824178509f16c55b7263b24557b5d0d7b (diff) | |
download | gst-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-- | ChangeLog | 7 | ||||
-rw-r--r-- | gst/deinterlace2/tvtime/vfir.c | 41 |
2 files changed, 33 insertions, 15 deletions
@@ -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, |