gl/android: Notify the window's resize callback about surface dimension changes

https://bugzilla.gnome.org/show_bug.cgi?id=728107
This commit is contained in:
Sebastian Dröge 2014-04-13 16:40:58 +02:00 committed by Tim-Philipp Müller
parent 9eb5001e02
commit 6fb0f1d1c7
2 changed files with 22 additions and 1 deletions

View file

@ -30,6 +30,7 @@
#include <gst/gst.h> #include <gst/gst.h>
#include <gst/gl/egl/gstglcontext_egl.h>
#include "gstglwindow_android_egl.h" #include "gstglwindow_android_egl.h"
#define GST_CAT_DEFAULT gst_gl_window_debug #define GST_CAT_DEFAULT gst_gl_window_debug
@ -212,8 +213,26 @@ draw_cb (gpointer data)
GstGLWindowAndroidEGL *window_egl = draw_data->window; GstGLWindowAndroidEGL *window_egl = draw_data->window;
GstGLWindow *window = GST_GL_WINDOW (window_egl); GstGLWindow *window = GST_GL_WINDOW (window_egl);
GstGLContext *context = gst_gl_window_get_context (window); GstGLContext *context = gst_gl_window_get_context (window);
GstGLContextEGL *context_egl = GST_GL_CONTEXT_EGL (context);
GstGLContextClass *context_class = GST_GL_CONTEXT_GET_CLASS (context); GstGLContextClass *context_class = GST_GL_CONTEXT_GET_CLASS (context);
if (context_egl->egl_surface) {
gint width, height;
if (eglQuerySurface (context_egl->egl_display,
context_egl->egl_surface, EGL_WIDTH, &width) &&
eglQuerySurface (context_egl->egl_display,
context_egl->egl_surface, EGL_HEIGHT, &height)
&& (width != window_egl->window_width
|| height != window_egl->window_height)) {
window_egl->window_width = width;
window_egl->window_height = height;
if (window->resize)
window->resize (window->resize_data, width, height);
}
}
if (window->draw) if (window->draw)
window->draw (window->draw_data); window->draw (window->draw_data);
@ -226,8 +245,9 @@ static void
gst_gl_window_android_egl_draw (GstGLWindow * window, guint width, guint height) gst_gl_window_android_egl_draw (GstGLWindow * window, guint width, guint height)
{ {
struct draw draw_data; struct draw draw_data;
GstGLWindowAndroidEGL *window_egl = GST_GL_WINDOW_ANDROID_EGL (window);
draw_data.window = GST_GL_WINDOW_ANDROID_EGL (window); draw_data.window = window_egl;
draw_data.width = width; draw_data.width = width;
draw_data.height = height; draw_data.height = height;

View file

@ -42,6 +42,7 @@ struct _GstGLWindowAndroidEGL {
/* This is actually an ANativeWindow */ /* This is actually an ANativeWindow */
EGLNativeWindowType native_window; EGLNativeWindowType native_window;
gint window_width, window_height;
GMainContext *main_context; GMainContext *main_context;
GMainLoop *loop; GMainLoop *loop;