diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2008-06-20 14:48:40 +0000 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-05-13 10:33:56 +0200 |
commit | 6cc147c5d937f83b9aa9c26c7a297ae73fa5253c (patch) | |
tree | 6f7c56328b957951cb11ab4058b4fe9fe497ef18 | |
parent | e094cde977ea5853e5f6129c5924b6491e98212d (diff) |
[MOVED FROM BAD 07/56] 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-- | gst/deinterlace2/tvtime/vfir.c | 41 |
1 files changed, 26 insertions, 15 deletions
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, |