From: gb Date: Thu, 1 Jul 2010 11:38:28 +0000 (+0000) Subject: Call the GLX/Pixmap related functions through the vtable. X-Git-Tag: accepted/trunk/20120822.173359~369 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=982a06b1c786779852abe5abf3ff57a54095e26d;p=profile%2Fivi%2Fgstreamer-vaapi.git Call the GLX/Pixmap related functions through the vtable. --- diff --git a/gst-libs/gst/vaapi/gstvaapiutils_glx.c b/gst-libs/gst/vaapi/gstvaapiutils_glx.c index 899b657..dff8780 100644 --- a/gst-libs/gst/vaapi/gstvaapiutils_glx.c +++ b/gst-libs/gst/vaapi/gstvaapiutils_glx.c @@ -664,6 +664,14 @@ gl_init_vtable(void) gboolean has_extension; /* GLX_EXT_texture_from_pixmap */ + gl_vtable->glx_create_pixmap = (PFNGLXCREATEPIXMAPPROC) + get_proc_address("glXCreatePixmap"); + if (!gl_vtable->glx_create_pixmap) + return NULL; + gl_vtable->glx_destroy_pixmap = (PFNGLXDESTROYPIXMAPPROC) + get_proc_address("glXDestroyPixmap"); + if (!gl_vtable->glx_destroy_pixmap) + return NULL; gl_vtable->glx_bind_tex_image = (PFNGLXBINDTEXIMAGEEXTPROC) get_proc_address("glXBindTexImageEXT"); if (!gl_vtable->glx_bind_tex_image) @@ -906,7 +914,12 @@ gl_create_pixmap_object(Display *dpy, guint width, guint height) *attr++ = GL_NONE; x11_trap_errors(); - pixo->glx_pixmap = glXCreatePixmap(dpy, fbconfig[0], pixo->pixmap, pixmap_attrs); + pixo->glx_pixmap = gl_vtable->glx_create_pixmap( + dpy, + fbconfig[0], + pixo->pixmap, + pixmap_attrs + ); free(fbconfig); if (x11_untrap_errors() != 0) goto error; @@ -934,6 +947,8 @@ error: void gl_destroy_pixmap_object(GLPixmapObject *pixo) { + GLVTable * const gl_vtable = gl_get_vtable(); + if (!pixo) return; @@ -945,7 +960,7 @@ gl_destroy_pixmap_object(GLPixmapObject *pixo) } if (pixo->glx_pixmap) { - glXDestroyPixmap(pixo->dpy, pixo->glx_pixmap); + gl_vtable->glx_destroy_pixmap(pixo->dpy, pixo->glx_pixmap); pixo->glx_pixmap = None; } diff --git a/gst-libs/gst/vaapi/gstvaapiutils_glx.h b/gst-libs/gst/vaapi/gstvaapiutils_glx.h index ed8856c..5309b7a 100644 --- a/gst-libs/gst/vaapi/gstvaapiutils_glx.h +++ b/gst-libs/gst/vaapi/gstvaapiutils_glx.h @@ -34,6 +34,13 @@ typedef void (*PFNGLXBINDTEXIMAGEEXTPROC)(Display *, GLXDrawable, int, const int typedef void (*PFNGLXRELEASETEXIMAGEEXTPROC)(Display *, GLXDrawable, int); #endif +#if GLX_GLXEXT_VERSION < 27 +/* XXX: this is not exactly that version but this is the only means to + make sure we have the correct with those signatures */ +typedef GLXPixmap (*PFNGLXCREATEPIXMAPPROC)(Display *, GLXFBConfig, Pixmap, const int *); +typedef void (*PFNGLXDESTROYPIXMAPPROC)(Display *, GLXPixmap); +#endif + #ifndef GL_FRAMEBUFFER_BINDING #define GL_FRAMEBUFFER_BINDING GL_FRAMEBUFFER_BINDING_EXT #endif @@ -117,6 +124,8 @@ gl_create_texture(GLenum target, GLenum format, guint width, guint height) typedef struct _GLVTable GLVTable; struct _GLVTable { + PFNGLXCREATEPIXMAPPROC glx_create_pixmap; + PFNGLXDESTROYPIXMAPPROC glx_destroy_pixmap; PFNGLXBINDTEXIMAGEEXTPROC glx_bind_tex_image; PFNGLXRELEASETEXIMAGEEXTPROC glx_release_tex_image; PFNGLGENFRAMEBUFFERSEXTPROC gl_gen_framebuffers;