Emit EOS when the buffer timestamps go backwards, as well as when a DISCONT buffer arrives. Fixes issue 3721.

This commit is contained in:
David Sansome 2013-06-08 14:31:29 +10:00
parent e7dcac4f15
commit 246e0808d2
2 changed files with 6 additions and 1 deletions

View File

@ -56,6 +56,7 @@ GstEnginePipeline::GstEnginePipeline(GstEngine* engine)
segment_start_received_(false), segment_start_received_(false),
emit_track_ended_on_segment_start_(false), emit_track_ended_on_segment_start_(false),
emit_track_ended_on_time_discontinuity_(false), emit_track_ended_on_time_discontinuity_(false),
last_buffer_offset_(0),
eq_enabled_(false), eq_enabled_(false),
eq_preamp_(0), eq_preamp_(0),
stereo_balance_(0.0f), 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 (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"; qLog(Debug) << "Buffer discontinuity - emitting EOS";
instance->emit_track_ended_on_time_discontinuity_ = false; instance->emit_track_ended_on_time_discontinuity_ = false;
emit instance->EndOfStreamReached(instance->id(), true); emit instance->EndOfStreamReached(instance->id(), true);
} }
} }
instance->last_buffer_offset_ = GST_BUFFER_OFFSET(buf);
return true; return true;
} }

View File

@ -189,6 +189,7 @@ class GstEnginePipeline : public QObject {
bool segment_start_received_; bool segment_start_received_;
bool emit_track_ended_on_segment_start_; bool emit_track_ended_on_segment_start_;
bool emit_track_ended_on_time_discontinuity_; bool emit_track_ended_on_time_discontinuity_;
qint64 last_buffer_offset_;
// Equalizer // Equalizer
bool eq_enabled_; bool eq_enabled_;