#ifndef DECODER_H #define DECODER_H #include "audioformat.h" #include #include struct decoder; struct decoder_plugin { const gchar *name; const gchar * const *extensions; gboolean (*init)(struct decoder *decoder); gssize (*decode)(struct decoder *decoder, GInputStream *input, GOutputStream *output, GError **error); void (*close)(struct decoder *decoder); }; struct decoder { const struct decoder_plugin *decoder; unsigned int rate; enum audio_format format; unsigned int channels; gpointer data; }; gboolean decoder_init(struct decoder *decoder); gssize decoder_decode(struct decoder *decoder, GInputStream *input, GOutputStream *output, GError **error); void decoder_close(struct decoder *decoder); const struct decoder_plugin *decoder_get(const gchar *name); const struct decoder_plugin *decoder_find(const gchar *filename); static inline GQuark decoder_quark() { return g_quark_from_string("decoder"); } enum { DECODER_CODE_ERROR = 0, DECODER_CODE_DONE, }; #endif