From 246e0808d27e8efc3a50430191b9f028689d08f6 Mon Sep 17 00:00:00 2001 From: David Sansome Date: Sat, 8 Jun 2013 14:31:29 +1000 Subject: [PATCH] Emit EOS when the buffer timestamps go backwards, as well as when a DISCONT buffer arrives. Fixes issue 3721. --- src/engines/gstenginepipeline.cpp | 6 +++++- src/engines/gstenginepipeline.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/engines/gstenginepipeline.cpp b/src/engines/gstenginepipeline.cpp index 8b956762b..82c718f11 100644 --- a/src/engines/gstenginepipeline.cpp +++ b/src/engines/gstenginepipeline.cpp @@ -56,6 +56,7 @@ GstEnginePipeline::GstEnginePipeline(GstEngine* engine) segment_start_received_(false), emit_track_ended_on_segment_start_(false), emit_track_ended_on_time_discontinuity_(false), + last_buffer_offset_(0), eq_enabled_(false), eq_preamp_(0), stereo_balance_(0.0f), @@ -720,13 +721,16 @@ bool GstEnginePipeline::HandoffCallback(GstPad*, GstBuffer* buf, gpointer self) } if (instance->emit_track_ended_on_time_discontinuity_) { - if (GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_DISCONT)) { + if (GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_DISCONT) || + GST_BUFFER_OFFSET(buf) < instance->last_buffer_offset_) { qLog(Debug) << "Buffer discontinuity - emitting EOS"; instance->emit_track_ended_on_time_discontinuity_ = false; emit instance->EndOfStreamReached(instance->id(), true); } } + instance->last_buffer_offset_ = GST_BUFFER_OFFSET(buf); + return true; } diff --git a/src/engines/gstenginepipeline.h b/src/engines/gstenginepipeline.h index 76e9f81d9..a1b8c9efb 100644 --- a/src/engines/gstenginepipeline.h +++ b/src/engines/gstenginepipeline.h @@ -189,6 +189,7 @@ class GstEnginePipeline : public QObject { bool segment_start_received_; bool emit_track_ended_on_segment_start_; bool emit_track_ended_on_time_discontinuity_; + qint64 last_buffer_offset_; // Equalizer bool eq_enabled_;