From e3bea84bea8e5343da4c79c648d3cfb550a79900 Mon Sep 17 00:00:00 2001 From: Marcus Fritzsch Date: Tue, 1 Apr 2014 15:33:11 +0200 Subject: [PATCH] gstenginepipeline: make buffer min fill configurable --- src/engines/gstengine.cpp | 4 ++++ src/engines/gstengine.h | 2 ++ src/engines/gstenginepipeline.cpp | 7 +++++- src/engines/gstenginepipeline.h | 2 ++ src/ui/playbacksettingspage.cpp | 13 +++++++++++ src/ui/playbacksettingspage.h | 1 + src/ui/playbacksettingspage.ui | 39 ++++++++++++++++++++++++++++++- 7 files changed, 66 insertions(+), 2 deletions(-) diff --git a/src/engines/gstengine.cpp b/src/engines/gstengine.cpp index d47c80f14..56b166e71 100644 --- a/src/engines/gstengine.cpp +++ b/src/engines/gstengine.cpp @@ -90,6 +90,7 @@ GstEngine::GstEngine(TaskManager* task_manager) rg_preamp_(0.0), rg_compression_(true), buffer_duration_nanosec_(1 * kNsecPerSec), // 1s + buffer_min_fill_(33), mono_playback_(false), seek_timer_(new QTimer(this)), timer_id_(-1), @@ -179,6 +180,8 @@ void GstEngine::ReloadSettings() { buffer_duration_nanosec_ = s.value("bufferduration", 4000).toLongLong() * kNsecPerMsec; + buffer_min_fill_ = s.value("bufferminfill", 33).toInt(); + mono_playback_ = s.value("monoplayback", false).toBool(); } @@ -700,6 +703,7 @@ shared_ptr GstEngine::CreatePipeline() { ret->set_output_device(sink_, device_); ret->set_replaygain(rg_enabled_, rg_mode_, rg_preamp_, rg_compression_); ret->set_buffer_duration_nanosec(buffer_duration_nanosec_); + ret->set_buffer_min_fill(buffer_min_fill_); ret->set_mono_playback(mono_playback_); ret->AddBufferConsumer(this); diff --git a/src/engines/gstengine.h b/src/engines/gstengine.h index 157bfc2da..30d9d2c64 100644 --- a/src/engines/gstengine.h +++ b/src/engines/gstengine.h @@ -204,6 +204,8 @@ class GstEngine : public Engine::Base, public BufferConsumer { qint64 buffer_duration_nanosec_; + int buffer_min_fill_; + bool mono_playback_; mutable bool can_decode_success_; diff --git a/src/engines/gstenginepipeline.cpp b/src/engines/gstenginepipeline.cpp index 9d897f5ea..0b80e9894 100644 --- a/src/engines/gstenginepipeline.cpp +++ b/src/engines/gstenginepipeline.cpp @@ -62,6 +62,7 @@ GstEnginePipeline::GstEnginePipeline(GstEngine* engine) rg_preamp_(0.0), rg_compression_(true), buffer_duration_nanosec_(1 * kNsecPerSec), + buffer_min_fill_(33), buffering_(false), mono_playback_(false), end_offset_nanosec_(-1), @@ -113,6 +114,10 @@ void GstEnginePipeline::set_buffer_duration_nanosec( buffer_duration_nanosec_ = buffer_duration_nanosec; } +void GstEnginePipeline::set_buffer_min_fill(int percent) { + buffer_min_fill_ = percent; +} + void GstEnginePipeline::set_mono_playback(bool enabled) { mono_playback_ = enabled; } @@ -349,7 +354,7 @@ bool GstEnginePipeline::Init() { g_object_set(G_OBJECT(queue_), "max-size-bytes", 0, nullptr); g_object_set(G_OBJECT(queue_), "max-size-time", buffer_duration_nanosec_, nullptr); - g_object_set(G_OBJECT(queue_), "low-percent", 1, nullptr); + g_object_set(G_OBJECT(queue_), "low-percent", buffer_min_fill_, nullptr); if (buffer_duration_nanosec_ > 0) { g_object_set(G_OBJECT(queue_), "use-buffering", true, nullptr); diff --git a/src/engines/gstenginepipeline.h b/src/engines/gstenginepipeline.h index 322ac256d..57e878409 100644 --- a/src/engines/gstenginepipeline.h +++ b/src/engines/gstenginepipeline.h @@ -53,6 +53,7 @@ class GstEnginePipeline : public QObject { void set_output_device(const QString& sink, const QVariant& device); void set_replaygain(bool enabled, int mode, float preamp, bool compression); void set_buffer_duration_nanosec(qint64 duration_nanosec); + void set_buffer_min_fill(int percent); void set_mono_playback(bool enabled); // Creates the pipeline, returns false on error @@ -213,6 +214,7 @@ signals: // Buffering quint64 buffer_duration_nanosec_; + int buffer_min_fill_; bool buffering_; bool mono_playback_; diff --git a/src/ui/playbacksettingspage.cpp b/src/ui/playbacksettingspage.cpp index 7566d329d..406ee06b3 100644 --- a/src/ui/playbacksettingspage.cpp +++ b/src/ui/playbacksettingspage.cpp @@ -33,6 +33,11 @@ PlaybackSettingsPage::PlaybackSettingsPage(SettingsDialog* dialog) connect(ui_->fading_auto, SIGNAL(toggled(bool)), SLOT(FadingOptionsChanged())); + connect(ui_->buffer_min_fill, SIGNAL(valueChanged(int)), + SLOT(BufferMinFillChanged(int))); + ui_->buffer_min_fill_value_label->setMinimumWidth( + QFontMetrics(ui_->buffer_min_fill_value_label->font()).width("WW%")); + connect(ui_->replaygain_preamp, SIGNAL(valueChanged(int)), SLOT(RgPreampChanged(int))); ui_->replaygain_preamp_label->setMinimumWidth( @@ -102,6 +107,7 @@ void PlaybackSettingsPage::Load() { s.value("rgcompression", true).toBool()); ui_->buffer_duration->setValue(s.value("bufferduration", 4000).toInt()); ui_->mono_playback->setChecked(s.value("monoplayback", false).toBool()); + ui_->buffer_min_fill->setValue(s.value("bufferminfill", 33).toInt()); s.endGroup(); } @@ -135,6 +141,7 @@ void PlaybackSettingsPage::Save() { s.setValue("rgcompression", ui_->replaygain_compression->isChecked()); s.setValue("bufferduration", ui_->buffer_duration->value()); s.setValue("monoplayback", ui_->mono_playback->isChecked()); + s.setValue("bufferminfill", ui_->buffer_min_fill->value()); s.endGroup(); } @@ -145,6 +152,12 @@ void PlaybackSettingsPage::RgPreampChanged(int value) { ui_->replaygain_preamp_label->setText(db_str); } +void PlaybackSettingsPage::BufferMinFillChanged(int value) { + QString percent; + percent.sprintf("%d%%", value); + ui_->buffer_min_fill_value_label->setText(percent); +} + void PlaybackSettingsPage::FadingOptionsChanged() { ui_->fading_options->setEnabled(ui_->fading_out->isChecked() || ui_->fading_cross->isChecked() || diff --git a/src/ui/playbacksettingspage.h b/src/ui/playbacksettingspage.h index e62b15915..61487149e 100644 --- a/src/ui/playbacksettingspage.h +++ b/src/ui/playbacksettingspage.h @@ -35,6 +35,7 @@ class PlaybackSettingsPage : public SettingsPage { private slots: void FadingOptionsChanged(); void RgPreampChanged(int value); + void BufferMinFillChanged(int value); private: Ui_PlaybackSettingsPage* ui_; diff --git a/src/ui/playbacksettingspage.ui b/src/ui/playbacksettingspage.ui index 51a1d09d7..ea7aacbbb 100644 --- a/src/ui/playbacksettingspage.ui +++ b/src/ui/playbacksettingspage.ui @@ -293,7 +293,14 @@ - + + + + Buffer low fill + + + + Changing mono playback preference will be effective for the next playing songs @@ -303,6 +310,36 @@ + + + + + + + + + + + + + 1 + + + 50 + + + 33 + + + Qt::Horizontal + + + 1 + + + + +