renamed inputPlugin.* to decoder_list.*
Since inputPlugin.c manages the list of registered decoders, we should rename the source file.
This commit is contained in:
166
src/decoder_list.c
Normal file
166
src/decoder_list.c
Normal file
@@ -0,0 +1,166 @@
|
||||
/* the Music Player Daemon (MPD)
|
||||
* Copyright (C) 2003-2007 by Warren Dukes (warren.dukes@gmail.com)
|
||||
* This project's homepage is: 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "decoder_list.h"
|
||||
#include "decoder_api.h"
|
||||
|
||||
extern struct decoder_plugin mp3Plugin;
|
||||
extern struct decoder_plugin oggvorbisPlugin;
|
||||
extern struct decoder_plugin flacPlugin;
|
||||
extern struct decoder_plugin oggflacPlugin;
|
||||
extern struct decoder_plugin audiofilePlugin;
|
||||
extern struct decoder_plugin mp4Plugin;
|
||||
extern struct decoder_plugin aacPlugin;
|
||||
extern struct decoder_plugin mpcPlugin;
|
||||
extern struct decoder_plugin wavpackPlugin;
|
||||
extern struct decoder_plugin modPlugin;
|
||||
|
||||
static List *inputPlugin_list;
|
||||
|
||||
void loadInputPlugin(struct decoder_plugin * inputPlugin)
|
||||
{
|
||||
if (!inputPlugin)
|
||||
return;
|
||||
if (!inputPlugin->name)
|
||||
return;
|
||||
|
||||
if (inputPlugin->initFunc && inputPlugin->initFunc() < 0)
|
||||
return;
|
||||
|
||||
insertInList(inputPlugin_list, inputPlugin->name, (void *)inputPlugin);
|
||||
}
|
||||
|
||||
void unloadInputPlugin(struct decoder_plugin * inputPlugin)
|
||||
{
|
||||
if (inputPlugin->finishFunc)
|
||||
inputPlugin->finishFunc();
|
||||
deleteFromList(inputPlugin_list, inputPlugin->name);
|
||||
}
|
||||
|
||||
static int stringFoundInStringArray(const char *const*array, const char *suffix)
|
||||
{
|
||||
while (array && *array) {
|
||||
if (strcasecmp(*array, suffix) == 0)
|
||||
return 1;
|
||||
array++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct decoder_plugin *getInputPluginFromSuffix(const char *suffix, unsigned int next)
|
||||
{
|
||||
static ListNode *pos;
|
||||
ListNode *node;
|
||||
struct decoder_plugin *plugin;
|
||||
|
||||
if (suffix == NULL)
|
||||
return NULL;
|
||||
|
||||
if (next) {
|
||||
if (pos)
|
||||
node = pos;
|
||||
else
|
||||
return NULL;
|
||||
} else
|
||||
node = inputPlugin_list->firstNode;
|
||||
|
||||
while (node != NULL) {
|
||||
plugin = node->data;
|
||||
if (stringFoundInStringArray(plugin->suffixes, suffix)) {
|
||||
pos = node->nextNode;
|
||||
return plugin;
|
||||
}
|
||||
node = node->nextNode;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct decoder_plugin *getInputPluginFromMimeType(const char *mimeType, unsigned int next)
|
||||
{
|
||||
static ListNode *pos;
|
||||
ListNode *node;
|
||||
struct decoder_plugin *plugin;
|
||||
|
||||
if (mimeType == NULL)
|
||||
return NULL;
|
||||
|
||||
node = (next && pos) ? pos : inputPlugin_list->firstNode;
|
||||
|
||||
while (node != NULL) {
|
||||
plugin = node->data;
|
||||
if (stringFoundInStringArray(plugin->mimeTypes, mimeType)) {
|
||||
pos = node->nextNode;
|
||||
return plugin;
|
||||
}
|
||||
node = node->nextNode;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct decoder_plugin *getInputPluginFromName(const char *name)
|
||||
{
|
||||
void *plugin = NULL;
|
||||
|
||||
findInList(inputPlugin_list, name, &plugin);
|
||||
|
||||
return (struct decoder_plugin *) plugin;
|
||||
}
|
||||
|
||||
void printAllInputPluginSuffixes(FILE * fp)
|
||||
{
|
||||
ListNode *node = inputPlugin_list->firstNode;
|
||||
struct decoder_plugin *plugin;
|
||||
const char *const*suffixes;
|
||||
|
||||
while (node) {
|
||||
plugin = (struct decoder_plugin *) node->data;
|
||||
suffixes = plugin->suffixes;
|
||||
while (suffixes && *suffixes) {
|
||||
fprintf(fp, "%s ", *suffixes);
|
||||
suffixes++;
|
||||
}
|
||||
node = node->nextNode;
|
||||
}
|
||||
fprintf(fp, "\n");
|
||||
fflush(fp);
|
||||
}
|
||||
|
||||
void initInputPlugins(void)
|
||||
{
|
||||
inputPlugin_list = makeList(NULL, 1);
|
||||
|
||||
/* load plugins here */
|
||||
loadInputPlugin(&mp3Plugin);
|
||||
loadInputPlugin(&oggvorbisPlugin);
|
||||
loadInputPlugin(&oggflacPlugin);
|
||||
loadInputPlugin(&flacPlugin);
|
||||
loadInputPlugin(&audiofilePlugin);
|
||||
loadInputPlugin(&mp4Plugin);
|
||||
loadInputPlugin(&aacPlugin);
|
||||
loadInputPlugin(&mpcPlugin);
|
||||
loadInputPlugin(&wavpackPlugin);
|
||||
loadInputPlugin(&modPlugin);
|
||||
}
|
||||
|
||||
void finishInputPlugins(void)
|
||||
{
|
||||
freeList(inputPlugin_list);
|
||||
}
|
Reference in New Issue
Block a user