#ifndef ENCODER_H #define ENCODER_H #include #include struct encoder_plugin { const gchar *name; gboolean (*init)(gpointer *data); gssize (*encode)(gpointer data, GInputStream *input, GOutputStream *output, GError **error); void (*flush)(gpointer data, GOutputStream *output, GError **error); void (*close)(gpointer data); }; struct encoder { const struct encoder_plugin *encoder; gpointer data; }; gboolean encoder_init(struct encoder *encoder); gssize encoder_encode(struct encoder *encoder, GInputStream *input, GOutputStream *output, GError **error); void encoder_flush(struct encoder *encoder, GOutputStream *output, GError **error); void encoder_close(struct encoder *encoder); const struct encoder_plugin *encoder_get(const gchar *name); static inline GQuark encoder_quark() { return g_quark_from_string("encoder"); } enum { ENCODER_CODE_ERROR = 0, ENCODER_CODE_DONE, }; #endif