mpeg2dec: fix position query by trusting upstream
authorGuillaume Emont <gemont@igalia.com>
Wed, 13 Oct 2010 19:38:06 +0000 (21:38 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Tue, 19 Oct 2010 14:31:23 +0000 (16:31 +0200)
Position queries are badly handled for DVDs (probably due to the division in
chapters): the time returned was the time since the start of chapter.

Now ask upstream for position queries, fall back to the old code if upstream
cannot answer the query.

ext/mpeg2dec/gstmpeg2dec.c

index acd4846..f13778f 100644 (file)
@@ -1525,8 +1525,18 @@ gst_mpeg2dec_src_query (GstPad * pad, GstQuery * query)
     case GST_QUERY_POSITION:
     {
       GstFormat format;
+      GstPad *peer;
       gint64 cur;
 
+      /* First, we try to ask upstream, which might know better, especially in
+       * the case of DVDs, with multiple chapter */
+      if ((peer = gst_pad_get_peer (mpeg2dec->sinkpad)) != NULL) {
+        res = gst_pad_query (peer, query);
+        gst_object_unref (peer);
+        if (res)
+          break;
+      }
+
       /* save requested format */
       gst_query_parse_position (query, &format, NULL);