#include "encoder.h" #include static gboolean lame_encoder_init(gpointer *data) { lame_global_flags *gfp; gfp = lame_init(); int ret = lame_init_params(gfp); *data = gfp; return (ret >= 0 ? TRUE : FALSE); } static gssize lame_encoder_encode(gpointer data, GInputStream *input, GOutputStream *output) { lame_global_flags *gfp = data; const inbuf_size = 0x400*8; const outbuf_size = 0x400*8; gchar inbuf[inbuf_size]; gchar outbuf[inbuf_size]; int inbuf_read = g_input_stream_read(input, inbuf, inbuf_size, NULL, NULL); int ret = lame_encode_buffer_interleaved(gfp, (short*)inbuf, inbuf_read / 4, outbuf, outbuf_size); return g_output_stream_write(output, outbuf, ret, NULL, NULL); } static void lame_encoder_close(gpointer data) { lame_global_flags *gfp = data; lame_close(gfp); } const struct encoder_plugin encoder_lame_encoder = { .name = "lame", .init = lame_encoder_init, .encode = lame_encoder_encode, .close = lame_encoder_close, };