diff --git a/src/engines/gstenginepipeline.cpp b/src/engines/gstenginepipeline.cpp index 8b9eef3d0..7808e4502 100644 --- a/src/engines/gstenginepipeline.cpp +++ b/src/engines/gstenginepipeline.cpp @@ -48,13 +48,11 @@ const int GstEnginePipeline::kEqBandCount = 10; const int GstEnginePipeline::kEqBandFrequencies[] = { 60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000}; -int GstEnginePipeline::sId = 1; GstElementDeleter* GstEnginePipeline::sElementDeleter = nullptr; GstEnginePipeline::GstEnginePipeline(GstEngine* engine) : GstPipelineBase(), engine_(engine), - id_(sId++), valid_(false), sink_(GstEngine::kAutoSink), segment_start_(0), diff --git a/src/engines/gstenginepipeline.h b/src/engines/gstenginepipeline.h index b64774003..f6f231b11 100644 --- a/src/engines/gstenginepipeline.h +++ b/src/engines/gstenginepipeline.h @@ -44,9 +44,6 @@ class GstEnginePipeline : public GstPipelineBase { GstEnginePipeline(GstEngine* engine); ~GstEnginePipeline(); - // Globally unique across all pipelines. - int id() const { return id_; } - // Call these setters before Init void set_output_device(const QString& sink, const QVariant& device); void set_replaygain(bool enabled, int mode, float preamp, bool compression); @@ -181,14 +178,6 @@ class GstEnginePipeline : public GstPipelineBase { GstEngine* engine_; - // Using == to compare two pipelines is a bad idea, because new ones often - // get created in the same address as old ones. This ID will be unique for - // each pipeline. - // Threading warning: access to the static ID field isn't protected by a - // mutex because all pipeline creation is currently done in the main thread. - static int sId; - int id_; - // General settings for the pipeline bool valid_; QString sink_; diff --git a/src/engines/gstpipelinebase.cpp b/src/engines/gstpipelinebase.cpp index 852f5d7fa..c28b415af 100644 --- a/src/engines/gstpipelinebase.cpp +++ b/src/engines/gstpipelinebase.cpp @@ -19,7 +19,10 @@ #include "core/logging.h" -GstPipelineBase::GstPipelineBase() : QObject(nullptr), pipeline_(nullptr) {} +std::atomic GstPipelineBase::sId(1); + +GstPipelineBase::GstPipelineBase() + : QObject(nullptr), pipeline_(nullptr), id_(sId++) {} GstPipelineBase::~GstPipelineBase() { if (pipeline_) { diff --git a/src/engines/gstpipelinebase.h b/src/engines/gstpipelinebase.h index bc81c56f3..b5c738dd5 100644 --- a/src/engines/gstpipelinebase.h +++ b/src/engines/gstpipelinebase.h @@ -29,10 +29,20 @@ class GstPipelineBase : public QObject { virtual bool Init(const QString& name); + // Globally unique across all pipelines. + int id() const { return id_; } + void DumpGraph(); protected: GstElement* pipeline_; + + private: + // Using == to compare two pipelines is a bad idea, because new ones often + // get created in the same address as old ones. This ID will be unique for + // each pipeline. + static std::atomic sId; + const int id_; }; #endif // GSTPIPELINEBASE_H