decoder: renamed plugin methods

Why have a "_func" prefix on all method names?  Also don't typedef the
methods, there is no advantage in that.
This commit is contained in:
Max Kellermann 2008-09-29 15:54:27 +02:00
parent a7651b9d30
commit 21d3d300fd
5 changed files with 67 additions and 62 deletions

View File

@ -49,44 +49,49 @@ enum decoder_command {
struct decoder; 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 { struct decoder_plugin {
const char *name; const char *name;
decoder_init_func init_func; /**
decoder_finish_func finish_func; * optional, set this to NULL if the InputPlugin doesn't
decoder_try_decode_func try_decode_func; * have/need one this must return < 0 if there is an error and
decoder_stream_decode_func stream_decode_func; * >= 0 otherwise
decoder_file_decode_func file_decode_func; */
decoder_tag_dup_func tag_dup_func; 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 */ /* one or more of the INPUT_PLUGIN_STREAM_* values OR'd together */
unsigned char stream_types; unsigned char stream_types;

View File

@ -40,7 +40,7 @@ void decoder_plugin_load(struct decoder_plugin * inputPlugin)
if (!inputPlugin->name) if (!inputPlugin->name)
return; return;
if (inputPlugin->init_func && inputPlugin->init_func() < 0) if (inputPlugin->init != NULL && inputPlugin->init() < 0)
return; return;
insertInList(inputPlugin_list, inputPlugin->name, (void *)inputPlugin); 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) void decoder_plugin_unload(struct decoder_plugin * inputPlugin)
{ {
if (inputPlugin->finish_func) if (inputPlugin->finish != NULL)
inputPlugin->finish_func(); inputPlugin->finish();
deleteFromList(inputPlugin_list, inputPlugin->name); deleteFromList(inputPlugin_list, inputPlugin->name);
} }

View File

@ -81,14 +81,14 @@ static void decodeStart(void)
/* first we try mime types: */ /* first we try mime types: */
while (ret && (plugin = decoder_plugin_from_mime_type(inStream.mime, next++))) { while (ret && (plugin = decoder_plugin_from_mime_type(inStream.mime, next++))) {
if (!plugin->stream_decode_func) if (plugin->stream_decode == NULL)
continue; continue;
if (!(plugin->stream_types & INPUT_PLUGIN_STREAM_URL)) if (!(plugin->stream_types & INPUT_PLUGIN_STREAM_URL))
continue; continue;
if (plugin->try_decode_func if (plugin->try_decode != NULL
&& !plugin->try_decode_func(&inStream)) && !plugin->try_decode(&inStream))
continue; continue;
ret = plugin->stream_decode_func(&decoder, &inStream); ret = plugin->stream_decode(&decoder, &inStream);
break; break;
} }
@ -97,16 +97,16 @@ static void decodeStart(void)
const char *s = getSuffix(path_max_utf8); const char *s = getSuffix(path_max_utf8);
next = 0; next = 0;
while (ret && (plugin = decoder_plugin_from_suffix(s, next++))) { while (ret && (plugin = decoder_plugin_from_suffix(s, next++))) {
if (!plugin->stream_decode_func) if (plugin->stream_decode == NULL)
continue; continue;
if (!(plugin->stream_types & if (!(plugin->stream_types &
INPUT_PLUGIN_STREAM_URL)) INPUT_PLUGIN_STREAM_URL))
continue; continue;
if (plugin->try_decode_func && if (plugin->try_decode != NULL &&
!plugin->try_decode_func(&inStream)) !plugin->try_decode(&inStream))
continue; continue;
decoder.plugin = plugin; decoder.plugin = plugin;
ret = plugin->stream_decode_func(&decoder, ret = plugin->stream_decode(&decoder,
&inStream); &inStream);
break; break;
} }
@ -119,7 +119,7 @@ static void decodeStart(void)
* need to check for stream{Types,DecodeFunc} */ * need to check for stream{Types,DecodeFunc} */
if ((plugin = decoder_plugin_from_name("mp3"))) { if ((plugin = decoder_plugin_from_name("mp3"))) {
decoder.plugin = plugin; decoder.plugin = plugin;
ret = plugin->stream_decode_func(&decoder, ret = plugin->stream_decode(&decoder,
&inStream); &inStream);
} }
} }
@ -130,20 +130,20 @@ static void decodeStart(void)
if (!plugin->stream_types & INPUT_PLUGIN_STREAM_FILE) if (!plugin->stream_types & INPUT_PLUGIN_STREAM_FILE)
continue; continue;
if (plugin->try_decode_func && if (plugin->try_decode != NULL &&
!plugin->try_decode_func(&inStream)) !plugin->try_decode(&inStream))
continue; continue;
if (plugin->file_decode_func) { if (plugin->file_decode != NULL) {
closeInputStream(&inStream); closeInputStream(&inStream);
close_instream = 0; close_instream = 0;
decoder.plugin = plugin; decoder.plugin = plugin;
ret = plugin->file_decode_func(&decoder, ret = plugin->file_decode(&decoder,
path_max_fs); path_max_fs);
break; break;
} else if (plugin->stream_decode_func) { } else if (plugin->stream_decode != NULL) {
decoder.plugin = plugin; decoder.plugin = plugin;
ret = plugin->stream_decode_func(&decoder, ret = plugin->stream_decode(&decoder,
&inStream); &inStream);
break; break;
} }

View File

@ -445,9 +445,9 @@ static int flac_plugin_init(void)
DEBUG("libFLAC supports OggFLAC, initializing OggFLAC support\n"); DEBUG("libFLAC supports OggFLAC, initializing OggFLAC support\n");
assert(oggflacPlugin.name == NULL); assert(oggflacPlugin.name == NULL);
oggflacPlugin.name = "oggflac"; oggflacPlugin.name = "oggflac";
oggflacPlugin.try_decode_func = oggflac_try_decode; oggflacPlugin.try_decode = oggflac_try_decode;
oggflacPlugin.stream_decode_func = oggflac_decode; oggflacPlugin.stream_decode = oggflac_decode;
oggflacPlugin.tag_dup_func = oggflac_tag_dup; oggflacPlugin.tag_dup = oggflac_tag_dup;
oggflacPlugin.stream_types = INPUT_PLUGIN_STREAM_URL | oggflacPlugin.stream_types = INPUT_PLUGIN_STREAM_URL |
INPUT_PLUGIN_STREAM_FILE; INPUT_PLUGIN_STREAM_FILE;
oggflacPlugin.suffixes = oggflac_suffixes; oggflacPlugin.suffixes = oggflac_suffixes;

View File

@ -67,7 +67,7 @@ Song *newSong(const char *url, enum song_type type, Directory * parentDir)
while (!song->tag && (plugin = isMusic(abs_path, while (!song->tag && (plugin = isMusic(abs_path,
&(song->mtime), &(song->mtime),
next++))) { next++))) {
song->tag = plugin->tag_dup_func(abs_path); song->tag = plugin->tag_dup(abs_path);
} }
if (!song->tag || song->tag->time < 0) { if (!song->tag || song->tag->time < 0) {
freeSong(song); freeSong(song);
@ -111,7 +111,7 @@ int updateSongInfo(Song * song)
while (!song->tag && (plugin = isMusic(abs_path, while (!song->tag && (plugin = isMusic(abs_path,
&(song->mtime), &(song->mtime),
next++))) { next++))) {
song->tag = plugin->tag_dup_func(abs_path); song->tag = plugin->tag_dup(abs_path);
} }
if (!song->tag || song->tag->time < 0) if (!song->tag || song->tag->time < 0)
return -1; return -1;