From 69635022133488e6b19569fb59b16c4658a244eb Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 16 Mar 2006 06:52:46 +0000 Subject: merge with mpd/trunk up to r3925 git-svn-id: https://svn.musicpd.org/mpd/trunk@3926 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/inputPlugin.h | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'src/inputPlugin.h') 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); -- cgit v1.2.3