diff options
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | src/decoder_list.c | 8 | ||||
-rw-r--r-- | src/decoder_plugin.c | 46 | ||||
-rw-r--r-- | src/decoder_plugin.h | 14 |
4 files changed, 65 insertions, 4 deletions
diff --git a/Makefile.am b/Makefile.am index 9ffe96e05..112b143ca 100644 --- a/Makefile.am +++ b/Makefile.am @@ -403,6 +403,7 @@ DECODER_LIBS = \ DECODER_SRC = \ src/decoder_buffer.c \ + src/decoder_plugin.c \ src/decoder_list.c if HAVE_MAD diff --git a/src/decoder_list.c b/src/decoder_list.c index b447a6ac1..837c5ca7b 100644 --- a/src/decoder_list.c +++ b/src/decoder_list.c @@ -119,8 +119,8 @@ decoder_plugin_from_suffix(const char *suffix, unsigned int next) i = 0; for (; decoder_plugins[i] != NULL; ++i) { const struct decoder_plugin *plugin = decoder_plugins[i]; - if (decoder_plugins_enabled[i] && plugin->suffixes != NULL && - string_array_contains(plugin->suffixes, suffix)) { + if (decoder_plugins_enabled[i] && + decoder_plugin_supports_suffix(plugin, suffix)) { ++i; return plugin; } @@ -141,8 +141,8 @@ decoder_plugin_from_mime_type(const char *mimeType, unsigned int next) i = 0; for (; decoder_plugins[i] != NULL; ++i) { const struct decoder_plugin *plugin = decoder_plugins[i]; - if (decoder_plugins_enabled[i] && plugin->mime_types != NULL && - string_array_contains(plugin->mime_types, mimeType)) { + if (decoder_plugins_enabled[i] && + decoder_plugin_supports_suffix(plugin, mimeType)) { ++i; return plugin; } diff --git a/src/decoder_plugin.c b/src/decoder_plugin.c new file mode 100644 index 000000000..79b0d5322 --- /dev/null +++ b/src/decoder_plugin.c @@ -0,0 +1,46 @@ +/* + * 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 "decoder_plugin.h" +#include "utils.h" + +#include <assert.h> + +bool +decoder_plugin_supports_suffix(const struct decoder_plugin *plugin, + const char *suffix) +{ + assert(plugin != NULL); + assert(suffix != NULL); + + return plugin->suffixes != NULL && + string_array_contains(plugin->suffixes, suffix); + +} + +bool +decoder_plugin_supports_mime_type(const struct decoder_plugin *plugin, + const char *mime_type) +{ + assert(plugin != NULL); + assert(mime_type != NULL); + + return plugin->mime_types != NULL && + string_array_contains(plugin->mime_types, mime_type); +} diff --git a/src/decoder_plugin.h b/src/decoder_plugin.h index 66501a0a1..a078540a6 100644 --- a/src/decoder_plugin.h +++ b/src/decoder_plugin.h @@ -161,4 +161,18 @@ decoder_plugin_container_scan( const struct decoder_plugin *plugin, return plugin->container_scan(pathname, tnum); } +/** + * Does the plugin announce the specified file name suffix? + */ +bool +decoder_plugin_supports_suffix(const struct decoder_plugin *plugin, + const char *suffix); + +/** + * Does the plugin announce the specified MIME type? + */ +bool +decoder_plugin_supports_mime_type(const struct decoder_plugin *plugin, + const char *mime_type); + #endif |