summaryrefslogtreecommitdiff
path: root/src/post/deinterlace/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/post/deinterlace/plugins')
-rw-r--r--src/post/deinterlace/plugins/double.c15
-rw-r--r--src/post/deinterlace/plugins/greedy.c36
-rw-r--r--src/post/deinterlace/plugins/greedy2frame.c33
-rw-r--r--src/post/deinterlace/plugins/linear.c19
-rw-r--r--src/post/deinterlace/plugins/linearblend.c34
-rw-r--r--src/post/deinterlace/plugins/scalerbob.c19
-rw-r--r--src/post/deinterlace/plugins/vfir.c37
-rw-r--r--src/post/deinterlace/plugins/weave.c15
8 files changed, 129 insertions, 79 deletions
diff --git a/src/post/deinterlace/plugins/double.c b/src/post/deinterlace/plugins/double.c
index bb9c6c790..6d10fb270 100644
--- a/src/post/deinterlace/plugins/double.c
+++ b/src/post/deinterlace/plugins/double.c
@@ -51,19 +51,26 @@ static void copy_scanline( uint8_t *output,
static deinterlace_method_t doublemethod =
{
- DEINTERLACE_PLUGIN_API_VERSION,
"Line Doubler",
"LineDoubler",
1,
0,
0,
- 0,
- 0,
1,
deinterlace_scanline_double,
copy_scanline,
0,
- 0
+ 0,
+ { "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "" }
};
#ifdef BUILD_TVTIME_PLUGINS
diff --git a/src/post/deinterlace/plugins/greedy.c b/src/post/deinterlace/plugins/greedy.c
index 07f17acfa..503f8dd34 100644
--- a/src/post/deinterlace/plugins/greedy.c
+++ b/src/post/deinterlace/plugins/greedy.c
@@ -163,32 +163,40 @@ static void deinterlace_greedy_packed422_scanline_mmxext( uint8_t *output,
#endif
}
-static deinterlace_setting_t settings[] =
-{
- {
- "Greedy Max Comb",
- SETTING_SLIDER,
- &GreedyMaxComb,
- 15, 0, 255, 1,
- 0
- }
-};
+/**
+ * The greedy deinterlacer introduces a one-field delay on the input.
+ * From the diagrams in deinterlace.h, the field being deinterlaced is
+ * always t-1. For this reason, our copy_scanline method is used for
+ * deinterlace_method_t's interpolate_scanline function, and the real
+ * work is done in deinterlace_method_t's copy_scanline function.
+ */
static deinterlace_method_t greedymethod =
{
- DEINTERLACE_PLUGIN_API_VERSION,
"DScaler: Greedy - Low motion",
"Greedy",
+/*
+ "Motion Adaptive: Simple Detection",
+ "AdaptiveSimple",
+*/
3,
MM_ACCEL_X86_MMXEXT,
0,
1,
- settings,
- 1,
copy_scanline,
deinterlace_greedy_packed422_scanline_mmxext,
0,
- 1
+ 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.",
+ "",
+ "Simple detection uses linear interpolation",
+ "where motion is detected, using a two-field",
+ "buffer. This is the Greedy: Low Motion",
+ "deinterlacer from DScaler." }
};
#ifdef BUILD_TVTIME_PLUGINS
diff --git a/src/post/deinterlace/plugins/greedy2frame.c b/src/post/deinterlace/plugins/greedy2frame.c
index 739f13538..dac7d488c 100644
--- a/src/post/deinterlace/plugins/greedy2frame.c
+++ b/src/post/deinterlace/plugins/greedy2frame.c
@@ -51,39 +51,28 @@ static int GreedyTwoFrameThreshold2 = 8;
#include "greedy2frame_template.c"
#undef IS_SSE
-static deinterlace_setting_t settings[] =
-{
- {
- "Greedy 2 Frame Luma Threshold",
- SETTING_SLIDER,
- &GreedyTwoFrameThreshold,
- 4, 0, 128, 1,
- 0
- },
- {
- "Greedy 2 Frame Chroma Threshold",
- SETTING_SLIDER,
- &GreedyTwoFrameThreshold2,
- 8, 0, 128, 1,
- 0
- }
-};
-
static deinterlace_method_t greedymethod =
{
- DEINTERLACE_PLUGIN_API_VERSION,
"Greedy - 2-frame (DScaler)",
"Greedy2Frame",
4,
MM_ACCEL_X86_MMXEXT,
0,
- 2,
- settings,
0,
0,
0,
DeinterlaceGreedy2Frame_SSE,
- 1
+ 1,
+ { "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "" }
};
#ifdef BUILD_TVTIME_PLUGINS
diff --git a/src/post/deinterlace/plugins/linear.c b/src/post/deinterlace/plugins/linear.c
index a3488da70..8392cf185 100644
--- a/src/post/deinterlace/plugins/linear.c
+++ b/src/post/deinterlace/plugins/linear.c
@@ -49,19 +49,30 @@ static void copy_scanline( uint8_t *output,
static deinterlace_method_t linearmethod =
{
- DEINTERLACE_PLUGIN_API_VERSION,
"Linear Interpolation",
"Linear",
+/*
+ "Television: Full resolution",
+ "TelevisionFull",
+*/
1,
0,
0,
- 0,
- 0,
1,
deinterlace_scanline_linear,
copy_scanline,
0,
- 0
+ 0,
+ { "Expands each field independently without",
+ "blurring or copying in time. Use this if you",
+ "want TV-quality with low CPU, and you have",
+ "configured your monitor to run at the refresh",
+ "rate of the video signal.",
+ "",
+ "Full resolution mode expands each field",
+ "to full size for high quality fullscreen use.",
+ "",
+ "" }
};
#ifdef BUILD_TVTIME_PLUGINS
diff --git a/src/post/deinterlace/plugins/linearblend.c b/src/post/deinterlace/plugins/linearblend.c
index abde146db..a0102fba4 100644
--- a/src/post/deinterlace/plugins/linearblend.c
+++ b/src/post/deinterlace/plugins/linearblend.c
@@ -306,28 +306,38 @@ static void deinterlace_scanline_linear_blend2_mmxext( uint8_t *output,
static deinterlace_method_t linearblendmethod_mmxext =
{
- DEINTERLACE_PLUGIN_API_VERSION,
"mplayer: Linear Blend",
"LinearBlend",
2,
MM_ACCEL_X86_MMXEXT,
0,
- 0,
- 0,
1,
deinterlace_scanline_linear_blend_mmxext,
deinterlace_scanline_linear_blend2_mmxext,
0,
- 0
+ 0,
+ { "Avoids flicker by blurring consecutive frames",
+ "of input. Use this if you want to run your",
+ "monitor at an arbitrary refresh rate and not",
+ "use much CPU, and are willing to sacrifice",
+ "detail.",
+ "",
+ "Temporal mode evenly blurs content for least",
+ "flicker, but with visible trails on fast motion.",
+ "From the linear blend deinterlacer in mplayer.",
+ "" }
};
#endif
static deinterlace_method_t linearblendmethod =
{
- DEINTERLACE_PLUGIN_API_VERSION,
"mplayer: Linear Blend",
"LinearBlend",
+/*
+ "Blur: Temporal",
+ "BlurTemporal",
+*/
2,
#ifdef ARCH_X86
MM_ACCEL_X86_MMX,
@@ -335,13 +345,21 @@ static deinterlace_method_t linearblendmethod =
0,
#endif
0,
- 0,
- 0,
1,
deinterlace_scanline_linear_blend,
deinterlace_scanline_linear_blend2,
0,
- 0
+ 0,
+ { "Avoids flicker by blurring consecutive frames",
+ "of input. Use this if you want to run your",
+ "monitor at an arbitrary refresh rate and not",
+ "use much CPU, and are willing to sacrifice",
+ "detail.",
+ "",
+ "Temporal mode evenly blurs content for least",
+ "flicker, but with visible trails on fast motion.",
+ "From the linear blend deinterlacer in mplayer.",
+ "" }
};
#ifdef BUILD_TVTIME_PLUGINS
diff --git a/src/post/deinterlace/plugins/scalerbob.c b/src/post/deinterlace/plugins/scalerbob.c
index e0f4dbf5e..a5318b4ea 100644
--- a/src/post/deinterlace/plugins/scalerbob.c
+++ b/src/post/deinterlace/plugins/scalerbob.c
@@ -37,19 +37,30 @@
static deinterlace_method_t scalerbobmethod =
{
- DEINTERLACE_PLUGIN_API_VERSION,
"Scaler Bob",
"ScalerBob",
+/*
+ "Television: Half Resolution",
+ "TelevisionHalf",
+*/
1,
0,
1,
- 0,
- 0,
1,
0,
0,
0,
- 0
+ 0,
+ { "Expands each field independently without",
+ "blurring or copying in time. Use this if you",
+ "want TV-quality with low CPU, and you have",
+ "configured your monitor to run at the refresh",
+ "rate of the video signal.",
+ "",
+ "Half resolution is poor quality but low CPU",
+ "requirements for watching in a small window.",
+ "",
+ "" }
};
#ifdef BUILD_TVTIME_PLUGINS
diff --git a/src/post/deinterlace/plugins/vfir.c b/src/post/deinterlace/plugins/vfir.c
index b2d8fe0d4..f96111ce9 100644
--- a/src/post/deinterlace/plugins/vfir.c
+++ b/src/post/deinterlace/plugins/vfir.c
@@ -90,6 +90,9 @@ static void deinterlace_line( uint8_t *dst, uint8_t *lum_m4,
}
emms();
#else
+ /**
+ * C implementation.
+ */
int sum;
for(;size > 0;size--) {
@@ -109,19 +112,11 @@ static void deinterlace_line( uint8_t *dst, uint8_t *lum_m4,
#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
- * have the desired effect.
- */
-
static void deinterlace_scanline_vfir( uint8_t *output,
deinterlace_scanline_data_t *data,
int width )
{
deinterlace_line( output, data->tt1, data->t0, data->m1, data->b0, data->bb1, width*2 );
- // blit_packed422_scanline( output, data->m1, width );
}
static void copy_scanline( uint8_t *output,
@@ -129,21 +124,17 @@ static void copy_scanline( uint8_t *output,
int width )
{
blit_packed422_scanline( output, data->m0, width );
- /*
- if( data->bottom_field ) {
- deinterlace_line( output, data->tt2, data->t1, data->m2, data->b1, data->bb2, width*2 );
- } else {
- deinterlace_line( output, data->tt0, data->t1, data->m0, data->b1, data->bb0, width*2 );
- }
- */
}
static deinterlace_method_t vfirmethod =
{
- DEINTERLACE_PLUGIN_API_VERSION,
"ffmpeg: Vertical Blend",
"Vertical",
+/*
+ "Blur: Vertical",
+ "BlurVertical",
+*/
1,
#ifdef ARCH_X86
MM_ACCEL_X86_MMXEXT,
@@ -151,13 +142,21 @@ static deinterlace_method_t vfirmethod =
0,
#endif
0,
- 0,
- 0,
1,
deinterlace_scanline_vfir,
copy_scanline,
0,
- 0
+ 0,
+ { "Avoids flicker by blurring consecutive frames",
+ "of input. Use this if you want to run your",
+ "monitor at an arbitrary refresh rate and not",
+ "use much CPU, and are willing to sacrifice",
+ "detail.",
+ "",
+ "Vertical mode blurs favouring the most recent",
+ "field for less visible trails. From the",
+ "deinterlacer filter in ffmpeg.",
+ "" }
};
#ifdef BUILD_TVTIME_PLUGINS
diff --git a/src/post/deinterlace/plugins/weave.c b/src/post/deinterlace/plugins/weave.c
index 95fa979d2..06b34ad7a 100644
--- a/src/post/deinterlace/plugins/weave.c
+++ b/src/post/deinterlace/plugins/weave.c
@@ -51,19 +51,26 @@ static void copy_scanline( uint8_t *output,
static deinterlace_method_t weavemethod =
{
- DEINTERLACE_PLUGIN_API_VERSION,
"Weave Last Field",
"Weave",
2,
0,
0,
- 0,
- 0,
1,
deinterlace_scanline_weave,
copy_scanline,
0,
- 0
+ 0,
+ { "Only updates the most recent field",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "" }
};
#ifdef BUILD_TVTIME_PLUGINS