From b8be7ec90e7e5ab478742188e436cd3962d22a1f Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 7 Aug 2017 18:28:52 +0200 Subject: [PATCH] filter/Normalize: add normalize_filter_prepare() --- Makefile.am | 1 + src/filter/plugins/NormalizeFilterPlugin.cxx | 7 +++++ src/filter/plugins/NormalizeFilterPlugin.hxx | 30 ++++++++++++++++++++ src/output/Init.cxx | 9 ++---- 4 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 src/filter/plugins/NormalizeFilterPlugin.hxx diff --git a/Makefile.am b/Makefile.am index d5d9727dd..9d27172c8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1636,6 +1636,7 @@ libfilter_plugins_a_SOURCES = \ src/filter/plugins/ConvertFilterPlugin.hxx \ src/filter/plugins/RouteFilterPlugin.cxx \ src/filter/plugins/NormalizeFilterPlugin.cxx \ + src/filter/plugins/NormalizeFilterPlugin.hxx \ src/filter/plugins/ReplayGainFilterPlugin.cxx \ src/filter/plugins/ReplayGainFilterPlugin.hxx \ src/filter/plugins/VolumeFilterPlugin.cxx \ diff --git a/src/filter/plugins/NormalizeFilterPlugin.cxx b/src/filter/plugins/NormalizeFilterPlugin.cxx index d477220e3..4cd68b074 100644 --- a/src/filter/plugins/NormalizeFilterPlugin.cxx +++ b/src/filter/plugins/NormalizeFilterPlugin.cxx @@ -18,6 +18,7 @@ */ #include "config.h" +#include "NormalizeFilterPlugin.hxx" #include "filter/FilterPlugin.hxx" #include "filter/FilterInternal.hxx" #include "filter/FilterRegistry.hxx" @@ -80,3 +81,9 @@ const FilterPlugin normalize_filter_plugin = { "normalize", normalize_filter_init, }; + +PreparedFilter * +normalize_filter_prepare() noexcept +{ + return new PreparedNormalizeFilter(); +} diff --git a/src/filter/plugins/NormalizeFilterPlugin.hxx b/src/filter/plugins/NormalizeFilterPlugin.hxx new file mode 100644 index 000000000..fb62575d8 --- /dev/null +++ b/src/filter/plugins/NormalizeFilterPlugin.hxx @@ -0,0 +1,30 @@ +/* + * Copyright 2003-2017 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_FILTER_PLUGIN_HXX +#define MPD_NORMALIZE_FILTER_PLUGIN_HXX + +class PreparedFilter; +class Filter; +struct AudioFormat; + +PreparedFilter * +normalize_filter_prepare() noexcept; + +#endif diff --git a/src/output/Init.cxx b/src/output/Init.cxx index bde49be9f..29ee3d530 100644 --- a/src/output/Init.cxx +++ b/src/output/Init.cxx @@ -28,13 +28,12 @@ #include "mixer/MixerType.hxx" #include "mixer/MixerControl.hxx" #include "mixer/plugins/SoftwareMixerPlugin.hxx" -#include "filter/FilterPlugin.hxx" -#include "filter/FilterRegistry.hxx" #include "filter/plugins/AutoConvertFilterPlugin.hxx" #include "filter/plugins/ConvertFilterPlugin.hxx" #include "filter/plugins/ReplayGainFilterPlugin.hxx" #include "filter/plugins/ChainFilterPlugin.hxx" #include "filter/plugins/VolumeFilterPlugin.hxx" +#include "filter/plugins/NormalizeFilterPlugin.hxx" #include "config/ConfigError.hxx" #include "config/ConfigGlobal.hxx" #include "config/Block.hxx" @@ -175,12 +174,8 @@ AudioOutput::Configure(const ConfigBlock &block) /* create the normalization filter (if configured) */ if (config_get_bool(ConfigOption::VOLUME_NORMALIZATION, false)) { - auto *normalize_filter = - filter_new(&normalize_filter_plugin, ConfigBlock()); - assert(normalize_filter != nullptr); - filter_chain_append(*prepared_filter, "normalize", - autoconvert_filter_new(normalize_filter)); + autoconvert_filter_new(normalize_filter_prepare())); } try {