diff options
-rw-r--r-- | src/decoder_api.h | 75 | ||||
-rw-r--r-- | src/decoder_list.c | 6 | ||||
-rw-r--r-- | src/decoder_thread.c | 38 | ||||
-rw-r--r-- | src/inputPlugins/flac_plugin.c | 6 | ||||
-rw-r--r-- | src/song.c | 4 |
5 files changed, 67 insertions, 62 deletions
diff --git a/src/decoder_api.h b/src/decoder_api.h index 2851991ae..d5e76f610 100644 --- a/src/decoder_api.h +++ b/src/decoder_api.h @@ -49,44 +49,49 @@ enum decoder_command { 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 (*decoder_init_func) (void); - -/* optional, set this to NULL if the InputPlugin doesn't have/need one */ -typedef void (*decoder_finish_func) (void); - -/* boolean return value, returns 1 if the InputStream is decodable by - * the InputPlugin, 0 if not */ -typedef unsigned int (*decoder_try_decode_func) (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 (*decoder_stream_decode_func) (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 (*decoder_file_decode_func) (struct decoder *, char *path); - -/* file should be the full path! Returns NULL if a tag cannot be found - * or read */ -typedef struct tag *(*decoder_tag_dup_func) (char *file); - struct decoder_plugin { const char *name; - decoder_init_func init_func; - decoder_finish_func finish_func; - decoder_try_decode_func try_decode_func; - decoder_stream_decode_func stream_decode_func; - decoder_file_decode_func file_decode_func; - decoder_tag_dup_func tag_dup_func; + /** + * 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 + */ + int (*init)(void); + + /** + * optional, set this to NULL if the InputPlugin doesn't have/need one + */ + void (*finish)(void); + + /** + * boolean return value, returns 1 if the InputStream is + * decodable by the InputPlugin, 0 if not + */ + unsigned int (*try_decode)(InputStream *); + + /** + * this will be used to decode InputStreams, and is + * recommended for files and networked (HTTP) connections. + * + * returns -1 on error, 0 on success + */ + int (*stream_decode)(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 + */ + int (*file_decode)(struct decoder *, char *path); + + /** + * file should be the full path! Returns NULL if a tag cannot + * be found or read + */ + struct tag *(*tag_dup)(char *file); /* one or more of the INPUT_PLUGIN_STREAM_* values OR'd together */ unsigned char stream_types; diff --git a/src/decoder_list.c b/src/decoder_list.c index 8bbe40924..6626f556a 100644 --- a/src/decoder_list.c +++ b/src/decoder_list.c @@ -40,7 +40,7 @@ void decoder_plugin_load(struct decoder_plugin * inputPlugin) if (!inputPlugin->name) return; - if (inputPlugin->init_func && inputPlugin->init_func() < 0) + if (inputPlugin->init != NULL && inputPlugin->init() < 0) return; insertInList(inputPlugin_list, inputPlugin->name, (void *)inputPlugin); @@ -48,8 +48,8 @@ void decoder_plugin_load(struct decoder_plugin * inputPlugin) void decoder_plugin_unload(struct decoder_plugin * inputPlugin) { - if (inputPlugin->finish_func) - inputPlugin->finish_func(); + if (inputPlugin->finish != NULL) + inputPlugin->finish(); deleteFromList(inputPlugin_list, inputPlugin->name); } diff --git a/src/decoder_thread.c b/src/decoder_thread.c index 0b2a6dc2d..eff3ca05f 100644 --- a/src/decoder_thread.c +++ b/src/decoder_thread.c @@ -81,14 +81,14 @@ static void decodeStart(void) /* first we try mime types: */ while (ret && (plugin = decoder_plugin_from_mime_type(inStream.mime, next++))) { - if (!plugin->stream_decode_func) + if (plugin->stream_decode == NULL) continue; if (!(plugin->stream_types & INPUT_PLUGIN_STREAM_URL)) continue; - if (plugin->try_decode_func - && !plugin->try_decode_func(&inStream)) + if (plugin->try_decode != NULL + && !plugin->try_decode(&inStream)) continue; - ret = plugin->stream_decode_func(&decoder, &inStream); + ret = plugin->stream_decode(&decoder, &inStream); break; } @@ -97,17 +97,17 @@ static void decodeStart(void) const char *s = getSuffix(path_max_utf8); next = 0; while (ret && (plugin = decoder_plugin_from_suffix(s, next++))) { - if (!plugin->stream_decode_func) + if (plugin->stream_decode == NULL) continue; if (!(plugin->stream_types & INPUT_PLUGIN_STREAM_URL)) continue; - if (plugin->try_decode_func && - !plugin->try_decode_func(&inStream)) + if (plugin->try_decode != NULL && + !plugin->try_decode(&inStream)) continue; decoder.plugin = plugin; - ret = plugin->stream_decode_func(&decoder, - &inStream); + ret = plugin->stream_decode(&decoder, + &inStream); break; } } @@ -119,8 +119,8 @@ static void decodeStart(void) * need to check for stream{Types,DecodeFunc} */ if ((plugin = decoder_plugin_from_name("mp3"))) { decoder.plugin = plugin; - ret = plugin->stream_decode_func(&decoder, - &inStream); + ret = plugin->stream_decode(&decoder, + &inStream); } } } else { @@ -130,21 +130,21 @@ static void decodeStart(void) if (!plugin->stream_types & INPUT_PLUGIN_STREAM_FILE) continue; - if (plugin->try_decode_func && - !plugin->try_decode_func(&inStream)) + if (plugin->try_decode != NULL && + !plugin->try_decode(&inStream)) continue; - if (plugin->file_decode_func) { + if (plugin->file_decode != NULL) { closeInputStream(&inStream); close_instream = 0; decoder.plugin = plugin; - ret = plugin->file_decode_func(&decoder, - path_max_fs); + ret = plugin->file_decode(&decoder, + path_max_fs); break; - } else if (plugin->stream_decode_func) { + } else if (plugin->stream_decode != NULL) { decoder.plugin = plugin; - ret = plugin->stream_decode_func(&decoder, - &inStream); + ret = plugin->stream_decode(&decoder, + &inStream); break; } } diff --git a/src/inputPlugins/flac_plugin.c b/src/inputPlugins/flac_plugin.c index fb518871a..10e8a59ef 100644 --- a/src/inputPlugins/flac_plugin.c +++ b/src/inputPlugins/flac_plugin.c @@ -445,9 +445,9 @@ static int flac_plugin_init(void) DEBUG("libFLAC supports OggFLAC, initializing OggFLAC support\n"); assert(oggflacPlugin.name == NULL); oggflacPlugin.name = "oggflac"; - oggflacPlugin.try_decode_func = oggflac_try_decode; - oggflacPlugin.stream_decode_func = oggflac_decode; - oggflacPlugin.tag_dup_func = oggflac_tag_dup; + oggflacPlugin.try_decode = oggflac_try_decode; + oggflacPlugin.stream_decode = oggflac_decode; + oggflacPlugin.tag_dup = oggflac_tag_dup; oggflacPlugin.stream_types = INPUT_PLUGIN_STREAM_URL | INPUT_PLUGIN_STREAM_FILE; oggflacPlugin.suffixes = oggflac_suffixes; diff --git a/src/song.c b/src/song.c index 096b1afbd..0bdf40c02 100644 --- a/src/song.c +++ b/src/song.c @@ -67,7 +67,7 @@ Song *newSong(const char *url, enum song_type type, Directory * parentDir) while (!song->tag && (plugin = isMusic(abs_path, &(song->mtime), next++))) { - song->tag = plugin->tag_dup_func(abs_path); + song->tag = plugin->tag_dup(abs_path); } if (!song->tag || song->tag->time < 0) { freeSong(song); @@ -111,7 +111,7 @@ int updateSongInfo(Song * song) while (!song->tag && (plugin = isMusic(abs_path, &(song->mtime), next++))) { - song->tag = plugin->tag_dup_func(abs_path); + song->tag = plugin->tag_dup(abs_path); } if (!song->tag || song->tag->time < 0) return -1; |