When transitioning to a preloaded song, emit the EOS event at the time the

audio actually changes to the next song instead of when the src changes songs.

Fixes issue 3716
This commit is contained in:
David Sansome 2013-06-04 22:17:44 +10:00
parent 07e7950f7e
commit e7dcac4f15
3 changed files with 14 additions and 2 deletions

View File

@ -157,7 +157,7 @@ class GstEngine : public Engine::Base, public BufferConsumer {
private:
static const qint64 kTimerIntervalNanosec = 1000 * kNsecPerMsec; // 1s
static const qint64 kPreloadGapNanosec = 1000 * kNsecPerMsec; // 1s
static const qint64 kPreloadGapNanosec = 2000 * kNsecPerMsec; // 2s
static const qint64 kSeekDelayNanosec = 100 * kNsecPerMsec; // 100msec
static const char* kHypnotoadPipeline;

View File

@ -55,6 +55,7 @@ GstEnginePipeline::GstEnginePipeline(GstEngine* engine)
segment_start_(0),
segment_start_received_(false),
emit_track_ended_on_segment_start_(false),
emit_track_ended_on_time_discontinuity_(false),
eq_enabled_(false),
eq_preamp_(0),
stereo_balance_(0.0f),
@ -718,6 +719,14 @@ 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)) {
qLog(Debug) << "Buffer discontinuity - emitting EOS";
instance->emit_track_ended_on_time_discontinuity_ = false;
emit instance->EndOfStreamReached(instance->id(), true);
}
}
return true;
}
@ -735,8 +744,10 @@ bool GstEnginePipeline::EventHandoffCallback(GstPad*, GstEvent* e, gpointer self
instance->segment_start_received_ = true;
if (instance->emit_track_ended_on_segment_start_) {
qLog(Debug) << "New segment started, EOS will signal on next buffer "
"discontinuity";
instance->emit_track_ended_on_segment_start_ = false;
emit instance->EndOfStreamReached(instance->id(), true);
instance->emit_track_ended_on_time_discontinuity_ = true;
}
}

View File

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