From 2c9b14f5f2ca5b43f4ab82474936829524049324 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 4 Apr 2025 22:12:38 +0200 Subject: [PATCH] GstEnginePipeline: Simplify version checks --- src/engine/gstenginepipeline.cpp | 25 +++++++++---------------- src/engine/gstenginepipeline.h | 4 +++- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/engine/gstenginepipeline.cpp b/src/engine/gstenginepipeline.cpp index a88cbdf2a..eb354d558 100644 --- a/src/engine/gstenginepipeline.cpp +++ b/src/engine/gstenginepipeline.cpp @@ -101,6 +101,8 @@ int GstEnginePipeline::sId = 1; GstEnginePipeline::GstEnginePipeline(QObject *parent) : QObject(parent), id_(sId++), + playbin3_support_(false), + volume_full_range_support_(false), exclusive_mode_(false), volume_enabled_(true), fading_enabled_(false), @@ -122,7 +124,6 @@ GstEnginePipeline::GstEnginePipeline(QObject *parent) rg_fallbackgain_(0.0), rg_compression_(true), ebur128_loudness_normalization_(false), - gstreamer_supports_volume_full_range_(false), ebur128_loudness_normalizing_gain_db_(0.0), segment_start_(0), segment_start_received_(false), @@ -172,6 +173,11 @@ GstEnginePipeline::GstEnginePipeline(QObject *parent) last_set_state_in_progress_(GST_STATE_VOID_PENDING), last_set_state_async_in_progress_(GST_STATE_VOID_PENDING) { + guint version_major = 0, version_minor = 0; + gst_plugins_base_version(&version_major, &version_minor, nullptr, nullptr); + playbin3_support_ = QVersionNumber::compare(QVersionNumber(static_cast(version_major), static_cast(version_minor)), QVersionNumber(1, 24)) >= 0; + volume_full_range_support_ = QVersionNumber::compare(QVersionNumber(static_cast(version_major), static_cast(version_minor)), QVersionNumber(1, 24)) >= 0; + eq_band_gains_.reserve(kEqBandCount); for (int i = 0; i < kEqBandCount; ++i) eq_band_gains_ << 0; @@ -182,11 +188,6 @@ GstEnginePipeline::GstEnginePipeline(QObject *parent) timer_fader_timeout_->setSingleShot(true); QObject::connect(timer_fader_timeout_, &QTimer::timeout, this, &GstEnginePipeline::FaderTimelineTimeout); - guint gst_plugins_base_version_major; - guint gst_plugins_base_version_minor; - gst_plugins_base_version(&gst_plugins_base_version_major, &gst_plugins_base_version_minor, nullptr, nullptr); - gstreamer_supports_volume_full_range_ = (gst_plugins_base_version_major > 1 || (gst_plugins_base_version_major == 1 && gst_plugins_base_version_minor >= 24)); - } GstEnginePipeline::~GstEnginePipeline() { @@ -449,15 +450,7 @@ 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; - guint version_major = 0, version_minor = 0, version_micro = 0, version_nano = 0; - gst_plugins_base_version(&version_major, &version_minor, &version_micro, &version_nano); - if (QVersionNumber::compare(QVersionNumber(static_cast(version_major), static_cast(version_minor)), QVersionNumber(1, 24)) >= 0) { - pipeline_ = CreateElement(u"playbin3"_s, u"pipeline"_s, nullptr, error); - } - else { - pipeline_ = CreateElement(u"playbin"_s, u"pipeline"_s, nullptr, error); - } - + pipeline_ = CreateElement(playbin3_support_ ? u"playbin3"_s : u"playbin"_s, u"pipeline"_s, nullptr, error); if (!pipeline_) return false; pad_added_cb_id_ = CHECKED_GCONNECT(G_OBJECT(pipeline_), "pad-added", &PadAddedCallback, this); @@ -2037,7 +2030,7 @@ void GstEnginePipeline::UpdateEBUR128LoudnessNormalizingGaindB() { if (volume_ebur128_) { auto dB_to_mult = [](const double gain_dB) { return std::pow(10., gain_dB / 20.); }; - g_object_set(G_OBJECT(volume_ebur128_), gstreamer_supports_volume_full_range_ ? "volume-full-range" : "volume", dB_to_mult(ebur128_loudness_normalizing_gain_db_), nullptr); + g_object_set(G_OBJECT(volume_ebur128_), volume_full_range_support_ ? "volume-full-range" : "volume", dB_to_mult(ebur128_loudness_normalizing_gain_db_), nullptr); } } diff --git a/src/engine/gstenginepipeline.h b/src/engine/gstenginepipeline.h index 4f99626e9..75eda6f64 100644 --- a/src/engine/gstenginepipeline.h +++ b/src/engine/gstenginepipeline.h @@ -216,6 +216,9 @@ class GstEnginePipeline : public QObject { QThreadPool set_state_threadpool_; + bool playbin3_support_; + bool volume_full_range_support_; + // General settings for the pipeline QString output_; QVariant device_; @@ -263,7 +266,6 @@ class GstEnginePipeline : public QObject { // EBU R 128 Loudness Normalization bool ebur128_loudness_normalization_; - bool gstreamer_supports_volume_full_range_; // Spotify #ifdef HAVE_SPOTIFY