+2008-06-04 Thijs Vermeir <thijsvermeir@gmail.com>
+
+ * gst/avi/gstavidemux.c:
+ Because we don't know the frame order we need to push till
+ the next keyframe
+
2008-06-04 Sebastian Dröge <slomo@circular-chaos.org>
Patch by: Sjoerd Simons <sjoerd at luon dot net>
return result;
}
-#if 0
static gst_avi_index_entry *
gst_avi_demux_index_next (GstAviDemux * avi, gint stream_nr, gint last,
guchar flags)
}
return result;
}
-#endif
static gst_avi_index_entry *
gst_avi_demux_index_prev (GstAviDemux * avi, gint stream_nr, gint last,
avi->current_entry = kentry->index_nr;
if (segment->rate < 0.0) {
- /* play between the keyframe and the destination entry */
+ gst_avi_index_entry *next_keyframe;
+
+ /* Because we don't know the frame order we need to push from the prev keyframe
+ * to the next keyframe. If there is a smart decoder downstream he will notice
+ * that there are too many decoded frames send and return UNEXPECTED when there
+ * are enough decoded frames to fill the segment.
+ */
+ next_keyframe =
+ gst_avi_demux_index_next (avi, 0, kentry->index_nr,
+ GST_AVI_INDEX_ENTRY_FLAG_KEYFRAME);
+ if (!next_keyframe)
+ next_keyframe = gst_avi_demux_index_last (avi, 0);
+
avi->reverse_start_index = kentry->index_nr;
- avi->reverse_stop_index = entry->index_nr;
+ avi->reverse_stop_index = next_keyframe->index_nr;
GST_DEBUG_OBJECT (avi, "reverse seek: start idx (%d) and stop idx (%d)",
avi->reverse_start_index, avi->reverse_stop_index);