From: Sebastian Dröge Date: Thu, 2 Jun 2011 11:38:30 +0000 (+0200) Subject: dvdemux: First query the peer duration in the requested format before converting... X-Git-Tag: RELEASE-0.11.1~7^2~438 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=252c1afcc2df8c8daafd98c45974c55f931d0a9f;p=platform%2Fupstream%2Fgst-plugins-good.git dvdemux: First query the peer duration in the requested format before converting to BYTES Fixes usage of dvdemux after another demuxer, e.g. mxfdemux. Fixes bug #650503. --- diff --git a/ext/dv/gstdvdemux.c b/ext/dv/gstdvdemux.c index 90a2651..1eef31e 100644 --- a/ext/dv/gstdvdemux.c +++ b/ext/dv/gstdvdemux.c @@ -574,26 +574,23 @@ gst_dvdemux_src_query (GstPad * pad, GstQuery * query) GstFormat format; GstFormat format2; gint64 end; - GstPad *peer; - /* get target format */ - gst_query_parse_duration (query, &format, NULL); + /* First ask the peer in the original format */ + if (!gst_pad_peer_query (dvdemux->sinkpad, query)) { + /* get target format */ + gst_query_parse_duration (query, &format, NULL); - /* change query to bytes to perform on peer */ - gst_query_set_duration (query, GST_FORMAT_BYTES, -1); + /* change query to bytes to perform on peer */ + gst_query_set_duration (query, GST_FORMAT_BYTES, -1); - if ((peer = gst_pad_get_peer (dvdemux->sinkpad))) { - /* ask peer for total length */ - if (!(res = gst_pad_query (peer, query))) { - gst_object_unref (peer); + /* Now ask the peer in BYTES format and try to convert */ + if (!gst_pad_peer_query (dvdemux->sinkpad, query)) { goto error; } /* get peer total length */ gst_query_parse_duration (query, NULL, &end); - gst_object_unref (peer); - /* convert end to requested format */ if (end != -1) { format2 = format; @@ -601,11 +598,9 @@ gst_dvdemux_src_query (GstPad * pad, GstQuery * query) GST_FORMAT_BYTES, end, &format2, &end))) { goto error; } + gst_query_set_duration (query, format, end); } - } else { - end = -1; } - gst_query_set_duration (query, format, end); break; } case GST_QUERY_CONVERT: