diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/post/deinterlace/pulldown.c | 44 | ||||
-rw-r--r-- | src/post/deinterlace/tvtime.c | 2 | ||||
-rw-r--r-- | src/post/deinterlace/tvtime.h | 3 | ||||
-rw-r--r-- | src/post/deinterlace/xine_plugin.c | 5 |
4 files changed, 46 insertions, 8 deletions
diff --git a/src/post/deinterlace/pulldown.c b/src/post/deinterlace/pulldown.c index feaefecaf..41b31d596 100644 --- a/src/post/deinterlace/pulldown.c +++ b/src/post/deinterlace/pulldown.c @@ -51,6 +51,38 @@ * Bot 4 : Drop * Top 5 : Drop * Bot 5 : Show + * + * A A 1 + * A B 2 + * B C 4 + * C C 8 + * D D 16 + * + * D D A A A B B C C C D D A A A +------------ + * [ ] + * [* * ] | 1 top AA + * [ * *] | 0 AA bottom AA + * + * [ ] + * [* * ] | 1 top AB + * [* * ] | 1 AB bottom AB + * + * [ ] + * [ * *] | 0 top BC + * [* * ] | 1 BC bottom BC + * + * [ ] + * [ * *] | 0 top CC + * [ * *] | 0 CC bottom CC + * + * [ ] + * [* * ] | 1 top DD + * [ * *] | 0 DD bottom DD + * + * + * [* * ] | 1 top AA + * [ * *] | 0 AA bottom AA + * */ /* Offset 1 2 3 4 5 */ @@ -550,11 +582,19 @@ void diff_factor_packed422_frame( pulldown_metrics_t *peak, pulldown_metrics_t * int pulldown_source( int action, int bottom_field ) { - if( action == PULLDOWN_SEQ_AB || action == PULLDOWN_SEQ_BC ) { + if( action == PULLDOWN_SEQ_AA ) { + return !bottom_field; + } else if( action == PULLDOWN_SEQ_AB ) { + return 1; + } else if( action == PULLDOWN_SEQ_BC ) { return bottom_field; - } else { + } else if( action == PULLDOWN_SEQ_CC ) { + return 0; + } else if( action == PULLDOWN_SEQ_DD ) { return !bottom_field; } + + return 0; } int pulldown_drop( int action, int bottom_field ) diff --git a/src/post/deinterlace/tvtime.c b/src/post/deinterlace/tvtime.c index 1ba97d277..31cf3f7c2 100644 --- a/src/post/deinterlace/tvtime.c +++ b/src/post/deinterlace/tvtime.c @@ -223,7 +223,7 @@ int tvtime_build_deinterlaced_frame( tvtime_t *tvtime, uint8_t *output, return 0; if( pulldown_source( tvtime->pdoffset, 0 ) ) { - pulldown_merge_fields( output, curframe, curframe + instride, + pulldown_merge_fields( output, lastframe, lastframe + instride, width, frame_height, instride*2, outstride ); } else { pulldown_merge_fields( output, curframe, lastframe + instride, diff --git a/src/post/deinterlace/tvtime.h b/src/post/deinterlace/tvtime.h index 7019fe34a..1cba7b1a9 100644 --- a/src/post/deinterlace/tvtime.h +++ b/src/post/deinterlace/tvtime.h @@ -33,8 +33,7 @@ enum { PULLDOWN_NONE = 0, PULLDOWN_VEKTOR = 1, /* vektor's adaptive pulldown detection. */ - PULLDOWN_DALIAS = 2, /* Using dalias's pulldown detection */ - PULLDOWN_MAX = 4, + PULLDOWN_MAX = 2, }; enum diff --git a/src/post/deinterlace/xine_plugin.c b/src/post/deinterlace/xine_plugin.c index 1162a9058..f35b5b127 100644 --- a/src/post/deinterlace/xine_plugin.c +++ b/src/post/deinterlace/xine_plugin.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_plugin.c,v 1.37 2004/09/29 18:30:37 miguelfreitas Exp $ + * $Id: xine_plugin.c,v 1.38 2005/05/15 02:41:03 miguelfreitas Exp $ * * advanced video deinterlacer plugin * Jun/2003 by Miguel Freitas @@ -550,8 +550,7 @@ static int deinterlace_build_output_field( int force24fps; force24fps = this->judder_correction && !this->cheap_mode && - ( (this->pulldown == PULLDOWN_DALIAS) || - (this->pulldown == PULLDOWN_VEKTOR && this->tvtime->filmmode) ); + ( this->pulldown == PULLDOWN_VEKTOR && this->tvtime->filmmode ); if( this->tvtime->curmethod->doscalerbob ) { scaler = 2; |