diff options
author | Max Kellermann <max@duempel.org> | 2009-12-14 21:36:25 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-12-25 17:51:08 +0100 |
commit | 870436a592b081c4630b9ecc36ff8daecf6496cc (patch) | |
tree | 96aca67066a54b308cd2958467bb17b81234f3fb /src | |
parent | 6a17233f78d177bacc3b13fa4e8ac15fe08a4f51 (diff) | |
download | mpd-870436a592b081c4630b9ecc36ff8daecf6496cc.tar.gz mpd-870436a592b081c4630b9ecc36ff8daecf6496cc.tar.xz mpd-870436a592b081c4630b9ecc36ff8daecf6496cc.zip |
output_init: use the normalize filter plugin
Use the plugin instead of the glue code in normalize.c. This is used
wrapped inside a "autoconv" filter, to enable normalization for all
input file formats.
Diffstat (limited to 'src')
-rw-r--r-- | src/decoder_api.c | 4 | ||||
-rw-r--r-- | src/main.c | 3 | ||||
-rw-r--r-- | src/normalize.c | 54 | ||||
-rw-r--r-- | src/normalize.h | 34 | ||||
-rw-r--r-- | src/output_init.c | 11 |
5 files changed, 11 insertions, 95 deletions
diff --git a/src/decoder_api.c b/src/decoder_api.c index 73b01533f..ae2c6687b 100644 --- a/src/decoder_api.c +++ b/src/decoder_api.c @@ -25,8 +25,6 @@ #include "audio.h" #include "song.h" #include "buffer.h" - -#include "normalize.h" #include "pipe.h" #include "chunk.h" @@ -340,8 +338,6 @@ decoder_data(struct decoder *decoder, if (replay_gain_mode != REPLAY_GAIN_OFF) replay_gain_apply(replay_gain_info, dest, nbytes, &dc->out_audio_format); - else if (normalizationEnabled) - normalizeData(dest, nbytes, &dc->out_audio_format); /* expand the music pipe chunk */ diff --git a/src/main.c b/src/main.c index 882664d49..a40dae369 100644 --- a/src/main.c +++ b/src/main.c @@ -49,7 +49,6 @@ #include "state_file.h" #include "tag.h" #include "dbUtils.h" -#include "normalize.h" #include "zeroconf.h" #include "event_pipe.h" #include "dirvec.h" @@ -348,7 +347,6 @@ int main(int argc, char *argv[]) audio_output_all_init(); client_manager_init(); replay_gain_global_init(); - initNormalization(); if (!input_stream_global_init(&error)) { g_warning("%s", error->message); @@ -426,7 +424,6 @@ int main(int argc, char *argv[]) playlist_list_global_finish(); input_stream_global_finish(); - finishNormalization(); audio_output_all_finish(); volume_finish(); mapper_finish(); diff --git a/src/normalize.c b/src/normalize.c deleted file mode 100644 index 1c8173def..000000000 --- a/src/normalize.c +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2003-2009 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 "normalize.h" -#include "AudioCompress/compress.h" -#include "conf.h" -#include "audio_format.h" - -#define DEFAULT_VOLUME_NORMALIZATION 0 - -int normalizationEnabled; - -static struct Compressor *compressor; - -void initNormalization(void) -{ - normalizationEnabled = config_get_bool(CONF_VOLUME_NORMALIZATION, - DEFAULT_VOLUME_NORMALIZATION); - - if (normalizationEnabled) - compressor = Compressor_new(0); -} - -void finishNormalization(void) -{ - if (normalizationEnabled) - Compressor_delete(compressor); -} - -void normalizeData(void *buffer, int bufferSize, - const struct audio_format *format) -{ - if (format->format != SAMPLE_FORMAT_S16 || format->channels != 2) - return; - - Compressor_Process_int16(compressor, buffer, bufferSize / 2); -} diff --git a/src/normalize.h b/src/normalize.h deleted file mode 100644 index 2834f07fd..000000000 --- a/src/normalize.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2003-2009 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_NORMALIZE_H -#define MPD_NORMALIZE_H - -struct audio_format; - -extern int normalizationEnabled; - -void initNormalization(void); - -void finishNormalization(void); - -void normalizeData(void *buffer, int bufferSize, - const struct audio_format *format); - -#endif /* !NORMALIZE_H */ diff --git a/src/output_init.c b/src/output_init.c index ab5257829..fe9e4d86a 100644 --- a/src/output_init.c +++ b/src/output_init.c @@ -31,6 +31,7 @@ #include "filter_registry.h" #include "filter_config.h" #include "filter/chain_filter_plugin.h" +#include "filter/autoconvert_filter_plugin.h" #include <glib.h> @@ -192,6 +193,16 @@ audio_output_init(struct audio_output *ao, const struct config_param *param, ao->filter = filter_chain_new(); assert(ao->filter != NULL); + + if (config_get_bool(CONF_VOLUME_NORMALIZATION, false)) { + struct filter *normalize_filter = + filter_new(&normalize_filter_plugin, NULL, NULL); + assert(normalize_filter != NULL); + + filter_chain_append(ao->filter, + autoconvert_filter_new(normalize_filter)); + } + filter_chain_parse(ao->filter, config_get_block_string(param, AUDIO_FILTERS, ""), &error |