#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, GError **error); 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, 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