glmemory: add gst_gl_memory_allocator_get_default

Add gst_gl_memory_allocator_get_default to get the default allocator based on
the opengl version. Allows us to stop hardcoding the PBO allocator which isn't
supported on gles2.

Fixes GL upload on iOS9 among other things.
This commit is contained in:
Alessandro Decina 2015-12-18 13:17:34 +11:00 committed by Tim-Philipp Müller
parent 09677a4d30
commit 28dbe4fffc
7 changed files with 41 additions and 14 deletions

View file

@ -698,8 +698,8 @@ gst_gl_overlay_load_jpeg (GstGLOverlay * overlay, FILE * fp)
gst_video_info_align (&v_info, &v_align); gst_video_info_align (&v_info, &v_align);
mem_allocator = mem_allocator =
GST_GL_BASE_MEMORY_ALLOCATOR (gst_allocator_find GST_GL_BASE_MEMORY_ALLOCATOR (gst_gl_memory_allocator_get_default
(GST_GL_MEMORY_PBO_ALLOCATOR_NAME)); (GST_GL_BASE_FILTER (overlay)->context));
params = params =
gst_gl_video_allocation_params_new (GST_GL_BASE_FILTER (overlay)->context, gst_gl_video_allocation_params_new (GST_GL_BASE_FILTER (overlay)->context,
NULL, &v_info, 0, &v_align, GST_GL_TEXTURE_TARGET_2D); NULL, &v_info, 0, &v_align, GST_GL_TEXTURE_TARGET_2D);
@ -813,8 +813,8 @@ gst_gl_overlay_load_png (GstGLOverlay * overlay, FILE * fp)
gst_video_info_set_format (&v_info, GST_VIDEO_FORMAT_RGBA, width, height); gst_video_info_set_format (&v_info, GST_VIDEO_FORMAT_RGBA, width, height);
mem_allocator = mem_allocator =
GST_GL_BASE_MEMORY_ALLOCATOR (gst_allocator_find GST_GL_BASE_MEMORY_ALLOCATOR (gst_gl_memory_allocator_get_default
(GST_GL_MEMORY_PBO_ALLOCATOR_NAME)); (GST_GL_BASE_FILTER (overlay)->context));
params = params =
gst_gl_video_allocation_params_new (GST_GL_BASE_FILTER (overlay)->context, gst_gl_video_allocation_params_new (GST_GL_BASE_FILTER (overlay)->context,
NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D); NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D);

View file

@ -122,7 +122,8 @@ gst_gl_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
if (allocator /* && GST_IS_GL_MEMORY_ALLOCATOR (allocator) FIXME EGLImage */ ) { if (allocator /* && GST_IS_GL_MEMORY_ALLOCATOR (allocator) FIXME EGLImage */ ) {
priv->allocator = gst_object_ref (allocator); priv->allocator = gst_object_ref (allocator);
} else { } else {
priv->allocator = gst_allocator_find (GST_GL_MEMORY_PBO_ALLOCATOR_NAME); priv->allocator =
GST_ALLOCATOR (gst_gl_memory_allocator_get_default (glpool->context));
g_assert (priv->allocator); g_assert (priv->allocator);
} }

View file

@ -1173,3 +1173,22 @@ gst_gl_memory_setup_buffer (GstGLMemoryAllocator * allocator,
return TRUE; return TRUE;
} }
GstGLMemoryAllocator *
gst_gl_memory_allocator_get_default (GstGLContext * context)
{
GstGLMemoryAllocator *allocator = NULL;
g_return_val_if_fail (GST_IS_GL_CONTEXT (context), NULL);
if (USING_OPENGL (context) || USING_OPENGL3 (context)
|| USING_GLES3 (context)) {
allocator = (GstGLMemoryAllocator *)
gst_allocator_find (GST_GL_MEMORY_PBO_ALLOCATOR_NAME);
} else {
allocator = (GstGLMemoryAllocator *)
gst_allocator_find (GST_GL_MEMORY_ALLOCATOR_NAME);
}
return allocator;
}

View file

@ -216,6 +216,9 @@ gboolean gst_gl_memory_setup_buffer (GstGLMemoryAllocato
GstBuffer * buffer, GstBuffer * buffer,
GstGLVideoAllocationParams * params); GstGLVideoAllocationParams * params);
GstGLMemoryAllocator * gst_gl_memory_allocator_get_default (GstGLContext *context);
G_END_DECLS G_END_DECLS
#endif /* _GST_GL_MEMORY_H_ */ #endif /* _GST_GL_MEMORY_H_ */

View file

@ -348,7 +348,8 @@ gst_gl_composition_overlay_upload (GstGLCompositionOverlay * overlay,
GstGLBaseMemoryAllocator *mem_allocator; GstGLBaseMemoryAllocator *mem_allocator;
GstAllocator *allocator; GstAllocator *allocator;
allocator = gst_allocator_find (GST_GL_MEMORY_PBO_ALLOCATOR_NAME); allocator =
GST_ALLOCATOR (gst_gl_memory_allocator_get_default (overlay->context));
mem_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator); mem_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator);
gst_gl_composition_overlay_add_transformation (overlay, buf); gst_gl_composition_overlay_add_transformation (overlay, buf);

View file

@ -223,7 +223,9 @@ _gl_memory_upload_propose_allocation (gpointer impl, GstQuery * decide_query,
GstAllocationParams params; GstAllocationParams params;
gst_allocation_params_init (&params); gst_allocation_params_init (&params);
allocator = gst_allocator_find (GST_GL_MEMORY_PBO_ALLOCATOR_NAME); allocator =
GST_ALLOCATOR (gst_gl_memory_allocator_get_default (upload->
upload->context));
gst_query_add_allocation_param (query, allocator, &params); gst_query_add_allocation_param (query, allocator, &params);
gst_object_unref (allocator); gst_object_unref (allocator);
} }
@ -696,9 +698,7 @@ _upload_meta_upload_perform (gpointer impl, GstBuffer * buffer,
guint max_planes = GST_VIDEO_INFO_N_PLANES (in_info); guint max_planes = GST_VIDEO_INFO_N_PLANES (in_info);
GstGLMemoryAllocator *allocator; GstGLMemoryAllocator *allocator;
allocator = allocator = gst_gl_memory_allocator_get_default (upload->upload->context);
GST_GL_MEMORY_ALLOCATOR (gst_allocator_find
(GST_GL_MEMORY_PBO_ALLOCATOR_NAME));
/* Support stereo views for separated multiview mode */ /* Support stereo views for separated multiview mode */
if (GST_VIDEO_INFO_MULTIVIEW_MODE (in_info) == if (GST_VIDEO_INFO_MULTIVIEW_MODE (in_info) ==
@ -916,8 +916,8 @@ _raw_data_upload_perform (gpointer impl, GstBuffer * buffer,
guint n_mem = GST_VIDEO_INFO_N_PLANES (in_info); guint n_mem = GST_VIDEO_INFO_N_PLANES (in_info);
allocator = allocator =
GST_GL_BASE_MEMORY_ALLOCATOR (gst_allocator_find GST_GL_BASE_MEMORY_ALLOCATOR (gst_gl_memory_allocator_get_default
(GST_GL_MEMORY_PBO_ALLOCATOR_NAME)); (raw->upload->context));
/* FIXME Use a buffer pool to cache the generated textures */ /* FIXME Use a buffer pool to cache the generated textures */
/* FIXME: multiview support with separated left/right frames? */ /* FIXME: multiview support with separated left/right frames? */

View file

@ -1897,7 +1897,9 @@ _gen_buffer (GstGLViewConvert * viewconvert, GstBuffer ** target)
*target = gst_buffer_new (); *target = gst_buffer_new ();
allocator = gst_allocator_find (GST_GL_MEMORY_PBO_ALLOCATOR_NAME); allocator =
GST_ALLOCATOR (gst_gl_memory_allocator_get_default
(viewconvert->context));
mem_allocator = GST_GL_MEMORY_ALLOCATOR (allocator); mem_allocator = GST_GL_MEMORY_ALLOCATOR (allocator);
params = gst_gl_video_allocation_params_new (viewconvert->context, NULL, params = gst_gl_video_allocation_params_new (viewconvert->context, NULL,
&viewconvert->out_info, 0, NULL, viewconvert->to_texture_target); &viewconvert->out_info, 0, NULL, viewconvert->to_texture_target);
@ -2037,7 +2039,8 @@ _do_view_convert (GstGLContext * context, GstGLViewConvert * viewconvert)
gst_video_info_set_format (&temp_info, GST_VIDEO_FORMAT_RGBA, out_width, gst_video_info_set_format (&temp_info, GST_VIDEO_FORMAT_RGBA, out_width,
out_height); out_height);
allocator = gst_allocator_find (GST_GL_MEMORY_PBO_ALLOCATOR_NAME); allocator =
GST_ALLOCATOR (gst_gl_memory_allocator_get_default (context));
base_mem_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator); base_mem_allocator = GST_GL_BASE_MEMORY_ALLOCATOR (allocator);
params = gst_gl_video_allocation_params_new (context, NULL, &temp_info, params = gst_gl_video_allocation_params_new (context, NULL, &temp_info,
0, NULL, viewconvert->to_texture_target); 0, NULL, viewconvert->to_texture_target);