summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2013-07-10 15:52:10 +0200
committerSebastian Dröge <slomo@circular-chaos.org>2013-07-10 15:57:34 +0200
commitba4ec10aa5068bda478f1d96fa7265327588ae26 (patch)
tree893cba9e84066f8d3e686a1893daf2559c7d1302
parentc8cfaff1ff03c2c1f6670280cc311fdf118a2a20 (diff)
bin: Always forward clock-lost message if we're not a top-level bin
This makes sure that no bin misses the clock-lost messages, independent of the state, and could return an old, non-working clock from gst_bin_provide_clock_func(). https://bugzilla.gnome.org/show_bug.cgi?id=701997
-rw-r--r--gst/gstbin.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/gst/gstbin.c b/gst/gstbin.c
index f70194f473..cc4de10976 100644
--- a/gst/gstbin.c
+++ b/gst/gstbin.c
@@ -3440,7 +3440,7 @@ gst_bin_handle_message_func (GstBin * bin, GstMessage * message)
{
GstClock **provided_clock_p;
GstElement **clock_provider_p;
- gboolean playing, provided, forward;
+ gboolean playing, toplevel, provided, forward;
GstClock *clock;
gst_message_parse_clock_lost (message, &clock);
@@ -3448,10 +3448,14 @@ gst_bin_handle_message_func (GstBin * bin, GstMessage * message)
GST_OBJECT_LOCK (bin);
bin->clock_dirty = TRUE;
/* if we lost the clock that we provided, post to parent but
- * only if we are PLAYING. */
+ * only if we are not a top-level bin or PLAYING.
+ * The reason for this is that applications should be able
+ * to PAUSE/PLAY if they receive this message without worrying
+ * about the state of the pipeline. */
provided = (clock == bin->provided_clock);
playing = (GST_STATE (bin) == GST_STATE_PLAYING);
- forward = playing & provided;
+ toplevel = GST_OBJECT_PARENT (bin) == NULL;
+ forward = provided && (playing || !toplevel);
if (provided) {
GST_DEBUG_OBJECT (bin,
"Lost clock %" GST_PTR_FORMAT " provided by %" GST_PTR_FORMAT,