From 12e7f431ba4baf18b47ea2fced4091c61457069c Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Tue, 17 Aug 2010 18:17:23 +0200 Subject: Added decoder API. --- decoder.c | 15 +++++++++++++++ decoder.h | 30 ++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 decoder.c create mode 100644 decoder.h diff --git a/decoder.c b/decoder.c new file mode 100644 index 0000000..555757d --- /dev/null +++ b/decoder.c @@ -0,0 +1,15 @@ +#include "decoder.h" + +gboolean decoder_init(struct decoder *decoder) { + return decoder->decoder->init(&(decoder->data)); +} + +gssize decoder_decode(struct decoder *decoder, const guchar *inbuf, + gsize inbuf_size, guchar *outbuf, gsize outbuf_size) { + return decoder->decoder->decode(decoder->data, inbuf, inbuf_size, + outbuf, outbuf_size); +} + +void decoder_close(struct decoder *decoder) { + decoder->decoder->close(decoder->data); +} diff --git a/decoder.h b/decoder.h new file mode 100644 index 0000000..0a29c64 --- /dev/null +++ b/decoder.h @@ -0,0 +1,30 @@ +#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, const guchar *inbuf, gsize inbuf_size, + guchar *outbuf, gsize outbuf_size); + void (*close)(gpointer data); +}; + +struct decoder { + const struct decoder_plugin *decoder; + + gpointer data; +}; + +extern struct decoder_plugin *decoder_plugins; + +gboolean decoder_init(struct decoder *decoder); +gssize decoder_decode(struct decoder *decoder, const guchar *inbuf, + gsize inbuf_size, guchar *outbuf, gsize outbuf_size); +void decoder_close(struct decoder *decoder); + +#endif -- cgit v1.2.3