summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/post/deinterlace/pulldown.c44
-rw-r--r--src/post/deinterlace/tvtime.c2
-rw-r--r--src/post/deinterlace/tvtime.h3
-rw-r--r--src/post/deinterlace/xine_plugin.c5
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;