summaryrefslogtreecommitdiffstats
path: root/ext/speex/gstspeexdec.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/speex/gstspeexdec.c')
-rw-r--r--ext/speex/gstspeexdec.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/ext/speex/gstspeexdec.c b/ext/speex/gstspeexdec.c
index 5f68a32b..5bf95818 100644
--- a/ext/speex/gstspeexdec.c
+++ b/ext/speex/gstspeexdec.c
@@ -118,6 +118,7 @@ speex_get_query_types (GstPad * pad)
{
static const GstQueryType speex_dec_src_query_types[] = {
GST_QUERY_POSITION,
+ GST_QUERY_DURATION,
0
};
@@ -212,6 +213,7 @@ static gboolean
speex_dec_src_query (GstPad * pad, GstQuery * query)
{
GstSpeexDec *dec = GST_SPEEXDEC (GST_OBJECT_PARENT (pad));
+ gboolean res = FALSE;
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_POSITION:
@@ -221,10 +223,10 @@ speex_dec_src_query (GstPad * pad, GstQuery * query)
gst_query_parse_position (query, &format, NULL);
- speex_dec_convert (dec->srcpad, GST_FORMAT_DEFAULT, dec->samples_out,
- &format, &cur);
-
- gst_query_set_position (query, format, cur);
+ if ((res = speex_dec_convert (dec->srcpad, GST_FORMAT_DEFAULT,
+ dec->samples_out, &format, &cur))) {
+ gst_query_set_position (query, format, cur);
+ }
break;
}
case GST_QUERY_DURATION:
@@ -234,19 +236,19 @@ speex_dec_src_query (GstPad * pad, GstQuery * query)
gint64 total_samples;
if (!(peer = gst_pad_get_peer (dec->sinkpad)))
- return FALSE;
+ break;
gst_pad_query_duration (peer, &my_format, &total_samples);
gst_object_unref (peer);
- speex_dec_convert (dec->srcpad, GST_FORMAT_DEFAULT, total_samples,
- &my_format, &total_samples);
-
- gst_query_set_duration (query, GST_FORMAT_TIME, total_samples);
+ if ((res = speex_dec_convert (dec->srcpad, GST_FORMAT_DEFAULT,
+ total_samples, &my_format, &total_samples))) {
+ gst_query_set_duration (query, GST_FORMAT_TIME, total_samples);
+ }
break;
}
default:
- return FALSE;
+ res = gst_pad_query_default (pad, query);
break;
}