From be426ad76c3e486f1364dd292cf8e1c633c80e91 Mon Sep 17 00:00:00 2001 From: Vincent Davis Jr Date: Thu, 8 Dec 2022 10:39:47 -0600 Subject: [PATCH] libavdevice: opengl_enc.c update dynamic function loader Upstream-Status: Inappropriate RPI-Distro repo clones original ffmpeg and applies patches to enable raspiberry pi support. For meta-raspberrypi ffmpeg builds, when opengl is enabled do_compile will fail. Reasion is that glGetProcAddress is undefined in either GLES2/gl2.h or GLES2/gl2ext.h. define SelectedGetProcAddress to SDL_GL_GetProcAddress if sdl2 is included. If not included, define function pointers at compile time versus runtime. Signed-off-by: Vincent Davis Jr --- libavdevice/opengl_enc.c | 44 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/libavdevice/opengl_enc.c b/libavdevice/opengl_enc.c index 2bdb8da7..eabc1bf8 100644 --- a/libavdevice/opengl_enc.c +++ b/libavdevice/opengl_enc.c @@ -37,12 +37,13 @@ #include #elif HAVE_ES2_GL_H #include -#else -#include -#include #endif #if HAVE_GLXGETPROCADDRESS #include +#else +#define GL_GLEXT_PROTOTYPES +#include +#include #endif #if CONFIG_SDL2 @@ -493,8 +494,14 @@ static int av_cold opengl_load_procedures(OpenGLContext *opengl) #if HAVE_GLXGETPROCADDRESS #define SelectedGetProcAddress glXGetProcAddress +#define CAN_DYNAMIC_LOAD 1 #elif HAVE_WGLGETPROCADDRESS #define SelectedGetProcAddress wglGetProcAddress +#elif CONFIG_SDL2 +#define SelectedGetProcAddress SDL_GL_GetProcAddress +#define CAN_DYNAMIC_LOAD 1 +#else +#define CAN_DYNAMIC_LOAD 0 #endif #define LOAD_OPENGL_FUN(name, type) \ @@ -504,7 +511,8 @@ static int av_cold opengl_load_procedures(OpenGLContext *opengl) return AVERROR(ENOSYS); \ } -#if CONFIG_SDL2 +#if CAN_DYNAMIC_LOAD +#if CONFIG_SDL2 if (!opengl->no_window) return opengl_sdl_load_procedures(opengl); #endif @@ -534,9 +542,37 @@ static int av_cold opengl_load_procedures(OpenGLContext *opengl) LOAD_OPENGL_FUN(glGetShaderInfoLog, FF_PFNGLGETSHADERINFOLOGPROC) LOAD_OPENGL_FUN(glEnableVertexAttribArray, FF_PFNGLENABLEVERTEXATTRIBARRAYPROC) LOAD_OPENGL_FUN(glVertexAttribPointer, FF_PFNGLVERTEXATTRIBPOINTERPROC) +#else + procs->glActiveTexture = glActiveTexture; + procs->glGenBuffers = glGenBuffers; + procs->glDeleteBuffers = glDeleteBuffers; + procs->glBufferData = glBufferData; + procs->glBindBuffer = glBindBuffer; + procs->glGetAttribLocation = glGetAttribLocation; + procs->glGetUniformLocation = glGetUniformLocation; + procs->glUniform1f = glUniform1f; + procs->glUniform1i = glUniform1i; + procs->glUniformMatrix4fv = glUniformMatrix4fv; + procs->glCreateProgram = glCreateProgram; + procs->glDeleteProgram = glDeleteProgram; + procs->glUseProgram = glUseProgram; + procs->glLinkProgram = glLinkProgram; + procs->glGetProgramiv = glGetProgramiv; + procs->glGetProgramInfoLog = glGetProgramInfoLog; + procs->glAttachShader = glAttachShader; + procs->glCreateShader = glCreateShader; + procs->glDeleteShader = glDeleteShader; + procs->glCompileShader = glCompileShader; + procs->glShaderSource = glShaderSource; + procs->glGetShaderiv = glGetShaderiv; + procs->glGetShaderInfoLog = glGetShaderInfoLog; + procs->glEnableVertexAttribArray = glEnableVertexAttribArray; + procs->glVertexAttribPointer = (FF_PFNGLVERTEXATTRIBPOINTERPROC) glVertexAttribPointer; +#endif return 0; +#undef CAN_DYNAMIC_LOAD #undef SelectedGetProcAddress #undef LOAD_OPENGL_FUN } -- 2.38.1