summaryrefslogtreecommitdiffstats
path: root/gst
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2005-10-19 15:58:01 +0000
committerWim Taymans <wim.taymans@gmail.com>2005-10-19 15:58:01 +0000
commitf7d63a74e07e66b6871a6ae09b6de58ff625dbc6 (patch)
tree5c3875f1f5ff6a369707d94cecf025b1a5c3e188 /gst
parent8d8b51648af85d0633cf76cc16c36f9682fcf99f (diff)
downloadgst-plugins-bad-f7d63a74e07e66b6871a6ae09b6de58ff625dbc6.tar.gz
gst-plugins-bad-f7d63a74e07e66b6871a6ae09b6de58ff625dbc6.tar.bz2
gst-plugins-bad-f7d63a74e07e66b6871a6ae09b6de58ff625dbc6.zip
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.
Diffstat (limited to 'gst')
-rw-r--r--gst/qtdemux/qtdemux.c12
-rw-r--r--gst/speed/gstspeed.c71
-rw-r--r--gst/tta/gstttaparse.c25
3 files changed, 84 insertions, 24 deletions
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: