From 47fd4d391e775c11f529705bb0f457a9d25ba5e7 Mon Sep 17 00:00:00 2001 From: Cassandra Rommel Date: Mon, 2 Oct 2017 12:35:48 -0700 Subject: [PATCH] gl: Use GstGLDisplayEGL directly instead of creating a GstGLDisplayVIVFb subclass This simplifies the code a lot without any functional changes apart from not closing the display connection. Closing the display connection is not safe to do as it is shared between all other code in the same process and no reference counting or anything happens at the platform layer. --- ext/qt/gstqtglutility.cc | 4 -- gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.c | 63 +++---------------- gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.h | 36 +---------- .../gst/gl/viv-fb/gstglwindow_viv_fb_egl.c | 5 -- 4 files changed, 9 insertions(+), 99 deletions(-) diff --git a/ext/qt/gstqtglutility.cc b/ext/qt/gstqtglutility.cc index ff8d875922..84794e4ee2 100644 --- a/ext/qt/gstqtglutility.cc +++ b/ext/qt/gstqtglutility.cc @@ -169,11 +169,7 @@ gst_qt_get_gl_wrapcontext (GstGLDisplay * display, } #endif #if GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_EGLFS) -#if GST_GL_HAVE_WINDOW_VIV_FB - if (GST_IS_GL_DISPLAY_VIV_FB (display)) { -#else if (GST_IS_GL_DISPLAY_EGL (display)) { -#endif platform = GST_GL_PLATFORM_EGL; } #endif diff --git a/gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.c b/gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.c index 48815e52fa..90202c78f2 100644 --- a/gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.c +++ b/gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.c @@ -29,75 +29,26 @@ GST_DEBUG_CATEGORY_STATIC (gst_gl_display_debug); #define GST_CAT_DEFAULT gst_gl_display_debug -G_DEFINE_TYPE (GstGLDisplayVivFB, gst_gl_display_viv_fb, GST_TYPE_GL_DISPLAY); - -static void gst_gl_display_viv_fb_finalize (GObject * object); -static guintptr gst_gl_display_viv_fb_get_handle (GstGLDisplay * display); - -static void -gst_gl_display_viv_fb_class_init (GstGLDisplayVivFBClass * klass) -{ - GST_GL_DISPLAY_CLASS (klass)->get_handle = - GST_DEBUG_FUNCPTR (gst_gl_display_viv_fb_get_handle); - - G_OBJECT_CLASS (klass)->finalize = gst_gl_display_viv_fb_finalize; -} - -static void -gst_gl_display_viv_fb_init (GstGLDisplayVivFB * display_viv_fb) -{ - GstGLDisplay *display = (GstGLDisplay *) display_viv_fb; - - display->type = GST_GL_DISPLAY_TYPE_VIV_FB; - - display_viv_fb->disp_idx = 0; - display_viv_fb->display = NULL; -} - -static void -gst_gl_display_viv_fb_finalize (GObject * object) -{ - GstGLDisplayVivFB *display_viv_fb = GST_GL_DISPLAY_VIV_FB (object); - - if (display_viv_fb->display) - fbDestroyDisplay (display_viv_fb->display); - - G_OBJECT_CLASS (gst_gl_display_viv_fb_parent_class)->finalize (object); -} - /** * gst_gl_display_viv_fb_new: * @disp_idx: a display index * - * Create a new #GstGLDisplayVivFB from the FB display index. + * Create a new #GstGLDisplay from the FB display index. * * Returns: (transfer full): a new #GstGLDisplayVivFB or %NULL */ -GstGLDisplayVivFB * +GstGLDisplayEGL * gst_gl_display_viv_fb_new (gint disp_idx) { - GstGLDisplayVivFB *display; + EGLDisplay display; GST_DEBUG_CATEGORY_GET (gst_gl_display_debug, "gldisplay"); GST_DEBUG ("creating Vivante FB EGL display %d", disp_idx); - display = g_object_new (GST_TYPE_GL_DISPLAY_VIV_FB, NULL); - gst_object_ref_sink (display); - display->disp_idx = disp_idx; - display->display = fbGetDisplayByIndex (display->disp_idx); - if (!display->display) { - GST_ERROR ("Failed to open Vivante FB display %d", disp_idx); - return NULL; - } - + display = fbGetDisplayByIndex (disp_idx); GST_DEBUG ("Created Vivante FB EGL display %p", (gpointer) display->display); - - return display; -} - -static guintptr -gst_gl_display_viv_fb_get_handle (GstGLDisplay * display) -{ - return (guintptr) GST_GL_DISPLAY_VIV_FB (display)->display; + return + gst_gl_display_egl_new_with_egl_display (eglGetDisplay ( + (EGLNativeDisplayType) display)); } diff --git a/gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.h b/gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.h index 9ce1dce849..6d19c37788 100644 --- a/gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.h +++ b/gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.h @@ -23,44 +23,12 @@ #define __GST_GL_DISPLAY_VIV_FB_H__ #include -#include +#include #include G_BEGIN_DECLS -GType gst_gl_display_viv_fb_get_type (void); - -#define GST_TYPE_GL_DISPLAY_VIV_FB (gst_gl_display_viv_fb_get_type()) -#define GST_GL_DISPLAY_VIV_FB(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_DISPLAY_VIV_FB,GstGLDisplayVivFB)) -#define GST_GL_DISPLAY_VIV_FB_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_GL_DISPLAY_VIV_FB,GstGLDisplayVivFBClass)) -#define GST_IS_GL_DISPLAY_VIV_FB(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_DISPLAY_VIV_FB)) -#define GST_IS_GL_DISPLAY_VIV_FB_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_GL_DISPLAY_VIV_FB)) -#define GST_GL_DISPLAY_VIV_FB_CAST(obj) ((GstGLDisplayVivFB*)(obj)) - -typedef struct _GstGLDisplayVivFB GstGLDisplayVivFB; -typedef struct _GstGLDisplayVivFBClass GstGLDisplayVivFBClass; - -/** - * GstGLDisplayVivFB: - * - * the contents of a #GstGLDisplayVivFB are private and should only be accessed - * through the provided API - */ -struct _GstGLDisplayVivFB -{ - GstGLDisplay parent; - - /* */ - gint disp_idx; - EGLNativeDisplayType display; -}; - -struct _GstGLDisplayVivFBClass -{ - GstGLDisplayClass object_class; -}; - -GstGLDisplayVivFB *gst_gl_display_viv_fb_new (gint disp_idx); +GstGLDisplayEGL *gst_gl_display_viv_fb_new (gint disp_idx); G_END_DECLS diff --git a/gst-libs/gst/gl/viv-fb/gstglwindow_viv_fb_egl.c b/gst-libs/gst/gl/viv-fb/gstglwindow_viv_fb_egl.c index 8515dc8ec7..e6a62508b3 100644 --- a/gst-libs/gst/gl/viv-fb/gstglwindow_viv_fb_egl.c +++ b/gst-libs/gst/gl/viv-fb/gstglwindow_viv_fb_egl.c @@ -75,11 +75,6 @@ gst_gl_window_viv_fb_egl_new (GstGLDisplay * display) { GstGLWindowVivFBEGL *window; - if ((gst_gl_display_get_handle_type (display) & GST_GL_DISPLAY_TYPE_VIV_FB) == - 0) - /* we require a Vivante FB display to create windows */ - return NULL; - window = g_object_new (GST_TYPE_GL_WINDOW_VIV_FB_EGL, NULL); gst_object_ref_sink (window);