diff options
author | Stapper <stapper@partyreason.be> | 2020-11-13 17:35:36 +0100 |
---|---|---|
committer | Stapper <stapper@partyreason.be> | 2020-11-15 19:47:53 +0100 |
commit | ba5531f9dd1f7f22e696d3927f379839d7bdd9fc (patch) | |
tree | 63e8fb53aa28b559570ea68b1e919bd41b3da9a4 /src | |
parent | 60d19b23803d33c99bed644976387b78c17a470a (diff) |
Fixes #994 - moveoutput: new AudioOutputControl created from copyMoving an output to a partition is now done via MultipleOutputs::AddCopy(),using a new AudioOutputControl constructor. Tags and always_on settings willpersist when moving outputs between partitions.
Diffstat (limited to 'src')
-rw-r--r-- | src/command/PartitionCommands.cxx | 5 | ||||
-rw-r--r-- | src/output/Control.cxx | 11 | ||||
-rw-r--r-- | src/output/Control.hxx | 3 | ||||
-rw-r--r-- | src/output/MultipleOutputs.cxx | 13 | ||||
-rw-r--r-- | src/output/MultipleOutputs.hxx | 4 |
5 files changed, 33 insertions, 3 deletions
diff --git a/src/command/PartitionCommands.cxx b/src/command/PartitionCommands.cxx index fbcb8a754..9d260425f 100644 --- a/src/command/PartitionCommands.cxx +++ b/src/command/PartitionCommands.cxx @@ -183,9 +183,8 @@ handle_moveoutput(Client &client, Request request, Response &response) existing_output->ReplaceDummy(output->Steal(), was_enabled); else - /* add it to the output list */ - dest_partition.outputs.Add(output->Steal(), - was_enabled); + /* copy the AudioOutputControl and add it to the output list */ + dest_partition.outputs.AddCopy(output,was_enabled); instance.EmitIdle(IDLE_OUTPUT); return CommandResult::OK; diff --git a/src/output/Control.cxx b/src/output/Control.cxx index fd4a1aa50..f05ec29ff 100644 --- a/src/output/Control.cxx +++ b/src/output/Control.cxx @@ -39,6 +39,17 @@ AudioOutputControl::AudioOutputControl(std::unique_ptr<FilteredAudioOutput> _out { } +AudioOutputControl::AudioOutputControl(AudioOutputControl *_output, + AudioOutputClient &_client) noexcept + :output(std::move(_output->Steal())), + name(output->GetName()), + client(_client), + thread(BIND_THIS_METHOD(Task)) +{ + tags =_output->tags; + always_on=_output->always_on; +} + AudioOutputControl::~AudioOutputControl() noexcept { StopThread(); diff --git a/src/output/Control.hxx b/src/output/Control.hxx index 809c65101..ab8637f47 100644 --- a/src/output/Control.hxx +++ b/src/output/Control.hxx @@ -245,6 +245,9 @@ public: AudioOutputControl(std::unique_ptr<FilteredAudioOutput> _output, AudioOutputClient &_client) noexcept; + AudioOutputControl(AudioOutputControl *_outputControl, + AudioOutputClient &_client) noexcept; + ~AudioOutputControl() noexcept; AudioOutputControl(const AudioOutputControl &) = delete; diff --git a/src/output/MultipleOutputs.cxx b/src/output/MultipleOutputs.cxx index 71014e8d1..0639d51c7 100644 --- a/src/output/MultipleOutputs.cxx +++ b/src/output/MultipleOutputs.cxx @@ -141,6 +141,19 @@ MultipleOutputs::Add(std::unique_ptr<FilteredAudioOutput> output, } void +MultipleOutputs::AddCopy(AudioOutputControl *outputControl, + bool enable) noexcept +{ + // TODO: this operation needs to be protected with a mutex + outputs.emplace_back(std::make_unique<AudioOutputControl>(outputControl, + client)); + + outputs.back()->LockSetEnabled(enable); + + client.ApplyEnabled(); +} + +void MultipleOutputs::EnableDisable() { /* parallel execution */ diff --git a/src/output/MultipleOutputs.hxx b/src/output/MultipleOutputs.hxx index 9c885cb3a..6b3e538c2 100644 --- a/src/output/MultipleOutputs.hxx +++ b/src/output/MultipleOutputs.hxx @@ -128,6 +128,10 @@ public: void Add(std::unique_ptr<FilteredAudioOutput> output, bool enable) noexcept; + void AddCopy(AudioOutputControl *outputControl, + bool enable) noexcept; + + void SetReplayGainMode(ReplayGainMode mode) noexcept; /** |