From 71287dd77e1b4b88a0fc1be5aa7a2bb836a1cd6b Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 8 Apr 2025 21:19:15 +0200 Subject: [PATCH] Add option to turn off playbin3 --- src/constants/backendsettings.h | 1 + src/engine/enginebase.cpp | 3 +++ src/engine/enginebase.h | 1 + src/engine/gstengine.cpp | 1 + src/engine/gstenginepipeline.cpp | 9 +++++++- src/engine/gstenginepipeline.h | 3 +++ src/settings/backendsettingspage.cpp | 4 ++++ src/settings/backendsettingspage.ui | 34 +++++++++++++++++----------- 8 files changed, 42 insertions(+), 14 deletions(-) diff --git a/src/constants/backendsettings.h b/src/constants/backendsettings.h index 47d547b55..5a55becad 100644 --- a/src/constants/backendsettings.h +++ b/src/constants/backendsettings.h @@ -33,6 +33,7 @@ constexpr char kOutputU[] = "Output"; constexpr char kDevice[] = "device"; constexpr char kDeviceU[] = "Device"; constexpr char kALSAPlugin[] = "alsaplugin"; +constexpr char kPlaybin3[] = "playbin3"; constexpr char kExclusiveMode[] = "exclusive_mode"; constexpr char kVolumeControl[] = "volume_control"; constexpr char kChannelsEnabled[] = "channels_enabled"; diff --git a/src/engine/enginebase.cpp b/src/engine/enginebase.cpp index e6cae0b90..9d2b45224 100644 --- a/src/engine/enginebase.cpp +++ b/src/engine/enginebase.cpp @@ -46,6 +46,7 @@ using namespace Qt::Literals::StringLiterals; EngineBase::EngineBase(QObject *parent) : QObject(parent), + playbin3_enabled_(true), exclusive_mode_(false), volume_control_(true), volume_(100), @@ -156,6 +157,8 @@ void EngineBase::ReloadSettings() { device_ = s.value(BackendSettings::kDevice); } + playbin3_enabled_ = s.value(BackendSettings::kPlaybin3, true).toBool(); + exclusive_mode_ = s.value(BackendSettings::kExclusiveMode, false).toBool(); volume_control_ = s.value(BackendSettings::kVolumeControl, true).toBool(); diff --git a/src/engine/enginebase.h b/src/engine/enginebase.h index a360e38d5..f1b990c3d 100644 --- a/src/engine/enginebase.h +++ b/src/engine/enginebase.h @@ -176,6 +176,7 @@ class EngineBase : public QObject { void Finished(); protected: + bool playbin3_enabled_; bool exclusive_mode_; bool volume_control_; uint volume_; diff --git a/src/engine/gstengine.cpp b/src/engine/gstengine.cpp index 5df4df704..7b65a2f25 100644 --- a/src/engine/gstengine.cpp +++ b/src/engine/gstengine.cpp @@ -899,6 +899,7 @@ GstEnginePipelinePtr GstEngine::CreatePipeline() { GstEnginePipelinePtr pipeline = GstEnginePipelinePtr(new GstEnginePipeline); pipeline->set_output_device(output_, device_); + pipeline->set_playbin3_enabled(playbin3_enabled_); pipeline->set_exclusive_mode(exclusive_mode_); pipeline->set_volume_enabled(volume_control_); pipeline->set_stereo_balancer_enabled(stereo_balancer_enabled_); diff --git a/src/engine/gstenginepipeline.cpp b/src/engine/gstenginepipeline.cpp index eb354d558..cd8500846 100644 --- a/src/engine/gstenginepipeline.cpp +++ b/src/engine/gstenginepipeline.cpp @@ -103,6 +103,7 @@ GstEnginePipeline::GstEnginePipeline(QObject *parent) id_(sId++), playbin3_support_(false), volume_full_range_support_(false), + playbin3_enabled_(true), exclusive_mode_(false), volume_enabled_(true), fading_enabled_(false), @@ -221,6 +222,10 @@ void GstEnginePipeline::set_output_device(const QString &output, const QVariant } +void GstEnginePipeline::set_playbin3_enabled(const bool playbin3_enabled) { + playbin3_enabled_ = playbin3_enabled; +} + void GstEnginePipeline::set_exclusive_mode(const bool exclusive_mode) { exclusive_mode_ = exclusive_mode; } @@ -450,7 +455,9 @@ bool GstEnginePipeline::InitFromUrl(const QUrl &media_url, const QUrl &stream_ur end_offset_nanosec_ = end_offset_nanosec; ebur128_loudness_normalizing_gain_db_ = ebur128_loudness_normalizing_gain_db; - pipeline_ = CreateElement(playbin3_support_ ? u"playbin3"_s : u"playbin"_s, u"pipeline"_s, nullptr, error); + const QString playbin_name = playbin3_support_ && playbin3_enabled_ ? u"playbin3"_s : u"playbin"_s; + qLog(Debug) << "Using" << playbin_name << "for pipeline"; + pipeline_ = CreateElement(playbin_name, u"pipeline"_s, nullptr, error); if (!pipeline_) return false; pad_added_cb_id_ = CHECKED_GCONNECT(G_OBJECT(pipeline_), "pad-added", &PadAddedCallback, this); diff --git a/src/engine/gstenginepipeline.h b/src/engine/gstenginepipeline.h index 75eda6f64..894169276 100644 --- a/src/engine/gstenginepipeline.h +++ b/src/engine/gstenginepipeline.h @@ -65,6 +65,7 @@ class GstEnginePipeline : public QObject { // Call these setters before Init void set_output_device(const QString &output, const QVariant &device); + void set_playbin3_enabled(const bool playbin3_enabled); void set_exclusive_mode(const bool exclusive_mode); void set_volume_enabled(const bool enabled); void set_stereo_balancer_enabled(const bool enabled); @@ -219,6 +220,8 @@ class GstEnginePipeline : public QObject { bool playbin3_support_; bool volume_full_range_support_; + bool playbin3_enabled_; + // General settings for the pipeline QString output_; QVariant device_; diff --git a/src/settings/backendsettingspage.cpp b/src/settings/backendsettingspage.cpp index fdd40822b..565766af8 100644 --- a/src/settings/backendsettingspage.cpp +++ b/src/settings/backendsettingspage.cpp @@ -178,6 +178,8 @@ void BackendSettingsPage::Load() { ui_->checkbox_bs2b->setChecked(s.value(kBS2B, false).toBool()); + ui_->checkbox_playbin3->setChecked(s.value(kPlaybin3, true).toBool()); + ui_->checkbox_http2->setChecked(s.value(kHTTP2, false).toBool()); ui_->checkbox_strict_ssl->setChecked(s.value(kStrictSSL, false).toBool()); @@ -440,6 +442,8 @@ void BackendSettingsPage::Save() { s.setValue(kBS2B, ui_->checkbox_bs2b->isChecked()); + s.setValue(kPlaybin3, ui_->checkbox_playbin3->isChecked()); + s.setValue(kHTTP2, ui_->checkbox_http2->isChecked()); s.setValue(kStrictSSL, ui_->checkbox_strict_ssl->isChecked()); diff --git a/src/settings/backendsettingspage.ui b/src/settings/backendsettingspage.ui index c78134254..e894ebae1 100644 --- a/src/settings/backendsettingspage.ui +++ b/src/settings/backendsettingspage.ui @@ -132,7 +132,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -173,7 +173,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -265,7 +265,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -285,6 +285,13 @@ + + + + Use playbin3 when available + + + @@ -379,7 +386,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -392,7 +399,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -405,7 +412,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -429,7 +436,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -545,7 +552,7 @@ 600 - Qt::Orientation::Horizontal + Qt::Horizontal 600 @@ -578,7 +585,7 @@ 600 - Qt::Orientation::Horizontal + Qt::Horizontal 600 @@ -664,7 +671,7 @@ -230 - Qt::Orientation::Horizontal + Qt::Horizontal -230 @@ -769,7 +776,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -820,7 +827,7 @@ - Qt::Orientation::Horizontal + Qt::Horizontal @@ -838,7 +845,7 @@ - Qt::Orientation::Vertical + Qt::Vertical @@ -873,6 +880,7 @@ checkbox_channels spinbox_channels checkbox_bs2b + checkbox_playbin3 checkbox_http2 checkbox_strict_ssl spinbox_bufferduration