summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--src/AudioConfig.cxx52
-rw-r--r--src/AudioConfig.hxx32
-rw-r--r--src/Main.cxx16
-rw-r--r--src/Partition.cxx3
-rw-r--r--src/Partition.hxx1
-rw-r--r--src/decoder/Bridge.cxx4
-rw-r--r--src/decoder/DecoderControl.cxx2
-rw-r--r--src/decoder/DecoderControl.hxx6
-rw-r--r--src/player/Control.cxx2
-rw-r--r--src/player/Control.hxx6
-rw-r--r--src/player/Thread.cxx4
-rw-r--r--test/run_output.cxx3
13 files changed, 41 insertions, 91 deletions
diff --git a/Makefile.am b/Makefile.am
index 16dc760d0..b2c0161cb 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -76,7 +76,6 @@ libmpd_a_SOURCES = \
src/open.h \
src/poison.h \
src/notify.cxx src/notify.hxx \
- src/AudioConfig.cxx src/AudioConfig.hxx \
src/protocol/Ack.cxx src/protocol/Ack.hxx \
src/protocol/ArgParser.cxx src/protocol/ArgParser.hxx \
src/protocol/Result.cxx src/protocol/Result.hxx \
diff --git a/src/AudioConfig.cxx b/src/AudioConfig.cxx
deleted file mode 100644
index 35b501cc7..000000000
--- a/src/AudioConfig.cxx
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2003-2016 The Music Player Daemon Project
- * http://www.musicpd.org
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include "config.h"
-#include "AudioConfig.hxx"
-#include "AudioFormat.hxx"
-#include "AudioParser.hxx"
-#include "config/Param.hxx"
-#include "config/ConfigGlobal.hxx"
-#include "config/ConfigOption.hxx"
-#include "util/RuntimeError.hxx"
-
-static AudioFormat configured_audio_format;
-
-AudioFormat
-getOutputAudioFormat(AudioFormat inAudioFormat)
-{
- AudioFormat out_audio_format = inAudioFormat;
- out_audio_format.ApplyMask(configured_audio_format);
- return out_audio_format;
-}
-
-void initAudioConfig(void)
-{
- const auto *param = config_get_param(ConfigOption::AUDIO_OUTPUT_FORMAT);
-
- if (param == nullptr)
- return;
-
- try {
- configured_audio_format = ParseAudioFormat(param->value.c_str(), true);
- } catch (const std::runtime_error &) {
- std::throw_with_nested(FormatRuntimeError("error parsing line %i",
- param->line));
- }
-}
diff --git a/src/AudioConfig.hxx b/src/AudioConfig.hxx
deleted file mode 100644
index d84a259ad..000000000
--- a/src/AudioConfig.hxx
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2003-2016 The Music Player Daemon Project
- * http://www.musicpd.org
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifndef MPD_AUDIO_CONFIG_HXX
-#define MPD_AUDIO_CONFIG_HXX
-
-struct AudioFormat;
-
-AudioFormat
-getOutputAudioFormat(AudioFormat inFormat);
-
-/* make sure initPlayerData is called before this function!! */
-void
-initAudioConfig();
-
-#endif
diff --git a/src/Main.cxx b/src/Main.cxx
index 8e576787b..381a10fc5 100644
--- a/src/Main.cxx
+++ b/src/Main.cxx
@@ -45,7 +45,7 @@
#include "playlist/PlaylistRegistry.hxx"
#include "zeroconf/ZeroconfGlue.hxx"
#include "decoder/DecoderList.hxx"
-#include "AudioConfig.hxx"
+#include "AudioParser.hxx"
#include "pcm/PcmConvert.hxx"
#include "unix/SignalHandlers.hxx"
#include "system/FatalError.hxx"
@@ -327,10 +327,23 @@ initialize_decoder_and_player(void)
config_get_positive(ConfigOption::MAX_PLAYLIST_LENGTH,
DEFAULT_PLAYLIST_MAX_LENGTH);
+ AudioFormat configured_audio_format = AudioFormat::Undefined();
+ param = config_get_param(ConfigOption::AUDIO_OUTPUT_FORMAT);
+ if (param != nullptr) {
+ try {
+ configured_audio_format = ParseAudioFormat(param->value.c_str(),
+ true);
+ } catch (const std::runtime_error &) {
+ std::throw_with_nested(FormatRuntimeError("error parsing line %i",
+ param->line));
+ }
+ }
+
instance->partition = new Partition(*instance,
max_length,
buffered_chunks,
buffered_before_play,
+ configured_audio_format,
replay_gain_config);
try {
@@ -489,7 +502,6 @@ try {
glue_sticker_init();
command_init();
- initAudioConfig();
instance->partition->outputs.Configure(instance->event_loop,
replay_gain_config,
instance->partition->pc);
diff --git a/src/Partition.cxx b/src/Partition.cxx
index b3dc9b73d..824051d64 100644
--- a/src/Partition.cxx
+++ b/src/Partition.cxx
@@ -28,13 +28,14 @@ Partition::Partition(Instance &_instance,
unsigned max_length,
unsigned buffer_chunks,
unsigned buffered_before_play,
+ AudioFormat configured_audio_format,
const ReplayGainConfig &replay_gain_config)
:instance(_instance),
global_events(instance.event_loop, BIND_THIS_METHOD(OnGlobalEvent)),
playlist(max_length, *this),
outputs(*this),
pc(*this, outputs, buffer_chunks, buffered_before_play,
- replay_gain_config)
+ configured_audio_format, replay_gain_config)
{
UpdateEffectiveReplayGainMode();
}
diff --git a/src/Partition.hxx b/src/Partition.hxx
index c7fda3055..9637c5d30 100644
--- a/src/Partition.hxx
+++ b/src/Partition.hxx
@@ -59,6 +59,7 @@ struct Partition final : QueueListener, PlayerListener, MixerListener {
unsigned max_length,
unsigned buffer_chunks,
unsigned buffered_before_play,
+ AudioFormat configured_audio_format,
const ReplayGainConfig &replay_gain_config);
void EmitGlobalEvent(unsigned mask) {
diff --git a/src/decoder/Bridge.cxx b/src/decoder/Bridge.cxx
index 8e9941192..db606b9d2 100644
--- a/src/decoder/Bridge.cxx
+++ b/src/decoder/Bridge.cxx
@@ -29,7 +29,6 @@
#include "MusicChunk.hxx"
#include "pcm/PcmConvert.hxx"
#include "tag/Tag.hxx"
-#include "AudioConfig.hxx"
#include "Log.hxx"
#include "input/InputStream.hxx"
#include "util/ConstBuffer.hxx"
@@ -260,7 +259,8 @@ DecoderBridge::Ready(const AudioFormat audio_format,
assert(audio_format.IsValid());
dc.in_audio_format = audio_format;
- dc.out_audio_format = getOutputAudioFormat(audio_format);
+ dc.out_audio_format = audio_format;
+ dc.out_audio_format.ApplyMask(dc.configured_audio_format);
dc.seekable = seekable;
dc.total_time = duration;
diff --git a/src/decoder/DecoderControl.cxx b/src/decoder/DecoderControl.cxx
index f10968e2d..6bb80c7da 100644
--- a/src/decoder/DecoderControl.cxx
+++ b/src/decoder/DecoderControl.cxx
@@ -28,8 +28,10 @@
#include <assert.h>
DecoderControl::DecoderControl(Mutex &_mutex, Cond &_client_cond,
+ const AudioFormat _configured_audio_format,
const ReplayGainConfig &_replay_gain_config)
:mutex(_mutex), client_cond(_client_cond),
+ configured_audio_format(_configured_audio_format),
replay_gain_config(_replay_gain_config) {}
DecoderControl::~DecoderControl()
diff --git a/src/decoder/DecoderControl.hxx b/src/decoder/DecoderControl.hxx
index c680f0365..9edaa44a7 100644
--- a/src/decoder/DecoderControl.hxx
+++ b/src/decoder/DecoderControl.hxx
@@ -115,6 +115,11 @@ struct DecoderControl {
bool seekable;
SongTime seek_time;
+ /**
+ * The "audio_output_format" setting.
+ */
+ const AudioFormat configured_audio_format;
+
/** the format of the song file */
AudioFormat in_audio_format;
@@ -171,6 +176,7 @@ struct DecoderControl {
* @param _client_cond see #client_cond
*/
DecoderControl(Mutex &_mutex, Cond &_client_cond,
+ const AudioFormat _configured_audio_format,
const ReplayGainConfig &_replay_gain_config);
~DecoderControl();
diff --git a/src/player/Control.cxx b/src/player/Control.cxx
index cc56a19a3..db2537a33 100644
--- a/src/player/Control.cxx
+++ b/src/player/Control.cxx
@@ -30,10 +30,12 @@ PlayerControl::PlayerControl(PlayerListener &_listener,
MultipleOutputs &_outputs,
unsigned _buffer_chunks,
unsigned _buffered_before_play,
+ AudioFormat _configured_audio_format,
const ReplayGainConfig &_replay_gain_config)
:listener(_listener), outputs(_outputs),
buffer_chunks(_buffer_chunks),
buffered_before_play(_buffered_before_play),
+ configured_audio_format(_configured_audio_format),
replay_gain_config(_replay_gain_config)
{
}
diff --git a/src/player/Control.hxx b/src/player/Control.hxx
index 144bcade6..798aeacce 100644
--- a/src/player/Control.hxx
+++ b/src/player/Control.hxx
@@ -106,6 +106,11 @@ struct PlayerControl {
const unsigned buffered_before_play;
/**
+ * The "audio_output_format" setting.
+ */
+ const AudioFormat configured_audio_format;
+
+ /**
* The handle of the player thread.
*/
Thread thread;
@@ -187,6 +192,7 @@ struct PlayerControl {
MultipleOutputs &_outputs,
unsigned buffer_chunks,
unsigned buffered_before_play,
+ AudioFormat _configured_audio_format,
const ReplayGainConfig &_replay_gain_config);
~PlayerControl();
diff --git a/src/player/Thread.cxx b/src/player/Thread.cxx
index bf90a859d..320f12859 100644
--- a/src/player/Thread.cxx
+++ b/src/player/Thread.cxx
@@ -1163,7 +1163,9 @@ player_task(void *arg)
SetThreadName("player");
- DecoderControl dc(pc.mutex, pc.cond, pc.replay_gain_config);
+ DecoderControl dc(pc.mutex, pc.cond,
+ pc.configured_audio_format,
+ pc.replay_gain_config);
decoder_thread_start(dc);
MusicBuffer buffer(pc.buffer_chunks);
diff --git a/test/run_output.cxx b/test/run_output.cxx
index d79ec8ff1..cd19f7bf3 100644
--- a/test/run_output.cxx
+++ b/test/run_output.cxx
@@ -54,10 +54,12 @@ PlayerControl::PlayerControl(PlayerListener &_listener,
MultipleOutputs &_outputs,
unsigned _buffer_chunks,
unsigned _buffered_before_play,
+ AudioFormat _configured_audio_format,
const ReplayGainConfig &_replay_gain_config)
:listener(_listener), outputs(_outputs),
buffer_chunks(_buffer_chunks),
buffered_before_play(_buffered_before_play),
+ configured_audio_format(_configured_audio_format),
replay_gain_config(_replay_gain_config) {}
PlayerControl::~PlayerControl() {}
@@ -73,6 +75,7 @@ load_audio_output(EventLoop &event_loop, const char *name)
static struct PlayerControl dummy_player_control(*(PlayerListener *)nullptr,
*(MultipleOutputs *)nullptr,
32, 4,
+ AudioFormat::Undefined(),
ReplayGainConfig());
return audio_output_new(event_loop, ReplayGainConfig(), *param,