From 09b8f902eab42d10b5392bc6b2f9f78cd7e670f5 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Mon, 26 May 2014 12:44:38 -0300 Subject: [PATCH] audiodecoder: return EOS when segment is over if a buffer is clipped by being completely out of segment, check if this buffer is after the end of the segment and return EOS upstream https://bugzilla.gnome.org/show_bug.cgi?id=709224 --- gst-libs/gst/audio/gstaudiodecoder.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c index c3acb2e0bb..fa9828b80a 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.c +++ b/gst-libs/gst/audio/gstaudiodecoder.c @@ -901,6 +901,7 @@ gst_audio_decoder_push_forward (GstAudioDecoder * dec, GstBuffer * buf) GstAudioDecoderPrivate *priv; GstAudioDecoderContext *ctx; GstFlowReturn ret = GST_FLOW_OK; + GstClockTime ts; klass = GST_AUDIO_DECODER_GET_CLASS (dec); priv = dec->priv; @@ -914,6 +915,7 @@ gst_audio_decoder_push_forward (GstAudioDecoder * dec, GstBuffer * buf) } ctx->had_output_data = TRUE; + ts = GST_BUFFER_TIMESTAMP (buf); GST_LOG_OBJECT (dec, "clipping buffer of size %" G_GSIZE_FORMAT " with ts %" GST_TIME_FORMAT @@ -926,6 +928,12 @@ gst_audio_decoder_push_forward (GstAudioDecoder * dec, GstBuffer * buf) ctx->info.bpf); if (G_UNLIKELY (!buf)) { GST_DEBUG_OBJECT (dec, "no data after clipping to segment"); + if (dec->output_segment.rate >= 0) { + if (ts >= dec->output_segment.stop) + ret = GST_FLOW_EOS; + } else if (ts < dec->output_segment.start) { + ret = GST_FLOW_EOS; + } goto exit; }