diff options
author | Thomas Vander Stichele <thomas@apestaart.org> | 2004-03-14 22:34:33 +0000 |
---|---|---|
committer | Thomas Vander Stichele <thomas@apestaart.org> | 2004-03-14 22:34:33 +0000 |
commit | 5d25c00e4b613b9cdf2c04fa3a68dffa03834a68 (patch) | |
tree | 74a5b1eaf3a324b520e64e87404fd0b3018a7829 /ext/flac | |
parent | 1e83b097f7b732ae49e294a5a398bdc3e88854a8 (diff) |
gst-indent
Original commit message from CVS:
gst-indent
Diffstat (limited to 'ext/flac')
-rw-r--r-- | ext/flac/flac_compat.h | 2 | ||||
-rw-r--r-- | ext/flac/gstflac.c | 28 | ||||
-rw-r--r-- | ext/flac/gstflacdec.c | 513 | ||||
-rw-r--r-- | ext/flac/gstflacdec.h | 55 | ||||
-rw-r--r-- | ext/flac/gstflacenc.c | 646 | ||||
-rw-r--r-- | ext/flac/gstflacenc.h | 57 | ||||
-rw-r--r-- | ext/flac/gstflactag.c | 230 |
7 files changed, 776 insertions, 755 deletions
diff --git a/ext/flac/flac_compat.h b/ext/flac/flac_compat.h index 87b5b864..defa969d 100644 --- a/ext/flac/flac_compat.h +++ b/ext/flac/flac_compat.h @@ -16,7 +16,7 @@ /* FIXME when there's a autoconf symbol */ #ifndef FLAC_VERSION -#ifndef FLAC__VERSION_STRING /* removed in 1.0.4 */ +#ifndef FLAC__VERSION_STRING /* removed in 1.0.4 */ #define FLAC_VERSION 0x010004 #else #ifdef FLAC__REFERENCE_CODEC_MAX_BITS_PER_SAMPLE diff --git a/ext/flac/gstflac.c b/ext/flac/gstflac.c index 3c06cacf..c1dba934 100644 --- a/ext/flac/gstflac.c +++ b/ext/flac/gstflac.c @@ -28,7 +28,7 @@ #include "flac_compat.h" static gboolean -plugin_init (GstPlugin *plugin) +plugin_init (GstPlugin * plugin) { if (!gst_library_load ("gstbytestream")) return FALSE; @@ -37,25 +37,23 @@ plugin_init (GstPlugin *plugin) if (!gst_plugin_load ("gsttags")) return FALSE; - if (!gst_element_register (plugin, "flacenc", GST_RANK_NONE, GST_TYPE_FLACENC)) + if (!gst_element_register (plugin, "flacenc", GST_RANK_NONE, + GST_TYPE_FLACENC)) return FALSE; - if (!gst_element_register (plugin, "flacdec", GST_RANK_PRIMARY, GST_TYPE_FLACDEC)) + if (!gst_element_register (plugin, "flacdec", GST_RANK_PRIMARY, + GST_TYPE_FLACDEC)) return FALSE; - if (!gst_element_register (plugin, "flactag", GST_RANK_PRIMARY, gst_flac_tag_get_type ())) + if (!gst_element_register (plugin, "flactag", GST_RANK_PRIMARY, + gst_flac_tag_get_type ())) return FALSE; - + return TRUE; } -GST_PLUGIN_DEFINE ( - GST_VERSION_MAJOR, - GST_VERSION_MINOR, - "flac", - "The FLAC Lossless compressor Codec", - plugin_init, - VERSION, - "LGPL", - GST_PACKAGE, - GST_ORIGIN) +GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, + GST_VERSION_MINOR, + "flac", + "The FLAC Lossless compressor Codec", + plugin_init, VERSION, "LGPL", GST_PACKAGE, GST_ORIGIN) diff --git a/ext/flac/gstflacdec.c b/ext/flac/gstflacdec.c index 25769bcf..3882df1a 100644 --- a/ext/flac/gstflacdec.c +++ b/ext/flac/gstflacdec.c @@ -41,104 +41,101 @@ GstElementDetails flacdec_details = { }; /* FlacDec signals and args */ -enum { +enum +{ /* FILL ME */ LAST_SIGNAL }; -enum { +enum +{ ARG_0, ARG_METADATA }; -static void gst_flacdec_base_init (gpointer g_class); -static void gst_flacdec_class_init (FlacDecClass *klass); -static void gst_flacdec_init (FlacDec *flacdec); +static void gst_flacdec_base_init (gpointer g_class); +static void gst_flacdec_class_init (FlacDecClass * klass); +static void gst_flacdec_init (FlacDec * flacdec); + +static void gst_flacdec_loop (GstElement * element); +static GstElementStateReturn gst_flacdec_change_state (GstElement * element); +static const GstFormat *gst_flacdec_get_src_formats (GstPad * pad); +static gboolean gst_flacdec_convert_src (GstPad * pad, GstFormat src_format, + gint64 src_value, GstFormat * dest_format, gint64 * dest_value); +static const GstQueryType *gst_flacdec_get_src_query_types (GstPad * pad); +static gboolean gst_flacdec_src_query (GstPad * pad, GstQueryType type, + GstFormat * format, gint64 * value); +static const GstEventMask *gst_flacdec_get_src_event_masks (GstPad * pad); +static gboolean gst_flacdec_src_event (GstPad * pad, GstEvent * event); -static void gst_flacdec_loop (GstElement *element); -static GstElementStateReturn - gst_flacdec_change_state (GstElement *element); -static const GstFormat* gst_flacdec_get_src_formats (GstPad *pad); -static gboolean gst_flacdec_convert_src (GstPad *pad, GstFormat src_format, gint64 src_value, - GstFormat *dest_format, gint64 *dest_value); -static const GstQueryType* - gst_flacdec_get_src_query_types (GstPad *pad); -static gboolean gst_flacdec_src_query (GstPad *pad, GstQueryType type, - GstFormat *format, gint64 *value); -static const GstEventMask* - gst_flacdec_get_src_event_masks (GstPad *pad); -static gboolean gst_flacdec_src_event (GstPad *pad, GstEvent *event); - -static FLAC__SeekableStreamDecoderReadStatus - gst_flacdec_read (const FLAC__SeekableStreamDecoder *decoder, - FLAC__byte buffer[], unsigned *bytes, - void *client_data); -static FLAC__SeekableStreamDecoderSeekStatus - gst_flacdec_seek (const FLAC__SeekableStreamDecoder *decoder, - FLAC__uint64 position, void *client_data); -static FLAC__SeekableStreamDecoderTellStatus - gst_flacdec_tell (const FLAC__SeekableStreamDecoder *decoder, - FLAC__uint64 *position, void *client_data); -static FLAC__SeekableStreamDecoderLengthStatus - gst_flacdec_length (const FLAC__SeekableStreamDecoder *decoder, - FLAC__uint64 *length, void *client_data); -static FLAC__bool gst_flacdec_eof (const FLAC__SeekableStreamDecoder *decoder, - void *client_data); -static FLAC__StreamDecoderWriteStatus - gst_flacdec_write (const FLAC__SeekableStreamDecoder *decoder, - const FLAC__Frame *frame, - const FLAC__int32 * const buffer[], - void *client_data); -static void gst_flacdec_metadata_callback (const FLAC__SeekableStreamDecoder *decoder, - const FLAC__StreamMetadata *metadata, - void *client_data); -static void gst_flacdec_error_callback (const FLAC__SeekableStreamDecoder *decoder, - FLAC__StreamDecoderErrorStatus status, - void *client_data); +static FLAC__SeekableStreamDecoderReadStatus +gst_flacdec_read (const FLAC__SeekableStreamDecoder * decoder, + FLAC__byte buffer[], unsigned *bytes, void *client_data); +static FLAC__SeekableStreamDecoderSeekStatus +gst_flacdec_seek (const FLAC__SeekableStreamDecoder * decoder, + FLAC__uint64 position, void *client_data); +static FLAC__SeekableStreamDecoderTellStatus +gst_flacdec_tell (const FLAC__SeekableStreamDecoder * decoder, + FLAC__uint64 * position, void *client_data); +static FLAC__SeekableStreamDecoderLengthStatus +gst_flacdec_length (const FLAC__SeekableStreamDecoder * decoder, + FLAC__uint64 * length, void *client_data); +static FLAC__bool gst_flacdec_eof (const FLAC__SeekableStreamDecoder * decoder, + void *client_data); +static FLAC__StreamDecoderWriteStatus +gst_flacdec_write (const FLAC__SeekableStreamDecoder * decoder, + const FLAC__Frame * frame, + const FLAC__int32 * const buffer[], void *client_data); +static void gst_flacdec_metadata_callback (const FLAC__SeekableStreamDecoder * + decoder, const FLAC__StreamMetadata * metadata, void *client_data); +static void gst_flacdec_error_callback (const FLAC__SeekableStreamDecoder * + decoder, FLAC__StreamDecoderErrorStatus status, void *client_data); static GstElementClass *parent_class = NULL; + /*static guint gst_flacdec_signals[LAST_SIGNAL] = { 0 }; */ GType -flacdec_get_type(void) { +flacdec_get_type (void) +{ static GType flacdec_type = 0; if (!flacdec_type) { static const GTypeInfo flacdec_info = { - sizeof(FlacDecClass), + sizeof (FlacDecClass), gst_flacdec_base_init, NULL, - (GClassInitFunc)gst_flacdec_class_init, + (GClassInitFunc) gst_flacdec_class_init, NULL, NULL, - sizeof(FlacDec), + sizeof (FlacDec), 0, - (GInstanceInitFunc)gst_flacdec_init, + (GInstanceInitFunc) gst_flacdec_init, }; - flacdec_type = g_type_register_static (GST_TYPE_ELEMENT, "FlacDec", &flacdec_info, 0); + flacdec_type = + g_type_register_static (GST_TYPE_ELEMENT, "FlacDec", &flacdec_info, 0); } return flacdec_type; } -static GstCaps* +static GstCaps * flac_caps_factory (void) { return gst_caps_new_simple ("audio/x-flac", NULL); - /* "rate", GST_PROPS_INT_RANGE (11025, 48000), - * "channels", GST_PROPS_INT_RANGE (1, 2), */ + /* "rate", GST_PROPS_INT_RANGE (11025, 48000), + * "channels", GST_PROPS_INT_RANGE (1, 2), */ } -static GstCaps* +static GstCaps * raw_caps_factory (void) { return gst_caps_new_simple ("audio/x-raw-int", - "endianness", G_TYPE_INT, G_BYTE_ORDER, - "signed", G_TYPE_BOOLEAN, TRUE, - "width", G_TYPE_INT, 16, - "depth", G_TYPE_INT, 16, - "rate", GST_TYPE_INT_RANGE, 11025, 48000, - "channels", GST_TYPE_INT_RANGE, 1, 2, - NULL); + "endianness", G_TYPE_INT, G_BYTE_ORDER, + "signed", G_TYPE_BOOLEAN, TRUE, + "width", G_TYPE_INT, 16, + "depth", G_TYPE_INT, 16, + "rate", GST_TYPE_INT_RANGE, 11025, 48000, + "channels", GST_TYPE_INT_RANGE, 1, 2, NULL); } static void @@ -152,7 +149,7 @@ gst_flacdec_base_init (gpointer g_class) sink_template = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, flac_caps); - src_template = gst_pad_template_new ("src", GST_PAD_SRC, + src_template = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, raw_caps); gst_element_class_add_pad_template (element_class, sink_template); gst_element_class_add_pad_template (element_class, src_template); @@ -160,21 +157,21 @@ gst_flacdec_base_init (gpointer g_class) } static void -gst_flacdec_class_init (FlacDecClass *klass) +gst_flacdec_class_init (FlacDecClass * klass) { GstElementClass *gstelement_class; GObjectClass *gobject_class; - gstelement_class = (GstElementClass*)klass; - gobject_class = (GObjectClass*) klass; + gstelement_class = (GstElementClass *) klass; + gobject_class = (GObjectClass *) klass; - parent_class = g_type_class_ref(GST_TYPE_ELEMENT); + parent_class = g_type_class_ref (GST_TYPE_ELEMENT); gstelement_class->change_state = gst_flacdec_change_state; } -static void -gst_flacdec_init (FlacDec *flacdec) +static void +gst_flacdec_init (FlacDec * flacdec) { flacdec->sinkpad = gst_pad_new_from_template (sink_template, "sink"); gst_element_add_pad (GST_ELEMENT (flacdec), flacdec->sinkpad); @@ -185,9 +182,11 @@ gst_flacdec_init (FlacDec *flacdec) gst_element_add_pad (GST_ELEMENT (flacdec), flacdec->srcpad); gst_pad_set_formats_function (flacdec->srcpad, gst_flacdec_get_src_formats); gst_pad_set_convert_function (flacdec->srcpad, gst_flacdec_convert_src); - gst_pad_set_query_type_function (flacdec->srcpad, gst_flacdec_get_src_query_types); + gst_pad_set_query_type_function (flacdec->srcpad, + gst_flacdec_get_src_query_types); gst_pad_set_query_function (flacdec->srcpad, gst_flacdec_src_query); - gst_pad_set_event_mask_function (flacdec->srcpad, gst_flacdec_get_src_event_masks); + gst_pad_set_event_mask_function (flacdec->srcpad, + gst_flacdec_get_src_event_masks); gst_pad_set_event_function (flacdec->srcpad, gst_flacdec_src_event); gst_pad_use_explicit_caps (flacdec->srcpad); @@ -197,30 +196,39 @@ gst_flacdec_init (FlacDec *flacdec) flacdec->eos = FALSE; flacdec->seek_pending = FALSE; - FLAC__seekable_stream_decoder_set_read_callback (flacdec->decoder, gst_flacdec_read); - FLAC__seekable_stream_decoder_set_seek_callback (flacdec->decoder, gst_flacdec_seek); - FLAC__seekable_stream_decoder_set_tell_callback (flacdec->decoder, gst_flacdec_tell); - FLAC__seekable_stream_decoder_set_length_callback (flacdec->decoder, gst_flacdec_length); - FLAC__seekable_stream_decoder_set_eof_callback (flacdec->decoder, gst_flacdec_eof); + FLAC__seekable_stream_decoder_set_read_callback (flacdec->decoder, + gst_flacdec_read); + FLAC__seekable_stream_decoder_set_seek_callback (flacdec->decoder, + gst_flacdec_seek); + FLAC__seekable_stream_decoder_set_tell_callback (flacdec->decoder, + gst_flacdec_tell); + FLAC__seekable_stream_decoder_set_length_callback (flacdec->decoder, + gst_flacdec_length); + FLAC__seekable_stream_decoder_set_eof_callback (flacdec->decoder, + gst_flacdec_eof); #if FLAC_VERSION >= 0x010003 - FLAC__seekable_stream_decoder_set_write_callback (flacdec->decoder, gst_flacdec_write); + FLAC__seekable_stream_decoder_set_write_callback (flacdec->decoder, + gst_flacdec_write); #else FLAC__seekable_stream_decoder_set_write_callback (flacdec->decoder, - (FLAC__StreamDecoderWriteStatus (*) - (const FLAC__SeekableStreamDecoder *decoder, - const FLAC__Frame *frame, - const FLAC__int32 *buffer[], - void *client_data)) - (gst_flacdec_write)); + (FLAC__StreamDecoderWriteStatus (*) + (const FLAC__SeekableStreamDecoder * decoder, + const FLAC__Frame * frame, + const FLAC__int32 * buffer[], void *client_data)) + (gst_flacdec_write)); #endif - FLAC__seekable_stream_decoder_set_metadata_respond (flacdec->decoder, FLAC__METADATA_TYPE_VORBIS_COMMENT); - FLAC__seekable_stream_decoder_set_metadata_callback (flacdec->decoder, gst_flacdec_metadata_callback); - FLAC__seekable_stream_decoder_set_error_callback (flacdec->decoder, gst_flacdec_error_callback); + FLAC__seekable_stream_decoder_set_metadata_respond (flacdec->decoder, + FLAC__METADATA_TYPE_VORBIS_COMMENT); + FLAC__seekable_stream_decoder_set_metadata_callback (flacdec->decoder, + gst_flacdec_metadata_callback); + FLAC__seekable_stream_decoder_set_error_callback (flacdec->decoder, + gst_flacdec_error_callback); FLAC__seekable_stream_decoder_set_client_data (flacdec->decoder, flacdec); } static gboolean -gst_flacdec_update_metadata (FlacDec *flacdec, const FLAC__StreamMetadata *metadata) +gst_flacdec_update_metadata (FlacDec * flacdec, + const FLAC__StreamMetadata * metadata) { GstTagList *list; guint32 number_of_comments, cursor, str_len; @@ -233,17 +241,15 @@ gst_flacdec_update_metadata (FlacDec *flacdec, const FLAC__StreamMetadata *metad number_of_comments = metadata->data.vorbis_comment.num_comments; value = NULL; - GST_DEBUG ("%d tag(s) found", number_of_comments); - for (cursor = 0; cursor < number_of_comments; cursor++) - { + GST_DEBUG ("%d tag(s) found", number_of_comments); + for (cursor = 0; cursor < number_of_comments; cursor++) { str_ptr = metadata->data.vorbis_comment.comments[cursor].entry; str_len = metadata->data.vorbis_comment.comments[cursor].length; - p_value = g_strstr_len ( str_ptr, str_len , "=" ); - if (p_value) - { + p_value = g_strstr_len (str_ptr, str_len, "="); + if (p_value) { name = g_strndup (str_ptr, p_value - str_ptr); value = g_strndup (p_value + 1, str_ptr + str_len - p_value - 1); - + GST_DEBUG ("%s : %s", name, value); gst_vorbis_tag_add (list, name, value); g_free (name); @@ -260,30 +266,29 @@ gst_flacdec_update_metadata (FlacDec *flacdec, const FLAC__StreamMetadata *metad } -static void -gst_flacdec_metadata_callback (const FLAC__SeekableStreamDecoder *decoder, - const FLAC__StreamMetadata *metadata, void *client_data) +static void +gst_flacdec_metadata_callback (const FLAC__SeekableStreamDecoder * decoder, + const FLAC__StreamMetadata * metadata, void *client_data) { FlacDec *flacdec; - + flacdec = GST_FLACDEC (client_data); - switch (metadata->type) - { + switch (metadata->type) { case FLAC__METADATA_TYPE_STREAMINFO: - flacdec->stream_samples = metadata->data.stream_info.total_samples; - break; + flacdec->stream_samples = metadata->data.stream_info.total_samples; + break; case FLAC__METADATA_TYPE_VORBIS_COMMENT: - gst_flacdec_update_metadata (flacdec, metadata); - break; + gst_flacdec_update_metadata (flacdec, metadata); + break; default: - break; + break; } } -static void -gst_flacdec_error_callback (const FLAC__SeekableStreamDecoder *decoder, - FLAC__StreamDecoderErrorStatus status, void *client_data) +static void +gst_flacdec_error_callback (const FLAC__SeekableStreamDecoder * decoder, + FLAC__StreamDecoderErrorStatus status, void *client_data) { FlacDec *flacdec; gchar *error; @@ -308,9 +313,9 @@ gst_flacdec_error_callback (const FLAC__SeekableStreamDecoder *decoder, GST_ELEMENT_ERROR (flacdec, STREAM, DECODE, (NULL), (error)); } -static FLAC__SeekableStreamDecoderSeekStatus -gst_flacdec_seek (const FLAC__SeekableStreamDecoder *decoder, - FLAC__uint64 position, void *client_data) +static FLAC__SeekableStreamDecoderSeekStatus +gst_flacdec_seek (const FLAC__SeekableStreamDecoder * decoder, + FLAC__uint64 position, void *client_data) { FlacDec *flacdec; @@ -323,9 +328,9 @@ gst_flacdec_seek (const FLAC__SeekableStreamDecoder *decoder, return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_OK; } -static FLAC__SeekableStreamDecoderTellStatus -gst_flacdec_tell (const FLAC__SeekableStreamDecoder *decoder, - FLAC__uint64 *position, void *client_data) +static FLAC__SeekableStreamDecoderTellStatus +gst_flacdec_tell (const FLAC__SeekableStreamDecoder * decoder, + FLAC__uint64 * position, void *client_data) { FlacDec *flacdec; @@ -340,9 +345,9 @@ gst_flacdec_tell (const FLAC__SeekableStreamDecoder *decoder, return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_OK; } -static FLAC__SeekableStreamDecoderLengthStatus -gst_flacdec_length (const FLAC__SeekableStreamDecoder *decoder, - FLAC__uint64 *length, void *client_data) +static FLAC__SeekableStreamDecoderLengthStatus +gst_flacdec_length (const FLAC__SeekableStreamDecoder * decoder, + FLAC__uint64 * length, void *client_data) { FlacDec *flacdec; @@ -358,8 +363,7 @@ gst_flacdec_length (const FLAC__SeekableStreamDecoder *decoder, } static FLAC__bool -gst_flacdec_eof (const FLAC__SeekableStreamDecoder *decoder, - void *client_data) +gst_flacdec_eof (const FLAC__SeekableStreamDecoder * decoder, void *client_data) { FlacDec *flacdec; @@ -370,9 +374,8 @@ gst_flacdec_eof (const FLAC__SeekableStreamDecoder *decoder, } static FLAC__SeekableStreamDecoderReadStatus -gst_flacdec_read (const FLAC__SeekableStreamDecoder *decoder, - FLAC__byte buffer[], unsigned *bytes, - void *client_data) +gst_flacdec_read (const FLAC__SeekableStreamDecoder * decoder, + FLAC__byte buffer[], unsigned *bytes, void *client_data) { FlacDec *flacdec; gint insize = 0; @@ -381,39 +384,39 @@ gst_flacdec_read (const FLAC__SeekableStreamDecoder *decoder, flacdec = GST_FLACDEC (client_data); //g_print ("read %u\n", *bytes); - + while (insize == 0) { insize = gst_bytestream_peek_bytes (flacdec->bs, &indata, *bytes); if (insize < *bytes) { GstEvent *event; guint32 avail; - + gst_bytestream_get_status (flacdec->bs, &avail, &event); switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_EOS: - GST_DEBUG ("eos"); - flacdec->eos = TRUE; + case GST_EVENT_EOS: + GST_DEBUG ("eos"); + flacdec->eos = TRUE; gst_event_unref (event); - if (avail == 0) { - return 0; - } - break; - case GST_EVENT_DISCONTINUOUS: - GST_DEBUG ("discont"); + if (avail == 0) { + return 0; + } + break; + case GST_EVENT_DISCONTINUOUS: + GST_DEBUG ("discont"); /* we are not yet sending the discont, we'll do that in the next write operation */ flacdec->need_discont = TRUE; gst_event_unref (event); break; - default: + default: gst_pad_event_default (flacdec->sinkpad, event); - break; + break; } if (avail > 0) - insize = gst_bytestream_peek_bytes (flacdec->bs, &indata, avail); + insize = gst_bytestream_peek_bytes (flacdec->bs, &indata, avail); else - insize = 0; + insize = 0; } } @@ -425,10 +428,9 @@ gst_flacdec_read (const FLAC__SeekableStreamDecoder *decoder, } static FLAC__StreamDecoderWriteStatus -gst_flacdec_write (const FLAC__SeekableStreamDecoder *decoder, - const FLAC__Frame *frame, - const FLAC__int32 * const buffer[], - void *client_data) +gst_flacdec_write (const FLAC__SeekableStreamDecoder * decoder, + const FLAC__Frame * frame, + const FLAC__int32 * const buffer[], void *client_data) { FlacDec *flacdec; GstBuffer *outbuf; @@ -445,41 +447,39 @@ gst_flacdec_write (const FLAC__SeekableStreamDecoder *decoder, GstEvent *discont; flacdec->need_discont = FALSE; - + if (!GST_PAD_CAPS (flacdec->srcpad)) { if (flacdec->seek_pending) { - flacdec->total_samples = flacdec->seek_value; + flacdec->total_samples = flacdec->seek_value; } if (GST_PAD_IS_USABLE (flacdec->srcpad)) { - GST_DEBUG ("send discont"); - - format = GST_FORMAT_TIME; - gst_pad_convert (flacdec->srcpad, GST_FORMAT_DEFAULT, - flacdec->total_samples, &format, &time); - format = GST_FORMAT_BYTES; - gst_pad_convert (flacdec->srcpad, GST_FORMAT_DEFAULT, - flacdec->total_samples, &format, &bytes); - discont = gst_event_new_discontinuous (FALSE, GST_FORMAT_TIME, time, - GST_FORMAT_BYTES, bytes, - GST_FORMAT_DEFAULT, flacdec->total_samples, - NULL); - - gst_pad_push (flacdec->srcpad, GST_DATA (discont)); + GST_DEBUG ("send discont"); + + format = GST_FORMAT_TIME; + gst_pad_convert (flacdec->srcpad, GST_FORMAT_DEFAULT, + flacdec->total_samples, &format, &time); + format = GST_FORMAT_BYTES; + gst_pad_convert (flacdec->srcpad, GST_FORMAT_DEFAULT, + flacdec->total_samples, &format, &bytes); + discont = gst_event_new_discontinuous (FALSE, GST_FORMAT_TIME, time, + GST_FORMAT_BYTES, bytes, + GST_FORMAT_DEFAULT, flacdec->total_samples, NULL); + + gst_pad_push (flacdec->srcpad, GST_DATA (discont)); } } } - + if (!GST_PAD_CAPS (flacdec->srcpad)) { gst_pad_set_explicit_caps (flacdec->srcpad, - gst_caps_new_simple ("audio/x-raw-int", - "endianness", G_TYPE_INT, G_BYTE_ORDER, - "signed", G_TYPE_BOOLEAN, TRUE, - "width", G_TYPE_INT, depth, - "depth", G_TYPE_INT, depth, - "rate", G_TYPE_INT, frame->header.sample_rate, - "channels", G_TYPE_INT, channels, - NULL)); + gst_caps_new_simple ("audio/x-raw-int", + "endianness", G_TYPE_INT, G_BYTE_ORDER, + "signed", G_TYPE_BOOLEAN, TRUE, + "width", G_TYPE_INT, depth, + "depth", G_TYPE_INT, depth, + "rate", G_TYPE_INT, frame->header.sample_rate, + "channels", G_TYPE_INT, channels, NULL)); flacdec->depth = depth; flacdec->channels = channels; @@ -488,29 +488,28 @@ gst_flacdec_write (const FLAC__SeekableStreamDecoder *decoder, if (GST_PAD_IS_USABLE (flacdec->srcpad)) { outbuf = gst_buffer_new (); - GST_BUFFER_SIZE (outbuf) = samples * channels * ((depth+7)>>3); + GST_BUFFER_SIZE (outbuf) = samples * channels * ((depth + 7) >> 3); GST_BUFFER_DATA (outbuf) = g_malloc (GST_BUFFER_SIZE (outbuf)); - GST_BUFFER_TIMESTAMP (outbuf) = flacdec->total_samples * GST_SECOND / frame->header.sample_rate; - + GST_BUFFER_TIMESTAMP (outbuf) = + flacdec->total_samples * GST_SECOND / frame->header.sample_rate; + if (depth == 8) { - guint8 *outbuffer = (guint8 *)GST_BUFFER_DATA (outbuf); - - for (i=0; i<samples; i++) { - for (j=0; j < channels; j++) { - *outbuffer++ = (guint8) buffer[j][i]; - } + guint8 *outbuffer = (guint8 *) GST_BUFFER_DATA (outbuf); + + for (i = 0; i < samples; i++) { + for (j = 0; j < channels; j++) { + *outbuffer++ = (guint8) buffer[j][i]; + } } - } - else if (depth == 16) { - guint16 *outbuffer = (guint16 *)GST_BUFFER_DATA (outbuf); - - for (i=0; i<samples; i++) { - for (j=0; j < channels; j++) { - *outbuffer++ = (guint16) buffer[j][i]; - } + } else if (depth == 16) { + guint16 *outbuffer = (guint16 *) GST_BUFFER_DATA (outbuf); + + for (i = 0; i < samples; i++) { + for (j = 0; j < channels; j++) { + *outbuffer++ = (guint16) buffer[j][i]; + } } - } - else { + } else { g_warning ("flacdec: invalid depth %d found\n", depth); return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT; } @@ -521,8 +520,8 @@ gst_flacdec_write (const FLAC__SeekableStreamDecoder *decoder, return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; } -static void -gst_flacdec_loop (GstElement *element) +static void +gst_flacdec_loop (GstElement * element) { FlacDec *flacdec; gboolean res; @@ -530,30 +529,28 @@ gst_flacdec_loop (GstElement *element) flacdec = GST_FLACDEC (element); GST_DEBUG ("flacdec: entering loop"); - if (flacdec->init) { + if (flacdec->init) { FLAC__StreamDecoderState res; - GST_DEBUG ("flacdec: initializing decoder"); + + GST_DEBUG ("flacdec: initializing decoder"); res = FLAC__seekable_stream_decoder_init (flacdec->decoder); if (res != FLAC__SEEKABLE_STREAM_DECODER_OK) { GST_ELEMENT_ERROR (flacdec, LIBRARY, INIT, (NULL), - (FLAC__SeekableStreamDecoderStateString[res])); + (FLAC__SeekableStreamDecoderStateString[res])); return; } - /* FLAC__seekable_stream_decoder_process_metadata (flacdec->decoder);*/ + /* FLAC__seekable_stream_decoder_process_metadata (flacdec->decoder); */ flacdec->init = FALSE; } if (flacdec->seek_pending) { - GST_DEBUG ("perform seek to sample %" G_GINT64_FORMAT, - flacdec->seek_value); + GST_DEBUG ("perform seek to sample %" G_GINT64_FORMAT, flacdec->seek_value); - if (FLAC__seekable_stream_decoder_seek_absolute (flacdec->decoder, - flacdec->seek_value)) - { + if (FLAC__seekable_stream_decoder_seek_absolute (flacdec->decoder, + flacdec->seek_value)) { flacdec->total_samples = flacdec->seek_value; GST_DEBUG ("seek done"); - } - else { + } else { GST_DEBUG ("seek failed"); } flacdec->seek_pending = FALSE; @@ -562,13 +559,12 @@ gst_flacdec_loop (GstElement *element) GST_DEBUG ("flacdec: processing single"); res = FLAC__seekable_stream_decoder_process_single (flacdec->decoder); GST_DEBUG ("flacdec: checking for EOS"); - if (FLAC__seekable_stream_decoder_get_state (flacdec->decoder) == - FLAC__SEEKABLE_STREAM_DECODER_END_OF_STREAM) - { + if (FLAC__seekable_stream_decoder_get_state (flacdec->decoder) == + FLAC__SEEKABLE_STREAM_DECODER_END_OF_STREAM) { GstEvent *event; GST_DEBUG ("flacdec: sending EOS event"); - FLAC__seekable_stream_decoder_reset(flacdec->decoder); + FLAC__seekable_stream_decoder_reset (flacdec->decoder); if (GST_PAD_IS_USABLE (flacdec->srcpad)) { event = gst_event_new (GST_EVENT_EOS); @@ -581,8 +577,8 @@ gst_flacdec_loop (GstElement *element) static const GstFormat * -gst_flacdec_get_src_formats (GstPad *pad) -{ +gst_flacdec_get_src_formats (GstPad * pad) +{ static const GstFormat formats[] = { GST_FORMAT_DEFAULT, GST_FORMAT_BYTES, @@ -590,63 +586,63 @@ gst_flacdec_get_src_formats (GstPad *pad) 0, }; return formats; -} +} static gboolean -gst_flacdec_convert_src (GstPad *pad, GstFormat src_format, gint64 src_value, - GstFormat *dest_format, gint64 *dest_value) +gst_flacdec_convert_src (GstPad * pad, GstFormat src_format, gint64 src_value, + GstFormat * dest_format, gint64 * dest_value) { gboolean res = TRUE; FlacDec *flacdec = GST_FLACDEC (gst_pad_get_parent (pad)); guint scale = 1; gint bytes_per_sample; - bytes_per_sample = flacdec->channels * ((flacdec->depth+7)>>3); + bytes_per_sample = flacdec->channels * ((flacdec->depth + 7) >> 3); switch (src_format) { case GST_FORMAT_BYTES: switch (*dest_format) { - case GST_FORMAT_DEFAULT: - if (bytes_per_sample == 0) - return FALSE; - *dest_value = src_value / bytes_per_sample; - break; - case GST_FORMAT_TIME: + case GST_FORMAT_DEFAULT: + if (bytes_per_sample == 0) + return FALSE; + *dest_value = src_value / bytes_per_sample; + break; + case GST_FORMAT_TIME: { - gint byterate = bytes_per_sample * flacdec->frequency; + gint byterate = bytes_per_sample * flacdec->frequency; - if (byterate == 0) - return FALSE; - *dest_value = src_value * GST_SECOND / byterate; - break; + if (byterate == 0) + return FALSE; + *dest_value = src_value * GST_SECOND / byterate; + break; } - default: - res = FALSE; + default: + res = FALSE; } break; case GST_FORMAT_DEFAULT: switch (*dest_format) { - case GST_FORMAT_BYTES: + case GST_FORMAT_BYTES: *dest_value = src_value * bytes_per_sample; - break; - case GST_FORMAT_TIME: + break; + case GST_FORMAT_TIME: if (flacdec->frequency == 0) return FALSE; - *dest_value = src_value * GST_SECOND / flacdec->frequency; - break; - default: - res = FALSE; + *dest_value = src_value * GST_SECOND / flacdec->frequency; + break; + default: + res = FALSE; } break; case GST_FORMAT_TIME: switch (*dest_format) { - case GST_FORMAT_BYTES: - scale = bytes_per_sample; - case GST_FORMAT_DEFAULT: + case GST_FORMAT_BYTES: + scale = bytes_per_sample; + case GST_FORMAT_DEFAULT: *dest_value = src_value * scale * flacdec->frequency / GST_SECOND; - break; - default: - res = FALSE; + break; + default: + res = FALSE; } break; default: @@ -656,19 +652,19 @@ gst_flacdec_convert_src (GstPad *pad, GstFormat src_format, gint64 src_value, } static const GstQueryType * -gst_flacdec_get_src_query_types (GstPad *pad) -{ +gst_flacdec_get_src_query_types (GstPad * pad) +{ static const GstQueryType types[] = { GST_QUERY_TOTAL, GST_QUERY_POSITION, 0, }; return types; -} +} static gboolean -gst_flacdec_src_query (GstPad *pad, GstQueryType type, - GstFormat *format, gint64 *value) +gst_flacdec_src_query (GstPad * pad, GstQueryType type, + GstFormat * format, gint64 * value) { gboolean res = TRUE; FlacDec *flacdec = GST_FLACDEC (gst_pad_get_parent (pad)); @@ -679,21 +675,17 @@ gst_flacdec_src_query (GstPad *pad, GstQueryType type, guint64 samples; if (flacdec->stream_samples == 0) - samples = flacdec->total_samples; + samples = flacdec->total_samples; else - samples = flacdec->stream_samples; + samples = flacdec->stream_samples; - gst_pad_convert (flacdec->srcpad, - GST_FORMAT_DEFAULT, - samples, - format, value); + gst_pad_convert (flacdec->srcpad, + GST_FORMAT_DEFAULT, samples, format, value); break; } case GST_QUERY_POSITION: - gst_pad_convert (flacdec->srcpad, - GST_FORMAT_DEFAULT, - flacdec->total_samples, - format, value); + gst_pad_convert (flacdec->srcpad, + GST_FORMAT_DEFAULT, flacdec->total_samples, format, value); break; default: res = FALSE; @@ -702,20 +694,20 @@ gst_flacdec_src_query (GstPad *pad, GstQueryType type, return res; } - + static const GstEventMask * -gst_flacdec_get_src_event_masks (GstPad *pad) +gst_flacdec_get_src_event_masks (GstPad * pad) { static const GstEventMask masks[] = { - { GST_EVENT_SEEK, GST_SEEK_FLAG_ACCURATE }, - { 0, 0 }, + {GST_EVENT_SEEK, GST_SEEK_FLAG_ACCURATE}, + {0, 0}, }; return masks; } static gboolean -gst_flacdec_src_event (GstPad *pad, GstEvent *event) -{ +gst_flacdec_src_event (GstPad * pad, GstEvent * event) +{ gboolean res = TRUE; FlacDec *flacdec = GST_FLACDEC (gst_pad_get_parent (pad)); GstFormat format; @@ -724,11 +716,10 @@ gst_flacdec_src_event (GstPad *pad, GstEvent *event) case GST_EVENT_SEEK: format = GST_FORMAT_DEFAULT; - if (gst_pad_convert (flacdec->srcpad, - GST_EVENT_SEEK_FORMAT (event), - GST_EVENT_SEEK_OFFSET (event), - &format, &flacdec->seek_value)) - flacdec->seek_pending = TRUE; + if (gst_pad_convert (flacdec->srcpad, + GST_EVENT_SEEK_FORMAT (event), + GST_EVENT_SEEK_OFFSET (event), &format, &flacdec->seek_value)) + flacdec->seek_pending = TRUE; else res = FALSE; break; @@ -741,7 +732,7 @@ gst_flacdec_src_event (GstPad *pad, GstEvent *event) } static GstElementStateReturn -gst_flacdec_change_state (GstElement *element) +gst_flacdec_change_state (GstElement * element) { FlacDec *flacdec = GST_FLACDEC (element); diff --git a/ext/flac/gstflacdec.h b/ext/flac/gstflacdec.h index 5b5fd110..c525c3a2 100644 --- a/ext/flac/gstflacdec.h +++ b/ext/flac/gstflacdec.h @@ -28,8 +28,9 @@ #include <FLAC/all.h> #ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ +extern "C" +{ +#endif /* __cplusplus */ #define GST_TYPE_FLACDEC flacdec_get_type() @@ -38,40 +39,42 @@ extern "C" { #define GST_IS_FLACDEC(obj) G_TYPE_CHECK_INSTANCE_TYPE(obj, GST_TYPE_FLACDEC) #define GST_IS_FLACDEC_CLASS(obj) G_TYPE_CHECK_CLASS_TYPE(klass, GST_TYPE_FLACDEC) -typedef struct _FlacDec FlacDec; -typedef struct _FlacDecClass FlacDecClass; + typedef struct _FlacDec FlacDec; + typedef struct _FlacDecClass FlacDecClass; -struct _FlacDec { - GstElement element; + struct _FlacDec + { + GstElement element; - GstPad *sinkpad,*srcpad; - GstByteStream *bs; + GstPad *sinkpad, *srcpad; + GstByteStream *bs; - FLAC__SeekableStreamDecoder *decoder; - gint channels; - gint depth; - gint frequency; + FLAC__SeekableStreamDecoder *decoder; + gint channels; + gint depth; + gint frequency; - gboolean need_discont; - gboolean seek_pending; - gint64 seek_value; + gboolean need_discont; + gboolean seek_pending; + gint64 seek_value; - gboolean init; - guint64 total_samples; - guint64 stream_samples; + gboolean init; + guint64 total_samples; + guint64 stream_samples; - gboolean eos; -}; + gboolean eos; + }; -struct _FlacDecClass { - GstElementClass parent_class; -}; + struct _FlacDecClass + { + GstElementClass parent_class; + }; -GType flacdec_get_type(void); + GType flacdec_get_type (void); #ifdef __cplusplus } -#endif /* __cplusplus */ +#endif /* __cplusplus */ -#endif /* __FLACDEC_H__ */ +#endif /* __FLACDEC_H__ */ diff --git a/ext/flac/gstflacenc.c b/ext/flac/gstflacenc.c index eacedeb4..7e658047 100644 --- a/ext/flac/gstflacenc.c +++ b/ext/flac/gstflacenc.c @@ -40,12 +40,14 @@ GstElementDetails flacenc_details = { }; /* FlacEnc signals and args */ -enum { +enum +{ /* FILL ME */ LAST_SIGNAL }; -enum { +enum +{ ARG_0, ARG_QUALITY, ARG_STREAMABLE_SUBSET, @@ -62,34 +64,32 @@ enum { ARG_RICE_PARAMETER_SEARCH_DIST, }; -static void gst_flacenc_base_init (gpointer g_class); -static void gst_flacenc_init (FlacEnc *flacenc); -static void gst_flacenc_class_init (FlacEncClass *klass); -static void gst_flacenc_dispose (GObject *object); +static void gst_flacenc_base_init (gpointer g_class); +static void gst_flacenc_init (FlacEnc * flacenc); +static void gst_flacenc_class_init (FlacEncClass * klass); +static void gst_flacenc_dispose (GObject * object); static GstPadLinkReturn - gst_flacenc_sinkconnect (GstPad *pad, const GstCaps *caps); -static void gst_flacenc_chain (GstPad *pad, GstData *_data); - -static gboolean gst_flacenc_update_quality (FlacEnc *flacenc, gint quality); -static void gst_flacenc_set_property (GObject *object, guint prop_id, - const GValue *value, GParamSpec *pspec); -static void gst_flacenc_get_property (GObject *object, guint prop_id, - GValue *value, GParamSpec *pspec); -static GstElementStateReturn - gst_flacenc_change_state (GstElement *element); - -static FLAC__StreamEncoderWriteStatus - gst_flacenc_write_callback (const FLAC__SeekableStreamEncoder *encoder, - const FLAC__byte buffer[], unsigned bytes, - unsigned samples, unsigned current_frame, - void *client_data); +gst_flacenc_sinkconnect (GstPad * pad, const GstCaps * caps); +static void gst_flacenc_chain (GstPad * pad, GstData * _data); + +static gboolean gst_flacenc_update_quality (FlacEnc * flacenc, gint quality); +static void gst_flacenc_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec); +static void gst_flacenc_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec); +static GstElementStateReturn gst_flacenc_change_state (GstElement * element); + +static FLAC__StreamEncoderWriteStatus +gst_flacenc_write_callback (const FLAC__SeekableStreamEncoder * encoder, + const FLAC__byte buffer[], unsigned bytes, + unsigned samples, unsigned current_frame, void *client_data); static FLAC__SeekableStreamEncoderSeekStatus - gst_flacenc_seek_callback (const FLAC__SeekableStreamEncoder *encoder, - FLAC__uint64 absolute_byte_offset, - void *client_data); +gst_flacenc_seek_callback (const FLAC__SeekableStreamEncoder * encoder, + FLAC__uint64 absolute_byte_offset, void *client_data); static GstElementClass *parent_class = NULL; + /*static guint gst_flacenc_signals[LAST_SIGNAL] = { 0 }; */ GType @@ -99,15 +99,15 @@ flacenc_get_type (void) if (!flacenc_type) { static const GTypeInfo flacenc_info = { - sizeof(FlacEncClass), + sizeof (FlacEncClass), gst_flacenc_base_init, NULL, - (GClassInitFunc)gst_flacenc_class_init, + (GClassInitFunc) gst_flacenc_class_init, NULL, NULL, - sizeof(FlacEnc), + sizeof (FlacEnc), 0, - (GInstanceInitFunc)gst_flacenc_init, + (GInstanceInitFunc) gst_flacenc_init, }; static const GInterfaceInfo tag_setter_info = { @@ -116,38 +116,40 @@ flacenc_get_type (void) NULL }; - flacenc_type = g_type_register_static (GST_TYPE_ELEMENT, "FlacEnc", &flacenc_info, 0); - g_type_add_interface_static (flacenc_type, GST_TYPE_TAG_SETTER, &tag_setter_info); + flacenc_type = + g_type_register_static (GST_TYPE_ELEMENT, "FlacEnc", &flacenc_info, 0); + g_type_add_interface_static (flacenc_type, GST_TYPE_TAG_SETTER, + &tag_setter_info); } return flacenc_type; } -typedef struct { - gboolean exhaustive_model_search; - gboolean escape_coding; - gboolean mid_side; - gboolean loose_mid_side; - guint qlp_coeff_precision; - gboolean qlp_coeff_prec_search; - guint min_residual_partition_order; - guint max_residual_partition_order; - guint rice_parameter_search_dist; - guint max_lpc_order; - guint blocksize; +typedef struct +{ + gboolean exhaustive_model_search; + gboolean escape_coding; + gboolean mid_side; + gboolean loose_mid_side; + guint qlp_coeff_precision; + gboolean qlp_coeff_prec_search; + guint min_residual_partition_order; + guint max_residual_partition_order; + guint rice_parameter_search_dist; + guint max_lpc_order; + guint blocksize; } FlacEncParams; -static const FlacEncParams flacenc_params[] = -{ - { FALSE, FALSE, FALSE, FALSE, 0, FALSE, 2, 2, 0, 0, 1152 }, - { FALSE, FALSE, TRUE, TRUE, 0, FALSE, 2, 2, 0, 0, 1152 }, - { FALSE, FALSE, TRUE, FALSE, 0, FALSE, 0, 3, 0, 0, 1152 }, - { FALSE, FALSE, FALSE, FALSE, 0, FALSE, 3, 3, 0, 6, 4608 }, - { FALSE, FALSE, TRUE, TRUE, 0, FALSE, 3, 3, 0, 8, 4608 }, - { FALSE, FALSE, TRUE, FALSE, 0, FALSE, 3, 3, 0, 8, 4608 }, - { FALSE, FALSE, TRUE, FALSE, 0, FALSE, 0, 4, 0, 8, 4608 }, - { TRUE, FALSE, TRUE, FALSE, 0, FALSE, 0, 6, 0, 8, 4608 }, - { TRUE, FALSE, TRUE, FALSE, 0, FALSE, 0, 6, 0, 12, 4608 }, - { TRUE, TRUE, TRUE, FALSE, 0, FALSE, 0, 16, 0, 32, 4608 }, +static const FlacEncParams flacenc_params[] = { + {FALSE, FALSE, FALSE, FALSE, 0, FALSE, 2, 2, 0, 0, 1152}, + {FALSE, FALSE, TRUE, TRUE, 0, FALSE, 2, 2, 0, 0, 1152}, + {FALSE, FALSE, TRUE, FALSE, 0, FALSE, 0, 3, 0, 0, 1152}, + {FALSE, FALSE, FALSE, FALSE, 0, FALSE, 3, 3, 0, 6, 4608}, + {FALSE, FALSE, TRUE, TRUE, 0, FALSE, 3, 3, 0, 8, 4608}, + {FALSE, FALSE, TRUE, FALSE, 0, FALSE, 3, 3, 0, 8, 4608}, + {FALSE, FALSE, TRUE, FALSE, 0, FALSE, 0, 4, 0, 8, 4608}, + {TRUE, FALSE, TRUE, FALSE, 0, FALSE, 0, 6, 0, 8, 4608}, + {TRUE, FALSE, TRUE, FALSE, 0, FALSE, 0, 6, 0, 12, 4608}, + {TRUE, TRUE, TRUE, FALSE, 0, FALSE, 0, 16, 0, 32, 4608}, }; #define DEFAULT_QUALITY 5 @@ -157,44 +159,44 @@ GType gst_flacenc_quality_get_type (void) { static GType qtype = 0; + if (qtype == 0) { static const GEnumValue values[] = { - { 0, "0", "0 - Fastest compression" }, - { 1, "1", "1" }, - { 2, "2", "2" }, - { 3, "3", "3" }, - { 4, "4", "4" }, - { 5, "5", "5 - Default" }, - { 6, "6", "6" }, - { 7, "7", "7" }, - { 8, "8", "8 - Highest compression " }, - { 9, "9", "9 - Insane" }, - { 0, NULL, NULL } + {0, "0", "0 - Fastest compression"}, + {1, "1", "1"}, + {2, "2", "2"}, + {3, "3", "3"}, + {4, "4", "4"}, + {5, "5", "5 - Default"}, + {6, "6", "6"}, + {7, "7", "7"}, + {8, "8", "8 - Highest compression "}, + {9, "9", "9 - Insane"}, + {0, NULL, NULL} }; qtype = g_enum_register_static ("FlacEncQuality", values); } return qtype; } -static GstCaps* +static GstCaps * flac_caps_factory (void) { return gst_caps_new_simple ("audio/x-flac", NULL); - /* "rate", GST_PROPS_INT_RANGE (11025, 48000), - * "channels", GST_PROPS_INT_RANGE (1, 2), */ + /* "rate", GST_PROPS_INT_RANGE (11025, 48000), + * "channels", GST_PROPS_INT_RANGE (1, 2), */ } -static GstCaps* +static GstCaps * raw_caps_factory (void) { return gst_caps_new_simple ("audio/x-raw-int", - "endianness", G_TYPE_INT, G_BYTE_ORDER, - "signed", G_TYPE_BOOLEAN, TRUE, - "width", G_TYPE_INT, 16, - "depth", G_TYPE_INT, 16, - "rate", GST_TYPE_INT_RANGE, 11025, 48000, - "channels", GST_TYPE_INT_RANGE, 1, 2, - NULL); + "endianness", G_TYPE_INT, G_BYTE_ORDER, + "signed", G_TYPE_BOOLEAN, TRUE, + "width", G_TYPE_INT, 16, + "depth", G_TYPE_INT, 16, + "rate", GST_TYPE_INT_RANGE, 11025, 48000, + "channels", GST_TYPE_INT_RANGE, 1, 2, NULL); } static void @@ -206,125 +208,123 @@ gst_flacenc_base_init (gpointer g_class) raw_caps = raw_caps_factory (); flac_caps = flac_caps_factory (); - sink_template = gst_pad_template_new ("sink", GST_PAD_SINK, - GST_PAD_ALWAYS, - raw_caps); - src_template = gst_pad_template_new ("src", GST_PAD_SRC, - GST_PAD_ALWAYS, - flac_caps); + sink_template = gst_pad_template_new ("sink", GST_PAD_SINK, + GST_PAD_ALWAYS, raw_caps); + src_template = gst_pad_template_new ("src", GST_PAD_SRC, + GST_PAD_ALWAYS, flac_caps); gst_element_class_add_pad_template (element_class, sink_template); gst_element_class_add_pad_template (element_class, src_template); gst_element_class_set_details (element_class, &flacenc_details); } static void -gst_flacenc_class_init (FlacEncClass *klass) +gst_flacenc_class_init (FlacEncClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; - gobject_class = (GObjectClass*)klass; - gstelement_class = (GstElementClass*)klass; + gobject_class = (GObjectClass *) klass; + gstelement_class = (GstElementClass *) klass; + + parent_class = g_type_class_ref (GST_TYPE_ELEMENT); - parent_class = g_type_class_ref(GST_TYPE_ELEMENT); - /* we have no properties atm so this is a bit silly */ gobject_class->set_property = gst_flacenc_set_property; gobject_class->get_property = gst_flacenc_get_property; - gobject_class->dispose = gst_flacenc_dispose; + gobject_class->dispose = gst_flacenc_dispose; g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_QUALITY, - g_param_spec_enum ("quality", - "Quality", - "Speed versus compression tradeoff", - GST_TYPE_FLACENC_QUALITY, DEFAULT_QUALITY, G_PARAM_READWRITE)); - g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_STREAMABLE_SUBSET, - g_param_spec_boolean ("streamable_subset", - "Streamable subset", - "true to limit encoder to generating a Subset stream, else false", - TRUE, G_PARAM_READWRITE)); + g_param_spec_enum ("quality", + "Quality", + "Speed versus compression tradeoff", + GST_TYPE_FLACENC_QUALITY, DEFAULT_QUALITY, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), + ARG_STREAMABLE_SUBSET, g_param_spec_boolean ("streamable_subset", + "Streamable subset", + "true to limit encoder to generating a Subset stream, else false", + TRUE, G_PARAM_READWRITE)); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MID_SIDE_STEREO, - g_param_spec_boolean ("mid_side_stereo", - "Do mid side stereo", - "Do mid side stereo (only for stereo input)", - flacenc_params[DEFAULT_QUALITY].mid_side, G_PARAM_READWRITE)); - g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_LOOSE_MID_SIDE_STEREO, - g_param_spec_boolean ("loose_mid_side_stereo", - "Loose mid side stereo", - "Loose mid side stereo", - flacenc_params[DEFAULT_QUALITY].loose_mid_side, G_PARAM_READWRITE)); + g_param_spec_boolean ("mid_side_stereo", "Do mid side stereo", + "Do mid side stereo (only for stereo input)", + flacenc_params[DEFAULT_QUALITY].mid_side, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), + ARG_LOOSE_MID_SIDE_STEREO, g_param_spec_boolean ("loose_mid_side_stereo", + "Loose mid side stereo", "Loose mid side stereo", + flacenc_params[DEFAULT_QUALITY].loose_mid_side, G_PARAM_READWRITE)); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_BLOCKSIZE, - g_param_spec_uint ("blocksize", - "Blocksize", - "Blocksize in samples", - FLAC__MIN_BLOCK_SIZE, FLAC__MAX_BLOCK_SIZE, - flacenc_params[DEFAULT_QUALITY].blocksize, G_PARAM_READWRITE)); + g_param_spec_uint ("blocksize", "Blocksize", "Blocksize in samples", + FLAC__MIN_BLOCK_SIZE, FLAC__MAX_BLOCK_SIZE, + flacenc_params[DEFAULT_QUALITY].blocksize, G_PARAM_READWRITE)); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MAX_LPC_ORDER, - g_param_spec_uint ("max_lpc_order", - "Max LPC order", - "Max LPC order; 0 => use only fixed predictors", - 0, FLAC__MAX_LPC_ORDER, - flacenc_params[DEFAULT_QUALITY].max_lpc_order, G_PARAM_READWRITE)); - g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_QLP_COEFF_PRECISION, - g_param_spec_uint ("qlp_coeff_precision", - "QLP coefficients precision", - "Precision in bits of quantized linear-predictor coefficients; 0 = automatic", - 0, 32, - flacenc_params[DEFAULT_QUALITY].qlp_coeff_precision, G_PARAM_READWRITE)); - g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_QLP_COEFF_PREC_SEARCH, - g_param_spec_boolean ("qlp_coeff_prec_search", - "Do QLP coefficients precision search", - "false = use qlp_coeff_precision, " - "true = search around qlp_coeff_precision, take best", - flacenc_params[DEFAULT_QUALITY].qlp_coeff_prec_search, G_PARAM_READWRITE)); + g_param_spec_uint ("max_lpc_order", "Max LPC order", + "Max LPC order; 0 => use only fixed predictors", 0, + FLAC__MAX_LPC_ORDER, flacenc_params[DEFAULT_QUALITY].max_lpc_order, + G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), + ARG_QLP_COEFF_PRECISION, g_param_spec_uint ("qlp_coeff_precision", + "QLP coefficients precision", + "Precision in bits of quantized linear-predictor coefficients; 0 = automatic", + 0, 32, flacenc_params[DEFAULT_QUALITY].qlp_coeff_precision, + G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), + ARG_QLP_COEFF_PREC_SEARCH, g_param_spec_boolean ("qlp_coeff_prec_search", + "Do QLP coefficients precision search", + "false = use qlp_coeff_precision, " + "true = search around qlp_coeff_precision, take best", + flacenc_params[DEFAULT_QUALITY].qlp_coeff_prec_search, + G_PARAM_READWRITE)); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_ESCAPE_CODING, - g_param_spec_boolean ("escape_coding", - "Do Escape coding", - "search for escape codes in the entropy coding stage " - "for slightly better compression", - flacenc_params[DEFAULT_QUALITY].escape_coding, G_PARAM_READWRITE)); - g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_EXHAUSTIVE_MODEL_SEARCH, - g_param_spec_boolean ("exhaustive_model_search", - "Do exhaustive model search", - "do exhaustive search of LP coefficient quantization (expensive!)", - flacenc_params[DEFAULT_QUALITY].exhaustive_model_search, G_PARAM_READWRITE)); - g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MIN_RESIDUAL_PARTITION_ORDER, - g_param_spec_uint ("min_residual_partition_order", - "Min residual partition order", - "Min residual partition order (above 4 doesn't usually help much)", - 0, 16, - flacenc_params[DEFAULT_QUALITY].min_residual_partition_order, G_PARAM_READWRITE)); - g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MAX_RESIDUAL_PARTITION_ORDER, - g_param_spec_uint ("max_residual_partition_order", - "Max residual partition order", - "Max residual partition order (above 4 doesn't usually help much)", - 0, 16, - flacenc_params[DEFAULT_QUALITY].max_residual_partition_order, G_PARAM_READWRITE)); - g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_RICE_PARAMETER_SEARCH_DIST, - g_param_spec_uint ("rice_parameter_search_dist", - "rice_parameter_search_dist", - "0 = try only calc'd parameter k; else try all [k-dist..k+dist] " - "parameters, use best", - 0, FLAC__MAX_RICE_PARTITION_ORDER, - flacenc_params[DEFAULT_QUALITY].rice_parameter_search_dist, G_PARAM_READWRITE)); + g_param_spec_boolean ("escape_coding", "Do Escape coding", + "search for escape codes in the entropy coding stage " + "for slightly better compression", + flacenc_params[DEFAULT_QUALITY].escape_coding, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), + ARG_EXHAUSTIVE_MODEL_SEARCH, + g_param_spec_boolean ("exhaustive_model_search", + "Do exhaustive model search", + "do exhaustive search of LP coefficient quantization (expensive!)", + flacenc_params[DEFAULT_QUALITY].exhaustive_model_search, + G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), + ARG_MIN_RESIDUAL_PARTITION_ORDER, + g_param_spec_uint ("min_residual_partition_order", + "Min residual partition order", + "Min residual partition order (above 4 doesn't usually help much)", 0, + 16, flacenc_params[DEFAULT_QUALITY].min_residual_partition_order, + G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), + ARG_MAX_RESIDUAL_PARTITION_ORDER, + g_param_spec_uint ("max_residual_partition_order", + "Max residual partition order", + "Max residual partition order (above 4 doesn't usually help much)", 0, + 16, flacenc_params[DEFAULT_QUALITY].max_residual_partition_order, + G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), + ARG_RICE_PARAMETER_SEARCH_DIST, + g_param_spec_uint ("rice_parameter_search_dist", + "rice_parameter_search_dist", + "0 = try only calc'd parameter k; else try all [k-dist..k+dist] " + "parameters, use best", 0, FLAC__MAX_RICE_PARTITION_ORDER, + flacenc_params[DEFAULT_QUALITY].rice_parameter_search_dist, + G_PARAM_READWRITE)); gstelement_class->change_state = gst_flacenc_change_state; } static void -gst_flacenc_init (FlacEnc *flacenc) +gst_flacenc_init (FlacEnc * flacenc) { flacenc->sinkpad = gst_pad_new_from_template (sink_template, "sink"); - gst_element_add_pad(GST_ELEMENT(flacenc),flacenc->sinkpad); - gst_pad_set_chain_function(flacenc->sinkpad,gst_flacenc_chain); + gst_element_add_pad (GST_ELEMENT (flacenc), flacenc->sinkpad); + gst_pad_set_chain_function (flacenc->sinkpad, gst_flacenc_chain); gst_pad_set_link_function (flacenc->sinkpad, gst_flacenc_sinkconnect); flacenc->srcpad = gst_pad_new_from_template (src_template, "src"); - gst_element_add_pad(GST_ELEMENT(flacenc),flacenc->srcpad); + gst_element_add_pad (GST_ELEMENT (flacenc), flacenc->srcpad); GST_FLAG_SET (flacenc, GST_ELEMENT_EVENT_AWARE); - flacenc->encoder = FLAC__seekable_stream_encoder_new(); + flacenc->encoder = FLAC__seekable_stream_encoder_new (); flacenc->negotiated = FALSE; flacenc->first = TRUE; @@ -335,17 +335,17 @@ gst_flacenc_init (FlacEnc *flacenc) } static void -gst_flacenc_dispose (GObject *object) +gst_flacenc_dispose (GObject * object) { FlacEnc *flacenc = GST_FLACENC (object); FLAC__seekable_stream_encoder_delete (flacenc->encoder); - + G_OBJECT_CLASS (parent_class)->dispose (object); } static GstPadLinkReturn -gst_flacenc_sinkconnect (GstPad *pad, const GstCaps *caps) +gst_flacenc_sinkconnect (GstPad * pad, const GstCaps * caps) { GstPadLinkReturn ret; FlacEnc *flacenc; @@ -358,7 +358,7 @@ gst_flacenc_sinkconnect (GstPad *pad, const GstCaps *caps) gst_structure_get_int (structure, "channels", &flacenc->channels); gst_structure_get_int (structure, "depth", &flacenc->depth); gst_structure_get_int (structure, "rate", &flacenc->sample_rate); - + caps = gst_caps_new_simple ("audio/x-flac", "channels", G_TYPE_INT, flacenc->channels, "rate", G_TYPE_INT, flacenc->sample_rate, NULL); @@ -367,12 +367,12 @@ gst_flacenc_sinkconnect (GstPad *pad, const GstCaps *caps) return ret; } - FLAC__seekable_stream_encoder_set_bits_per_sample (flacenc->encoder, - flacenc->depth); - FLAC__seekable_stream_encoder_set_sample_rate (flacenc->encoder, - flacenc->sample_rate); - FLAC__seekable_stream_encoder_set_channels (flacenc->encoder, - flacenc->channels); + FLAC__seekable_stream_encoder_set_bits_per_sample (flacenc->encoder, + flacenc->depth); + FLAC__seekable_stream_encoder_set_sample_rate (flacenc->encoder, + flacenc->sample_rate); + FLAC__seekable_stream_encoder_set_channels (flacenc->encoder, + flacenc->channels); flacenc->negotiated = TRUE; @@ -380,7 +380,7 @@ gst_flacenc_sinkconnect (GstPad *pad, const GstCaps *caps) } static gboolean -gst_flacenc_update_quality (FlacEnc *flacenc, gint quality) +gst_flacenc_update_quality (FlacEnc * flacenc, gint quality) { flacenc->quality = quality; @@ -396,17 +396,22 @@ gst_flacenc_update_quality (FlacEnc *flacenc, gint quality) g_object_freeze_notify (G_OBJECT (flacenc)); - DO_UPDATE (do_mid_side_stereo, mid_side, "mid_side_stereo"); - DO_UPDATE (loose_mid_side_stereo, loose_mid_side, "loose_mid_side"); - DO_UPDATE (blocksize, blocksize, "blocksize"); - DO_UPDATE (max_lpc_order, max_lpc_order, "max_lpc_order"); - DO_UPDATE (qlp_coeff_precision, qlp_coeff_precision, "qlp_coeff_precision"); - DO_UPDATE (do_qlp_coeff_prec_search, qlp_coeff_prec_search, "qlp_coeff_prec_search"); - DO_UPDATE (do_escape_coding, escape_coding, "escape_coding"); - DO_UPDATE (do_exhaustive_model_search, exhaustive_model_search, "exhaustive_model_search"); - DO_UPDATE (min_residual_partition_order, min_residual_partition_order, "min_residual_partition_order"); - DO_UPDATE (max_residual_partition_order, max_residual_partition_order, "max_residual_partition_order"); - DO_UPDATE (rice_parameter_search_dist, rice_parameter_search_dist, "rice_parameter_search_dist"); + DO_UPDATE (do_mid_side_stereo, mid_side, "mid_side_stereo"); + DO_UPDATE (loose_mid_side_stereo, loose_mid_side, "loose_mid_side"); + DO_UPDATE (blocksize, blocksize, "blocksize"); + DO_UPDATE (max_lpc_order, max_lpc_order, "max_lpc_order"); + DO_UPDATE (qlp_coeff_precision, qlp_coeff_precision, "qlp_coeff_precision"); + DO_UPDATE (do_qlp_coeff_prec_search, qlp_coeff_prec_search, + "qlp_coeff_prec_search"); + DO_UPDATE (do_escape_coding, escape_coding, "escape_coding"); + DO_UPDATE (do_exhaustive_model_search, exhaustive_model_search, + "exhaustive_model_search"); + DO_UPDATE (min_residual_partition_order, min_residual_partition_order, + "min_residual_partition_order"); + DO_UPDATE (max_residual_partition_order, max_residual_partition_order, + "max_residual_partition_order"); + DO_UPDATE (rice_parameter_search_dist, rice_parameter_search_dist, + "rice_parameter_search_dist"); #undef DO_UPDATE @@ -416,38 +421,38 @@ gst_flacenc_update_quality (FlacEnc *flacenc, gint quality) } static FLAC__SeekableStreamEncoderSeekStatus -gst_flacenc_seek_callback (const FLAC__SeekableStreamEncoder *encoder, - FLAC__uint64 absolute_byte_offset, - void *client_data) +gst_flacenc_seek_callback (const FLAC__SeekableStreamEncoder * encoder, + FLAC__uint64 absolute_byte_offset, void *client_data) { -FlacEnc *flacenc; -GstEvent *event; + FlacEnc *flacenc; + GstEvent *event; flacenc = GST_FLACENC (client_data); - if (flacenc->stopped) + if (flacenc->stopped) return FLAC__STREAM_ENCODER_OK; - event = gst_event_new_seek ((GstSeekType)(int)(GST_FORMAT_BYTES | GST_SEEK_METHOD_SET), absolute_byte_offset); + event = + gst_event_new_seek ((GstSeekType) (int) (GST_FORMAT_BYTES | + GST_SEEK_METHOD_SET), absolute_byte_offset); if (event) gst_pad_push (flacenc->srcpad, GST_DATA (event)); - - return FLAC__STREAM_ENCODER_OK; + + return FLAC__STREAM_ENCODER_OK; } -static FLAC__StreamEncoderWriteStatus -gst_flacenc_write_callback (const FLAC__SeekableStreamEncoder *encoder, - const FLAC__byte buffer[], unsigned bytes, - unsigned samples, unsigned current_frame, - void *client_data) +static FLAC__StreamEncoderWriteStatus +gst_flacenc_write_callback (const FLAC__SeekableStreamEncoder * encoder, + const FLAC__byte buffer[], unsigned bytes, + unsigned samples, unsigned current_frame, void *client_data) { FlacEnc *flacenc; GstBuffer *outbuf; - + flacenc = GST_FLACENC (client_data); - if (flacenc->stopped) + if (flacenc->stopped) return FLAC__STREAM_ENCODER_OK; outbuf = gst_buffer_new_and_alloc (bytes); @@ -465,30 +470,29 @@ gst_flacenc_write_callback (const FLAC__SeekableStreamEncoder *encoder, return FLAC__STREAM_ENCODER_OK; } -static void -add_one_tag (const GstTagList *list, const gchar *tag, - gpointer user_data) +static void +add_one_tag (const GstTagList * list, const gchar * tag, gpointer user_data) { - GList *comments; - GList *it; - FlacEnc *flacenc = GST_FLACENC (user_data); - - comments = gst_tag_to_vorbis_comments (list, tag); - for (it = comments; it != NULL; it = it->next) { - FLAC__StreamMetadata_VorbisComment_Entry commment_entry; - commment_entry.length = strlen(it->data); - commment_entry.entry = it->data; - FLAC__metadata_object_vorbiscomment_insert_comment (flacenc->meta[0], - flacenc->meta[0]->data.vorbis_comment.num_comments, - commment_entry, - TRUE); - g_free (it->data); - } - g_list_free (comments); + GList *comments; + GList *it; + FlacEnc *flacenc = GST_FLACENC (user_data); + + comments = gst_tag_to_vorbis_comments (list, tag); + for (it = comments; it != NULL; it = it->next) { + FLAC__StreamMetadata_VorbisComment_Entry commment_entry; + + commment_entry.length = strlen (it->data); + commment_entry.entry = it->data; + FLAC__metadata_object_vorbiscomment_insert_comment (flacenc->meta[0], + flacenc->meta[0]->data.vorbis_comment.num_comments, + commment_entry, TRUE); + g_free (it->data); + } + g_list_free (comments); } static void -gst_flacenc_set_metadata (FlacEnc *flacenc) +gst_flacenc_set_metadata (FlacEnc * flacenc) { const GstTagList *user_tags; GstTagList *copy; @@ -498,21 +502,23 @@ gst_flacenc_set_metadata (FlacEnc *flacenc) if ((flacenc->tags == NULL) && (user_tags == NULL)) { return; } - copy = gst_tag_list_merge (user_tags, flacenc->tags, - gst_tag_setter_get_merge_mode (GST_TAG_SETTER (flacenc))); + copy = gst_tag_list_merge (user_tags, flacenc->tags, + gst_tag_setter_get_merge_mode (GST_TAG_SETTER (flacenc))); flacenc->meta = g_malloc (sizeof (FLAC__StreamMetadata **)); - flacenc->meta[0] = FLAC__metadata_object_new (FLAC__METADATA_TYPE_VORBIS_COMMENT); + flacenc->meta[0] = + FLAC__metadata_object_new (FLAC__METADATA_TYPE_VORBIS_COMMENT); gst_tag_list_foreach (copy, add_one_tag, flacenc); - if (FLAC__seekable_stream_encoder_set_metadata(flacenc->encoder, flacenc->meta, 1) != true) + if (FLAC__seekable_stream_encoder_set_metadata (flacenc->encoder, + flacenc->meta, 1) != true) g_warning ("Dude, i'm already initialized!"); gst_tag_list_free (copy); } static void -gst_flacenc_chain (GstPad *pad, GstData *_data) +gst_flacenc_chain (GstPad * pad, GstData * _data) { GstBuffer *buf = GST_BUFFER (_data); FlacEnc *flacenc; @@ -522,7 +528,7 @@ gst_flacenc_chain (GstPad *pad, GstData *_data) gulong i; FLAC__bool res; - g_return_if_fail(buf != NULL); + g_return_if_fail (buf != NULL); flacenc = GST_FLACENC (gst_pad_get_parent (pad)); @@ -531,18 +537,18 @@ gst_flacenc_chain (GstPad *pad, GstData *_data) switch (GST_EVENT_TYPE (event)) { case GST_EVENT_EOS: - FLAC__seekable_stream_encoder_finish(flacenc->encoder); + FLAC__seekable_stream_encoder_finish (flacenc->encoder); break; case GST_EVENT_TAG: if (flacenc->tags) { - gst_tag_list_insert (flacenc->tags, gst_event_tag_get_list (event), - GST_TAG_MERGE_REPLACE); + gst_tag_list_insert (flacenc->tags, gst_event_tag_get_list (event), + GST_TAG_MERGE_REPLACE); } else { g_assert_not_reached (); } break; default: - break; + break; } gst_pad_event_default (pad, event); return; @@ -550,33 +556,31 @@ gst_flacenc_chain (GstPad *pad, GstData *_data) if (!flacenc->negotiated) { GST_ELEMENT_ERROR (flacenc, CORE, NEGOTIATION, (NULL), - ("format wasn't negotiated before chain function")); + ("format wasn't negotiated before chain function")); return; } depth = flacenc->depth; insize = GST_BUFFER_SIZE (buf); - samples = insize / ((depth+7)>>3); + samples = insize / ((depth + 7) >> 3); - if (FLAC__seekable_stream_encoder_get_state (flacenc->encoder) == - FLAC__SEEKABLE_STREAM_ENCODER_UNINITIALIZED) - { + if (FLAC__seekable_stream_encoder_get_state (flacenc->encoder) == + FLAC__SEEKABLE_STREAM_ENCODER_UNINITIALIZED) { FLAC__SeekableStreamEncoderState state; - FLAC__seekable_stream_encoder_set_write_callback (flacenc->encoder, - gst_flacenc_write_callback); - FLAC__seekable_stream_encoder_set_seek_callback (flacenc->encoder, - gst_flacenc_seek_callback); - - FLAC__seekable_stream_encoder_set_client_data (flacenc->encoder, - flacenc); - + FLAC__seekable_stream_encoder_set_write_callback (flacenc->encoder, + gst_flacenc_write_callback); + FLAC__seekable_stream_encoder_set_seek_callback (flacenc->encoder, + gst_flacenc_seek_callback); + + FLAC__seekable_stream_encoder_set_client_data (flacenc->encoder, flacenc); + gst_flacenc_set_metadata (flacenc); state = FLAC__seekable_stream_encoder_init (flacenc->encoder); if (state != FLAC__STREAM_ENCODER_OK) { GST_ELEMENT_ERROR (flacenc, LIBRARY, INIT, (NULL), - ("could not initialize encoder (wrong parameters?)")); + ("could not initialize encoder (wrong parameters?)")); return; } } @@ -584,27 +588,26 @@ gst_flacenc_chain (GstPad *pad, GstData *_data) /* we keep a pointer in the flacenc struct because we are freeing the data * after a push opreration that might never return */ data = flacenc->data = g_malloc (samples * sizeof (FLAC__int32)); - + if (depth == 8) { gint8 *indata = (gint8 *) GST_BUFFER_DATA (buf); - - for (i=0; i<samples; i++) { - data[i] = (FLAC__int32) *indata++; + + for (i = 0; i < samples; i++) { + data[i] = (FLAC__int32) * indata++; } - } - else if (depth == 16) { + } else if (depth == 16) { gint16 *indata = (gint16 *) GST_BUFFER_DATA (buf); - for (i=0; i<samples; i++) { - data[i] = (FLAC__int32) *indata++; + for (i = 0; i < samples; i++) { + data[i] = (FLAC__int32) * indata++; } } - gst_buffer_unref(buf); + gst_buffer_unref (buf); - res = FLAC__seekable_stream_encoder_process_interleaved (flacenc->encoder, - (const FLAC__int32 *) data, samples / flacenc->channels); + res = FLAC__seekable_stream_encoder_process_interleaved (flacenc->encoder, + (const FLAC__int32 *) data, samples / flacenc->channels); g_free (flacenc->data); flacenc->data = NULL; @@ -615,63 +618,63 @@ gst_flacenc_chain (GstPad *pad, GstData *_data) } static void -gst_flacenc_set_property (GObject *object, guint prop_id, - const GValue *value, GParamSpec *pspec) +gst_flacenc_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec) { FlacEnc *this; - - this = (FlacEnc *)object; + + this = (FlacEnc *) object; switch (prop_id) { case ARG_QUALITY: gst_flacenc_update_quality (this, g_value_get_enum (value)); break; case ARG_STREAMABLE_SUBSET: - FLAC__seekable_stream_encoder_set_streamable_subset (this->encoder, - g_value_get_boolean (value)); + FLAC__seekable_stream_encoder_set_streamable_subset (this->encoder, + g_value_get_boolean (value)); break; case ARG_MID_SIDE_STEREO: - FLAC__seekable_stream_encoder_set_do_mid_side_stereo (this->encoder, - g_value_get_boolean (value)); + FLAC__seekable_stream_encoder_set_do_mid_side_stereo (this->encoder, + g_value_get_boolean (value)); break; case ARG_LOOSE_MID_SIDE_STEREO: - FLAC__seekable_stream_encoder_set_loose_mid_side_stereo (this->encoder, - g_value_get_boolean (value)); + FLAC__seekable_stream_encoder_set_loose_mid_side_stereo (this->encoder, + g_value_get_boolean (value)); break; case ARG_BLOCKSIZE: - FLAC__seekable_stream_encoder_set_blocksize (this->encoder, - g_value_get_uint (value)); + FLAC__seekable_stream_encoder_set_blocksize (this->encoder, + g_value_get_uint (value)); break; case ARG_MAX_LPC_ORDER: - FLAC__seekable_stream_encoder_set_max_lpc_order (this->encoder, - g_value_get_uint (value)); + FLAC__seekable_stream_encoder_set_max_lpc_order (this->encoder, + g_value_get_uint (value)); break; case ARG_QLP_COEFF_PRECISION: - FLAC__seekable_stream_encoder_set_qlp_coeff_precision (this->encoder, - g_value_get_uint (value)); + FLAC__seekable_stream_encoder_set_qlp_coeff_precision (this->encoder, + g_value_get_uint (value)); break; case ARG_QLP_COEFF_PREC_SEARCH: - FLAC__seekable_stream_encoder_set_do_qlp_coeff_prec_search (this->encoder, - g_value_get_boolean (value)); + FLAC__seekable_stream_encoder_set_do_qlp_coeff_prec_search (this->encoder, + g_value_get_boolean (value)); break; case ARG_ESCAPE_CODING: - FLAC__seekable_stream_encoder_set_do_escape_coding (this->encoder, - g_value_get_boolean (value)); + FLAC__seekable_stream_encoder_set_do_escape_coding (this->encoder, + g_value_get_boolean (value)); break; case ARG_EXHAUSTIVE_MODEL_SEARCH: - FLAC__seekable_stream_encoder_set_do_exhaustive_model_search (this->encoder, - g_value_get_boolean (value)); + FLAC__seekable_stream_encoder_set_do_exhaustive_model_search (this-> + encoder, g_value_get_boolean (value)); break; case ARG_MIN_RESIDUAL_PARTITION_ORDER: - FLAC__seekable_stream_encoder_set_min_residual_partition_order (this->encoder, - g_value_get_uint (value)); + FLAC__seekable_stream_encoder_set_min_residual_partition_order (this-> + encoder, g_value_get_uint (value)); break; case ARG_MAX_RESIDUAL_PARTITION_ORDER: - FLAC__seekable_stream_encoder_set_max_residual_partition_order (this->encoder, - g_value_get_uint (value)); + FLAC__seekable_stream_encoder_set_max_residual_partition_order (this-> + encoder, g_value_get_uint (value)); break; case ARG_RICE_PARAMETER_SEARCH_DIST: - FLAC__seekable_stream_encoder_set_rice_parameter_search_dist (this->encoder, - g_value_get_uint (value)); + FLAC__seekable_stream_encoder_set_rice_parameter_search_dist (this-> + encoder, g_value_get_uint (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -680,64 +683,71 @@ gst_flacenc_set_property (GObject *object, guint prop_id, } static void -gst_flacenc_get_property (GObject *object, guint prop_id, - GValue *value, GParamSpec *pspec) +gst_flacenc_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec) { FlacEnc *this; - - this = (FlacEnc *)object; - + + this = (FlacEnc *) object; + switch (prop_id) { case ARG_QUALITY: g_value_set_enum (value, this->quality); break; case ARG_STREAMABLE_SUBSET: - g_value_set_boolean (value, - FLAC__seekable_stream_encoder_get_streamable_subset (this->encoder)); + g_value_set_boolean (value, + FLAC__seekable_stream_encoder_get_streamable_subset (this->encoder)); break; case ARG_MID_SIDE_STEREO: - g_value_set_boolean (value, - FLAC__seekable_stream_encoder_get_do_mid_side_stereo (this->encoder)); + g_value_set_boolean (value, + FLAC__seekable_stream_encoder_get_do_mid_side_stereo (this->encoder)); break; case ARG_LOOSE_MID_SIDE_STEREO: - g_value_set_boolean (value, - FLAC__seekable_stream_encoder_get_loose_mid_side_stereo (this->encoder)); + g_value_set_boolean (value, + FLAC__seekable_stream_encoder_get_loose_mid_side_stereo (this-> + encoder)); break; case ARG_BLOCKSIZE: - g_value_set_uint (value, - FLAC__seekable_stream_encoder_get_blocksize (this->encoder)); + g_value_set_uint (value, + FLAC__seekable_stream_encoder_get_blocksize (this->encoder)); break; case ARG_MAX_LPC_ORDER: - g_value_set_uint (value, - FLAC__seekable_stream_encoder_get_max_lpc_order (this->encoder)); + g_value_set_uint (value, + FLAC__seekable_stream_encoder_get_max_lpc_order (this->encoder)); break; case ARG_QLP_COEFF_PRECISION: - g_value_set_uint (value, - FLAC__seekable_stream_encoder_get_qlp_coeff_precision (this->encoder)); + g_value_set_uint (value, + FLAC__seekable_stream_encoder_get_qlp_coeff_precision (this-> + encoder)); break; case ARG_QLP_COEFF_PREC_SEARCH: - g_value_set_boolean (value, - FLAC__seekable_stream_encoder_get_do_qlp_coeff_prec_search (this->encoder)); + g_value_set_boolean (value, + FLAC__seekable_stream_encoder_get_do_qlp_coeff_prec_search (this-> + encoder)); break; case ARG_ESCAPE_CODING: - g_value_set_boolean (value, - FLAC__seekable_stream_encoder_get_do_escape_coding (this->encoder)); + g_value_set_boolean (value, + FLAC__seekable_stream_encoder_get_do_escape_coding (this->encoder)); break; case ARG_EXHAUSTIVE_MODEL_SEARCH: - g_value_set_boolean (value, - FLAC__seekable_stream_encoder_get_do_exhaustive_model_search (this->encoder)); + g_value_set_boolean (value, + FLAC__seekable_stream_encoder_get_do_exhaustive_model_search (this-> + encoder)); break; case ARG_MIN_RESIDUAL_PARTITION_ORDER: - g_value_set_uint (value, - FLAC__seekable_stream_encoder_get_min_residual_partition_order (this->encoder)); + g_value_set_uint (value, + FLAC__seekable_stream_encoder_get_min_residual_partition_order (this-> + encoder)); break; case ARG_MAX_RESIDUAL_PARTITION_ORDER: - g_value_set_uint (value, - FLAC__seekable_stream_encoder_get_max_residual_partition_order (this->encoder)); + g_value_set_uint (value, + FLAC__seekable_stream_encoder_get_max_residual_partition_order (this-> + encoder)); break; case ARG_RICE_PARAMETER_SEARCH_DIST: - g_value_set_uint (value, - FLAC__seekable_stream_encoder_get_rice_parameter_search_dist (this->encoder)); + g_value_set_uint (value, + FLAC__seekable_stream_encoder_get_rice_parameter_search_dist (this-> + encoder)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -746,7 +756,7 @@ gst_flacenc_get_property (GObject *object, guint prop_id, } static GstElementStateReturn -gst_flacenc_change_state (GstElement *element) +gst_flacenc_change_state (GstElement * element) { FlacEnc *flacenc = GST_FLACENC (element); @@ -760,10 +770,10 @@ gst_flacenc_change_state (GstElement *element) case GST_STATE_PLAYING_TO_PAUSED: break; case GST_STATE_PAUSED_TO_READY: - if (FLAC__seekable_stream_encoder_get_state (flacenc->encoder) != - FLAC__STREAM_ENCODER_UNINITIALIZED) { - flacenc->stopped = TRUE; - FLAC__seekable_stream_encoder_finish (flacenc->encoder); + if (FLAC__seekable_stream_encoder_get_state (flacenc->encoder) != + FLAC__STREAM_ENCODER_UNINITIALIZED) { + flacenc->stopped = TRUE; + FLAC__seekable_stream_encoder_finish (flacenc->encoder); } flacenc->negotiated = FALSE; if (flacenc->first_buf) diff --git a/ext/flac/gstflacenc.h b/ext/flac/gstflacenc.h index 27dbb3b0..1337a6fe 100644 --- a/ext/flac/gstflacenc.h +++ b/ext/flac/gstflacenc.h @@ -27,8 +27,9 @@ #include <FLAC/all.h> #ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ +extern "C" +{ +#endif /* __cplusplus */ #define GST_TYPE_FLACENC flacenc_get_type() #define GST_FLACENC(obj) G_TYPE_CHECK_INSTANCE_CAST(obj, GST_TYPE_FLACENC, FlacEnc) @@ -36,40 +37,42 @@ extern "C" { #define GST_IS_FLACENC(obj) G_TYPE_CHECK_INSTANCE_TYPE(obj, GST_TYPE_FLACENC) #define GST_IS_FLACENC_CLASS(obj) G_TYPE_CHECK_CLASS_TYPE(klass, GST_TYPE_FLACENC) -typedef struct _FlacEnc FlacEnc; -typedef struct _FlacEncClass FlacEncClass; + typedef struct _FlacEnc FlacEnc; + typedef struct _FlacEncClass FlacEncClass; -struct _FlacEnc { - GstElement element; + struct _FlacEnc + { + GstElement element; - GstPad *sinkpad,*srcpad; + GstPad *sinkpad, *srcpad; - gboolean first; - GstBuffer *first_buf; - gboolean eos; - gint channels; - gint depth; - gint sample_rate; - gboolean negotiated; - gint quality; - gboolean stopped; - FLAC__int32 *data; + gboolean first; + GstBuffer *first_buf; + gboolean eos; + gint channels; + gint depth; + gint sample_rate; + gboolean negotiated; + gint quality; + gboolean stopped; + FLAC__int32 *data; - FLAC__SeekableStreamEncoder *encoder; - FLAC__StreamMetadata **meta; + FLAC__SeekableStreamEncoder *encoder; + FLAC__StreamMetadata **meta; - GstTagList * tags; -}; + GstTagList *tags; + }; -struct _FlacEncClass { - GstElementClass parent_class; -}; + struct _FlacEncClass + { + GstElementClass parent_class; + }; -GType flacenc_get_type(void); + GType flacenc_get_type (void); #ifdef __cplusplus } -#endif /* __cplusplus */ +#endif /* __cplusplus */ -#endif /* __FLACENC_H__ */ +#endif /* __FLACENC_H__ */ diff --git a/ext/flac/gstflactag.c b/ext/flac/gstflactag.c index 5d1c56c2..c931f41c 100644 --- a/ext/flac/gstflactag.c +++ b/ext/flac/gstflactag.c @@ -36,17 +36,19 @@ typedef struct _GstFlacTag GstFlacTag; typedef struct _GstFlacTagClass GstFlacTagClass; -static inline -gint min (gint a, gint b) { +static inline gint +min (gint a, gint b) +{ if (a < b) { return a; } else { return b; } } - -typedef enum { + +typedef enum +{ GST_FLAC_TAG_STATE_INIT, GST_FLAC_TAG_STATE_METADATA_BLOCKS, GST_FLAC_TAG_STATE_METADATA_NEXT_BLOCK, @@ -57,77 +59,78 @@ typedef enum { } GstFlacTagState; -struct _GstFlacTag { - GstElement element; +struct _GstFlacTag +{ + GstElement element; /* pads */ - GstPad * sinkpad; - GstPad * srcpad; + GstPad *sinkpad; + GstPad *srcpad; - GstFlacTagState state; + GstFlacTagState state; - GstBuffer * buffer; - GstBuffer * vorbiscomment; - GstTagList * tags; + GstBuffer *buffer; + GstBuffer *vorbiscomment; + GstTagList *tags; - guint metadata_bytes_remaining; - gboolean metadata_last_block; + guint metadata_bytes_remaining; + gboolean metadata_last_block; - gboolean only_output_tags; + gboolean only_output_tags; }; -struct _GstFlacTagClass { +struct _GstFlacTagClass +{ GstElementClass parent_class; }; /* elementfactory information */ -static GstElementDetails gst_flac_tag_details = GST_ELEMENT_DETAILS ( - "flac rettager", - "Tag", - "Rewrite tags in a FLAC file", - "Christope Fergeau <teuf@gnome.org>" -); +static GstElementDetails gst_flac_tag_details = +GST_ELEMENT_DETAILS ("flac rettager", + "Tag", + "Rewrite tags in a FLAC file", + "Christope Fergeau <teuf@gnome.org>"); /* signals and args */ -enum { +enum +{ /* FILL ME */ LAST_SIGNAL }; -enum { +enum +{ ARG_0, /* FILL ME */ }; static GstStaticPadTemplate flac_tag_src_template = -GST_STATIC_PAD_TEMPLATE ( - "src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-flac; application/x-gst-tags") -); + GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("audio/x-flac; application/x-gst-tags") + ); static GstStaticPadTemplate flac_tag_sink_template = -GST_STATIC_PAD_TEMPLATE ( - "sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-flac") -); +GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("audio/x-flac") + ); -static void gst_flac_tag_base_init (gpointer g_class); -static void gst_flac_tag_class_init (GstFlacTagClass * klass); -static void gst_flac_tag_init (GstFlacTag * tag); +static void gst_flac_tag_base_init (gpointer g_class); +static void gst_flac_tag_class_init (GstFlacTagClass * klass); +static void gst_flac_tag_init (GstFlacTag * tag); -static void gst_flac_tag_chain (GstPad * pad, - GstData * data); +static void gst_flac_tag_chain (GstPad * pad, GstData * data); -static GstElementStateReturn gst_flac_tag_change_state (GstElement * element); +static GstElementStateReturn gst_flac_tag_change_state (GstElement * element); static GstElementClass *parent_class = NULL; + /* static guint gst_flac_tag_signals[LAST_SIGNAL] = { 0 }; */ GType @@ -152,11 +155,14 @@ gst_flac_tag_get_type (void) NULL, NULL }; - - flac_tag_type = g_type_register_static(GST_TYPE_ELEMENT, "GstFlacTag", &flac_tag_info, 0); - g_type_add_interface_static (flac_tag_type, GST_TYPE_TAG_SETTER, &tag_setter_info); - + flac_tag_type = + g_type_register_static (GST_TYPE_ELEMENT, "GstFlacTag", &flac_tag_info, + 0); + + g_type_add_interface_static (flac_tag_type, GST_TYPE_TAG_SETTER, + &tag_setter_info); + } return flac_tag_type; } @@ -170,29 +176,29 @@ gst_flac_tag_base_init (gpointer g_class) gst_element_class_set_details (element_class, &gst_flac_tag_details); gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&flac_tag_sink_template)); + gst_static_pad_template_get (&flac_tag_sink_template)); gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&flac_tag_src_template)); + gst_static_pad_template_get (&flac_tag_src_template)); } -static void -send_eos (GstFlacTag *tag) +static void +send_eos (GstFlacTag * tag) { gst_element_set_eos (GST_ELEMENT (tag)); gst_pad_push (tag->srcpad, GST_DATA (gst_event_new (GST_EVENT_EOS))); /* Seek to end of sink stream */ if (gst_pad_send_event (GST_PAD_PEER (tag->sinkpad), - gst_event_new_seek (GST_FORMAT_BYTES | GST_SEEK_METHOD_END | - GST_SEEK_FLAG_FLUSH, 0))) { + gst_event_new_seek (GST_FORMAT_BYTES | GST_SEEK_METHOD_END | + GST_SEEK_FLAG_FLUSH, 0))) { } else { g_warning ("Couldn't seek to eos on sinkpad\n"); } } -static gboolean -caps_nego (GstFlacTag *tag) +static gboolean +caps_nego (GstFlacTag * tag) { /* do caps nego */ GstCaps *caps; @@ -202,8 +208,8 @@ caps_nego (GstFlacTag *tag) tag->only_output_tags = FALSE; GST_LOG_OBJECT (tag, "normal operation, using audio/x-flac output"); } else { - if (gst_pad_try_set_caps (tag->srcpad, gst_caps_new_simple ( - "application/x-gst-tags", NULL)) + if (gst_pad_try_set_caps (tag->srcpad, + gst_caps_new_simple ("application/x-gst-tags", NULL)) != GST_PAD_LINK_REFUSED) { tag->only_output_tags = TRUE; GST_LOG_OBJECT (tag, "fast operation, just outputting tags"); @@ -211,36 +217,39 @@ caps_nego (GstFlacTag *tag) } else { return FALSE; } - } + } return TRUE; } static void -gst_flac_tag_class_init (GstFlacTagClass *klass) +gst_flac_tag_class_init (GstFlacTagClass * klass) { GstElementClass *gstelement_class; GObjectClass *gobject_class; - - gstelement_class = (GstElementClass*) klass; - gobject_class = (GObjectClass*) klass; - parent_class = g_type_class_ref(GST_TYPE_ELEMENT); + gstelement_class = (GstElementClass *) klass; + gobject_class = (GObjectClass *) klass; + + parent_class = g_type_class_ref (GST_TYPE_ELEMENT); gstelement_class->change_state = gst_flac_tag_change_state; } static void -gst_flac_tag_init (GstFlacTag *tag) +gst_flac_tag_init (GstFlacTag * tag) { /* create the sink and src pads */ - tag->sinkpad = gst_pad_new_from_template( - gst_static_pad_template_get (&flac_tag_sink_template), "sink"); + tag->sinkpad = + gst_pad_new_from_template (gst_static_pad_template_get + (&flac_tag_sink_template), "sink"); gst_element_add_pad (GST_ELEMENT (tag), tag->sinkpad); - gst_pad_set_chain_function (tag->sinkpad, GST_DEBUG_FUNCPTR (gst_flac_tag_chain)); + gst_pad_set_chain_function (tag->sinkpad, + GST_DEBUG_FUNCPTR (gst_flac_tag_chain)); - tag->srcpad = gst_pad_new_from_template( - gst_static_pad_template_get (&flac_tag_src_template), "src"); + tag->srcpad = + gst_pad_new_from_template (gst_static_pad_template_get + (&flac_tag_src_template), "src"); gst_element_add_pad (GST_ELEMENT (tag), tag->srcpad); tag->buffer = NULL; @@ -250,11 +259,11 @@ gst_flac_tag_init (GstFlacTag *tag) #define FLAC_MAGIC_SIZE (sizeof (FLAC_MAGIC) - 1) static void -gst_flac_tag_chain (GstPad *pad, GstData *data) +gst_flac_tag_chain (GstPad * pad, GstData * data) { GstBuffer *buffer; GstFlacTag *tag; - + if (GST_IS_EVENT (data)) { g_print ("Unhandled event\n"); return; @@ -265,6 +274,7 @@ gst_flac_tag_chain (GstPad *pad, GstData *data) if (tag->buffer) { GstBuffer *merge; + merge = gst_buffer_merge (tag->buffer, buffer); gst_buffer_unref (buffer); gst_buffer_unref (tag->buffer); @@ -284,13 +294,17 @@ gst_flac_tag_chain (GstPad *pad, GstData *data) return; } - if (strncmp (GST_BUFFER_DATA (tag->buffer), FLAC_MAGIC, FLAC_MAGIC_SIZE) == 0) { + if (strncmp (GST_BUFFER_DATA (tag->buffer), FLAC_MAGIC, + FLAC_MAGIC_SIZE) == 0) { GstBuffer *sub; + tag->state = GST_FLAC_TAG_STATE_METADATA_BLOCKS; sub = gst_buffer_create_sub (tag->buffer, 0, FLAC_MAGIC_SIZE); - + gst_pad_push (tag->srcpad, GST_DATA (sub)); - sub = gst_buffer_create_sub (tag->buffer, FLAC_MAGIC_SIZE, GST_BUFFER_SIZE (tag->buffer) - FLAC_MAGIC_SIZE); + sub = + gst_buffer_create_sub (tag->buffer, FLAC_MAGIC_SIZE, + GST_BUFFER_SIZE (tag->buffer) - FLAC_MAGIC_SIZE); gst_buffer_unref (tag->buffer); /* We do a copy because we need a writable buffer, and _create_sub * sets the buffer it uses to read-only @@ -332,10 +346,9 @@ gst_flac_tag_chain (GstPad *pad, GstData *data) } type = (GST_BUFFER_DATA (tag->buffer)[0]) & 0x7F; - size = - ((GST_BUFFER_DATA (tag->buffer)[1]) << 16) - | ((GST_BUFFER_DATA (tag->buffer)[2]) << 8) - | (GST_BUFFER_DATA (tag->buffer)[3]); + size = ((GST_BUFFER_DATA (tag->buffer)[1]) << 16) + | ((GST_BUFFER_DATA (tag->buffer)[2]) << 8) + | (GST_BUFFER_DATA (tag->buffer)[3]); /* The 4 bytes long header isn't included in the metadata size */ tag->metadata_bytes_remaining = size + 4; @@ -352,14 +365,14 @@ gst_flac_tag_chain (GstPad *pad, GstData *data) /* Reads a metadata block */ if ((tag->state == GST_FLAC_TAG_STATE_WRITING_METADATA_BLOCK) || - (tag->state == GST_FLAC_TAG_STATE_VC_METADATA_BLOCK)) { - GstBuffer *sub; + (tag->state == GST_FLAC_TAG_STATE_VC_METADATA_BLOCK)) { + GstBuffer *sub; guint bytes_to_push; g_assert (tag->metadata_bytes_remaining != 0); - bytes_to_push = min (tag->metadata_bytes_remaining, - GST_BUFFER_SIZE (tag->buffer)); + bytes_to_push = min (tag->metadata_bytes_remaining, + GST_BUFFER_SIZE (tag->buffer)); sub = gst_buffer_create_sub (tag->buffer, 0, bytes_to_push); @@ -370,6 +383,7 @@ gst_flac_tag_chain (GstPad *pad, GstData *data) tag->vorbiscomment = sub; } else { GstBuffer *merge; + merge = gst_buffer_merge (tag->vorbiscomment, sub); gst_buffer_unref (tag->vorbiscomment); gst_buffer_unref (sub); @@ -382,8 +396,8 @@ gst_flac_tag_chain (GstPad *pad, GstData *data) if (GST_BUFFER_SIZE (tag->buffer) > bytes_to_push) { GstBuffer *sub; - sub = gst_buffer_create_sub (tag->buffer, bytes_to_push, - GST_BUFFER_SIZE (tag->buffer) - bytes_to_push); + sub = gst_buffer_create_sub (tag->buffer, bytes_to_push, + GST_BUFFER_SIZE (tag->buffer) - bytes_to_push); gst_buffer_unref (tag->buffer); /* We make a copy because we need a writable buffer, and _create_sub @@ -415,10 +429,9 @@ gst_flac_tag_chain (GstPad *pad, GstData *data) if (tag->vorbiscomment != NULL) { /* We found some tags, try to parse them and notify the other elements * that we encoutered some tags - */ - tag->tags = gst_tag_list_from_vorbiscomment_buffer (tag->vorbiscomment, - GST_BUFFER_DATA (tag->vorbiscomment), - 4, NULL); + */ + tag->tags = gst_tag_list_from_vorbiscomment_buffer (tag->vorbiscomment, + GST_BUFFER_DATA (tag->vorbiscomment), 4, NULL); if (tag->tags != NULL) { gst_element_found_tags (GST_ELEMENT (tag), tag->tags); } @@ -431,7 +444,7 @@ gst_flac_tag_chain (GstPad *pad, GstData *data) return; } } - + /* Skip to next state */ if (tag->metadata_last_block == FALSE) { tag->state = GST_FLAC_TAG_STATE_METADATA_BLOCKS; @@ -461,9 +474,9 @@ gst_flac_tag_chain (GstPad *pad, GstData *data) g_assert (tag->only_output_tags == FALSE); user_tags = gst_tag_setter_get_list (GST_TAG_SETTER (tag)); - merged_tags = gst_tag_list_merge (tag->tags, user_tags, - gst_tag_setter_get_merge_mode (GST_TAG_SETTER (tag))); - + merged_tags = gst_tag_list_merge (tag->tags, user_tags, + gst_tag_setter_get_merge_mode (GST_TAG_SETTER (tag))); + if (merged_tags == NULL) { /* If we get a NULL list of tags, we must generate a padding block * which is marked as the last metadata block, otherwise we'll @@ -473,23 +486,25 @@ gst_flac_tag_chain (GstPad *pad, GstData *data) buffer = gst_buffer_new_and_alloc (12); if (buffer == NULL) { GST_ELEMENT_ERROR (tag, CORE, TOO_LAZY, (NULL), - ("Error creating 12-byte buffer for padding block")); + ("Error creating 12-byte buffer for padding block")); } memset (GST_BUFFER_DATA (buffer), 0, GST_BUFFER_SIZE (buffer)); - GST_BUFFER_DATA (buffer)[0] = 0x81; /* 0x80 = Last metadata block, - * 0x01 = padding block - */ + GST_BUFFER_DATA (buffer)[0] = 0x81; /* 0x80 = Last metadata block, + * 0x01 = padding block + */ } else { guchar header[4]; + memset (header, 0, sizeof (header)); - header[0] = 0x84; /* 0x80 = Last metadata block, - * 0x04 = vorbiscomment block - */ - buffer = gst_tag_list_to_vorbiscomment_buffer (merged_tags, header, - sizeof (header), NULL); + header[0] = 0x84; /* 0x80 = Last metadata block, + * 0x04 = vorbiscomment block + */ + buffer = gst_tag_list_to_vorbiscomment_buffer (merged_tags, header, + sizeof (header), NULL); gst_tag_list_free (merged_tags); if (buffer == NULL) { - GST_ELEMENT_ERROR (tag, CORE, TAG, (NULL), ("Error converting tag list to vorbiscomment buffer")); + GST_ELEMENT_ERROR (tag, CORE, TAG, (NULL), + ("Error converting tag list to vorbiscomment buffer")); return; } size = GST_BUFFER_SIZE (buffer) - 4; @@ -498,9 +513,10 @@ gst_flac_tag_chain (GstPad *pad, GstData *data) * while the vorbis specs allow more than that. Shouldn't * be a real world problem though */ - GST_ELEMENT_ERROR (tag, CORE, TAG, (NULL), ("Vorbis comment of size %d too long", size)); + GST_ELEMENT_ERROR (tag, CORE, TAG, (NULL), + ("Vorbis comment of size %d too long", size)); return; - } + } } /* The 4 byte metadata block header isn't accounted for in the total @@ -509,8 +525,8 @@ gst_flac_tag_chain (GstPad *pad, GstData *data) size = GST_BUFFER_SIZE (buffer) - 4; GST_BUFFER_DATA (buffer)[1] = ((size & 0xFF0000) >> 16); - GST_BUFFER_DATA (buffer)[2] = ((size & 0x00FF00) >> 8); - GST_BUFFER_DATA (buffer)[3] = (size & 0x0000FF); + GST_BUFFER_DATA (buffer)[2] = ((size & 0x00FF00) >> 8); + GST_BUFFER_DATA (buffer)[3] = (size & 0x0000FF); gst_pad_push (tag->srcpad, GST_DATA (buffer)); tag->state = GST_FLAC_TAG_STATE_AUDIO_DATA; } @@ -525,7 +541,7 @@ gst_flac_tag_chain (GstPad *pad, GstData *data) static GstElementStateReturn -gst_flac_tag_change_state (GstElement *element) +gst_flac_tag_change_state (GstElement * element) { GstFlacTag *tag; @@ -543,7 +559,7 @@ gst_flac_tag_change_state (GstElement *element) break; case GST_STATE_PAUSED_TO_READY: if (tag->buffer) { - gst_buffer_unref (tag->buffer); + gst_buffer_unref (tag->buffer); tag->buffer = NULL; } if (tag->vorbiscomment) { |