filter/ReplayGain: add ReplayGainConfig copy
Remove dependency on ReplayGain global variables.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user