diff options
Diffstat (limited to 'src/post/deinterlace/plugins')
-rw-r--r-- | src/post/deinterlace/plugins/double.c | 15 | ||||
-rw-r--r-- | src/post/deinterlace/plugins/greedy.c | 36 | ||||
-rw-r--r-- | src/post/deinterlace/plugins/greedy2frame.c | 33 | ||||
-rw-r--r-- | src/post/deinterlace/plugins/linear.c | 19 | ||||
-rw-r--r-- | src/post/deinterlace/plugins/linearblend.c | 34 | ||||
-rw-r--r-- | src/post/deinterlace/plugins/scalerbob.c | 19 | ||||
-rw-r--r-- | src/post/deinterlace/plugins/vfir.c | 37 | ||||
-rw-r--r-- | src/post/deinterlace/plugins/weave.c | 15 |
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 |