From ac5e220d0e17f57f2fb3c4dedde186f238fa89ed Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Tue, 17 Aug 2010 18:19:45 +0200 Subject: Added transcoder. --- transcode.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 transcode.c (limited to 'transcode.c') diff --git a/transcode.c b/transcode.c new file mode 100644 index 0000000..6508b28 --- /dev/null +++ b/transcode.c @@ -0,0 +1,38 @@ +#include "transcode.h" +#include "decode_converter.h" +#include "encode_converter.h" + +#include + +void transcode(GInputStream *input, const struct decoder_plugin *decoder, + GOutputStream *output, const struct encoder_plugin *encoder) { + GError *error = NULL; + + DecodeConverter *dc = decode_converter_new(decoder); + GInputStream *decoded_stream = g_converter_input_stream_new(input, + (GConverter*)dc); + + EncodeConverter *ec = encode_converter_new(encoder); + GInputStream *encoded_stream = g_converter_input_stream_new(decoded_stream, + (GConverter*)ec); + + gssize size = g_output_stream_splice(output, encoded_stream, + G_OUTPUT_STREAM_SPLICE_NONE, NULL, &error); + + if(size == -1) { + if(error) { + g_warning(error->message); + g_error_free(error); + } else { + g_debug("g_output_stream_splice returned -1, but error is NULL!"); + } + } + + g_debug("transcode ended"); + + g_object_unref(encoded_stream); + g_object_unref(ec); + + g_object_unref(decoded_stream); + g_object_unref(dc); +} -- cgit v1.2.3