diff options
author | Mathieu Duponchelle <mathieu@centricular.com> | 2021-06-05 02:35:30 +0200 |
---|---|---|
committer | Mathieu Duponchelle <mathieu@centricular.com> | 2021-06-05 16:55:44 +0200 |
commit | d1fa1090833f02918f622274bfad3c1550c912f6 (patch) | |
tree | cd70ea8e5a4aa2392f0b885b027e7966a65eda98 | |
parent | ed6c970d9c87686407ce9500fad03af8c3a28ea4 (diff) | |
download | gstreamer-plugins-base-d1fa1090833f02918f622274bfad3c1550c912f6.tar.gz |
appsrc: signal enough-data even when leaking
this is convenient for application that wish to monitor whether
the appsrc is leaking.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1193>
-rw-r--r-- | gst-libs/gst/app/gstappsrc.c | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/gst-libs/gst/app/gstappsrc.c b/gst-libs/gst/app/gstappsrc.c index 4c9467602..4207192a2 100644 --- a/gst-libs/gst/app/gstappsrc.c +++ b/gst-libs/gst/app/gstappsrc.c @@ -2500,6 +2500,27 @@ gst_app_src_push_internal (GstAppSrc * appsrc, GstBuffer * buffer, priv->max_buffers, GST_TIME_ARGS (priv->queued_time), GST_TIME_ARGS (priv->max_time)); + if (first) { + Callbacks *callbacks = NULL; + gboolean emit; + + emit = priv->emit_signals; + if (priv->callbacks) + callbacks = callbacks_ref (priv->callbacks); + /* only signal on the first push */ + g_mutex_unlock (&priv->mutex); + + if (callbacks && callbacks->callbacks.enough_data) + callbacks->callbacks.enough_data (appsrc, callbacks->user_data); + else if (emit) + g_signal_emit (appsrc, gst_app_src_signals[SIGNAL_ENOUGH_DATA], 0, + NULL); + + g_clear_pointer (&callbacks, callbacks_unref); + + g_mutex_lock (&priv->mutex); + } + if (priv->leaky_type == GST_APP_LEAKY_TYPE_UPSTREAM) { priv->need_discont_upstream = TRUE; goto dropped; @@ -2538,24 +2559,6 @@ gst_app_src_push_internal (GstAppSrc * appsrc, GstBuffer * buffer, } if (first) { - Callbacks *callbacks = NULL; - gboolean emit; - - emit = priv->emit_signals; - if (priv->callbacks) - callbacks = callbacks_ref (priv->callbacks); - /* only signal on the first push */ - g_mutex_unlock (&priv->mutex); - - if (callbacks && callbacks->callbacks.enough_data) - callbacks->callbacks.enough_data (appsrc, callbacks->user_data); - else if (emit) - g_signal_emit (appsrc, gst_app_src_signals[SIGNAL_ENOUGH_DATA], 0, - NULL); - - g_clear_pointer (&callbacks, callbacks_unref); - - g_mutex_lock (&priv->mutex); /* continue to check for flushing/eos after releasing the lock */ first = FALSE; continue; |