deinterlace: Fix low-latency pattern locking

This commit is contained in:
Robert Swain 2012-07-26 12:08:36 +02:00
parent 30a61f26ba
commit f20d8f59c8

View file

@ -1016,7 +1016,6 @@ gst_deinterlace_pop_history (GstDeinterlace * self)
&& self->pattern_count >= telecine_patterns[self->pattern].length) { && self->pattern_count >= telecine_patterns[self->pattern].length) {
self->pattern_count = 0; self->pattern_count = 0;
self->output_count = 0; self->output_count = 0;
gst_deinterlace_update_pattern_timestamps (self);
} }
} }
} }
@ -1401,7 +1400,8 @@ gst_deinterlace_get_pattern_lock (GstDeinterlace * self, gboolean * flush_one)
/* loop over all phases */ /* loop over all phases */
for (j = 0; j < length; j++) { for (j = 0; j < length; j++) {
/* low-latency mode looks at past buffers, high latency at future buffers */ /* low-latency mode looks at past buffers, high latency at future buffers */
const gint state_idx = (self->low_latency ? length : state_count) - 1; const gint state_idx =
self->low_latency ? (self->history_count - 1) >> 1 : state_count - 1;
/* loop over history, breaking on differing buffer states */ /* loop over history, breaking on differing buffer states */
for (k = 0; k < length && k < state_count; k++) { for (k = 0; k < length && k < state_count; k++) {
const guint8 hist = self->buf_states[state_idx - k].state; const guint8 hist = self->buf_states[state_idx - k].state;
@ -1420,12 +1420,6 @@ gst_deinterlace_get_pattern_lock (GstDeinterlace * self, gboolean * flush_one)
score = k; score = k;
pattern = i; pattern = i;
phase = j; phase = j;
if (self->low_latency) {
/* state_idx + 1 is the number of buffers yet to be pushed out
* so length - state_idx - 1 is the number of old buffers in the
* pattern */
phase = (phase + length - state_idx - 1) % length;
}
} }
} }
} }