mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
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>
This commit is contained in:
parent
4ef5c91697
commit
f770982635
2 changed files with 21 additions and 0 deletions
|
@ -203,6 +203,13 @@ _gl_mem_create (GstGLMemoryEGL * gl_mem, GError ** error)
|
||||||
} else {
|
} else {
|
||||||
guint gl_target = gst_gl_texture_target_to_gl (gl_mem->mem.tex_target);
|
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->ActiveTexture (GL_TEXTURE0 + gl_mem->mem.plane);
|
||||||
gl->BindTexture (gl_target, gl_mem->mem.tex_id);
|
gl->BindTexture (gl_target, gl_mem->mem.tex_id);
|
||||||
gl->EGLImageTargetTexture2D (gl_target,
|
gl->EGLImageTargetTexture2D (gl_target,
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
#include "gl.h"
|
#include "gl.h"
|
||||||
#include "gstglupload.h"
|
#include "gstglupload.h"
|
||||||
|
#include "gstglfuncs.h"
|
||||||
|
|
||||||
#if GST_GL_HAVE_PLATFORM_EGL
|
#if GST_GL_HAVE_PLATFORM_EGL
|
||||||
#include "egl/gsteglimage.h"
|
#include "egl/gsteglimage.h"
|
||||||
|
@ -525,6 +526,11 @@ _dma_buf_upload_transform_caps (gpointer impl, GstGLContext * context,
|
||||||
GstCaps *ret;
|
GstCaps *ret;
|
||||||
|
|
||||||
if (context) {
|
if (context) {
|
||||||
|
const GstGLFuncs *gl = context->gl_vtable;
|
||||||
|
|
||||||
|
if (!gl->EGLImageTargetTexture2D)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
/* Don't propose DMABuf caps feature unless it can be supported */
|
/* Don't propose DMABuf caps feature unless it can be supported */
|
||||||
if (gst_gl_context_get_gl_platform (context) != GST_GL_PLATFORM_EGL)
|
if (gst_gl_context_get_gl_platform (context) != GST_GL_PLATFORM_EGL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -625,6 +631,9 @@ _dma_buf_upload_accept (gpointer impl, GstBuffer * buffer, GstCaps * in_caps,
|
||||||
n_mem = gst_buffer_n_memory (buffer);
|
n_mem = gst_buffer_n_memory (buffer);
|
||||||
meta = gst_buffer_get_video_meta (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. */
|
/* dmabuf upload is only supported with EGL contexts. */
|
||||||
if (gst_gl_context_get_gl_platform (dmabuf->upload->context) !=
|
if (gst_gl_context_get_gl_platform (dmabuf->upload->context) !=
|
||||||
GST_GL_PLATFORM_EGL)
|
GST_GL_PLATFORM_EGL)
|
||||||
|
@ -834,6 +843,11 @@ _direct_dma_buf_upload_transform_caps (gpointer impl, GstGLContext * context,
|
||||||
GstCaps *ret;
|
GstCaps *ret;
|
||||||
|
|
||||||
if (context) {
|
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 */
|
/* Don't propose direct DMABuf caps feature unless it can be supported */
|
||||||
if (gst_gl_context_get_gl_platform (context) != GST_GL_PLATFORM_EGL)
|
if (gst_gl_context_get_gl_platform (context) != GST_GL_PLATFORM_EGL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
Loading…
Reference in a new issue