summaryrefslogtreecommitdiff
path: root/ext/gl
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.com>2017-09-05 16:20:44 -0400
committerTim-Philipp Müller <tim@centricular.com>2017-12-09 19:32:30 +0000
commit707385690da825744989746c55aa762a0883fb2e (patch)
tree791329b2343b1d3a2eabc6529ad6481bb3abea95 /ext/gl
parenta5aff145a20ceb8392dd236b8e605b940daedf9b (diff)
downloadgstreamer-plugins-base-707385690da825744989746c55aa762a0883fb2e.tar.gz
Request minimum buffer even if need_pool is FALSE
When tee is used, it will not request a pool, but still it wants to know how many buffers are required. https://bugzilla.gnome.org/show_bug.cgi?id=730758
Diffstat (limited to 'ext/gl')
-rw-r--r--ext/gl/caopengllayersink.m20
-rw-r--r--ext/gl/gstglimagesink.c22
-rw-r--r--ext/gl/gstglmixer.c19
3 files changed, 30 insertions, 31 deletions
diff --git a/ext/gl/caopengllayersink.m b/ext/gl/caopengllayersink.m
index fc96258b9..eccc8724e 100644
--- a/ext/gl/caopengllayersink.m
+++ b/ext/gl/caopengllayersink.m
@@ -730,6 +730,7 @@ gst_ca_opengl_layer_sink_propose_allocation (GstBaseSink * bsink, GstQuery * que
GstBufferPool *pool = NULL;
GstStructure *config;
GstCaps *caps;
+ GstVideoInfo info;
guint size;
gboolean need_pool;
@@ -741,15 +742,13 @@ gst_ca_opengl_layer_sink_propose_allocation (GstBaseSink * bsink, GstQuery * que
if (caps == NULL)
goto no_caps;
- if (need_pool) {
- GstVideoInfo info;
-
- if (!gst_video_info_from_caps (&info, caps))
- goto invalid_caps;
+ if (!gst_video_info_from_caps (&info, caps))
+ goto invalid_caps;
- /* the normal size of a frame */
- size = info.size;
+ /* the normal size of a frame */
+ size = info.size;
+ if (need_pool) {
GST_DEBUG_OBJECT (ca_sink, "create new pool");
pool = gst_gl_buffer_pool_new (ca_sink->context);
@@ -758,11 +757,12 @@ gst_ca_opengl_layer_sink_propose_allocation (GstBaseSink * bsink, GstQuery * que
if (!gst_buffer_pool_set_config (pool, config))
goto config_failed;
+ }
- /* we need at least 2 buffer because we hold on to the last one */
- gst_query_add_allocation_pool (query, pool, size, 2, 0);
+ /* we need at least 2 buffer because we hold on to the last one */
+ gst_query_add_allocation_pool (query, pool, size, 2, 0);
+ if (pool)
gst_object_unref (pool);
- }
if (ca_sink->context->gl_vtable->FenceSync)
gst_query_add_allocation_meta (query, GST_GL_SYNC_META_API_TYPE, 0);
diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c
index 71668f6e4..01fb181f9 100644
--- a/ext/gl/gstglimagesink.c
+++ b/ext/gl/gstglimagesink.c
@@ -1844,6 +1844,8 @@ gst_glimage_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
GstGLImageSink *glimage_sink = GST_GLIMAGE_SINK (bsink);
GstStructure *config;
GstCaps *caps;
+ GstBufferPool *pool = NULL;
+ GstVideoInfo info;
guint size;
gboolean need_pool;
GstStructure *allocation_meta = NULL;
@@ -1856,16 +1858,13 @@ gst_glimage_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
if (caps == NULL)
goto no_caps;
- if (need_pool) {
- GstBufferPool *pool;
- GstVideoInfo info;
-
- if (!gst_video_info_from_caps (&info, caps))
- goto invalid_caps;
+ if (!gst_video_info_from_caps (&info, caps))
+ goto invalid_caps;
- /* the normal size of a frame */
- size = info.size;
+ /* the normal size of a frame */
+ size = info.size;
+ if (need_pool) {
GST_DEBUG_OBJECT (glimage_sink, "create new pool");
pool = gst_gl_buffer_pool_new (glimage_sink->context);
@@ -1878,11 +1877,12 @@ gst_glimage_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
g_object_unref (pool);
goto config_failed;
}
+ }
- /* we need at least 2 buffer because we hold on to the last one */
- gst_query_add_allocation_pool (query, pool, size, 2, 0);
+ /* we need at least 2 buffer because we hold on to the last one */
+ gst_query_add_allocation_pool (query, pool, size, 2, 0);
+ if (pool)
g_object_unref (pool);
- }
if (glimage_sink->context->gl_vtable->FenceSync)
gst_query_add_allocation_meta (query, GST_GL_SYNC_META_API_TYPE, 0);
diff --git a/ext/gl/gstglmixer.c b/ext/gl/gstglmixer.c
index c0486616b..af9de452b 100644
--- a/ext/gl/gstglmixer.c
+++ b/ext/gl/gstglmixer.c
@@ -140,10 +140,10 @@ gst_gl_mixer_propose_allocation (GstAggregator * agg,
GstBufferPool *pool = NULL;
GstStructure *config;
GstCaps *caps;
+ GstVideoInfo info;
guint size = 0;
gboolean need_pool;
-
if (!GST_AGGREGATOR_CLASS (gst_gl_mixer_parent_class)->propose_allocation
(agg, agg_pad, decide_query, query))
return FALSE;
@@ -155,18 +155,16 @@ gst_gl_mixer_propose_allocation (GstAggregator * agg,
if (caps == NULL)
goto no_caps;
- if (need_pool) {
- GstVideoInfo info;
+ if (!gst_video_info_from_caps (&info, caps))
+ goto invalid_caps;
- if (!gst_video_info_from_caps (&info, caps))
- goto invalid_caps;
+ /* the normal size of a frame */
+ size = info.size;
+ if (need_pool) {
GST_DEBUG_OBJECT (mix, "create new pool");
pool = gst_gl_buffer_pool_new (context);
- /* the normal size of a frame */
- size = info.size;
-
config = gst_buffer_pool_get_config (pool);
gst_buffer_pool_config_set_params (config, caps, size, 0, 0);
@@ -174,10 +172,11 @@ gst_gl_mixer_propose_allocation (GstAggregator * agg,
g_object_unref (pool);
goto config_failed;
}
+ }
- gst_query_add_allocation_pool (query, pool, size, 1, 0);
+ gst_query_add_allocation_pool (query, pool, size, 1, 0);
+ if (pool)
g_object_unref (pool);
- }
/* we also support various metadata */
if (context->gl_vtable->FenceSync)