From 08bdb43bef5173f045a868289b05a4a698ab811e Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 26 Aug 2008 08:27:06 +0200 Subject: moved InputPlugin to decoder_api.h InputPlugin is the API which is implemented by a decoder plugin. This belongs to the public API/ABI, so move it to decoder_api.h. It will later be renamed to something like "decoder_plugin". --- src/decoder_api.h | 61 ++++++++++++++++++++++++++++++++++++++++- src/inputPlugin.h | 57 +------------------------------------- src/inputPlugins/_flac_common.c | 2 +- src/inputPlugins/_ogg_common.c | 2 -- src/inputPlugins/_ogg_common.h | 2 +- src/inputPlugins/flac_plugin.c | 1 + 6 files changed, 64 insertions(+), 61 deletions(-) (limited to 'src') diff --git a/src/decoder_api.h b/src/decoder_api.h index ba61af577..6595b865b 100644 --- a/src/decoder_api.h +++ b/src/decoder_api.h @@ -26,9 +26,67 @@ * */ -#include "inputPlugin.h" #include "inputStream.h" #include "replayGain.h" +#include "tag.h" +#include "playerData.h" + + +/* valid values for streamTypes in the InputPlugin struct: */ +#define INPUT_PLUGIN_STREAM_FILE 0x01 +#define INPUT_PLUGIN_STREAM_URL 0x02 + + +struct decoder; + + +/* optional, set this to NULL if the InputPlugin doesn't have/need one + * this must return < 0 if there is an error and >= 0 otherwise */ +typedef int (*InputPlugin_initFunc) (void); + +/* optional, set this to NULL if the InputPlugin doesn't have/need one */ +typedef void (*InputPlugin_finishFunc) (void); + +/* boolean return value, returns 1 if the InputStream is decodable by + * the InputPlugin, 0 if not */ +typedef unsigned int (*InputPlugin_tryDecodeFunc) (InputStream *); + +/* this will be used to decode InputStreams, and is recommended for files + * and networked (HTTP) connections. + * + * returns -1 on error, 0 on success */ +typedef int (*InputPlugin_streamDecodeFunc) (struct decoder *, + InputStream *); + +/* use this if and only if your InputPlugin can only be passed a filename or + * handle as input, and will not allow callbacks to be set (like Ogg-Vorbis + * and FLAC libraries allow) + * + * returns -1 on error, 0 on success */ +typedef int (*InputPlugin_fileDecodeFunc) (struct decoder *, + char *path); + +/* file should be the full path! Returns NULL if a tag cannot be found + * or read */ +typedef MpdTag *(*InputPlugin_tagDupFunc) (char *file); + +typedef struct _InputPlugin { + const char *name; + InputPlugin_initFunc initFunc; + InputPlugin_finishFunc finishFunc; + InputPlugin_tryDecodeFunc tryDecodeFunc; + InputPlugin_streamDecodeFunc streamDecodeFunc; + InputPlugin_fileDecodeFunc fileDecodeFunc; + InputPlugin_tagDupFunc tagDupFunc; + + /* one or more of the INPUT_PLUGIN_STREAM_* values OR'd together */ + unsigned char streamTypes; + + /* last element in these arrays must always be a NULL: */ + const char *const*suffixes; + const char *const*mimeTypes; +} InputPlugin; + /** * Opaque handle which the decoder plugin passes to the functions in @@ -36,6 +94,7 @@ */ struct decoder; + /** * Notify the player thread that it has finished initialization and * that it has read the song's meta data. diff --git a/src/inputPlugin.h b/src/inputPlugin.h index 2b0e504ba..f5418efdd 100644 --- a/src/inputPlugin.h +++ b/src/inputPlugin.h @@ -19,62 +19,7 @@ #ifndef INPUT_PLUGIN_H #define INPUT_PLUGIN_H -#include "inputStream.h" -#include "outputBuffer.h" -#include "playerData.h" - -/* valid values for streamTypes in the InputPlugin struct: */ -#define INPUT_PLUGIN_STREAM_FILE 0x01 -#define INPUT_PLUGIN_STREAM_URL 0x02 - -struct decoder; - -/* optional, set this to NULL if the InputPlugin doesn't have/need one - * this must return < 0 if there is an error and >= 0 otherwise */ -typedef int (*InputPlugin_initFunc) (void); - -/* optional, set this to NULL if the InputPlugin doesn't have/need one */ -typedef void (*InputPlugin_finishFunc) (void); - -/* boolean return value, returns 1 if the InputStream is decodable by - * the InputPlugin, 0 if not */ -typedef unsigned int (*InputPlugin_tryDecodeFunc) (InputStream *); - -/* this will be used to decode InputStreams, and is recommended for files - * and networked (HTTP) connections. - * - * returns -1 on error, 0 on success */ -typedef int (*InputPlugin_streamDecodeFunc) (struct decoder *, - InputStream *); - -/* use this if and only if your InputPlugin can only be passed a filename or - * handle as input, and will not allow callbacks to be set (like Ogg-Vorbis - * and FLAC libraries allow) - * - * returns -1 on error, 0 on success */ -typedef int (*InputPlugin_fileDecodeFunc) (struct decoder *, - char *path); - -/* file should be the full path! Returns NULL if a tag cannot be found - * or read */ -typedef MpdTag *(*InputPlugin_tagDupFunc) (char *file); - -typedef struct _InputPlugin { - const char *name; - InputPlugin_initFunc initFunc; - InputPlugin_finishFunc finishFunc; - InputPlugin_tryDecodeFunc tryDecodeFunc; - InputPlugin_streamDecodeFunc streamDecodeFunc; - InputPlugin_fileDecodeFunc fileDecodeFunc; - InputPlugin_tagDupFunc tagDupFunc; - - /* one or more of the INPUT_PLUGIN_STREAM_* values OR'd together */ - unsigned char streamTypes; - - /* last element in these arrays must always be a NULL: */ - const char *const*suffixes; - const char *const*mimeTypes; -} InputPlugin; +#include "decoder_api.h" /* individual functions to load/unload plugins */ void loadInputPlugin(InputPlugin * inputPlugin); diff --git a/src/inputPlugins/_flac_common.c b/src/inputPlugins/_flac_common.c index e658d77ea..1cf094651 100644 --- a/src/inputPlugins/_flac_common.c +++ b/src/inputPlugins/_flac_common.c @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "../inputPlugin.h" +#include "../decoder_api.h" #if defined(HAVE_FLAC) || defined(HAVE_OGGFLAC) diff --git a/src/inputPlugins/_ogg_common.c b/src/inputPlugins/_ogg_common.c index a7525c2de..73facdded 100644 --- a/src/inputPlugins/_ogg_common.c +++ b/src/inputPlugins/_ogg_common.c @@ -19,8 +19,6 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "../inputPlugin.h" - #include "_flac_common.h" #include "_ogg_common.h" diff --git a/src/inputPlugins/_ogg_common.h b/src/inputPlugins/_ogg_common.h index 3e997e95b..3382e2860 100644 --- a/src/inputPlugins/_ogg_common.h +++ b/src/inputPlugins/_ogg_common.h @@ -22,7 +22,7 @@ #ifndef _OGG_COMMON_H #define _OGG_COMMON_H -#include "../inputPlugin.h" +#include "../decoder_api.h" #if defined(HAVE_OGGFLAC) || defined(HAVE_OGGVORBIS) || \ (defined(FLAC_API_VERSION_CURRENT) && FLAC_API_VERSION_CURRENT > 7) diff --git a/src/inputPlugins/flac_plugin.c b/src/inputPlugins/flac_plugin.c index f94e39d88..890c78fa3 100644 --- a/src/inputPlugins/flac_plugin.c +++ b/src/inputPlugins/flac_plugin.c @@ -22,6 +22,7 @@ #include "../utils.h" #include "../log.h" +#include "../inputPlugin.h" /* this code was based on flac123, from flac-tools */ -- cgit v1.2.3