diff options
author | Thijs Vermeir <thijsvermeir@gmail.com> | 2008-06-04 18:03:24 +0000 |
---|---|---|
committer | Thijs Vermeir <thijsvermeir@gmail.com> | 2008-06-04 18:03:24 +0000 |
commit | b950285ac7cd434c3a6f1623a8e73530f299e5f9 (patch) | |
tree | 2f925d33b782f3bb7617c4ff08bee1e39744ae43 /gst/avi | |
parent | 22940c001029de2f55d8b70365bf5eb9c2c368dd (diff) |
gst/avi/gstavidemux.c: Because we don't know the frame order we need to push till the next keyframe
Original commit message from CVS:
* gst/avi/gstavidemux.c:
Because we don't know the frame order we need to push till
the next keyframe
Diffstat (limited to 'gst/avi')
-rw-r--r-- | gst/avi/gstavidemux.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c index e2a15045..77c9eba7 100644 --- a/gst/avi/gstavidemux.c +++ b/gst/avi/gstavidemux.c @@ -287,7 +287,6 @@ gst_avi_demux_index_last (GstAviDemux * avi, gint stream_nr) return result; } -#if 0 static gst_avi_index_entry * gst_avi_demux_index_next (GstAviDemux * avi, gint stream_nr, gint last, guchar flags) @@ -308,7 +307,6 @@ gst_avi_demux_index_next (GstAviDemux * avi, gint stream_nr, gint last, } return result; } -#endif static gst_avi_index_entry * gst_avi_demux_index_prev (GstAviDemux * avi, gint stream_nr, gint last, @@ -3154,9 +3152,21 @@ gst_avi_demux_do_seek (GstAviDemux * avi, GstSegment * segment) 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); |