From: <tp...@ke...> - 2006-12-15 23:55:57
|
CVS Root: /cvs/gstreamer Module: gst-plugins-ugly Changes by: tpm Date: Fri Dec 15 2006 18:25:29 UTC Log message: * gst/realmedia/rmdemux.c: (gst_rmdemux_src_query), (gst_rmdemux_src_query_types): Implement SEEKING query, make query function thread-safe. Modified files: . : ChangeLog gst/realmedia : rmdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-ugly/ChangeLog.diff?r1=1.2140&r2=1.2141 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-ugly/gst/realmedia/rmdemux.c.diff?r1=1.82&r2=1.83 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-ugly/ChangeLog,v retrieving revision 1.2140 retrieving revision 1.2141 diff -u -d -r1.2140 -r1.2141 --- ChangeLog 15 Dec 2006 17:59:47 -0000 1.2140 +++ ChangeLog 15 Dec 2006 18:25:17 -0000 1.2141 @@ -1,5 +1,11 @@ 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> * gst/realmedia/rmdemux.c: (gst_rmdemux_descramble_dnet_audio): Use alignment-safe macros here too (subbuffers ...); guard against hypothetical memory access beyond our given buffer in the case Index: rmdemux.c RCS file: /cvs/gstreamer/gst-plugins-ugly/gst/realmedia/rmdemux.c,v retrieving revision 1.82 retrieving revision 1.83 diff -u -d -r1.82 -r1.83 --- rmdemux.c 15 Dec 2006 17:59:47 -0000 1.82 +++ rmdemux.c 15 Dec 2006 18:25:17 -0000 1.83 @@ -608,29 +608,52 @@ static gboolean gst_rmdemux_src_query (GstPad * pad, GstQuery * query) { - gboolean res = TRUE; + gboolean res = FALSE; GstRMDemux *rmdemux; - rmdemux = GST_RMDEMUX (GST_PAD_PARENT (pad)); + rmdemux = GST_RMDEMUX (gst_pad_get_parent (pad)); switch (GST_QUERY_TYPE (query)) { 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!"); - res = FALSE; break; - case GST_QUERY_DURATION: - GST_DEBUG_OBJECT (rmdemux, "src_query duration"); - gst_query_set_duration (query, GST_FORMAT_TIME, rmdemux->duration); - GST_DEBUG_OBJECT (rmdemux, "duration set to %" G_GINT64_FORMAT, - rmdemux->duration); + case GST_QUERY_DURATION:{ + GstFormat fmt; + gst_query_parse_duration (query, &fmt, NULL); + 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; + } + case GST_QUERY_SEEKING:{ + gst_query_parse_seeking (query, &fmt, NULL, NULL, NULL); + gst_query_set_seeking (query, GST_FORMAT_TIME, rmdemux->seekable, + 0, rmdemux->duration); default: res = gst_pad_query_default (pad, query); } + gst_object_unref (rmdemux); return res; } @@ -640,6 +663,7 @@ static const GstQueryType query_types[] = { GST_QUERY_POSITION, GST_QUERY_DURATION, + GST_QUERY_SEEKING, 0 }; |