summaryrefslogtreecommitdiff
path: root/src/post/deinterlace/plugins/kdetv_greedyh.c
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2005-05-27 15:22:52 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2005-05-27 15:22:52 +0000
commitce3c57412188a0edc4d6bd819960bf72bf097e5d (patch)
treefbcc0feca9d6ab0fa70bba503801c6003d6d3449 /src/post/deinterlace/plugins/kdetv_greedyh.c
parentf1df8986d6b78198afc52808e9ffa78524ef5978 (diff)
downloadxine-lib-ce3c57412188a0edc4d6bd819960bf72bf097e5d.tar.gz
xine-lib-ce3c57412188a0edc4d6bd819960bf72bf097e5d.tar.bz2
material for xine 1.1: new quality deinterlacer GreedyH from dscaler.
(actually ported dscaler->kdetv->tvtime->xine) obs: i'm not yet considering this feature for 1.0.2 since every time i add new asm code the build gets broken for some specific gcc version or something... CVS patchset: 7563 CVS date: 2005/05/27 15:22:52
Diffstat (limited to 'src/post/deinterlace/plugins/kdetv_greedyh.c')
-rw-r--r--src/post/deinterlace/plugins/kdetv_greedyh.c129
1 files changed, 129 insertions, 0 deletions
diff --git a/src/post/deinterlace/plugins/kdetv_greedyh.c b/src/post/deinterlace/plugins/kdetv_greedyh.c
new file mode 100644
index 000000000..04fbbb82e
--- /dev/null
+++ b/src/post/deinterlace/plugins/kdetv_greedyh.c
@@ -0,0 +1,129 @@
+/**
+ * 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"
+
+#include "greedyhmacros.h"
+
+#define MAXCOMB_DEFAULT 5
+#define MOTIONTHRESHOLD_DEFAULT 25
+#define MOTIONSENSE_DEFAULT 30
+
+static unsigned int GreedyMaxComb = MAXCOMB_DEFAULT;
+static unsigned int GreedyMotionThreshold = MOTIONTHRESHOLD_DEFAULT;
+static unsigned int GreedyMotionSense = MOTIONSENSE_DEFAULT;
+
+
+#define IS_SSE
+#define SSE_TYPE SSE
+#define FUNCT_NAME greedyh_filter_sse
+#include "greedyh.asm"
+#undef SSE_TYPE
+#undef IS_SSE
+#undef FUNCT_NAME
+
+#define IS_3DNOW
+#define FUNCT_NAME greedyh_filter_3dnow
+#define SSE_TYPE 3DNOW
+#include "greedyh.asm"
+#undef SSE_TYPE
+#undef IS_3DNOW
+#undef FUNCT_NAME
+
+#define IS_MMX
+#define SSE_TYPE MMX
+#define FUNCT_NAME greedyh_filter_mmx
+#include "greedyh.asm"
+#undef SSE_TYPE
+#undef IS_MMX
+#undef FUNCT_NAME
+
+
+static void deinterlace_frame_di_greedyh( uint8_t *output, int outstride,
+ deinterlace_frame_data_t *data,
+ int bottom_field, int second_field,
+ int width, int height )
+{
+ if( xine_mm_accel() & MM_ACCEL_X86_MMXEXT ) {
+ greedyh_filter_sse( output, outstride, data,
+ bottom_field, second_field,
+ width, height );
+ } else if( xine_mm_accel() & MM_ACCEL_X86_3DNOW ) {
+ greedyh_filter_3dnow( output, outstride, data,
+ bottom_field, second_field,
+ width, height );
+ } else {
+ greedyh_filter_mmx( output, outstride, data,
+ bottom_field, second_field,
+ width, height );
+ }
+}
+
+
+static deinterlace_method_t greedymethod =
+{
+ "Greedy - High Motion (DScaler)",
+ "GreedyH",
+ /*
+ "Motion Adaptive: Advanced Detection",
+ "AdaptiveAdvanced",
+ */
+ 4,
+ MM_ACCEL_X86_MMX,
+ 0,
+ 0,
+ 0,
+ 0,
+ deinterlace_frame_di_greedyh,
+ 1,
+ { "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.",
+ "",
+ "Advanced detection uses linear interpolation",
+ "where motion is detected, using a four-field",
+ "buffer. This is the Greedy: High Motion",
+ "deinterlacer from DScaler." }
+};
+
+deinterlace_method_t *dscaler_greedyh_get_method( void )
+{
+ return &greedymethod;
+}
+