decoder_plugin: added inline wrapper functions
Increase code readability, always use the wrapper functions instead of calling the plugin method pointers directly.
This commit is contained in:
@@ -189,7 +189,8 @@ void decoder_plugin_init_all(void)
|
|||||||
{
|
{
|
||||||
for (unsigned i = 0; i < num_decoder_plugins; ++i) {
|
for (unsigned i = 0; i < num_decoder_plugins; ++i) {
|
||||||
const struct decoder_plugin *plugin = decoder_plugins[i];
|
const struct decoder_plugin *plugin = decoder_plugins[i];
|
||||||
if (plugin->init == NULL || decoder_plugins[i]->init())
|
|
||||||
|
if (decoder_plugin_init(plugin))
|
||||||
decoder_plugins_enabled[i] = true;
|
decoder_plugins_enabled[i] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -198,7 +199,8 @@ void decoder_plugin_deinit_all(void)
|
|||||||
{
|
{
|
||||||
for (unsigned i = 0; i < num_decoder_plugins; ++i) {
|
for (unsigned i = 0; i < num_decoder_plugins; ++i) {
|
||||||
const struct decoder_plugin *plugin = decoder_plugins[i];
|
const struct decoder_plugin *plugin = decoder_plugins[i];
|
||||||
if (decoder_plugins_enabled[i] && plugin->finish != NULL)
|
|
||||||
decoder_plugins[i]->finish();
|
if (decoder_plugins_enabled[i])
|
||||||
|
decoder_plugin_finish(plugin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
#define MPD_DECODER_PLUGIN_H
|
#define MPD_DECODER_PLUGIN_H
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
struct input_stream;
|
struct input_stream;
|
||||||
struct tag;
|
struct tag;
|
||||||
@@ -77,4 +78,58 @@ struct decoder_plugin {
|
|||||||
const char *const*mime_types;
|
const char *const*mime_types;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize a decoder plugin.
|
||||||
|
*
|
||||||
|
* @return true if the plugin was initialized successfully, false if
|
||||||
|
* the plugin is not available
|
||||||
|
*/
|
||||||
|
static inline bool
|
||||||
|
decoder_plugin_init(const struct decoder_plugin *plugin)
|
||||||
|
{
|
||||||
|
return plugin->init != NULL
|
||||||
|
? plugin->init()
|
||||||
|
: true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deinitialize a decoder plugin which was initialized successfully.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
decoder_plugin_finish(const struct decoder_plugin *plugin)
|
||||||
|
{
|
||||||
|
if (plugin->finish != NULL)
|
||||||
|
plugin->finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decode a stream.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
decoder_plugin_stream_decode(const struct decoder_plugin *plugin,
|
||||||
|
struct decoder *decoder, struct input_stream *is)
|
||||||
|
{
|
||||||
|
plugin->stream_decode(decoder, is);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decode a file.
|
||||||
|
*/
|
||||||
|
static inline void
|
||||||
|
decoder_plugin_file_decode(const struct decoder_plugin *plugin,
|
||||||
|
struct decoder *decoder, const char *path_fs)
|
||||||
|
{
|
||||||
|
plugin->file_decode(decoder, path_fs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read the tag of a file.
|
||||||
|
*/
|
||||||
|
static inline struct tag *
|
||||||
|
decoder_plugin_tag_dup(const struct decoder_plugin *plugin,
|
||||||
|
const char *path_fs)
|
||||||
|
{
|
||||||
|
return plugin->tag_dup(path_fs);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -50,7 +50,7 @@ decoder_stream_decode(const struct decoder_plugin *plugin,
|
|||||||
/* rewind the stream, so each plugin gets a fresh start */
|
/* rewind the stream, so each plugin gets a fresh start */
|
||||||
input_stream_seek(input_stream, 0, SEEK_SET);
|
input_stream_seek(input_stream, 0, SEEK_SET);
|
||||||
|
|
||||||
plugin->stream_decode(decoder, input_stream);
|
decoder_plugin_stream_decode(plugin, decoder, input_stream);
|
||||||
|
|
||||||
assert(dc.state == DECODE_STATE_START ||
|
assert(dc.state == DECODE_STATE_START ||
|
||||||
dc.state == DECODE_STATE_DECODE);
|
dc.state == DECODE_STATE_DECODE);
|
||||||
@@ -71,7 +71,7 @@ decoder_file_decode(const struct decoder_plugin *plugin,
|
|||||||
assert(path[0] == '/');
|
assert(path[0] == '/');
|
||||||
assert(dc.state == DECODE_STATE_START);
|
assert(dc.state == DECODE_STATE_START);
|
||||||
|
|
||||||
plugin->file_decode(decoder, path);
|
decoder_plugin_file_decode(plugin, decoder, path);
|
||||||
|
|
||||||
assert(dc.state == DECODE_STATE_START ||
|
assert(dc.state == DECODE_STATE_START ||
|
||||||
dc.state == DECODE_STATE_DECODE);
|
dc.state == DECODE_STATE_DECODE);
|
||||||
|
Reference in New Issue
Block a user