diff options
Diffstat (limited to 'src/inputPlugin.h')
-rw-r--r-- | src/inputPlugin.h | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/inputPlugin.h b/src/inputPlugin.h index dc2e2219e..78268a7f3 100644 --- a/src/inputPlugin.h +++ b/src/inputPlugin.h @@ -25,30 +25,53 @@ #include "outputBuffer.h" #include "tag.h" +/* valid values for streamTypes in the InputPlugin struct: */ #define INPUT_PLUGIN_STREAM_FILE 0x01 #define INPUT_PLUGIN_STREAM_URL 0x02 +/* 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) (); +/* optional, set this to NULL if the InputPlugin doesn't have/need one */ typedef void (* InputPlugin_finishFunc) (); +/* 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) (OutputBuffer *, DecoderControl *, 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) (OutputBuffer *, DecoderControl *, char * path); -/* file should be the full 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 { 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: */ char ** suffixes; char ** mimeTypes; } InputPlugin; @@ -59,9 +82,9 @@ void unloadInputPlugin(InputPlugin * inputPlugin); /* interface for using plugins */ -InputPlugin * getInputPluginFromSuffix(char * suffix); +InputPlugin * getInputPluginFromSuffix(char * suffix, unsigned int next); -InputPlugin * getInputPluginFromMimeType(char * mimeType); +InputPlugin * getInputPluginFromMimeType(char * mimeType, unsigned int next); InputPlugin * getInputPluginFromName(char * name); |