Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
glupload: guard against glEGLImageTexture2D not existing
e.g. if targetting EGL/opengl, we would attempt to use this GLES
function when wrapping EGLImage's.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1071>
  • Loading branch information
ystreet committed Apr 28, 2021
1 parent 4ef5c91 commit f770982
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
7 changes: 7 additions & 0 deletions gst-libs/gst/gl/egl/gstglmemoryegl.c
Expand Up @@ -203,6 +203,13 @@ _gl_mem_create (GstGLMemoryEGL * gl_mem, GError ** error)
} else {
guint gl_target = gst_gl_texture_target_to_gl (gl_mem->mem.tex_target);

if (!gl->EGLImageTargetTexture2D) {
g_set_error (error, GST_GL_CONTEXT_ERROR, GST_GL_CONTEXT_ERROR_FAILED,
"Required function glEGLImageTargetTexture2D() is not available for "
"attaching an EGLImage to a texture");
return FALSE;
}

gl->ActiveTexture (GL_TEXTURE0 + gl_mem->mem.plane);
gl->BindTexture (gl_target, gl_mem->mem.tex_id);
gl->EGLImageTargetTexture2D (gl_target,
Expand Down
14 changes: 14 additions & 0 deletions gst-libs/gst/gl/gstglupload.c
Expand Up @@ -27,6 +27,7 @@

#include "gl.h"
#include "gstglupload.h"
#include "gstglfuncs.h"

#if GST_GL_HAVE_PLATFORM_EGL
#include "egl/gsteglimage.h"
Expand Down Expand Up @@ -525,6 +526,11 @@ _dma_buf_upload_transform_caps (gpointer impl, GstGLContext * context,
GstCaps *ret;

if (context) {
const GstGLFuncs *gl = context->gl_vtable;

if (!gl->EGLImageTargetTexture2D)
return NULL;

/* Don't propose DMABuf caps feature unless it can be supported */
if (gst_gl_context_get_gl_platform (context) != GST_GL_PLATFORM_EGL)
return NULL;
Expand Down Expand Up @@ -625,6 +631,9 @@ _dma_buf_upload_accept (gpointer impl, GstBuffer * buffer, GstCaps * in_caps,
n_mem = gst_buffer_n_memory (buffer);
meta = gst_buffer_get_video_meta (buffer);

if (!dmabuf->upload->context->gl_vtable->EGLImageTargetTexture2D)
return FALSE;

/* dmabuf upload is only supported with EGL contexts. */
if (gst_gl_context_get_gl_platform (dmabuf->upload->context) !=
GST_GL_PLATFORM_EGL)
Expand Down Expand Up @@ -834,6 +843,11 @@ _direct_dma_buf_upload_transform_caps (gpointer impl, GstGLContext * context,
GstCaps *ret;

if (context) {
const GstGLFuncs *gl = context->gl_vtable;

if (!gl->EGLImageTargetTexture2D)
return NULL;

/* Don't propose direct DMABuf caps feature unless it can be supported */
if (gst_gl_context_get_gl_platform (context) != GST_GL_PLATFORM_EGL)
return NULL;
Expand Down

0 comments on commit f770982

Please sign in to comment.