From f7d63a74e07e66b6871a6ae09b6de58ff625dbc6 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 19 Oct 2005 15:58:01 +0000 Subject: gst/: API change fix. Original commit message from CVS: * gst/qtdemux/qtdemux.c: (gst_qtdemux_get_src_query_types), (gst_qtdemux_handle_src_query): * gst/speed/gstspeed.c: (speed_get_query_types), (speed_src_query): * gst/tta/gstttaparse.c: (gst_tta_parse_src_event), (gst_tta_parse_get_query_types), (gst_tta_parse_query): API change fix. --- gst/qtdemux/qtdemux.c | 12 ++++++--- gst/speed/gstspeed.c | 71 +++++++++++++++++++++++++++++++++++++++------------ gst/tta/gstttaparse.c | 25 +++++++++++++++--- 3 files changed, 84 insertions(+), 24 deletions(-) (limited to 'gst') diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index fe29ba51..33f02533 100644 --- a/gst/qtdemux/qtdemux.c +++ b/gst/qtdemux/qtdemux.c @@ -312,6 +312,7 @@ gst_qtdemux_get_src_query_types (GstPad * pad) { static const GstQueryType src_types[] = { GST_QUERY_POSITION, + GST_QUERY_DURATION, 0 }; @@ -326,9 +327,14 @@ gst_qtdemux_handle_src_query (GstPad * pad, GstQuery * query) switch (GST_QUERY_TYPE (query)) { case GST_QUERY_POSITION: - if (qtdemux->duration != 0 && qtdemux->timescale != 0 && - GST_CLOCK_TIME_IS_VALID (qtdemux->last_ts)) { - gst_query_set_position (query, GST_FORMAT_TIME, qtdemux->last_ts, + if (GST_CLOCK_TIME_IS_VALID (qtdemux->last_ts)) { + gst_query_set_position (query, GST_FORMAT_TIME, qtdemux->last_ts); + res = TRUE; + } + break; + case GST_QUERY_DURATION: + if (qtdemux->duration != 0 && qtdemux->timescale != 0) { + gst_query_set_duration (query, GST_FORMAT_TIME, (guint64) qtdemux->duration * GST_SECOND / qtdemux->timescale); res = TRUE; } diff --git a/gst/speed/gstspeed.c b/gst/speed/gstspeed.c index 9e69180a..850ebc81 100644 --- a/gst/speed/gstspeed.c +++ b/gst/speed/gstspeed.c @@ -182,6 +182,7 @@ speed_get_query_types (GstPad * pad) { static const GstQueryType src_query_types[] = { GST_QUERY_POSITION, + GST_QUERY_DURATION, 0 }; @@ -334,64 +335,100 @@ speed_src_query (GstPad * pad, GstQuery * query) { GstFormat format; GstFormat rformat = GST_FORMAT_TIME; - gint64 cur, end; + gint64 cur; GstPad *peer; GstFormat conv_format = GST_FORMAT_TIME; /* save requested format */ - gst_query_parse_position (query, &format, NULL, NULL); - - /* query peer for total length in bytes */ - gst_query_set_position (query, GST_FORMAT_TIME, -1, -1); + gst_query_parse_position (query, &format, NULL); + /* query peer for current position in time */ + gst_query_set_position (query, GST_FORMAT_TIME, -1); if ((peer = gst_pad_get_peer (filter->sinkpad)) == NULL) goto error; - if (!gst_pad_query_position (peer, &rformat, &cur, &end)) { + if (!gst_pad_query_position (peer, &rformat, &cur)) { GST_LOG_OBJECT (filter, "query on peer pad failed"); gst_object_unref (peer); goto error; } gst_object_unref (peer); - if (rformat == GST_FORMAT_BYTES) - GST_LOG_OBJECT (filter, "peer pad returned total=%lld bytes", end); + GST_LOG_OBJECT (filter, "peer pad returned current=%lld bytes", cur); else if (rformat == GST_FORMAT_TIME) - GST_LOG_OBJECT (filter, "peer pad returned time=%lld", end); + GST_LOG_OBJECT (filter, "peer pad returned time=%lld", cur); /* convert to time format */ if (!gst_speed_convert (pad, rformat, cur, &conv_format, &cur)) { ret = FALSE; break; } + + /* adjust for speed factor */ + cur /= filter->speed; + /* convert to time format */ - if (!gst_speed_convert (pad, rformat, end, &conv_format, &end)) { + if (!gst_speed_convert (pad, conv_format, cur, &format, &cur)) { ret = FALSE; break; } + gst_query_set_position (query, format, cur); - /* adjust for speed factor */ - cur /= filter->speed; - end /= filter->speed; + GST_LOG_OBJECT (filter, + "position query: we return %llu (format %u)", cur, format); + + break; + } + case GST_QUERY_DURATION: + { + GstFormat format; + GstFormat rformat = GST_FORMAT_TIME; + gint64 end; + GstPad *peer; + GstFormat conv_format = GST_FORMAT_TIME; + + /* save requested format */ + gst_query_parse_duration (query, &format, NULL); + + /* query peer for total length in time */ + gst_query_set_duration (query, GST_FORMAT_TIME, -1); + + if ((peer = gst_pad_get_peer (filter->sinkpad)) == NULL) + goto error; + + if (!gst_pad_query_duration (peer, &rformat, &end)) { + GST_LOG_OBJECT (filter, "query on peer pad failed"); + gst_object_unref (peer); + goto error; + } + gst_object_unref (peer); + + if (rformat == GST_FORMAT_BYTES) + GST_LOG_OBJECT (filter, "peer pad returned total=%lld bytes", end); + else if (rformat == GST_FORMAT_TIME) + GST_LOG_OBJECT (filter, "peer pad returned time=%lld", end); /* convert to time format */ - if (!gst_speed_convert (pad, conv_format, cur, &format, &cur)) { + if (!gst_speed_convert (pad, rformat, end, &conv_format, &end)) { ret = FALSE; break; } + + /* adjust for speed factor */ + end /= filter->speed; + /* convert to time format */ if (!gst_speed_convert (pad, conv_format, end, &format, &end)) { ret = FALSE; break; } - gst_query_set_position (query, format, cur, end); + gst_query_set_duration (query, format, end); GST_LOG_OBJECT (filter, - "position query: peer returned total: %llu - we return %llu (format %u)", - end, cur, format); + "duration query: we return %llu (format %u)", end, format); break; } diff --git a/gst/tta/gstttaparse.c b/gst/tta/gstttaparse.c index f6845a68..223b6657 100644 --- a/gst/tta/gstttaparse.c +++ b/gst/tta/gstttaparse.c @@ -238,6 +238,7 @@ gst_tta_parse_get_query_types (GstPad * pad) { static const GstQueryType types[] = { GST_QUERY_POSITION, + GST_QUERY_DURATION, 0 }; @@ -253,23 +254,39 @@ gst_tta_parse_query (GstPad * pad, GstQuery * query) case GST_QUERY_POSITION: { GstFormat format; - gint64 cur, end; + gint64 cur; - gst_query_parse_position (query, &format, NULL, NULL); + gst_query_parse_position (query, &format, NULL); switch (format) { case GST_FORMAT_TIME: cur = ttaparse->index[ttaparse->current_frame].time; + break; + default: + format = GST_FORMAT_BYTES; + cur = ttaparse->index[ttaparse->current_frame].pos; + break; + } + gst_query_set_position (query, format, cur); + break; + } + case GST_QUERY_DURATION: + { + GstFormat format; + gint64 end; + + gst_query_parse_duration (query, &format, NULL); + switch (format) { + case GST_FORMAT_TIME: end = ((gdouble) ttaparse->data_length / (gdouble) ttaparse->samplerate) * GST_SECOND; break; default: format = GST_FORMAT_BYTES; - cur = ttaparse->index[ttaparse->current_frame].pos; end = ttaparse->index[ttaparse->num_frames].pos + ttaparse->index[ttaparse->num_frames].size; break; } - gst_query_set_position (query, format, cur, end); + gst_query_set_duration (query, format, end); break; } default: -- cgit v1.2.1