00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef MPD_DECODER_PLUGIN_H
00021 #define MPD_DECODER_PLUGIN_H
00022
00023 #include <stdbool.h>
00024 #include <stddef.h>
00025
00026 struct config_param;
00027 struct input_stream;
00028 struct tag;
00029
00034 struct decoder;
00035
00036 struct decoder_plugin {
00037 const char *name;
00038
00047 bool (*init)(const struct config_param *param);
00048
00053 void (*finish)(void);
00054
00062 void (*stream_decode)(struct decoder *decoder,
00063 struct input_stream *is);
00064
00070 void (*file_decode)(struct decoder *decoder, const char *path_fs);
00071
00077 struct tag *(*tag_dup)(const char *path_fs);
00078
00089 char* (*container_scan)(const char *path_fs, const unsigned int tnum);
00090
00091
00092 const char *const*suffixes;
00093 const char *const*mime_types;
00094 };
00095
00104 static inline bool
00105 decoder_plugin_init(const struct decoder_plugin *plugin,
00106 const struct config_param *param)
00107 {
00108 return plugin->init != NULL
00109 ? plugin->init(param)
00110 : true;
00111 }
00112
00116 static inline void
00117 decoder_plugin_finish(const struct decoder_plugin *plugin)
00118 {
00119 if (plugin->finish != NULL)
00120 plugin->finish();
00121 }
00122
00126 static inline void
00127 decoder_plugin_stream_decode(const struct decoder_plugin *plugin,
00128 struct decoder *decoder, struct input_stream *is)
00129 {
00130 plugin->stream_decode(decoder, is);
00131 }
00132
00136 static inline void
00137 decoder_plugin_file_decode(const struct decoder_plugin *plugin,
00138 struct decoder *decoder, const char *path_fs)
00139 {
00140 plugin->file_decode(decoder, path_fs);
00141 }
00142
00146 static inline struct tag *
00147 decoder_plugin_tag_dup(const struct decoder_plugin *plugin,
00148 const char *path_fs)
00149 {
00150 return plugin->tag_dup(path_fs);
00151 }
00152
00156 static inline char *
00157 decoder_plugin_container_scan( const struct decoder_plugin *plugin,
00158 const char* pathname,
00159 const unsigned int tnum)
00160 {
00161 return plugin->container_scan(pathname, tnum);
00162 }
00163
00164 #endif