diff --git a/ext/flac/gstflacdec.c b/ext/flac/gstflacdec.c index 4d04702188..41455470ab 100644 --- a/ext/flac/gstflacdec.c +++ b/ext/flac/gstflacdec.c @@ -1574,6 +1574,7 @@ gst_flac_dec_get_src_query_types (GstPad * pad) GST_QUERY_POSITION, GST_QUERY_DURATION, GST_QUERY_CONVERT, + GST_QUERY_SEEKING, 0, }; @@ -1593,7 +1594,6 @@ gst_flac_dec_src_query (GstPad * pad, GstQuery * query) switch (GST_QUERY_TYPE (query)) { case GST_QUERY_POSITION:{ GstFormat fmt; - gint64 pos; gst_query_parse_position (query, &fmt, NULL); @@ -1625,7 +1625,6 @@ gst_flac_dec_src_query (GstPad * pad, GstQuery * query) case GST_QUERY_DURATION:{ GstFormat fmt; - gint64 len; gst_query_parse_duration (query, &fmt, NULL); @@ -1669,7 +1668,6 @@ gst_flac_dec_src_query (GstPad * pad, GstQuery * query) case GST_QUERY_CONVERT:{ GstFormat src_fmt, dest_fmt; - gint64 src_val, dest_val; gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, NULL); @@ -1683,6 +1681,27 @@ gst_flac_dec_src_query (GstPad * pad, GstQuery * query) break; } + case GST_QUERY_SEEKING:{ + GstFormat fmt; + gboolean seekable = FALSE; + + res = TRUE; + /* If upstream can handle the query we're done */ + seekable = gst_pad_peer_query (flacdec->sinkpad, query); + if (seekable) + gst_query_parse_seeking (query, NULL, &seekable, NULL, NULL); + if (seekable) + goto done; + + gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL); + if ((fmt != GST_FORMAT_TIME && fmt != GST_FORMAT_DEFAULT) || + !flacdec->seekable_decoder) { + gst_query_set_seeking (query, fmt, FALSE, -1, -1); + } else { + gst_query_set_seeking (query, GST_FORMAT_TIME, TRUE, 0, -1); + } + break; + } default:{ res = gst_pad_query_default (pad, query);