diff options
-rw-r--r-- | src/Main.cxx | 2 | ||||
-rw-r--r-- | src/OutputAll.cxx | 7 | ||||
-rw-r--r-- | src/OutputControl.cxx | 9 | ||||
-rw-r--r-- | src/OutputControl.hxx | 6 | ||||
-rw-r--r-- | src/PlayerCommands.cxx | 4 | ||||
-rw-r--r-- | src/ReplayGainConfig.cxx | 5 | ||||
-rw-r--r-- | src/filter/replay_gain_filter_plugin.c | 28 | ||||
-rw-r--r-- | src/filter/replay_gain_filter_plugin.h | 3 | ||||
-rw-r--r-- | src/output_all.h | 4 | ||||
-rw-r--r-- | src/replay_gain_config.h | 2 | ||||
-rw-r--r-- | test/run_filter.c | 3 | ||||
-rw-r--r-- | test/run_output.cxx | 3 |
12 files changed, 56 insertions, 20 deletions
diff --git a/src/Main.cxx b/src/Main.cxx index 7f56d83a4..a8f6d55ee 100644 --- a/src/Main.cxx +++ b/src/Main.cxx @@ -480,6 +480,8 @@ int mpd_main(int argc, char *argv[]) return EXIT_FAILURE; } + audio_output_all_set_replay_gain_mode(replay_gain_get_real_mode(g_playlist.queue.random)); + success = config_get_bool(CONF_AUTO_UPDATE, false); #ifdef ENABLE_INOTIFY if (success && mapper_has_music_directory()) diff --git a/src/OutputAll.cxx b/src/OutputAll.cxx index d211cdce4..9c65ddcae 100644 --- a/src/OutputAll.cxx +++ b/src/OutputAll.cxx @@ -273,6 +273,13 @@ audio_output_all_update(void) return ret; } +void +audio_output_all_set_replay_gain_mode(enum replay_gain_mode mode) +{ + for (unsigned i = 0; i < num_audio_outputs; ++i) + audio_output_set_replay_gain_mode(audio_outputs[i], mode); +} + bool audio_output_all_play(struct music_chunk *chunk, GError **error_r) { diff --git a/src/OutputControl.cxx b/src/OutputControl.cxx index 36e80a014..7cc2814de 100644 --- a/src/OutputControl.cxx +++ b/src/OutputControl.cxx @@ -27,6 +27,7 @@ extern "C" { #include "mixer_control.h" #include "mixer_plugin.h" #include "notify.h" +#include "filter/replay_gain_filter_plugin.h" } #include "filter_plugin.h" @@ -96,6 +97,14 @@ ao_lock_command(struct audio_output *ao, enum audio_output_command cmd) } void +audio_output_set_replay_gain_mode(struct audio_output *ao, + enum replay_gain_mode mode) +{ + if (ao->replay_gain_filter != NULL) + replay_gain_filter_set_mode(ao->replay_gain_filter, mode); +} + +void audio_output_enable(struct audio_output *ao) { if (ao->thread == NULL) { diff --git a/src/OutputControl.hxx b/src/OutputControl.hxx index 90769180f..cf906d2f0 100644 --- a/src/OutputControl.hxx +++ b/src/OutputControl.hxx @@ -20,6 +20,8 @@ #ifndef MPD_OUTPUT_CONTROL_HXX #define MPD_OUTPUT_CONTROL_HXX +#include "replay_gain_info.h" + #include <glib.h> #include <stddef.h> @@ -36,6 +38,10 @@ audio_output_quark(void) return g_quark_from_static_string("audio_output"); } +void +audio_output_set_replay_gain_mode(struct audio_output *ao, + enum replay_gain_mode mode); + /** * Enables the device. */ diff --git a/src/PlayerCommands.cxx b/src/PlayerCommands.cxx index a9cde7fd5..2bd6fc4e6 100644 --- a/src/PlayerCommands.cxx +++ b/src/PlayerCommands.cxx @@ -31,6 +31,7 @@ extern "C" { #include "audio_format.h" #include "volume.h" #include "replay_gain_config.h" +#include "output_all.h" } #include "PlayerControl.hxx" @@ -280,6 +281,7 @@ handle_random(Client *client, G_GNUC_UNUSED int argc, char *argv[]) return COMMAND_RETURN_ERROR; playlist_set_random(&client->playlist, client->player_control, status); + audio_output_all_set_replay_gain_mode(replay_gain_get_real_mode(client->playlist.queue.random)); return COMMAND_RETURN_OK; } @@ -386,6 +388,8 @@ handle_replay_gain_mode(Client *client, return COMMAND_RETURN_ERROR; } + audio_output_all_set_replay_gain_mode(replay_gain_get_real_mode(client->playlist.queue.random)); + return COMMAND_RETURN_OK; } diff --git a/src/ReplayGainConfig.cxx b/src/ReplayGainConfig.cxx index 4d3e2f29d..d3af332ce 100644 --- a/src/ReplayGainConfig.cxx +++ b/src/ReplayGainConfig.cxx @@ -136,14 +136,15 @@ void replay_gain_global_init(void) replay_gain_limit = config_get_bool(CONF_REPLAYGAIN_LIMIT, DEFAULT_REPLAYGAIN_LIMIT); } -enum replay_gain_mode replay_gain_get_real_mode(void) +enum replay_gain_mode +replay_gain_get_real_mode(bool random_mode) { enum replay_gain_mode rgm; rgm = replay_gain_mode; if (rgm == REPLAY_GAIN_AUTO) - rgm = g_playlist.queue.random ? REPLAY_GAIN_TRACK : REPLAY_GAIN_ALBUM; + rgm = random_mode ? REPLAY_GAIN_TRACK : REPLAY_GAIN_ALBUM; return rgm; } diff --git a/src/filter/replay_gain_filter_plugin.c b/src/filter/replay_gain_filter_plugin.c index 583a09f90..9fd3cbc07 100644 --- a/src/filter/replay_gain_filter_plugin.c +++ b/src/filter/replay_gain_filter_plugin.c @@ -119,7 +119,7 @@ replay_gain_filter_init(G_GNUC_UNUSED const struct config_param *param, filter_init(&filter->filter, &replay_gain_filter_plugin); filter->mixer = NULL; - filter->mode = replay_gain_get_real_mode(); + filter->mode = REPLAY_GAIN_OFF; replay_gain_info_init(&filter->info); filter->volume = PCM_VOLUME_1; @@ -164,16 +164,6 @@ replay_gain_filter_filter(struct filter *_filter, (struct replay_gain_filter *)_filter; bool success; void *dest; - enum replay_gain_mode rg_mode; - - /* check if the mode has been changed since the last call */ - rg_mode = replay_gain_get_real_mode(); - - if (filter->mode != rg_mode) { - g_debug("replay gain mode has changed %d->%d\n", filter->mode, rg_mode); - filter->mode = rg_mode; - replay_gain_filter_update(filter); - } *dest_size_r = src_size; @@ -243,3 +233,19 @@ replay_gain_filter_set_info(struct filter *_filter, replay_gain_filter_update(filter); } + +void +replay_gain_filter_set_mode(struct filter *_filter, enum replay_gain_mode mode) +{ + struct replay_gain_filter *filter = + (struct replay_gain_filter *)_filter; + + if (mode == filter->mode) + /* no change */ + return; + + g_debug("replay gain mode has changed %d->%d\n", filter->mode, mode); + + filter->mode = mode; + replay_gain_filter_update(filter); +} diff --git a/src/filter/replay_gain_filter_plugin.h b/src/filter/replay_gain_filter_plugin.h index 45b738e40..da2df9d6a 100644 --- a/src/filter/replay_gain_filter_plugin.h +++ b/src/filter/replay_gain_filter_plugin.h @@ -47,4 +47,7 @@ void replay_gain_filter_set_info(struct filter *filter, const struct replay_gain_info *info); +void +replay_gain_filter_set_mode(struct filter *filter, enum replay_gain_mode mode); + #endif diff --git a/src/output_all.h b/src/output_all.h index 00864c9ba..becf4b695 100644 --- a/src/output_all.h +++ b/src/output_all.h @@ -26,6 +26,7 @@ #ifndef OUTPUT_ALL_H #define OUTPUT_ALL_H +#include "replay_gain_info.h" #include "gerror.h" #include <stdbool.h> @@ -102,6 +103,9 @@ audio_output_all_close(void); void audio_output_all_release(void); +void +audio_output_all_set_replay_gain_mode(enum replay_gain_mode mode); + /** * Enqueue a #music_chunk object for playing, i.e. pushes it to a * #music_pipe. diff --git a/src/replay_gain_config.h b/src/replay_gain_config.h index 18747cef2..2bf4f32f2 100644 --- a/src/replay_gain_config.h +++ b/src/replay_gain_config.h @@ -50,6 +50,6 @@ replay_gain_set_mode_string(const char *p); * Returns the "real" mode according to the "auto" setting" */ enum replay_gain_mode -replay_gain_get_real_mode(void); +replay_gain_get_real_mode(bool random_mode); #endif diff --git a/test/run_filter.c b/test/run_filter.c index 6a2cd1ea2..d319a9a22 100644 --- a/test/run_filter.c +++ b/test/run_filter.c @@ -25,7 +25,6 @@ #include "pcm_volume.h" #include "idle.h" #include "mixer_control.h" -#include "Playlist.hxx" #include "stdbin.h" #include <glib.h> @@ -35,8 +34,6 @@ #include <errno.h> #include <unistd.h> -struct playlist g_playlist; - void idle_add(G_GNUC_UNUSED unsigned flags) { diff --git a/test/run_output.cxx b/test/run_output.cxx index e3d7163e3..04374537e 100644 --- a/test/run_output.cxx +++ b/test/run_output.cxx @@ -32,7 +32,6 @@ extern "C" { #include "idle.h" } -#include "Playlist.hxx" #include "PlayerControl.hxx" #include "stdbin.h" @@ -43,8 +42,6 @@ extern "C" { #include <unistd.h> #include <stdlib.h> -struct playlist g_playlist; - void idle_add(G_GNUC_UNUSED unsigned flags) { |