summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Hervey <edward@centricular.com>2015-12-03 16:38:45 +0100
committerEdward Hervey <bilboed@bilboed.com>2015-12-03 16:42:50 +0100
commitd34aaf9e9b9c1a520f496812bf8a5ca54672a6d3 (patch)
tree0c4606be5e0ab6c608a93053f546878ca9a62f93
parent4ed7b0a0e6595eb0a9411527d9e9ed2338b4be47 (diff)
videodecoder: Avoid pushing buffers before segment start
In the case where the stream doesn't have a framerate set and the frames don't have a duration set, we still want to use the clipping path to make sure we don't push buffers outside of the segment. The problem was the previous iteration was setting a duration of 2s, which meant that any buffer which was less than 2s before the segment start would end up getting pushed. Instead, use a saner 40ms (25fps single frame duration) to figure out whether the frame could be within the segment or not
-rw-r--r--gst-libs/gst/video/gstvideodecoder.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c
index 8a74efea6..623b307a7 100644
--- a/gst-libs/gst/video/gstvideodecoder.c
+++ b/gst-libs/gst/video/gstvideodecoder.c
@@ -3128,16 +3128,16 @@ gst_video_decoder_clip_and_push_buf (GstVideoDecoder * decoder, GstBuffer * buf)
stop = start + duration;
} else if (GST_CLOCK_TIME_IS_VALID (start)
&& !GST_CLOCK_TIME_IS_VALID (duration)) {
- /* 2 second frame duration is rather unlikely... but if we don't clip
- * away buffers that far before the segment we can cause the pipeline to
- * lockup. This can happen if audio is properly clipped, and thus the
- * audio sink does not preroll yet but the video sink prerolls because
- * we already outputted a buffer here... and then queues run full.
+ /* If we don't clip away buffers that far before the segment we
+ * can cause the pipeline to lockup. This can happen if audio is
+ * properly clipped, and thus the audio sink does not preroll yet
+ * but the video sink prerolls because we already outputted a
+ * buffer here... and then queues run full.
*
* In the worst case we will clip one buffer too many here now if no
* framerate is given, no buffer duration is given and the actual
- * framerate is less than 0.5fps */
- stop = start + 2 * GST_SECOND;
+ * framerate is lower than 25fps */
+ stop = start + 40 * GST_MSECOND;
}
segment = &decoder->output_segment;