aggregator: only post latency message if anything changed
authorTim-Philipp Müller <tim@centricular.com>
Thu, 12 Feb 2015 13:32:39 +0000 (13:32 +0000)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 2 Dec 2017 15:10:26 +0000 (15:10 +0000)
Perhaps we should check for element state as well and
only post it if in PLAYING state.

libs/gst/base/gstaggregator.c

index 0552c10..b69b7db 100644 (file)
@@ -2144,15 +2144,25 @@ void
 gst_aggregator_set_latency (GstAggregator * self,
     GstClockTime min_latency, GstClockTime max_latency)
 {
+  gboolean changed = FALSE;
+
   g_return_if_fail (GST_IS_AGGREGATOR (self));
   g_return_if_fail (GST_CLOCK_TIME_IS_VALID (min_latency));
   g_return_if_fail (max_latency >= min_latency);
 
   GST_OBJECT_LOCK (self);
-  self->priv->sub_latency_min = min_latency;
-  self->priv->sub_latency_max = max_latency;
+  if (self->priv->sub_latency_min != min_latency) {
+    self->priv->sub_latency_min = min_latency;
+    changed = TRUE;
+  }
+  if (self->priv->sub_latency_max != max_latency) {
+    self->priv->sub_latency_max = max_latency;
+    changed = TRUE;
+  }
   GST_OBJECT_UNLOCK (self);
 
-  gst_element_post_message (GST_ELEMENT_CAST (self),
-      gst_message_new_latency (GST_OBJECT_CAST (self)));
+  if (changed) {
+    gst_element_post_message (GST_ELEMENT_CAST (self),
+        gst_message_new_latency (GST_OBJECT_CAST (self)));
+  }
 }