gst/avi/gstavidemux.c: Set EOS when going out of the segment in reverse playback

Original commit message from CVS:
* gst/avi/gstavidemux.c:
Set EOS when going out of the segment in reverse playback
This commit is contained in:
Thijs Vermeir 2008-06-04 16:49:26 +00:00
parent 7aa4f9962c
commit f1c5dc21b4
2 changed files with 24 additions and 4 deletions

View file

@ -1,3 +1,8 @@
2008-06-04 Thijs Vermeir <thijsvermeir@gmail.com>
* gst/avi/gstavidemux.c:
Set EOS when going out of the segment in reverse playback
2008-06-04 Tim-Philipp Müller <tim.muller at collabora co uk> 2008-06-04 Tim-Philipp Müller <tim.muller at collabora co uk>
* ext/taglib/Makefile.am:: * ext/taglib/Makefile.am::

View file

@ -3461,11 +3461,14 @@ gst_avi_demux_process_next_entry (GstAviDemux * avi)
/* check for reverse playback */ /* check for reverse playback */
if (avi->segment.rate < 0 && avi->current_entry > avi->reverse_stop_index) { if (avi->segment.rate < 0 && avi->current_entry > avi->reverse_stop_index) {
GST_LOG_OBJECT (avi, "stop_index %d reached", avi->reverse_stop_index); GST_LOG_OBJECT (avi, "stop_index %d reached", avi->reverse_stop_index);
/* check if we have pushed enough data for this segment */
if (avi->reverse_start_index == 0)
goto eos_reverse_zero;
if (avi->index_entries[avi->reverse_start_index].ts < avi->segment.start)
goto eos_reverse_segment;
avi->reverse_stop_index = avi->reverse_start_index; avi->reverse_stop_index = avi->reverse_start_index;
if (avi->reverse_start_index == 0) {
GST_DEBUG_OBJECT (avi, "start_index was 0, sending eos");
goto eos;
}
entry = entry =
gst_avi_demux_index_prev (avi, 0, avi->reverse_stop_index, gst_avi_demux_index_prev (avi, 0, avi->reverse_stop_index,
GST_AVI_INDEX_ENTRY_FLAG_KEYFRAME); GST_AVI_INDEX_ENTRY_FLAG_KEYFRAME);
@ -3597,6 +3600,18 @@ eos_stop:
res = GST_FLOW_UNEXPECTED; res = GST_FLOW_UNEXPECTED;
goto beach; goto beach;
} }
eos_reverse_zero:
{
GST_DEBUG_OBJECT (avi, "start_index was 0, setting EOS");
res = GST_FLOW_UNEXPECTED;
goto beach;
}
eos_reverse_segment:
{
GST_DEBUG_OBJECT (avi, "full segment pushed, setting EOS");
res = GST_FLOW_UNEXPECTED;
goto beach;
}
pull_failed: pull_failed:
{ {
GST_DEBUG_OBJECT (avi, GST_DEBUG_OBJECT (avi,