From 1e68f40b74920d489e699b5e2e45a3391530528f Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 31 Oct 2006 09:44:39 +0000 Subject: [PATCH] ext/speex/gstspeexdec.c: Some small cleanups, use _scale. Original commit message from CVS: * ext/speex/gstspeexdec.c: (speex_dec_convert), (speex_dec_sink_event), (speex_dec_chain_parse_header): Some small cleanups, use _scale. --- ChangeLog | 6 ++++ ext/speex/gstspeexdec.c | 80 +++++++++++++++++++++++++---------------- 2 files changed, 56 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index b04d4d6b72..4122275cd2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-10-31 Wim Taymans + + * ext/speex/gstspeexdec.c: (speex_dec_convert), + (speex_dec_sink_event), (speex_dec_chain_parse_header): + Some small cleanups, use _scale. + 2006-10-31 Wim Taymans * gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query): diff --git a/ext/speex/gstspeexdec.c b/ext/speex/gstspeexdec.c index 35b61457c8..b68ec10025 100644 --- a/ext/speex/gstspeexdec.c +++ b/ext/speex/gstspeexdec.c @@ -221,7 +221,9 @@ speex_dec_convert (GstPad * pad, case GST_FORMAT_BYTES: scale = sizeof (float) * dec->header->nb_channels; case GST_FORMAT_DEFAULT: - *dest_value = scale * (src_value * dec->header->rate / GST_SECOND); + *dest_value = + gst_util_uint64_scale_int (scale * src_value, dec->header->rate, + GST_SECOND); break; default: res = FALSE; @@ -234,7 +236,9 @@ speex_dec_convert (GstPad * pad, *dest_value = src_value * sizeof (float) * dec->header->nb_channels; break; case GST_FORMAT_TIME: - *dest_value = src_value * GST_SECOND / dec->header->rate; + *dest_value = + gst_util_uint64_scale_int (src_value, GST_SECOND, + dec->header->rate); break; default: res = FALSE; @@ -247,8 +251,8 @@ speex_dec_convert (GstPad * pad, *dest_value = src_value / (sizeof (float) * dec->header->nb_channels); break; case GST_FORMAT_TIME: - *dest_value = src_value * GST_SECOND / - (dec->header->rate * sizeof (float) * dec->header->nb_channels); + *dest_value = gst_util_uint64_scale_int (src_value, GST_SECOND, + dec->header->rate * sizeof (float) * dec->header->nb_channels); break; default: res = FALSE; @@ -440,12 +444,12 @@ speex_dec_sink_event (GstPad * pad, GstEvent * event) switch (GST_EVENT_TYPE (event)) { case GST_EVENT_NEWSEGMENT:{ GstFormat format; - gdouble rate; + gdouble rate, arate; gint64 start, stop, time; gboolean update; - gst_event_parse_new_segment (event, &update, &rate, &format, &start, - &stop, &time); + gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format, + &start, &stop, &time); if (format != GST_FORMAT_TIME) goto newseg_wrong_format; @@ -454,8 +458,8 @@ speex_dec_sink_event (GstPad * pad, GstEvent * event) goto newseg_wrong_rate; /* now configure the values */ - gst_segment_set_newsegment (&dec->segment, update, - rate, GST_FORMAT_TIME, start, stop, time); + gst_segment_set_newsegment_full (&dec->segment, update, + rate, arate, GST_FORMAT_TIME, start, stop, time); dec->granulepos = -1; @@ -500,29 +504,18 @@ speex_dec_chain_parse_header (GstSpeexDec * dec, GstBuffer * buf) dec->header = speex_packet_to_header ((char *) GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf)); - if (!dec->header) { - GST_ELEMENT_ERROR (GST_ELEMENT (dec), STREAM, DECODE, - (NULL), ("couldn't read header")); - return GST_FLOW_ERROR; - } + if (!dec->header) + goto no_header; - if (dec->header->mode >= SPEEX_NB_MODES) { - GST_ELEMENT_ERROR (GST_ELEMENT (dec), STREAM, DECODE, - (NULL), - ("Mode number %d does not (yet/any longer) exist in this version", - dec->header->mode)); - return GST_FLOW_ERROR; - } + if (dec->header->mode >= SPEEX_NB_MODES) + goto mode_too_old; dec->mode = (SpeexMode *) speex_mode_list[dec->header->mode]; /* initialize the decoder */ dec->state = speex_decoder_init (dec->mode); - if (!dec->state) { - GST_ELEMENT_ERROR (GST_ELEMENT (dec), STREAM, DECODE, - (NULL), ("couldn't initialize decoder")); - return GST_FLOW_ERROR; - } + if (!dec->state) + goto init_failed; speex_decoder_ctl (dec->state, SPEEX_SET_ENH, &dec->enh); speex_decoder_ctl (dec->state, SPEEX_GET_FRAME_SIZE, &dec->frame_size); @@ -549,13 +542,40 @@ speex_dec_chain_parse_header (GstSpeexDec * dec, GstBuffer * buf) "endianness", G_TYPE_INT, G_BYTE_ORDER, "width", G_TYPE_INT, 16, "depth", G_TYPE_INT, 16, NULL); - if (!gst_pad_set_caps (dec->srcpad, caps)) { - gst_caps_unref (caps); - return GST_FLOW_NOT_NEGOTIATED; - } + if (!gst_pad_set_caps (dec->srcpad, caps)) + goto nego_failed; gst_caps_unref (caps); return GST_FLOW_OK; + + /* ERRORS */ +no_header: + { + GST_ELEMENT_ERROR (GST_ELEMENT (dec), STREAM, DECODE, + (NULL), ("couldn't read header")); + return GST_FLOW_ERROR; + } +mode_too_old: + { + GST_ELEMENT_ERROR (GST_ELEMENT (dec), STREAM, DECODE, + (NULL), + ("Mode number %d does not (yet/any longer) exist in this version", + dec->header->mode)); + return GST_FLOW_ERROR; + } +init_failed: + { + GST_ELEMENT_ERROR (GST_ELEMENT (dec), STREAM, DECODE, + (NULL), ("couldn't initialize decoder")); + return GST_FLOW_ERROR; + } +nego_failed: + { + GST_ELEMENT_ERROR (GST_ELEMENT (dec), STREAM, DECODE, + (NULL), ("couldn't negotiate format")); + gst_caps_unref (caps); + return GST_FLOW_NOT_NEGOTIATED; + } } static GstFlowReturn