gst/realmedia/rmdemux.c: Implement SEEKING query, make query function thread-safe.
Original commit message from CVS: * gst/realmedia/rmdemux.c: (gst_rmdemux_src_query), (gst_rmdemux_src_query_types): Implement SEEKING query, make query function thread-safe.
This commit is contained in:
parent
334fdce1d0
commit
3ec4017080
@ -1,3 +1,9 @@
|
|||||||
|
2006-12-15 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
|
* gst/realmedia/rmdemux.c: (gst_rmdemux_src_query),
|
||||||
|
(gst_rmdemux_src_query_types):
|
||||||
|
Implement SEEKING query, make query function thread-safe.
|
||||||
|
|
||||||
2006-12-15 Tim-Philipp Müller <tim at centricular dot net>
|
2006-12-15 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
* gst/realmedia/rmdemux.c: (gst_rmdemux_descramble_dnet_audio):
|
* gst/realmedia/rmdemux.c: (gst_rmdemux_descramble_dnet_audio):
|
||||||
|
@ -608,29 +608,52 @@ error:
|
|||||||
static gboolean
|
static gboolean
|
||||||
gst_rmdemux_src_query (GstPad * pad, GstQuery * query)
|
gst_rmdemux_src_query (GstPad * pad, GstQuery * query)
|
||||||
{
|
{
|
||||||
gboolean res = TRUE;
|
gboolean res = FALSE;
|
||||||
GstRMDemux *rmdemux;
|
GstRMDemux *rmdemux;
|
||||||
|
|
||||||
rmdemux = GST_RMDEMUX (GST_PAD_PARENT (pad));
|
rmdemux = GST_RMDEMUX (gst_pad_get_parent (pad));
|
||||||
|
|
||||||
switch (GST_QUERY_TYPE (query)) {
|
switch (GST_QUERY_TYPE (query)) {
|
||||||
case GST_QUERY_POSITION:
|
case GST_QUERY_POSITION:
|
||||||
GST_DEBUG_OBJECT (rmdemux, "src_query position");
|
|
||||||
gst_query_set_position (query, GST_FORMAT_TIME, -1);
|
|
||||||
GST_DEBUG_OBJECT (rmdemux, "Position query: no idea from demuxer!");
|
GST_DEBUG_OBJECT (rmdemux, "Position query: no idea from demuxer!");
|
||||||
res = FALSE;
|
|
||||||
break;
|
break;
|
||||||
case GST_QUERY_DURATION:
|
case GST_QUERY_DURATION:{
|
||||||
GST_DEBUG_OBJECT (rmdemux, "src_query duration");
|
GstFormat fmt;
|
||||||
gst_query_set_duration (query, GST_FORMAT_TIME, rmdemux->duration);
|
|
||||||
GST_DEBUG_OBJECT (rmdemux, "duration set to %" G_GINT64_FORMAT,
|
gst_query_parse_duration (query, &fmt, NULL);
|
||||||
rmdemux->duration);
|
if (fmt == GST_FORMAT_TIME) {
|
||||||
|
GST_OBJECT_LOCK (rmdemux);
|
||||||
|
if (G_LIKELY (rmdemux->running)) {
|
||||||
|
gst_query_set_duration (query, GST_FORMAT_TIME, rmdemux->duration);
|
||||||
|
GST_DEBUG_OBJECT (rmdemux, "duration set to %" GST_TIME_FORMAT,
|
||||||
|
GST_TIME_ARGS (rmdemux->duration));
|
||||||
|
res = TRUE;
|
||||||
|
}
|
||||||
|
GST_OBJECT_UNLOCK (rmdemux);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
case GST_QUERY_SEEKING:{
|
||||||
|
GstFormat fmt;
|
||||||
|
|
||||||
|
gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL);
|
||||||
|
if (fmt == GST_FORMAT_TIME) {
|
||||||
|
GST_OBJECT_LOCK (rmdemux);
|
||||||
|
if (G_LIKELY (rmdemux->running)) {
|
||||||
|
gst_query_set_seeking (query, GST_FORMAT_TIME, rmdemux->seekable,
|
||||||
|
0, rmdemux->duration);
|
||||||
|
res = TRUE;
|
||||||
|
}
|
||||||
|
GST_OBJECT_UNLOCK (rmdemux);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
res = gst_pad_query_default (pad, query);
|
res = gst_pad_query_default (pad, query);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gst_object_unref (rmdemux);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -640,6 +663,7 @@ gst_rmdemux_src_query_types (GstPad * pad)
|
|||||||
static const GstQueryType query_types[] = {
|
static const GstQueryType query_types[] = {
|
||||||
GST_QUERY_POSITION,
|
GST_QUERY_POSITION,
|
||||||
GST_QUERY_DURATION,
|
GST_QUERY_DURATION,
|
||||||
|
GST_QUERY_SEEKING,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user