qtdemux: fix reverse playback EOS conditions
authorMathieu Duponchelle <mathieu@centricular.com>
Fri, 26 Jul 2019 00:45:51 +0000 (02:45 +0200)
committerMathieu Duponchelle <mduponchelle1@gmail.com>
Fri, 26 Jul 2019 02:42:11 +0000 (02:42 +0000)
In reverse playback, we don't want to rely on the position of the current
keyframe to decide a stream is EOS: the last GOP we push will start with
a keyframe, which position is likely to be outside of the segment.

Instead, let the normal seek_to_previous_keyframe mechanism do its job,
it works just fine.

gst/isomp4/qtdemux.c

index ad2192a..d8c434e 100644 (file)
@@ -6337,10 +6337,8 @@ gst_qtdemux_loop_state_movie (GstQTDemux * qtdemux)
 
   /* check for segment end */
   if (G_UNLIKELY (qtdemux->segment.stop != -1
-          && ((qtdemux->segment.rate >= 0 && qtdemux->segment.stop <= min_time)
-              || (qtdemux->segment.rate < 0
-                  && qtdemux->segment.start > min_time))
-          && target_stream->on_keyframe)) {
+          && qtdemux->segment.rate >= 0
+          && qtdemux->segment.stop <= min_time && target_stream->on_keyframe)) {
     GST_DEBUG_OBJECT (qtdemux, "we reached the end of our segment.");
     target_stream->time_position = GST_CLOCK_TIME_NONE;
     goto eos_stream;