diff options
author | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2005-05-28 02:35:57 +0000 |
---|---|---|
committer | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2005-05-28 02:35:57 +0000 |
commit | b53e53c961488910454ab1d3d556bcec86f385b4 (patch) | |
tree | 6fefd201550ebf74ee2652730d8e1f842ab9a1b5 /src/post/deinterlace/plugins/kdetv_tomsmocomp.c | |
parent | 2730c1dac5aa1f8041de05ca8cd4839e1ce36f6e (diff) | |
download | xine-lib-b53e53c961488910454ab1d3d556bcec86f385b4.tar.gz xine-lib-b53e53c961488910454ab1d3d556bcec86f385b4.tar.bz2 |
finally: tomsmocomp deinterlacing from dscaler
CVS patchset: 7571
CVS date: 2005/05/28 02:35:57
Diffstat (limited to 'src/post/deinterlace/plugins/kdetv_tomsmocomp.c')
-rw-r--r-- | src/post/deinterlace/plugins/kdetv_tomsmocomp.c | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/src/post/deinterlace/plugins/kdetv_tomsmocomp.c b/src/post/deinterlace/plugins/kdetv_tomsmocomp.c new file mode 100644 index 000000000..d29a4ec34 --- /dev/null +++ b/src/post/deinterlace/plugins/kdetv_tomsmocomp.c @@ -0,0 +1,150 @@ +/** + * Copyright (C) 2004 Billy Biggs <vektor@dumbterm.net> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#if HAVE_INTTYPES_H +#include <inttypes.h> +#else +#include <stdint.h> +#endif + +#include "attributes.h" +#include "xineutils.h" +#include "deinterlace.h" +#include "speedtools.h" +#include "speedy.h" + +#if defined (ARCH_X86) || defined (ARCH_X86_64) + +static int Fieldcopy(void *dest, const void *src, size_t count, + int rows, int dst_pitch, int src_pitch) +{ + unsigned char* pDest = (unsigned char*) dest; + unsigned char* pSrc = (unsigned char*) src; + int i; + + for (i=0; i < rows; i++) { + xine_fast_memcpy(pDest, pSrc, count); + pSrc += src_pitch; + pDest += dst_pitch; + } + return 0; +} + + +#include "tomsmocomp/tomsmocompmacros.h" +#include "x86-64_macros.inc" + +#define SearchEffortDefault 5 +#define UseStrangeBobDefault 0 + +static long SearchEffort=SearchEffortDefault; +static int UseStrangeBob=UseStrangeBobDefault; + + +#define IS_MMX +#define SSE_TYPE MMX +#define FUNCT_NAME tomsmocomp_filter_mmx +#include "tomsmocomp/TomsMoCompAll.inc" +#undef IS_MMX +#undef SSE_TYPE +#undef FUNCT_NAME + +#define IS_3DNOW +#define SSE_TYPE 3DNOW +#define FUNCT_NAME tomsmocomp_filter_3dnow +#include "tomsmocomp/TomsMoCompAll.inc" +#undef IS_3DNOW +#undef SSE_TYPE +#undef FUNCT_NAME + +#define IS_SSE +#define SSE_TYPE SSE +#define FUNCT_NAME tomsmocomp_filter_sse +#include "tomsmocomp/TomsMoCompAll.inc" +#undef IS_SSE +#undef SSE_TYPE +#undef FUNCT_NAME + +#endif + +static void deinterlace_frame_di_tomsmocomp( uint8_t *output, int outstride, + deinterlace_frame_data_t *data, + int bottom_field, int second_field, + int width, int height ) +{ +#if defined (ARCH_X86) || defined (ARCH_X86_64) + + if( xine_mm_accel() & MM_ACCEL_X86_MMXEXT ) { + tomsmocomp_filter_sse( output, outstride, data, + bottom_field, second_field, + width, height ); + } else if( xine_mm_accel() & MM_ACCEL_X86_3DNOW ) { + tomsmocomp_filter_3dnow( output, outstride, data, + bottom_field, second_field, + width, height ); + } else { + tomsmocomp_filter_mmx( output, outstride, data, + bottom_field, second_field, + width, height ); + } + +#endif +} + +static deinterlace_method_t tomsmocompmethod = +{ + "Tom's Motion Compensated (DScaler)", + "TomsMoComp", + /* + "Motion Adaptive: Motion Search", + "AdaptiveSearch", + */ + 4, + MM_ACCEL_X86_MMX, + 0, + 0, + 0, + 0, + deinterlace_frame_di_tomsmocomp, + 0, + { "Uses heuristics to detect motion in the input", + "frames and reconstruct image detail where", + "possible. Use this for high quality output", + "even on monitors set to an arbitrary refresh", + "rate.", + "", + "Motion search mode finds and follows motion", + "vectors for accurate interpolation. This is", + "the TomsMoComp deinterlacer from DScaler.", + "" } +}; + +deinterlace_method_t *dscaler_tomsmocomp_get_method( void ) +{ + return &tomsmocompmethod; +} + |