filter/ReplayGain: add ReplayGainConfig copy

Remove dependency on ReplayGain global variables.
This commit is contained in:
Max Kellermann
2016-11-25 13:54:55 +01:00
parent 3b867462a3
commit 3000b9dcde
10 changed files with 52 additions and 47 deletions

View File

@@ -205,7 +205,9 @@ AudioOutput::Configure(const ConfigBlock &block)
}
static void
audio_output_setup(EventLoop &event_loop, AudioOutput &ao,
audio_output_setup(EventLoop &event_loop,
const ReplayGainConfig &replay_gain_config,
AudioOutput &ao,
MixerListener &mixer_listener,
const ConfigBlock &block)
{
@@ -216,12 +218,14 @@ audio_output_setup(EventLoop &event_loop, AudioOutput &ao,
block.GetBlockValue("replay_gain_handler", "software");
if (strcmp(replay_gain_handler, "none") != 0) {
ao.prepared_replay_gain_filter = NewReplayGainFilter();
ao.prepared_replay_gain_filter =
NewReplayGainFilter(replay_gain_config);
assert(ao.prepared_replay_gain_filter != nullptr);
ao.replay_gain_serial = 0;
ao.prepared_other_replay_gain_filter = NewReplayGainFilter();
ao.prepared_other_replay_gain_filter =
NewReplayGainFilter(replay_gain_config);
assert(ao.prepared_other_replay_gain_filter != nullptr);
ao.other_replay_gain_serial = 0;
@@ -267,7 +271,9 @@ audio_output_setup(EventLoop &event_loop, AudioOutput &ao,
}
AudioOutput *
audio_output_new(EventLoop &event_loop, const ConfigBlock &block,
audio_output_new(EventLoop &event_loop,
const ReplayGainConfig &replay_gain_config,
const ConfigBlock &block,
MixerListener &mixer_listener,
PlayerControl &pc)
{
@@ -298,7 +304,8 @@ audio_output_new(EventLoop &event_loop, const ConfigBlock &block,
assert(ao != nullptr);
try {
audio_output_setup(event_loop, *ao, mixer_listener, block);
audio_output_setup(event_loop, replay_gain_config,
*ao, mixer_listener, block);
} catch (...) {
ao_plugin_finish(ao);
throw;

View File

@@ -40,6 +40,7 @@ struct MusicChunk;
struct ConfigBlock;
struct PlayerControl;
struct AudioOutputPlugin;
struct ReplayGainConfig;
struct AudioOutput {
enum class Command {
@@ -464,7 +465,9 @@ extern struct notify audio_output_client_notify;
* Throws #std::runtime_error on error.
*/
AudioOutput *
audio_output_new(EventLoop &event_loop, const ConfigBlock &block,
audio_output_new(EventLoop &event_loop,
const ReplayGainConfig &replay_gain_config,
const ConfigBlock &block,
MixerListener &mixer_listener,
PlayerControl &pc);

View File

@@ -50,10 +50,12 @@ MultipleOutputs::~MultipleOutputs()
}
static AudioOutput *
LoadOutput(EventLoop &event_loop, MixerListener &mixer_listener,
LoadOutput(EventLoop &event_loop,
const ReplayGainConfig &replay_gain_config,
MixerListener &mixer_listener,
PlayerControl &pc, const ConfigBlock &block)
try {
return audio_output_new(event_loop, block,
return audio_output_new(event_loop, replay_gain_config, block,
mixer_listener,
pc);
} catch (const std::runtime_error &e) {
@@ -65,11 +67,14 @@ try {
}
void
MultipleOutputs::Configure(EventLoop &event_loop, PlayerControl &pc)
MultipleOutputs::Configure(EventLoop &event_loop,
const ReplayGainConfig &replay_gain_config,
PlayerControl &pc)
{
for (const auto *param = config_get_block(ConfigBlockOption::AUDIO_OUTPUT);
param != nullptr; param = param->next) {
auto output = LoadOutput(event_loop, mixer_listener,
auto output = LoadOutput(event_loop, replay_gain_config,
mixer_listener,
pc, *param);
if (FindByName(output->name) != nullptr)
throw FormatRuntimeError("output devices with identical "
@@ -81,7 +86,8 @@ MultipleOutputs::Configure(EventLoop &event_loop, PlayerControl &pc)
if (outputs.empty()) {
/* auto-detect device */
const ConfigBlock empty;
auto output = LoadOutput(event_loop, mixer_listener,
auto output = LoadOutput(event_loop, replay_gain_config,
mixer_listener,
pc, empty);
outputs.push_back(output);
}

View File

@@ -42,6 +42,7 @@ class MixerListener;
struct MusicChunk;
struct PlayerControl;
struct AudioOutput;
struct ReplayGainConfig;
class MultipleOutputs {
MixerListener &mixer_listener;
@@ -75,7 +76,9 @@ public:
MultipleOutputs(MixerListener &_mixer_listener);
~MultipleOutputs();
void Configure(EventLoop &event_loop, PlayerControl &pc);
void Configure(EventLoop &event_loop,
const ReplayGainConfig &replay_gain_config,
PlayerControl &pc);
/**
* Returns the total number of audio output devices, including