diff options
author | Tim-Philipp Müller <tim@centricular.net> | 2006-07-18 15:53:35 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.net> | 2006-07-18 15:53:35 +0000 |
commit | 37fe4c9cc7eaa6afb62cb932f1f77917c3c66c73 (patch) | |
tree | 483bfb9018f676f77c63c510b42c4fd7fe2f1cf3 | |
parent | 8dd45c0027604b6ff82807760da7a77da4e1b4b6 (diff) | |
download | gst-plugins-bad-37fe4c9cc7eaa6afb62cb932f1f77917c3c66c73.tar.gz gst-plugins-bad-37fe4c9cc7eaa6afb62cb932f1f77917c3c66c73.tar.bz2 gst-plugins-bad-37fe4c9cc7eaa6afb62cb932f1f77917c3c66c73.zip |
ext/wavpack/gstwavpackdec.*: More clean-ups: remove most of the disfunctional correction pad stuff for now, if it eve...
Original commit message from CVS:
* ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_base_init),
(gst_wavpack_dec_class_init), (gst_wavpack_dec_init),
(gst_wavpack_dec_finalize), (gst_wavpack_dec_format_samples),
(gst_wavpack_dec_clip_outgoing_buffer), (gst_wavpack_dec_chain),
(gst_wavpack_dec_sink_event), (gst_wavpack_dec_change_state):
* ext/wavpack/gstwavpackdec.h:
More clean-ups: remove most of the disfunctional correction
pad stuff for now, if it ever gets implemented a lot of stuff
will have to be rewritten anyway; redo chain function, move
errors to end, error out instead of g_assert()ing. Also rename
overly long variable 'wavpackdec' to just 'dec'; miscellaneous
other small stuff.
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | ext/wavpack/gstwavpackdec.c | 427 | ||||
-rw-r--r-- | ext/wavpack/gstwavpackdec.h | 2 |
3 files changed, 166 insertions, 278 deletions
@@ -1,5 +1,20 @@ 2006-07-18 Tim-Philipp Müller <tim at centricular dot net> + * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_base_init), + (gst_wavpack_dec_class_init), (gst_wavpack_dec_init), + (gst_wavpack_dec_finalize), (gst_wavpack_dec_format_samples), + (gst_wavpack_dec_clip_outgoing_buffer), (gst_wavpack_dec_chain), + (gst_wavpack_dec_sink_event), (gst_wavpack_dec_change_state): + * ext/wavpack/gstwavpackdec.h: + More clean-ups: remove most of the disfunctional correction + pad stuff for now, if it ever gets implemented a lot of stuff + will have to be rewritten anyway; redo chain function, move + errors to end, error out instead of g_assert()ing. Also rename + overly long variable 'wavpackdec' to just 'dec'; miscellaneous + other small stuff. + +2006-07-18 Tim-Philipp Müller <tim at centricular dot net> + Patch by: Sebastian Dröge <slomo at circular-chaos.org> * configure.ac: diff --git a/ext/wavpack/gstwavpackdec.c b/ext/wavpack/gstwavpackdec.c index 16ee31b1..69328a51 100644 --- a/ext/wavpack/gstwavpackdec.c +++ b/ext/wavpack/gstwavpackdec.c @@ -47,15 +47,6 @@ static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", "rate = (int) [ 6000, 192000 ], " "framed = (boolean) true") ); -#if 0 -static GstStaticPadTemplate wvc_sink_factory = -GST_STATIC_PAD_TEMPLATE ("wvcsink", - GST_PAD_SINK, - GST_PAD_REQUEST, - GST_STATIC_CAPS ("audio/x-wavpack-correction, " "framed = (boolean) true") - ); -#endif - static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, @@ -74,24 +65,8 @@ static GstStateChangeReturn gst_wavpack_dec_change_state (GstElement * element, GstStateChange transition); static gboolean gst_wavpack_dec_sink_event (GstPad * pad, GstEvent * event); -#if 0 -static GstPad *gst_wavpack_dec_request_new_pad (GstElement * element, - GstPadTemplate * templ, const gchar * name); -#endif - GST_BOILERPLATE (GstWavpackDec, gst_wavpack_dec, GstElement, GST_TYPE_ELEMENT); -#if 0 -static GstPadLinkReturn -gst_wavpack_dec_wvclink (GstPad * pad, GstPad * peer) -{ - if (!gst_caps_is_fixed (GST_PAD_CAPS (peer))) - return GST_PAD_LINK_REFUSED; - - return GST_PAD_LINK_OK; -} -#endif - static void gst_wavpack_dec_base_init (gpointer klass) { @@ -107,10 +82,6 @@ gst_wavpack_dec_base_init (gpointer klass) gst_static_pad_template_get (&src_factory)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory)); -#if 0 - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&wvc_sink_factory)); -#endif gst_element_class_set_details (element_class, &plugin_details); } @@ -122,93 +93,76 @@ gst_wavpack_dec_class_init (GstWavpackDecClass * klass) gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_wavpack_dec_change_state); -#if 0 - gstelement_class->request_new_pad = - GST_DEBUG_FUNCPTR (gst_wavpack_dec_request_new_pad); -#endif gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_wavpack_dec_finalize); } static void -gst_wavpack_dec_init (GstWavpackDec * wavpackdec, GstWavpackDecClass * gklass) +gst_wavpack_dec_init (GstWavpackDec * dec, GstWavpackDecClass * gklass) { - GstElementClass *klass = GST_ELEMENT_GET_CLASS (wavpackdec); - - wavpackdec->sinkpad = - gst_pad_new_from_template (gst_element_class_get_pad_template (klass, - "sink"), "sink"); - gst_pad_set_chain_function (wavpackdec->sinkpad, + dec->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink"); + gst_pad_set_chain_function (dec->sinkpad, GST_DEBUG_FUNCPTR (gst_wavpack_dec_chain)); - gst_pad_set_event_function (wavpackdec->sinkpad, + gst_pad_set_event_function (dec->sinkpad, GST_DEBUG_FUNCPTR (gst_wavpack_dec_sink_event)); - gst_element_add_pad (GST_ELEMENT (wavpackdec), wavpackdec->sinkpad); - - wavpackdec->srcpad = - gst_pad_new_from_template (gst_element_class_get_pad_template (klass, - "src"), "src"); - gst_pad_use_fixed_caps (wavpackdec->srcpad); - gst_element_add_pad (GST_ELEMENT (wavpackdec), wavpackdec->srcpad); + gst_element_add_pad (GST_ELEMENT (dec), dec->sinkpad); - wavpackdec->context = NULL; - wavpackdec->stream_reader = gst_wavpack_stream_reader_new (); + dec->srcpad = gst_pad_new_from_static_template (&src_factory, "src"); + gst_pad_use_fixed_caps (dec->srcpad); + gst_element_add_pad (GST_ELEMENT (dec), dec->srcpad); - wavpackdec->wv_id.buffer = NULL; - wavpackdec->wv_id.position = wavpackdec->wv_id.length = 0; + dec->context = NULL; + dec->stream_reader = gst_wavpack_stream_reader_new (); -/* - wavpackdec->wvc_id.buffer = NULL; - wavpackdec->wvc_id.position = wavpackdec->wvc_id.length = 0; - wavpackdec->wvcsinkpad = NULL; -*/ + dec->wv_id.buffer = NULL; + dec->wv_id.position = dec->wv_id.length = 0; - wavpackdec->error_count = 0; + dec->error_count = 0; + dec->channels = 0; + dec->sample_rate = 0; + dec->width = 0; - wavpackdec->channels = 0; - wavpackdec->sample_rate = 0; - wavpackdec->width = 0; - - gst_segment_init (&wavpackdec->segment, GST_FORMAT_UNDEFINED); + gst_segment_init (&dec->segment, GST_FORMAT_UNDEFINED); } static void gst_wavpack_dec_finalize (GObject * object) { - GstWavpackDec *wavpackdec = GST_WAVPACK_DEC (object); + GstWavpackDec *dec = GST_WAVPACK_DEC (object); - g_free (wavpackdec->stream_reader); - wavpackdec->stream_reader = NULL; + g_free (dec->stream_reader); + dec->stream_reader = NULL; G_OBJECT_CLASS (parent_class)->finalize (object); } static void -gst_wavpack_dec_format_samples (GstWavpackDec * wavpackdec, guint8 * dst, +gst_wavpack_dec_format_samples (GstWavpackDec * dec, guint8 * dst, int32_t * samples, guint num_samples) { gint i; int32_t temp; - switch (wavpackdec->width) { + switch (dec->width) { case 8: - for (i = 0; i < num_samples * wavpackdec->channels; ++i) + for (i = 0; i < num_samples * dec->channels; ++i) *dst++ = (guint8) (*samples++); break; case 16: - for (i = 0; i < num_samples * wavpackdec->channels; ++i) { + for (i = 0; i < num_samples * dec->channels; ++i) { *dst++ = (guint8) (temp = *samples++); *dst++ = (guint8) (temp >> 8); } break; case 24: - for (i = 0; i < num_samples * wavpackdec->channels; ++i) { + for (i = 0; i < num_samples * dec->channels; ++i) { *dst++ = (guint8) (temp = *samples++); *dst++ = (guint8) (temp >> 8); *dst++ = (guint8) (temp >> 16); } break; case 32: - for (i = 0; i < num_samples * wavpackdec->channels; ++i) { + for (i = 0; i < num_samples * dec->channels; ++i) { *dst++ = (guint8) (temp = *samples++); *dst++ = (guint8) (temp >> 8); *dst++ = (guint8) (temp >> 16); @@ -221,18 +175,17 @@ gst_wavpack_dec_format_samples (GstWavpackDec * wavpackdec, guint8 * dst, } static gboolean -gst_wavpack_dec_clip_outgoing_buffer (GstWavpackDec * wavpackdec, - GstBuffer * buf) +gst_wavpack_dec_clip_outgoing_buffer (GstWavpackDec * dec, GstBuffer * buf) { gint64 start, stop, cstart, cstop, diff; - if (wavpackdec->segment.format != GST_FORMAT_TIME) + if (dec->segment.format != GST_FORMAT_TIME) return TRUE; start = GST_BUFFER_TIMESTAMP (buf); stop = start + GST_BUFFER_DURATION (buf); - if (gst_segment_clip (&wavpackdec->segment, GST_FORMAT_TIME, + if (gst_segment_clip (&dec->segment, GST_FORMAT_TIME, start, stop, &cstart, &cstop)) { diff = cstart - start; @@ -240,8 +193,8 @@ gst_wavpack_dec_clip_outgoing_buffer (GstWavpackDec * wavpackdec, GST_BUFFER_TIMESTAMP (buf) = cstart; GST_BUFFER_DURATION (buf) -= diff; - diff = ((wavpackdec->width + 7) >> 3) * wavpackdec->channels - * GST_CLOCK_TIME_TO_FRAMES (diff, wavpackdec->sample_rate); + diff = ((dec->width + 7) >> 3) * dec->channels + * GST_CLOCK_TIME_TO_FRAMES (diff, dec->sample_rate); GST_BUFFER_DATA (buf) += diff; GST_BUFFER_SIZE (buf) -= diff; } @@ -250,12 +203,12 @@ gst_wavpack_dec_clip_outgoing_buffer (GstWavpackDec * wavpackdec, if (diff > 0) { GST_BUFFER_DURATION (buf) -= diff; - diff = ((wavpackdec->width + 7) >> 3) * wavpackdec->channels - * GST_CLOCK_TIME_TO_FRAMES (diff, wavpackdec->sample_rate); + diff = ((dec->width + 7) >> 3) * dec->channels + * GST_CLOCK_TIME_TO_FRAMES (diff, dec->sample_rate); GST_BUFFER_SIZE (buf) -= diff; } } else { - GST_DEBUG_OBJECT (wavpackdec, "buffer is outside configured segment"); + GST_DEBUG_OBJECT (dec, "buffer is outside configured segment"); return FALSE; } @@ -265,198 +218,149 @@ gst_wavpack_dec_clip_outgoing_buffer (GstWavpackDec * wavpackdec, static GstFlowReturn gst_wavpack_dec_chain (GstPad * pad, GstBuffer * buf) { - - GstWavpackDec *wavpackdec; + GstWavpackDec *dec; GstBuffer *outbuf; - GstBuffer *cbuf = NULL; GstFlowReturn ret = GST_FLOW_OK; WavpackHeader wph; - int32_t *unpack_buf; - int32_t unpacked_sample_count; - - wavpackdec = GST_WAVPACK_DEC (GST_PAD_PARENT (pad)); - - /* we only accept framed input with complete chunks */ - g_assert (GST_BUFFER_SIZE (buf) >= sizeof (WavpackHeader)); - gst_wavpack_read_header (&wph, GST_BUFFER_DATA (buf)); - g_assert (GST_BUFFER_SIZE (buf) == - wph.ckSize + 4 * sizeof (char) + sizeof (uint32_t)); - - wavpackdec->wv_id.buffer = GST_BUFFER_DATA (buf); - wavpackdec->wv_id.length = GST_BUFFER_SIZE (buf); - wavpackdec->wv_id.position = 0; - -#if 0 - /* check whether the correction pad is linked and we can get - * the correction chunk that corresponds to our current data */ - if (gst_pad_is_linked (wavpackdec->wvcsinkpad)) { - if (GST_FLOW_OK != gst_pad_pull_range (wavpackdec->wvcsinkpad, - GST_BUFFER_OFFSET (buf), -1, &cbuf)) { - cbuf = NULL; - } else { - /* this won't work (tpm) */ - if (!(GST_BUFFER_TIMESTAMP (cbuf) == GST_BUFFER_TIMESTAMP (buf)) || - !(GST_BUFFER_DURATION (cbuf) == GST_BUFFER_DURATION (buf)) || - !(GST_BUFFER_OFFSET (cbuf) == GST_BUFFER_OFFSET (buf)) || - !(GST_BUFFER_OFFSET_END (cbuf) == GST_BUFFER_OFFSET (buf))) { - gst_buffer_unref (cbuf); - cbuf = NULL; - } else { - wavpackdec->wvc_id.buffer = GST_BUFFER_DATA (cbuf); - wavpackdec->wvc_id.length = GST_BUFFER_SIZE (cbuf); - wavpackdec->wvc_id.position = 0; - } - } - } -#endif + int32_t *unpack_buf = NULL; + int32_t decoded, unpacked_size; + gboolean format_changed; + + dec = GST_WAVPACK_DEC (GST_PAD_PARENT (pad)); + + /* check input, we only accept framed input with complete chunks */ + if (GST_BUFFER_SIZE (buf) < sizeof (WavpackHeader)) + goto input_not_framed; + + if (!gst_wavpack_read_header (&wph, GST_BUFFER_DATA (buf))) + goto invalid_header; + + if (GST_BUFFER_SIZE (buf) != wph.ckSize + 4 * 1 + 4) + goto input_not_framed; + + dec->wv_id.buffer = GST_BUFFER_DATA (buf); + dec->wv_id.length = GST_BUFFER_SIZE (buf); + dec->wv_id.position = 0; /* create a new wavpack context if there is none yet but if there * was already one (i.e. caps were set on the srcpad) check whether * the new one has the same caps */ - if (!wavpackdec->context) { + if (!dec->context) { gchar error_msg[80]; -/* - wavpackdec->context = - WavpackOpenFileInputEx (wavpackdec->stream_reader, &wavpackdec->wv_id, - (cbuf) ? &wavpackdec->wvc_id : NULL, error_msg, OPEN_STREAMING, 0); -*/ - - wavpackdec->context = WavpackOpenFileInputEx (wavpackdec->stream_reader, - &wavpackdec->wv_id, NULL, error_msg, OPEN_STREAMING, 0); - - if (!wavpackdec->context) { - wavpackdec->error_count++; - GST_ELEMENT_WARNING (wavpackdec, LIBRARY, INIT, (NULL), - ("Couldn't open buffer for decoding: %s", error_msg)); - if (wavpackdec->error_count <= WAVPACK_DEC_MAX_ERRORS) { - ret = GST_FLOW_OK; - } else { - ret = GST_FLOW_ERROR; - } - gst_buffer_unref (buf); - if (cbuf) { - gst_buffer_unref (cbuf); - } - return ret; - } + dec->context = WavpackOpenFileInputEx (dec->stream_reader, + &dec->wv_id, NULL, error_msg, OPEN_STREAMING, 0); - if (GST_PAD_CAPS (wavpackdec->srcpad)) { - if ((wavpackdec->sample_rate != - WavpackGetSampleRate (wavpackdec->context)) - || (wavpackdec->channels != - WavpackGetNumChannels (wavpackdec->context)) - || (wavpackdec->width != - WavpackGetBitsPerSample (wavpackdec->context))) { - gst_buffer_unref (buf); - if (cbuf) { - gst_buffer_unref (cbuf); - } - - /* FIXME: use the right error */ - GST_ELEMENT_ERROR (wavpackdec, LIBRARY, INIT, (NULL), - ("Got Wavpack chunk with changed format settings!")); - return GST_FLOW_ERROR; + if (!dec->context) { + GST_WARNING ("Couldn't decode buffer: %s", error_msg); + dec->error_count++; + if (dec->error_count <= WAVPACK_DEC_MAX_ERRORS) { + goto out; /* just return OK for now */ + } else { + goto decode_error; } } } - wavpackdec->error_count = 0; - if (!GST_PAD_CAPS (wavpackdec->srcpad)) { + g_assert (dec->context != NULL); + + dec->error_count = 0; + + format_changed = + (dec->sample_rate != WavpackGetSampleRate (dec->context)) || + (dec->channels != WavpackGetNumChannels (dec->context)) || + (dec->width != WavpackGetBitsPerSample (dec->context)); + + if (!GST_PAD_CAPS (dec->srcpad) || format_changed) { GstCaps *caps; - g_assert (wavpackdec->context); + dec->sample_rate = WavpackGetSampleRate (dec->context); + dec->channels = WavpackGetNumChannels (dec->context); + dec->width = WavpackGetBitsPerSample (dec->context); - wavpackdec->sample_rate = WavpackGetSampleRate (wavpackdec->context); - wavpackdec->channels = WavpackGetNumChannels (wavpackdec->context); - wavpackdec->width = WavpackGetBitsPerSample (wavpackdec->context); caps = gst_caps_new_simple ("audio/x-raw-int", - "rate", G_TYPE_INT, wavpackdec->sample_rate, - "channels", G_TYPE_INT, wavpackdec->channels, - "depth", G_TYPE_INT, wavpackdec->width, - "width", G_TYPE_INT, wavpackdec->width, + "rate", G_TYPE_INT, dec->sample_rate, + "channels", G_TYPE_INT, dec->channels, + "depth", G_TYPE_INT, dec->width, + "width", G_TYPE_INT, dec->width, "endianness", G_TYPE_INT, G_LITTLE_ENDIAN, "signed", G_TYPE_BOOLEAN, TRUE, NULL); - if (!gst_pad_set_caps (wavpackdec->srcpad, caps)) { - gst_caps_unref (caps); - WavpackCloseFile (wavpackdec->context); - wavpackdec->context = NULL; - gst_buffer_unref (buf); - if (cbuf) { - gst_buffer_unref (cbuf); - } - /* FIXME: use the right error */ - GST_ELEMENT_ERROR (wavpackdec, LIBRARY, INIT, (NULL), - ("Couldn't set caps on source pad: %" GST_PTR_FORMAT, caps)); - return GST_FLOW_ERROR; - } + GST_DEBUG_OBJECT (dec, "setting caps %" GST_PTR_FORMAT, caps); + + /* should always succeed */ + gst_pad_set_caps (dec->srcpad, caps); gst_caps_unref (caps); - gst_pad_use_fixed_caps (wavpackdec->srcpad); } - g_assert (wavpackdec->context); - unpack_buf = - (int32_t *) g_malloc (sizeof (int32_t) * wph.block_samples * - wavpackdec->channels); - unpacked_sample_count = - WavpackUnpackSamples (wavpackdec->context, unpack_buf, wph.block_samples); - g_assert (unpacked_sample_count == wph.block_samples); - - ret = - gst_pad_alloc_buffer_and_set_caps (wavpackdec->srcpad, - GST_BUFFER_OFFSET (buf), - wph.block_samples * ((wavpackdec->width + - 7) >> 3) * wavpackdec->channels, - GST_PAD_CAPS (wavpackdec->srcpad), &outbuf); - - if (GST_FLOW_IS_FATAL (ret)) { - WavpackCloseFile (wavpackdec->context); - wavpackdec->context = NULL; - g_free (unpack_buf); - gst_buffer_unref (buf); - if (cbuf) { - gst_buffer_unref (cbuf); - } - return ret; - } else if (ret != GST_FLOW_OK) { - g_free (unpack_buf); - gst_buffer_unref (buf); - if (cbuf) { - gst_buffer_unref (cbuf); - } - return ret; - } + unpacked_size = wph.block_samples * ((dec->width + 7) >> 3) * dec->channels; + + /* alloc buffer */ + ret = gst_pad_alloc_buffer (dec->srcpad, GST_BUFFER_OFFSET (buf), + unpacked_size, GST_PAD_CAPS (dec->srcpad), &outbuf); + + if (ret != GST_FLOW_OK) + goto out; + + /* decode */ + unpack_buf = g_new (int32_t, wph.block_samples * dec->channels); + decoded = WavpackUnpackSamples (dec->context, unpack_buf, wph.block_samples); + if (decoded != wph.block_samples) + goto decode_error; - gst_wavpack_dec_format_samples (wavpackdec, GST_BUFFER_DATA (outbuf), + /* put samples into outbuf buffer */ + gst_wavpack_dec_format_samples (dec, GST_BUFFER_DATA (outbuf), unpack_buf, wph.block_samples); - g_free (unpack_buf); gst_buffer_stamp (outbuf, buf); - gst_buffer_unref (buf); - if (cbuf) { - gst_buffer_unref (cbuf); - } - if (gst_wavpack_dec_clip_outgoing_buffer (wavpackdec, outbuf)) { - GST_LOG_OBJECT (wavpackdec, "pushing buffer with time %" GST_TIME_FORMAT, + if (gst_wavpack_dec_clip_outgoing_buffer (dec, outbuf)) { + GST_LOG_OBJECT (dec, "pushing buffer with time %" GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf))); - ret = gst_pad_push (wavpackdec->srcpad, outbuf); - if (ret != GST_FLOW_OK) { - GST_DEBUG_OBJECT (wavpackdec, "pad_push: %s", gst_flow_get_name (ret)); - } + ret = gst_pad_push (dec->srcpad, outbuf); } else { gst_buffer_unref (outbuf); } +out: + + if (G_UNLIKELY (ret != GST_FLOW_OK)) { + GST_DEBUG_OBJECT (dec, "flow: %s", gst_flow_get_name (ret)); + } + + g_free (unpack_buf); + gst_buffer_unref (buf); + return ret; + +/* ERRORS */ +input_not_framed: + { + GST_ELEMENT_ERROR (dec, STREAM, DECODE, (NULL), ("Expected framed input")); + gst_buffer_unref (buf); + return GST_FLOW_ERROR; + } +invalid_header: + { + GST_ELEMENT_ERROR (dec, STREAM, DECODE, (NULL), ("Invalid wavpack header")); + gst_buffer_unref (buf); + return GST_FLOW_ERROR; + } +decode_error: + { + GST_ELEMENT_ERROR (dec, STREAM, DECODE, (NULL), + ("Failed to decode wavpack stream")); + g_free (unpack_buf); + gst_buffer_unref (buf); + return GST_FLOW_ERROR; + } } static gboolean gst_wavpack_dec_sink_event (GstPad * pad, GstEvent * event) { - GstWavpackDec *wavpackdec = GST_WAVPACK_DEC (gst_pad_get_parent (pad)); + GstWavpackDec *dec = GST_WAVPACK_DEC (gst_pad_get_parent (pad)); - GST_LOG_OBJECT (wavpackdec, "Received %s event", GST_EVENT_TYPE_NAME (event)); + GST_LOG_OBJECT (dec, "Received %s event", GST_EVENT_TYPE_NAME (event)); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_NEWSEGMENT:{ GstFormat fmt; @@ -470,10 +374,10 @@ gst_wavpack_dec_sink_event (GstPad * pad, GstEvent * event) GST_DEBUG ("Got NEWSEGMENT event in GST_FORMAT_TIME, passing on (%" GST_TIME_FORMAT " - %" GST_TIME_FORMAT ")", GST_TIME_ARGS (start), GST_TIME_ARGS (end)); - gst_segment_set_newsegment (&wavpackdec->segment, is_update, rate, fmt, + gst_segment_set_newsegment (&dec->segment, is_update, rate, fmt, start, end, base); } else { - gst_segment_init (&wavpackdec->segment, GST_FORMAT_UNDEFINED); + gst_segment_init (&dec->segment, GST_FORMAT_UNDEFINED); } break; } @@ -481,7 +385,7 @@ gst_wavpack_dec_sink_event (GstPad * pad, GstEvent * event) break; } - gst_object_unref (wavpackdec); + gst_object_unref (dec); return gst_pad_event_default (pad, event); } @@ -489,13 +393,13 @@ static GstStateChangeReturn gst_wavpack_dec_change_state (GstElement * element, GstStateChange transition) { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; - GstWavpackDec *wavpackdec = GST_WAVPACK_DEC (element); + GstWavpackDec *dec = GST_WAVPACK_DEC (element); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: break; case GST_STATE_CHANGE_READY_TO_PAUSED: - gst_segment_init (&wavpackdec->segment, GST_FORMAT_UNDEFINED); + gst_segment_init (&dec->segment, GST_FORMAT_UNDEFINED); break; case GST_STATE_CHANGE_PAUSED_TO_PLAYING: break; @@ -509,23 +413,16 @@ gst_wavpack_dec_change_state (GstElement * element, GstStateChange transition) case GST_STATE_CHANGE_PLAYING_TO_PAUSED: break; case GST_STATE_CHANGE_PAUSED_TO_READY: - if (wavpackdec->context) { - WavpackCloseFile (wavpackdec->context); - wavpackdec->context = NULL; + if (dec->context) { + WavpackCloseFile (dec->context); + dec->context = NULL; } - wavpackdec->wv_id.buffer = NULL; - wavpackdec->wv_id.position = 0; - wavpackdec->wv_id.length = 0; - /* - wavpackdec->wvc_id.buffer = NULL; - wavpackdec->wvc_id.position = 0; - wavpackdec->wvc_id.length = 0; - wavpackdec->error_count = 0; - wavpackdec->wvcsinkpad = NULL; - */ - wavpackdec->channels = 0; - wavpackdec->sample_rate = 0; - wavpackdec->width = 0; + dec->wv_id.buffer = NULL; + dec->wv_id.position = 0; + dec->wv_id.length = 0; + dec->channels = 0; + dec->sample_rate = 0; + dec->width = 0; break; case GST_STATE_CHANGE_READY_TO_NULL: break; @@ -536,28 +433,6 @@ gst_wavpack_dec_change_state (GstElement * element, GstStateChange transition) return ret; } -#if 0 -static GstPad * -gst_wavpack_dec_request_new_pad (GstElement * element, - GstPadTemplate * templ, const gchar * name) -{ - GstWavpackDec *wavpackdec = GST_WAVPACK_DEC (element); - GstPad *pad; - - if (wavpackdec->wvcsinkpad == NULL) { - wavpackdec->wvcsinkpad = gst_pad_new_from_template (template, name); - gst_pad_set_link_function (wavpackdec->wvcsinkpad, gst_wavpack_dec_wvclink); - gst_pad_use_fixed_caps (wavpackdec->wvcsinkpad); - gst_element_add_pad (GST_ELEMENT (wavpackdec), wavpackdec->wvcsinkpad); - gst_element_no_more_pads (GST_ELEMENT (wavpackdec)); - } else { - pad = NULL; - } - - return pad; -} -#endif - gboolean gst_wavpack_dec_plugin_init (GstPlugin * plugin) { diff --git a/ext/wavpack/gstwavpackdec.h b/ext/wavpack/gstwavpackdec.h index 7ab9699d..7a866ccb 100644 --- a/ext/wavpack/gstwavpackdec.h +++ b/ext/wavpack/gstwavpackdec.h @@ -48,7 +48,6 @@ struct _GstWavpackDec { GstElement element; - /* GstPad *wvcsinkpad; */ GstPad *sinkpad; GstPad *srcpad; @@ -56,7 +55,6 @@ struct _GstWavpackDec WavpackStreamReader *stream_reader; read_id wv_id; - /* read_id wvc_id; */ GstSegment segment; /* used for clipping, TIME format */ |