diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c index 4b4bab8041..a57fdc9dce 100644 --- a/libs/gst/base/gstbaseparse.c +++ b/libs/gst/base/gstbaseparse.c @@ -3696,13 +3696,6 @@ gst_base_parse_src_query_default (GstBaseParse * parse, GstQuery * query) else stop = gst_segment_to_stream_time (&parse->segment, format, stop); - if (parse->segment.rate < 0.0) { - gint64 tmp; - tmp = stop; - stop = start; - start = tmp; - } - gst_query_set_segment (query, parse->segment.rate, format, start, stop); res = TRUE; break; diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c index 647e41ee75..64c0b77e08 100644 --- a/libs/gst/base/gstbasesink.c +++ b/libs/gst/base/gstbasesink.c @@ -4714,8 +4714,21 @@ default_element_query (GstElement * element, GstQuery * query) case GST_QUERY_SEGMENT: { if (basesink->pad_mode == GST_PAD_MODE_PULL) { - gst_query_set_segment (query, basesink->segment.rate, - GST_FORMAT_TIME, basesink->segment.start, basesink->segment.stop); + GstFormat format; + gint64 start, stop; + + format = basesink->segment.format; + + start = + gst_segment_to_stream_time (&basesink->segment, format, + basesink->segment.start); + if ((stop = basesink->segment.stop) == -1) + stop = basesink->segment.duration; + else + stop = gst_segment_to_stream_time (&basesink->segment, format, stop); + + gst_query_set_segment (query, basesink->segment.rate, format, start, + stop); res = TRUE; } else { res = gst_pad_peer_query (basesink->sinkpad, query); diff --git a/libs/gst/base/gstbasesrc.c b/libs/gst/base/gstbasesrc.c index b90b942a30..4f05845c1c 100644 --- a/libs/gst/base/gstbasesrc.c +++ b/libs/gst/base/gstbasesrc.c @@ -1078,23 +1078,23 @@ gst_base_src_default_query (GstBaseSrc * src, GstQuery * query) } case GST_QUERY_SEGMENT: { + GstFormat format; gint64 start, stop; GST_OBJECT_LOCK (src); - /* no end segment configured, current duration then */ + + format = src->segment.format; + + start = + gst_segment_to_stream_time (&src->segment, format, + src->segment.start); if ((stop = src->segment.stop) == -1) stop = src->segment.duration; - start = src->segment.start; + else + stop = gst_segment_to_stream_time (&src->segment, format, stop); - /* adjust to stream time */ - if (src->segment.time != -1) { - start -= src->segment.time; - if (stop != -1) - stop -= src->segment.time; - } + gst_query_set_segment (query, src->segment.rate, format, start, stop); - gst_query_set_segment (query, src->segment.rate, src->segment.format, - start, stop); GST_OBJECT_UNLOCK (src); res = TRUE; break;