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:
parent
07e7950f7e
commit
e7dcac4f15
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user