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.
This commit is contained in:
Sebastian Dröge 2008-06-20 14:48:40 +00:00
parent 0c293c5824
commit 25442736e5
2 changed files with 33 additions and 15 deletions

View file

@ -1,3 +1,10 @@
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:

View file

@ -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,