[prev in list] [next in list] [prev in thread] [next in thread]
List: gstreamer-cvs
Subject: gstreamer: baseparse: answer position query in stream time and try
From: tpm () kemper ! freedesktop ! org (Tim Müller)
Date: 2011-09-30 14:28:48
Message-ID: 20110930142848.E281410009 () kemper ! freedesktop ! org
[Download RAW message or body]
Module: gstreamer
Branch: master
Commit: f94701261aeba3a9eaa9abee5ff644bcc627fa15
URL: http://cgit.freedesktop.org/gstreamer/gstreamer/commit/?id=f94701261aeba3a9eaa9abee5ff644bcc627fa15
Author: Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Date: Mon Sep 26 13:14:42 2011 +0100
baseparse: answer position query in stream time and try upstream first
Let the demuxer have first say as well.
https://bugzilla.gnome.org/show_bug.cgi?id=659485
---
libs/gst/base/gstbaseparse.c | 34 ++++++++++++++++++----------------
1 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c
index 67e380a..f95c3aa 100644
--- a/libs/gst/base/gstbaseparse.c
+++ b/libs/gst/base/gstbaseparse.c
@@ -3148,22 +3148,24 @@ gst_base_parse_query (GstPad * pad, GstQuery * query)
GST_DEBUG_OBJECT (parse, "position query");
gst_query_parse_position (query, &format, NULL);
- GST_OBJECT_LOCK (parse);
- if (format == GST_FORMAT_BYTES) {
- dest_value = parse->priv->offset;
- res = TRUE;
- } else if (format == parse->segment.format &&
- GST_CLOCK_TIME_IS_VALID (parse->segment.last_stop)) {
- dest_value = parse->segment.last_stop;
- res = TRUE;
- }
- GST_OBJECT_UNLOCK (parse);
-
- if (res)
- gst_query_set_position (query, format, dest_value);
- else {
- res = gst_pad_query_default (pad, query);
- if (!res) {
+ /* try upstream first */
+ res = gst_pad_query_default (pad, query);
+ if (!res) {
+ /* Fall back on interpreting segment */
+ GST_OBJECT_LOCK (parse);
+ if (format == GST_FORMAT_BYTES) {
+ dest_value = parse->priv->offset;
+ res = TRUE;
+ } else if (format == parse->segment.format &&
+ GST_CLOCK_TIME_IS_VALID (parse->segment.last_stop)) {
+ dest_value = gst_segment_to_stream_time (&parse->segment,
+ parse->segment.format, parse->segment.last_stop);
+ res = TRUE;
+ }
+ GST_OBJECT_UNLOCK (parse);
+ if (res)
+ gst_query_set_position (query, format, dest_value);
+ else {
/* no precise result, upstream no idea either, then best estimate */
/* priv->offset is updated in both PUSH/PULL modes */
res = gst_base_parse_convert (parse,
_______________________________________________
gstreamer-commits mailing list
gstreamer-commits@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/gstreamer-commits
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic