#ifndef DECODER_H #define DECODER_H #include #include struct decoder_plugin { const gchar *name; const gchar * const *extensions; gboolean (*init)(gpointer *data); gssize (*decode)(gpointer data, GInputStream *input, GOutputStream *output); void (*close)(gpointer data); }; struct decoder { const struct decoder_plugin *decoder; gpointer data; }; gboolean decoder_init(struct decoder *decoder); gssize decoder_decode(struct decoder *decoder, GInputStream *input, GOutputStream *output); void decoder_close(struct decoder *decoder); const struct decoder_plugin *decoder_get(const gchar *name); const struct decoder_plugin *decoder_find(const gchar *filename); #endif