mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
glimagesinkbin: Add allocation query for GstVideoOverlayComposition
Adds an GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE query to glupload and glimagesink. Detects the query from the downstream elements, so it is executed only when downstream supports the overlay API. This makes pipelines with textoverlay ! glupload ! gldownload ! xvimagesink possible. Uses allocation meta struct for passing the window size upstream. https://bugzilla.gnome.org/show_bug.cgi?id=745107
This commit is contained in:
parent
555428872c
commit
2fb862b34f
2 changed files with 32 additions and 0 deletions
|
@ -1519,6 +1519,7 @@ gst_glimage_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
guint size;
|
guint size;
|
||||||
gboolean need_pool;
|
gboolean need_pool;
|
||||||
|
GstStructure *allocation_meta = NULL;
|
||||||
|
|
||||||
if (!_ensure_gl_setup (glimage_sink))
|
if (!_ensure_gl_setup (glimage_sink))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -1557,6 +1558,18 @@ gst_glimage_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
|
||||||
if (glimage_sink->context->gl_vtable->FenceSync)
|
if (glimage_sink->context->gl_vtable->FenceSync)
|
||||||
gst_query_add_allocation_meta (query, GST_GL_SYNC_META_API_TYPE, 0);
|
gst_query_add_allocation_meta (query, GST_GL_SYNC_META_API_TYPE, 0);
|
||||||
|
|
||||||
|
if (glimage_sink->window_width != 0 && glimage_sink->window_height != 0) {
|
||||||
|
allocation_meta =
|
||||||
|
gst_structure_new ("GstVideoOverlayCompositionMeta",
|
||||||
|
"width", G_TYPE_UINT, glimage_sink->window_width,
|
||||||
|
"height", G_TYPE_UINT, glimage_sink->window_height, NULL);
|
||||||
|
GST_DEBUG ("sending alloc query with size %dx%d",
|
||||||
|
glimage_sink->window_width, glimage_sink->window_height);
|
||||||
|
}
|
||||||
|
|
||||||
|
gst_query_add_allocation_meta (query,
|
||||||
|
GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE, allocation_meta);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* ERRORS */
|
/* ERRORS */
|
||||||
|
|
|
@ -143,11 +143,30 @@ static gboolean
|
||||||
_gst_gl_upload_element_propose_allocation (GstBaseTransform * bt,
|
_gst_gl_upload_element_propose_allocation (GstBaseTransform * bt,
|
||||||
GstQuery * decide_query, GstQuery * query)
|
GstQuery * decide_query, GstQuery * query)
|
||||||
{
|
{
|
||||||
|
guint alloc_index;
|
||||||
|
gboolean alloc_has_overlay_meta;
|
||||||
GstGLUploadElement *upload = GST_GL_UPLOAD_ELEMENT (bt);
|
GstGLUploadElement *upload = GST_GL_UPLOAD_ELEMENT (bt);
|
||||||
|
|
||||||
if (!upload->upload)
|
if (!upload->upload)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
alloc_has_overlay_meta =
|
||||||
|
gst_query_find_allocation_meta (decide_query,
|
||||||
|
GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE, &alloc_index);
|
||||||
|
|
||||||
|
if (alloc_has_overlay_meta) {
|
||||||
|
const GstStructure *params;
|
||||||
|
GST_DEBUG ("adding allocation meta in upload for textoverlay");
|
||||||
|
|
||||||
|
/* read window size from decide_query */
|
||||||
|
gst_query_parse_nth_allocation_meta (decide_query, alloc_index, ¶ms);
|
||||||
|
|
||||||
|
if (params)
|
||||||
|
gst_query_add_allocation_meta (query,
|
||||||
|
GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE, params);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
gst_gl_upload_propose_allocation (upload->upload, decide_query, query);
|
gst_gl_upload_propose_allocation (upload->upload, decide_query, query);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
Loading…
Reference in a new issue