diff --git a/docs/libs/gst-plugins-bad-libs-sections.txt b/docs/libs/gst-plugins-bad-libs-sections.txt index 939004e00a..ccdf0dd44c 100644 --- a/docs/libs/gst-plugins-bad-libs-sections.txt +++ b/docs/libs/gst-plugins-bad-libs-sections.txt @@ -1303,6 +1303,7 @@ GstAggregatorClass gst_aggregator_finish_buffer gst_aggregator_set_src_caps gst_aggregator_iterate_sinkpads +gst_aggregator_get_latency GST_IS_AGGREGATOR GST_IS_AGGREGATOR_CLASS diff --git a/gst-libs/gst/base/gstaggregator.c b/gst-libs/gst/base/gstaggregator.c index 7d59037f05..cb4ba96721 100644 --- a/gst-libs/gst/base/gstaggregator.c +++ b/gst-libs/gst/base/gstaggregator.c @@ -947,6 +947,44 @@ _latency_query (GstAggregator * self, GstPad * pad, gpointer user_data) return TRUE; } +/** + * gst_aggregator_get_latency: + * @self: a #GstAggregator + * @live: (out) (allow-none): whether @self is live + * @min_latency: (out) (allow-none): the configured minimum latency of @self + * @max_latency: (out) (allow-none): the configured maximum latency of @self + * + * Retreives the latency values reported by @self in response to the latency + * query. + * + * Typically only called by subclasses. + */ +void +gst_aggregator_get_latency (GstAggregator * self, gboolean * live, + GstClockTime * min_latency, GstClockTime * max_latency) +{ + GstClockTime min, max; + + g_return_if_fail (GST_IS_AGGREGATOR (self)); + + min = self->priv->latency_min; + max = self->priv->latency_max; + + if (GST_CLOCK_TIME_IS_VALID (self->timeout)) { + if (GST_CLOCK_TIME_IS_VALID (min)) + min += self->timeout; + if (GST_CLOCK_TIME_IS_VALID (max)) + max += self->timeout; + } + + if (live) + *live = self->priv->latency_live; + if (min_latency) + *min_latency = min; + if (max_latency) + *max_latency = max; +} + static gboolean gst_aggregator_query_latency (GstAggregator * self, GstQuery * query) { diff --git a/gst-libs/gst/base/gstaggregator.h b/gst-libs/gst/base/gstaggregator.h index 837fdbb34f..8bf8fbd9af 100644 --- a/gst-libs/gst/base/gstaggregator.h +++ b/gst-libs/gst/base/gstaggregator.h @@ -261,6 +261,10 @@ gboolean gst_aggregator_iterate_sinkpads (GstAggregator GstAggregatorPadForeachFunc func, gpointer user_data); +void gst_aggregator_get_latency (GstAggregator * self, + gboolean * live, + GstClockTime * min, + GstClockTime * max); G_END_DECLS