aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvektor <devnull@localhost>2005-02-08 05:00:16 (GMT)
committervektor <devnull@localhost>2005-02-08 05:00:16 (GMT)
commit4adfe7d4cdaad90b069240bdb5e77810ae82cfc5 (patch)
treec74d683df2ae9a1b21e20a34545cf4cd7378c323
parent8236e8b10703d6389d7262cc0ebc6929260dc57c (diff)
* tvtime/src/speedy.h: Remove functions now implemented in copyfunctions.
* tvtime/src/speedy.c: Remove functions now implemented in copyfunctions. * tvtime/src/Makefile.am: Build copyfunctions. * tvtime/src/tvtime.c: Use copyfunctions. * tvtime/plugins/*.c: Use copyfunctions and not speedy.
-rw-r--r--plugins/greedy.c2
-rw-r--r--plugins/kdetv_greedyh.c4
-rw-r--r--plugins/kdetv_tomsmocomp.c4
-rw-r--r--plugins/linear.c2
-rw-r--r--plugins/linearblend.c2
-rw-r--r--plugins/vfir.c2
-rw-r--r--plugins/weave.c2
-rw-r--r--plugins/weavebff.c2
-rw-r--r--plugins/weavetff.c2
-rw-r--r--src/Makefile.am3
-rw-r--r--src/speedy.c288
-rw-r--r--src/speedy.h17
-rw-r--r--src/tvtime.c1
13 files changed, 17 insertions, 314 deletions
diff --git a/plugins/greedy.c b/plugins/greedy.c
index f9266f8..942a9fd 100644
--- a/plugins/greedy.c
+++ b/plugins/greedy.c
@@ -35,7 +35,7 @@
#include "mm_accel.h"
#include "deinterlace.h"
#include "speedtools.h"
-#include "speedy.h"
+#include "copyfunctions.h"
// This is a simple lightweight DeInterlace method that uses little CPU time
// but gives very good results for low or intermedite motion.
diff --git a/plugins/kdetv_greedyh.c b/plugins/kdetv_greedyh.c
index 6c03332..3397b74 100644
--- a/plugins/kdetv_greedyh.c
+++ b/plugins/kdetv_greedyh.c
@@ -23,7 +23,7 @@
#include "dscalerapi.h"
#include "deinterlace.h"
-#include "speedy.h"
+#include "copyfunctions.h"
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -48,7 +48,7 @@ static void deinterlace_frame_di_greedyh( uint8_t *output, int outstride,
Info.InputPitch = stride*2;
Info.LineLength = stride;
Info.OverlayPitch = outstride;
- Info.pMemcpy = speedy_memcpy;
+ Info.pMemcpy = fast_memcpy;
if( bottom_field ) {
Picture[ 0 ].pData = data->f0 + stride;
diff --git a/plugins/kdetv_tomsmocomp.c b/plugins/kdetv_tomsmocomp.c
index 078280b..f852f29 100644
--- a/plugins/kdetv_tomsmocomp.c
+++ b/plugins/kdetv_tomsmocomp.c
@@ -23,7 +23,7 @@
#include "dscalerapi.h"
#include "deinterlace.h"
-#include "speedy.h"
+#include "copyfunctions.h"
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -47,7 +47,7 @@ static void deinterlace_frame_di_tomsmocomp( uint8_t *output, int outstride,
Info.InputPitch = stride*2;
Info.LineLength = stride;
Info.OverlayPitch = outstride;
- Info.pMemcpy = speedy_memcpy;
+ Info.pMemcpy = fast_memcpy;
if( bottom_field ) {
Picture[ 0 ].pData = data->f0 + stride;
diff --git a/plugins/linear.c b/plugins/linear.c
index 1bccb09..a789e3a 100644
--- a/plugins/linear.c
+++ b/plugins/linear.c
@@ -22,7 +22,7 @@
#else
# include <stdint.h>
#endif
-#include "speedy.h"
+#include "copyfunctions.h"
#include "deinterlace.h"
static void deinterlace_scanline_linear( uint8_t *output,
diff --git a/plugins/linearblend.c b/plugins/linearblend.c
index ec83f5c..c7045d9 100644
--- a/plugins/linearblend.c
+++ b/plugins/linearblend.c
@@ -36,7 +36,7 @@
#include "mmx.h"
#include "mm_accel.h"
#include "speedtools.h"
-#include "speedy.h"
+#include "copyfunctions.h"
#include "deinterlace.h"
static void deinterlace_scanline_linear_blend( uint8_t *output,
diff --git a/plugins/vfir.c b/plugins/vfir.c
index 6f5496a..c463d40 100644
--- a/plugins/vfir.c
+++ b/plugins/vfir.c
@@ -35,7 +35,7 @@
#include "attributes.h"
#include "mmx.h"
#include "mm_accel.h"
-#include "speedy.h"
+#include "copyfunctions.h"
#include "deinterlace.h"
/**
diff --git a/plugins/weave.c b/plugins/weave.c
index f5fb355..1b45d91 100644
--- a/plugins/weave.c
+++ b/plugins/weave.c
@@ -24,7 +24,7 @@
#else
# include <stdint.h>
#endif
-#include "speedy.h"
+#include "copyfunctions.h"
#include "deinterlace.h"
static void deinterlace_scanline_weave( uint8_t *output,
diff --git a/plugins/weavebff.c b/plugins/weavebff.c
index 4cec612..f31870a 100644
--- a/plugins/weavebff.c
+++ b/plugins/weavebff.c
@@ -23,7 +23,7 @@
#else
# include <stdint.h>
#endif
-#include "speedy.h"
+#include "copyfunctions.h"
#include "deinterlace.h"
static void deinterlace_scanline_weave( uint8_t *output,
diff --git a/plugins/weavetff.c b/plugins/weavetff.c
index e9c14a4..59fec3f 100644
--- a/plugins/weavetff.c
+++ b/plugins/weavetff.c
@@ -23,7 +23,7 @@
#else
# include <stdint.h>
#endif
-#include "speedy.h"
+#include "copyfunctions.h"
#include "deinterlace.h"
static void deinterlace_scanline_weave( uint8_t *output,
diff --git a/src/Makefile.am b/src/Makefile.am
index d8b4252..ff1d3e7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -39,7 +39,8 @@ COMMON_SRCS = mixer.c videoinput.c rtctimer.c leetft.c osdtools.c tvtimeconf.c \
commands.c videofilter.h videofilter.c station.h station.c bands.h \
utils.h utils.c pulldown.h pulldown.c hashtable.h hashtable.c \
cpuinfo.h cpuinfo.c videodev.h videodev2.h menu.c menu.h \
- outputfilter.h outputfilter.c xmltv.h xmltv.c gettext.h tvtimeglyphs.h
+ outputfilter.h outputfilter.c xmltv.h xmltv.c gettext.h tvtimeglyphs.h \
+ copyfunctions.h copyfunctions.c
if ARCH_X86
DSCALER_SRCS = $(top_srcdir)/plugins/dscalerapi.h \
diff --git a/src/speedy.c b/src/speedy.c
index 1862cae..8c58654 100644
--- a/src/speedy.c
+++ b/src/speedy.c
@@ -80,19 +80,17 @@
#include "speedy.h"
#include "speedtools.h"
+#include "copyfunctions.h"
#include "attributes.h"
#include "mmx.h"
#include "mm_accel.h"
/* Function pointer definitions. */
-void (*interpolate_packed422_scanline)( uint8_t *output, uint8_t *top,
- uint8_t *bot, int width );
void (*blit_colour_packed422_scanline)( uint8_t *output,
int width, int y, int cb, int cr );
void (*blit_colour_packed4444_scanline)( uint8_t *output,
int width, int alpha, int luma,
int cb, int cr );
-void (*blit_packed422_scanline)( uint8_t *dest, const uint8_t *src, int width );
void (*composite_packed4444_to_packed422_scanline)( uint8_t *output, uint8_t *input,
uint8_t *foreground, int width );
void (*composite_packed4444_alpha_to_packed422_scanline)( uint8_t *output,
@@ -117,7 +115,6 @@ unsigned int (*comb_factor_packed422_scanline)( uint8_t *top, uint8_t *mid,
uint8_t *bot, int width );
void (*kill_chroma_packed422_inplace_scanline)( uint8_t *data, int width );
void (*mirror_packed422_inplace_scanline)( uint8_t *data, int width );
-void (*speedy_memcpy)( void *output, const void *input, size_t size );
void (*diff_packed422_block8x8)( pulldown_metrics_t *m, uint8_t *old,
uint8_t *new, int os, int ns );
void (*a8_subpix_blit_scanline)( uint8_t *output, uint8_t *input,
@@ -814,16 +811,6 @@ static void mirror_packed422_inplace_scanline_c( uint8_t *data, int width )
}
}
-static void interpolate_packed422_scanline_c( uint8_t *output, uint8_t *top,
- uint8_t *bot, int width )
-{
- int i;
-
- for( i = width*2; i; --i ) {
- *output++ = ((*top++) + (*bot++)) >> 1;
- }
-}
-
#ifdef ARCH_X86
static void convert_uyvy_to_yuyv_scanline_mmx( uint8_t *uyvy_buf, uint8_t *yuyv_buf, int width )
{
@@ -916,127 +903,6 @@ static void convert_uyvy_to_yuyv_scanline_c( uint8_t *uyvy_buf, uint8_t *yuyv_bu
}
}
-
-#ifdef ARCH_X86
-static void interpolate_packed422_scanline_mmx( uint8_t *output, uint8_t *top,
- uint8_t *bot, int width )
-{
- const mmx_t shiftmask = { 0xfefffefffefffeffULL }; /* To avoid shifting chroma to luma. */
- int i;
-
- for( i = width/16; i; --i ) {
- movq_m2r( *bot, mm0 );
- movq_m2r( *top, mm1 );
- movq_m2r( *(bot + 8), mm2 );
- movq_m2r( *(top + 8), mm3 );
- movq_m2r( *(bot + 16), mm4 );
- movq_m2r( *(top + 16), mm5 );
- movq_m2r( *(bot + 24), mm6 );
- movq_m2r( *(top + 24), mm7 );
- pand_m2r( shiftmask, mm0 );
- pand_m2r( shiftmask, mm1 );
- pand_m2r( shiftmask, mm2 );
- pand_m2r( shiftmask, mm3 );
- pand_m2r( shiftmask, mm4 );
- pand_m2r( shiftmask, mm5 );
- pand_m2r( shiftmask, mm6 );
- pand_m2r( shiftmask, mm7 );
- psrlw_i2r( 1, mm0 );
- psrlw_i2r( 1, mm1 );
- psrlw_i2r( 1, mm2 );
- psrlw_i2r( 1, mm3 );
- psrlw_i2r( 1, mm4 );
- psrlw_i2r( 1, mm5 );
- psrlw_i2r( 1, mm6 );
- psrlw_i2r( 1, mm7 );
- paddb_r2r( mm1, mm0 );
- paddb_r2r( mm3, mm2 );
- paddb_r2r( mm5, mm4 );
- paddb_r2r( mm7, mm6 );
- movq_r2m( mm0, *output );
- movq_r2m( mm2, *(output + 8) );
- movq_r2m( mm4, *(output + 16) );
- movq_r2m( mm6, *(output + 24) );
- output += 32;
- top += 32;
- bot += 32;
- }
- width = (width & 0xf);
-
- for( i = width/4; i; --i ) {
- movq_m2r( *bot, mm0 );
- movq_m2r( *top, mm1 );
- pand_m2r( shiftmask, mm0 );
- pand_m2r( shiftmask, mm1 );
- psrlw_i2r( 1, mm0 );
- psrlw_i2r( 1, mm1 );
- paddb_r2r( mm1, mm0 );
- movq_r2m( mm0, *output );
- output += 8;
- top += 8;
- bot += 8;
- }
- width = width & 0x7;
-
- /* Handle last few pixels. */
- for( i = width * 2; i; --i ) {
- *output++ = ((*top++) + (*bot++)) >> 1;
- }
-
- emms();
-}
-#endif
-
-#ifdef ARCH_X86
-static void interpolate_packed422_scanline_mmxext( uint8_t *output, uint8_t *top,
- uint8_t *bot, int width )
-{
- int i;
-
- for( i = width/16; i; --i ) {
- movq_m2r( *bot, mm0 );
- movq_m2r( *top, mm1 );
- movq_m2r( *(bot + 8), mm2 );
- movq_m2r( *(top + 8), mm3 );
- movq_m2r( *(bot + 16), mm4 );
- movq_m2r( *(top + 16), mm5 );
- movq_m2r( *(bot + 24), mm6 );
- movq_m2r( *(top + 24), mm7 );
- pavgb_r2r( mm1, mm0 );
- pavgb_r2r( mm3, mm2 );
- pavgb_r2r( mm5, mm4 );
- pavgb_r2r( mm7, mm6 );
- movntq_r2m( mm0, *output );
- movntq_r2m( mm2, *(output + 8) );
- movntq_r2m( mm4, *(output + 16) );
- movntq_r2m( mm6, *(output + 24) );
- output += 32;
- top += 32;
- bot += 32;
- }
- width = (width & 0xf);
-
- for( i = width/4; i; --i ) {
- movq_m2r( *bot, mm0 );
- movq_m2r( *top, mm1 );
- pavgb_r2r( mm1, mm0 );
- movntq_r2m( mm0, *output );
- output += 8;
- top += 8;
- bot += 8;
- }
- width = width & 0x7;
-
- /* Handle last few pixels. */
- for( i = width * 2; i; --i ) {
- *output++ = ((*top++) + (*bot++)) >> 1;
- }
-
- sfence();
- emms();
-}
-#endif
-
static void blit_colour_packed422_scanline_c( uint8_t *output, int width, int y, int cb, int cr )
{
#ifdef WORDS_BIGENDIAN
@@ -1220,147 +1086,6 @@ static void blit_colour_packed4444_scanline_mmxext( uint8_t *output, int width,
}
#endif
-
-/**
- * Some memcpy code inspired by the xine code which originally came
- * from mplayer.
- */
-
-/* linux kernel __memcpy (from: /include/asm/string.h) */
-#ifdef ARCH_X86
-static inline __attribute__ ((always_inline,const)) void small_memcpy( void *to, const void *from, size_t n )
-{
- int d0, d1, d2;
- __asm__ __volatile__(
- "rep ; movsl\n\t"
- "testb $2,%b4\n\t"
- "je 1f\n\t"
- "movsw\n"
- "1:\ttestb $1,%b4\n\t"
- "je 2f\n\t"
- "movsb\n"
- "2:"
- : "=&c" (d0), "=&D" (d1), "=&S" (d2)
- :"0" (n/4), "q" (n),"1" ((long) to),"2" ((long) from)
- : "memory");
-}
-#endif
-
-static void speedy_memcpy_c( void *dest, const void *src, size_t n )
-{
- if( dest != src ) {
- memcpy( dest, src, n );
- }
-}
-
-#ifdef ARCH_X86
-static void speedy_memcpy_mmx( void *d, const void *s, size_t n )
-{
- const uint8_t *src = s;
- uint8_t *dest = d;
-
- if( dest != src ) {
- while( n > 64 ) {
- movq_m2r( src[ 0 ], mm0 );
- movq_m2r( src[ 8 ], mm1 );
- movq_m2r( src[ 16 ], mm2 );
- movq_m2r( src[ 24 ], mm3 );
- movq_m2r( src[ 32 ], mm4 );
- movq_m2r( src[ 40 ], mm5 );
- movq_m2r( src[ 48 ], mm6 );
- movq_m2r( src[ 56 ], mm7 );
- movq_r2m( mm0, dest[ 0 ] );
- movq_r2m( mm1, dest[ 8 ] );
- movq_r2m( mm2, dest[ 16 ] );
- movq_r2m( mm3, dest[ 24 ] );
- movq_r2m( mm4, dest[ 32 ] );
- movq_r2m( mm5, dest[ 40 ] );
- movq_r2m( mm6, dest[ 48 ] );
- movq_r2m( mm7, dest[ 56 ] );
- dest += 64;
- src += 64;
- n -= 64;
- }
-
- while( n > 8 ) {
- movq_m2r( src[ 0 ], mm0 );
- movq_r2m( mm0, dest[ 0 ] );
- dest += 8;
- src += 8;
- n -= 8;
- }
-
- if( n ) small_memcpy( dest, src, n );
-
- emms();
- }
-}
-#endif
-
-#ifdef ARCH_X86
-static void speedy_memcpy_mmxext( void *d, const void *s, size_t n )
-{
- const uint8_t *src = s;
- uint8_t *dest = d;
-
- if( dest != src ) {
- while( n > 64 ) {
- movq_m2r( src[ 0 ], mm0 );
- movq_m2r( src[ 8 ], mm1 );
- movq_m2r( src[ 16 ], mm2 );
- movq_m2r( src[ 24 ], mm3 );
- movq_m2r( src[ 32 ], mm4 );
- movq_m2r( src[ 40 ], mm5 );
- movq_m2r( src[ 48 ], mm6 );
- movq_m2r( src[ 56 ], mm7 );
- movntq_r2m( mm0, dest[ 0 ] );
- movntq_r2m( mm1, dest[ 8 ] );
- movntq_r2m( mm2, dest[ 16 ] );
- movntq_r2m( mm3, dest[ 24 ] );
- movntq_r2m( mm4, dest[ 32 ] );
- movntq_r2m( mm5, dest[ 40 ] );
- movntq_r2m( mm6, dest[ 48 ] );
- movntq_r2m( mm7, dest[ 56 ] );
- dest += 64;
- src += 64;
- n -= 64;
- }
-
- while( n > 8 ) {
- movq_m2r( src[ 0 ], mm0 );
- movntq_r2m( mm0, dest[ 0 ] );
- dest += 8;
- src += 8;
- n -= 8;
- }
-
- if( n ) small_memcpy( dest, src, n );
-
- sfence();
- emms();
- }
-}
-#endif
-
-static void blit_packed422_scanline_c( uint8_t *dest, const uint8_t *src, int width )
-{
- speedy_memcpy_c( dest, src, width*2 );
-}
-
-#ifdef ARCH_X86
-static void blit_packed422_scanline_mmx( uint8_t *dest, const uint8_t *src, int width )
-{
- speedy_memcpy_mmx( dest, src, width*2 );
-}
-#endif
-
-#ifdef ARCH_X86
-static void blit_packed422_scanline_mmxext( uint8_t *dest, const uint8_t *src, int width )
-{
- speedy_memcpy_mmxext( dest, src, width*2 );
-}
-#endif
-
static void composite_colour4444_alpha_to_packed422_scanline_c( uint8_t *output, uint8_t *input,
int af, int y, int cb, int cr,
int width, int alpha )
@@ -2527,10 +2252,10 @@ void setup_speedy_calls( uint32_t accel, int verbose )
{
speedy_accel = accel;
- interpolate_packed422_scanline = interpolate_packed422_scanline_c;
+ setup_copyfunctions( accel );
+
blit_colour_packed422_scanline = blit_colour_packed422_scanline_c;
blit_colour_packed4444_scanline = blit_colour_packed4444_scanline_c;
- blit_packed422_scanline = blit_packed422_scanline_c;
composite_packed4444_to_packed422_scanline = composite_packed4444_to_packed422_scanline_c;
composite_packed4444_alpha_to_packed422_scanline = composite_packed4444_alpha_to_packed422_scanline_c;
composite_alphamask_to_packed4444_scanline = composite_alphamask_to_packed4444_scanline_c;
@@ -2541,7 +2266,6 @@ void setup_speedy_calls( uint32_t accel, int verbose )
diff_factor_packed422_scanline = diff_factor_packed422_scanline_c;
kill_chroma_packed422_inplace_scanline = kill_chroma_packed422_inplace_scanline_c;
mirror_packed422_inplace_scanline = mirror_packed422_inplace_scanline_c;
- speedy_memcpy = speedy_memcpy_c;
diff_packed422_block8x8 = diff_packed422_block8x8_c;
a8_subpix_blit_scanline = a8_subpix_blit_scanline_c;
quarter_blit_vertical_packed422_scanline = quarter_blit_vertical_packed422_scanline_c;
@@ -2565,10 +2289,8 @@ void setup_speedy_calls( uint32_t accel, int verbose )
if( verbose ) {
fprintf( stderr, "speedycode: Using MMXEXT optimized functions.\n" );
}
- interpolate_packed422_scanline = interpolate_packed422_scanline_mmxext;
blit_colour_packed422_scanline = blit_colour_packed422_scanline_mmxext;
blit_colour_packed4444_scanline = blit_colour_packed4444_scanline_mmxext;
- blit_packed422_scanline = blit_packed422_scanline_mmxext;
composite_packed4444_to_packed422_scanline = composite_packed4444_to_packed422_scanline_mmxext;
composite_packed4444_alpha_to_packed422_scanline = composite_packed4444_alpha_to_packed422_scanline_mmxext;
composite_alphamask_to_packed4444_scanline = composite_alphamask_to_packed4444_scanline_mmxext;
@@ -2584,15 +2306,12 @@ void setup_speedy_calls( uint32_t accel, int verbose )
vfilter_chroma_332_packed422_scanline = vfilter_chroma_332_packed422_scanline_mmx;
convert_uyvy_to_yuyv_scanline = convert_uyvy_to_yuyv_scanline_mmx;
composite_colour4444_alpha_to_packed422_scanline = composite_colour4444_alpha_to_packed422_scanline_mmxext;
- speedy_memcpy = speedy_memcpy_mmxext;
} else if( speedy_accel & MM_ACCEL_X86_MMX ) {
if( verbose ) {
fprintf( stderr, "speedycode: Using MMX optimized functions.\n" );
}
- interpolate_packed422_scanline = interpolate_packed422_scanline_mmx;
blit_colour_packed422_scanline = blit_colour_packed422_scanline_mmx;
blit_colour_packed4444_scanline = blit_colour_packed4444_scanline_mmx;
- blit_packed422_scanline = blit_packed422_scanline_mmx;
diff_factor_packed422_scanline = diff_factor_packed422_scanline_mmx;
comb_factor_packed422_scanline = comb_factor_packed422_scanline_mmx;
kill_chroma_packed422_inplace_scanline = kill_chroma_packed422_inplace_scanline_mmx;
@@ -2601,7 +2320,6 @@ void setup_speedy_calls( uint32_t accel, int verbose )
vfilter_chroma_121_packed422_scanline = vfilter_chroma_121_packed422_scanline_mmx;
vfilter_chroma_332_packed422_scanline = vfilter_chroma_332_packed422_scanline_mmx;
convert_uyvy_to_yuyv_scanline = convert_uyvy_to_yuyv_scanline_mmx;
- speedy_memcpy = speedy_memcpy_mmx;
} else {
if( verbose ) {
fprintf( stderr, "speedycode: No MMX or MMXEXT support detected, using C fallbacks.\n" );
diff --git a/src/speedy.h b/src/speedy.h
index 0a97794..b7a56e2 100644
--- a/src/speedy.h
+++ b/src/speedy.h
@@ -53,12 +53,6 @@ typedef struct pulldown_metrics_s {
} pulldown_metrics_t;
/**
- * Interpolates a packed 4:2:2 scanline using linear interpolation.
- */
-extern void (*interpolate_packed422_scanline)( uint8_t *output, uint8_t *top,
- uint8_t *bot, int width );
-
-/**
* Blits a colour to a packed 4:2:2 scanline.
*/
extern void (*blit_colour_packed422_scanline)( uint8_t *output,
@@ -73,11 +67,6 @@ extern void (*blit_colour_packed4444_scanline)( uint8_t *output,
int cb, int cr );
/**
- * Blit from and to packed 4:2:2 scanline.
- */
-extern void (*blit_packed422_scanline)( uint8_t *dest, const uint8_t *src, int width );
-
-/**
* Composites a premultiplied 4:4:4:4 pixel onto a packed 4:2:2 scanline.
*/
extern void (*composite_colour4444_alpha_to_packed422_scanline)( uint8_t *output, uint8_t *input,
@@ -183,12 +172,6 @@ extern void (*mirror_packed422_inplace_scanline)( uint8_t *data, int width );
extern void (*invert_colour_packed422_inplace_scanline)( uint8_t *data, int width );
/**
- * Fast memcpy function, used by all of the blit functions. Won't blit
- * anything if dest == src.
- */
-extern void (*speedy_memcpy)( void *output, const void *input, size_t size );
-
-/**
* Calculates the block difference metrics for dalias' pulldown
* detection algorithm.
*/
diff --git a/src/tvtime.c b/src/tvtime.c
index 249712a..299def0 100644
--- a/src/tvtime.c
+++ b/src/tvtime.c
@@ -58,6 +58,7 @@
#include "tvtimeconf.h"
#include "input.h"
#include "speedy.h"
+#include "copyfunctions.h"
#include "deinterlace.h"
#include "plugins.h"
#include "performance.h"

Privacy Policy