summaryrefslogtreecommitdiff
path: root/src/post/deinterlace/plugins/kdetv_tomsmocomp.c
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2005-05-28 02:35:57 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2005-05-28 02:35:57 +0000
commitb53e53c961488910454ab1d3d556bcec86f385b4 (patch)
tree6fefd201550ebf74ee2652730d8e1f842ab9a1b5 /src/post/deinterlace/plugins/kdetv_tomsmocomp.c
parent2730c1dac5aa1f8041de05ca8cd4839e1ce36f6e (diff)
downloadxine-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.c150
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;
+}
+