diff options
author | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2017-09-05 16:20:44 -0400 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.com> | 2017-12-09 19:32:30 +0000 |
commit | 707385690da825744989746c55aa762a0883fb2e (patch) | |
tree | 791329b2343b1d3a2eabc6529ad6481bb3abea95 /ext/gl | |
parent | a5aff145a20ceb8392dd236b8e605b940daedf9b (diff) | |
download | gstreamer-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.m | 20 | ||||
-rw-r--r-- | ext/gl/gstglimagesink.c | 22 | ||||
-rw-r--r-- | ext/gl/gstglmixer.c | 19 |
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) |