From: Nicolas Dufresne Date: Tue, 5 Sep 2017 19:57:51 +0000 (-0400) Subject: tee: Allocate one more buffer when multi-plexing X-Git-Tag: 1.16.2~676 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1cd0dd3503c141954ba0740cc5eca6676af9c028;p=platform%2Fupstream%2Fgstreamer.git tee: Allocate one more buffer when multi-plexing This extra buffer ensure that the downstream threads are not starved when multiplexing a stream. https://bugzilla.gnome.org/show_bug.cgi?id=730758 --- diff --git a/plugins/elements/gsttee.c b/plugins/elements/gsttee.c index ce5449a..bc38b6b 100644 --- a/plugins/elements/gsttee.c +++ b/plugins/elements/gsttee.c @@ -573,6 +573,7 @@ struct AllocQueryCtx guint size; guint min_buffers; gboolean first_query; + guint num_pads; }; /* This function will aggregate some of the allocation query information with @@ -715,6 +716,7 @@ gst_tee_query_allocation (const GValue * item, GValue * ret, gpointer user_data) } ctx->first_query = FALSE; + ctx->num_pads++; gst_query_unref (query); return TRUE; @@ -758,6 +760,7 @@ gst_tee_sink_query (GstPad * pad, GstObject * parent, GstQuery * query) gst_allocation_params_init (&ctx.params); ctx.size = 0; ctx.min_buffers = 0; + ctx.num_pads = 0; gst_tee_clear_query_allocation_meta (query); } @@ -789,6 +792,11 @@ gst_tee_sink_query (GstPad * pad, GstObject * parent, GstQuery * query) } #endif + /* Allocate one more buffers when multiplexing so we don't starve the + * downstream threads. */ + if (ctx.num_pads > 1) + ctx.min_buffers++; + gst_query_add_allocation_param (ctx.query, NULL, &ctx.params); gst_query_add_allocation_pool (ctx.query, NULL, ctx.size, ctx.min_buffers, 0); diff --git a/tests/check/elements/tee.c b/tests/check/elements/tee.c index 5f4c900..de63c1f 100644 --- a/tests/check/elements/tee.c +++ b/tests/check/elements/tee.c @@ -802,7 +802,8 @@ GST_START_TEST (test_allocation_query) fail_unless (gst_query_get_n_allocation_pools (query), 1); gst_query_parse_nth_allocation_pool (query, 0, NULL, &size, &min, &max); fail_unless (size == 130); - fail_unless (min == 2); + /* The tee will allocate one more buffer when multiplexing */ + fail_unless (min == 2 + 1); fail_unless (max == 0); fail_unless (gst_query_get_n_allocation_params (query), 1);