diff --git a/src/conf.c b/src/conf.c index 7560c02ba..3f58d61aa 100644 --- a/src/conf.c +++ b/src/conf.c @@ -210,6 +210,7 @@ void config_global_init(void) registerConfigParam(CONF_ID3V1_ENCODING, 0, 0); registerConfigParam(CONF_METADATA_TO_USE, 0, 0); registerConfigParam(CONF_SAVE_ABSOLUTE_PATHS, 0, 0); + registerConfigParam(CONF_DECODER, true, true); registerConfigParam(CONF_GAPLESS_MP3_PLAYBACK, 0, 0); } diff --git a/src/conf.h b/src/conf.h index 5e191815f..95bdb4d02 100644 --- a/src/conf.h +++ b/src/conf.h @@ -64,6 +64,7 @@ #define CONF_ID3V1_ENCODING "id3v1_encoding" #define CONF_METADATA_TO_USE "metadata_to_use" #define CONF_SAVE_ABSOLUTE_PATHS "save_absolute_paths_in_playlists" +#define CONF_DECODER "decoder" #define CONF_GAPLESS_MP3_PLAYBACK "gapless_mp3_playback" #define CONF_BOOL_UNSET -1 diff --git a/src/decoder_list.c b/src/decoder_list.c index f0cf8625b..a644a6370 100644 --- a/src/decoder_list.c +++ b/src/decoder_list.c @@ -20,6 +20,7 @@ #include "decoder_plugin.h" #include "utils.h" #include "config.h" +#include "conf.h" #include @@ -185,12 +186,39 @@ void decoder_plugin_print_all_decoders(FILE * fp) fflush(fp); } +/** + * Find the "decoder" configuration block for the specified plugin. + * + * @param plugin_name the name of the decoder plugin + * @return the configuration block, or NULL if none was configured + */ +static const struct config_param * +decoder_plugin_config(const char *plugin_name) +{ + const struct config_param *param = NULL; + + while ((param = config_get_next_param(CONF_DECODER, param)) != NULL) { + const char *name = + config_get_block_string(param, "plugin", NULL); + if (name == NULL) + g_error("decoder configuration without 'plugin' name in line %d", + param->line); + + if (strcmp(name, plugin_name) == 0) + return param; + } + + return NULL; +} + void decoder_plugin_init_all(void) { for (unsigned i = 0; i < num_decoder_plugins; ++i) { const struct decoder_plugin *plugin = decoder_plugins[i]; + const struct config_param *param = + decoder_plugin_config(plugin->name); - if (decoder_plugin_init(plugin, NULL)) + if (decoder_plugin_init(plugin, param)) decoder_plugins_enabled[i] = true; } }