aggregator: Improve debug output to better understand why pads are not ready or can...
authorSebastian Dröge <sebastian@centricular.com>
Wed, 17 Aug 2022 13:27:36 +0000 (16:27 +0300)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 17 Aug 2022 19:06:35 +0000 (19:06 +0000)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2907>

subprojects/gstreamer/libs/gst/base/gstaggregator.c

index b656351..31d5c2d 100644 (file)
@@ -495,12 +495,14 @@ gst_aggregator_check_pads_ready (GstAggregator * self,
             || GST_IS_QUERY (g_queue_peek_tail (&pad->priv->data)))) {
       PAD_UNLOCK (pad);
       have_event_or_query = TRUE;
+      GST_LOG_OBJECT (pad, "Have pending serialized query/event");
       break;
     }
 
     if (self->priv->ignore_inactive_pads && self->priv->peer_latency_live &&
         pad->priv->waited_once && pad->priv->first_buffer && !pad->priv->eos) {
       PAD_UNLOCK (pad);
+      GST_LOG_OBJECT (pad, "Ignoring inactive pad");
       continue;
     }
 
@@ -514,17 +516,24 @@ gst_aggregator_check_pads_ready (GstAggregator * self,
 
       /* Only consider this pad as worth waiting for if it's not already EOS.
        * There's no point in waiting for buffers on EOS pads */
-      if (!pad->priv->eos)
+      if (!pad->priv->eos) {
+        GST_LOG_OBJECT (pad, "Have no buffer and not EOS yet");
         have_buffer = FALSE;
-      else
+      } else {
+        GST_LOG_OBJECT (pad, "Have no buffer and already EOS");
         n_ready++;
-    } else if (self->priv->peer_latency_live) {
-      /* In live mode, having a single pad with buffers is enough to
-       * generate a start time from it. In non-live mode all pads need
-       * to have a buffer
-       */
-      self->priv->first_buffer = FALSE;
-      n_ready++;
+      }
+    } else {
+      GST_TRACE_OBJECT (pad, "Have %" GST_TIME_FORMAT " queued in %u buffers",
+          GST_TIME_ARGS (pad->priv->time_level), pad->priv->num_buffers);
+      if (self->priv->peer_latency_live) {
+        /* In live mode, having a single pad with buffers is enough to
+         * generate a start time from it. In non-live mode all pads need
+         * to have a buffer
+         */
+        self->priv->first_buffer = FALSE;
+        n_ready++;
+      }
     }
 
     PAD_UNLOCK (pad);
@@ -563,7 +572,7 @@ no_sinkpads:
   }
 pad_not_ready:
   {
-    GST_LOG_OBJECT (pad, "pad not ready to be aggregated yet");
+    GST_LOG_OBJECT (self, "pad not ready to be aggregated yet");
     GST_OBJECT_UNLOCK (self);
 
     if (have_event_or_query_ret)
@@ -573,7 +582,7 @@ pad_not_ready:
   }
 pad_not_ready_but_event_or_query:
   {
-    GST_LOG_OBJECT (pad,
+    GST_LOG_OBJECT (self,
         "pad not ready to be aggregated yet, need to handle serialized event or query first");
     GST_OBJECT_UNLOCK (self);
 
@@ -2986,6 +2995,9 @@ gst_aggregator_pad_has_space (GstAggregator * self, GstAggregatorPad * aggpad)
 {
   guint64 max_time_level;
 
+  GST_TRACE_OBJECT (aggpad, "Have %" GST_TIME_FORMAT " queued in %u buffers",
+      GST_TIME_ARGS (aggpad->priv->time_level), aggpad->priv->num_buffers);
+
   /* Empty queue always has space */
   if (aggpad->priv->num_buffers == 0 && aggpad->priv->clipped_buffer == NULL)
     return TRUE;
@@ -3004,6 +3016,9 @@ gst_aggregator_pad_has_space (GstAggregator * self, GstAggregatorPad * aggpad)
    * upstream latency. */
   max_time_level = self->priv->latency + self->priv->upstream_latency_min;
 
+  GST_TRACE_OBJECT (aggpad, "Maximum queue level %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (max_time_level));
+
   /* Allow no more buffers than the latency */
   return (aggpad->priv->time_level <= max_time_level);
 }