gl: qglwtextureshare demo fixes and cleanup
authorWang Xin-yu (王昕宇) <comicfans44@gmail.com>
Tue, 26 Aug 2014 08:21:42 +0000 (16:21 +0800)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 9 Dec 2017 19:31:46 +0000 (19:31 +0000)
1. glcontextid function is replaced by gstreamer gst_gl_context_new_wrapped .
2. call gst_init before gst_gl_display_new , seems gst_gl_display_new depends
   on gst_allocator_register , which only worked after gst_init called
3. flush gstreamer OpenGL context before using shared texture, fix
   flicker problem.

https://bugzilla.gnome.org/show_bug.cgi?id=735566

tests/examples/gl/qt/qglwtextureshare/glcontextid.h [deleted file]
tests/examples/gl/qt/qglwtextureshare/gstthread.h
tests/examples/gl/qt/qglwtextureshare/main.cpp
tests/examples/gl/qt/qglwtextureshare/pipeline.cpp
tests/examples/gl/qt/qglwtextureshare/pipeline.h
tests/examples/gl/qt/qglwtextureshare/qglrenderer.cpp
tests/examples/gl/qt/qglwtextureshare/qglwtextureshare.pro

diff --git a/tests/examples/gl/qt/qglwtextureshare/glcontextid.h b/tests/examples/gl/qt/qglwtextureshare/glcontextid.h
deleted file mode 100644 (file)
index 7c59546..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * GStreamer
- * Copyright (C) 2009 Julien Isorce <julien.isorce@gmail.com>
- * Copyright (C) 2009 Andrey Nechypurenko <andreynech@gmail.com>
- * Copyright (C) 2010 Nuno Santos <nunosantos@imaginando.net>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#ifndef __GLCONTEXTID_H
-#define __GLCONTEXTID_H
-
-#include <gst/gl/gstglconfig.h>
-
-#if GST_GL_HAVE_PLATFORM_WGL
-    #define WIN32_LEAN_AND_MEAN
-    #include <windows.h>
-    #include <Wingdi.h>
-    #include <GL/gl.h>
-#elif GST_GL_HAVE_PLATFORM_CGL
-    #include <OpenGL/OpenGL.h>
-    class NSOpenGLContext;
-#else
-    #include <X11/Xlib.h>
-    #include <GL/gl.h>
-    #include <GL/glu.h>
-    #include <GL/glx.h>
-#endif
-
-
-#if GST_GL_HAVE_PLATFORM_WGL
-    typedef struct _tagGLContextID
-    {
-        HGLRC contextId;
-        HDC dc;
-    } GLContextID;
-#elif  GST_GL_HAVE_PLATFORM_CGL
-    typedef struct _tagGLContextID
-    {
-        NSOpenGLContext* contextId;
-    } GLContextID;
-#elif GST_GL_HAVE_PLATFORM_GLX
-    typedef struct _tagGLContextID
-    {
-        GLXContext contextId;
-        Display *display;
-        Window wnd;
-    } GLContextID;
-#endif
-
-#endif // __GLCONTEXTID_H
-
index 918859e..d18218c 100644 (file)
@@ -26,7 +26,6 @@
 
 #include <gst/gl/gstglcontext.h>
 
-#include "glcontextid.h"
 
 class Pipeline;
 
index f2eb2f1..9ff8dba 100644 (file)
 #include <QApplication>
 #include "qglrenderer.h"
 
+#include <gst/gst.h>
 
 int
 main(int argc, char *argv[])
 {
+  gst_init (NULL, NULL);
   QApplication a(argc, argv);
   a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
   QGLRenderer w(argc > 1 ? argv[1] : "");
index a7dd490..942e1a7 100644 (file)
@@ -42,7 +42,6 @@ Pipeline::~Pipeline()
 void
 Pipeline::configure()
 {
-    gst_init (NULL, NULL);
 
 #ifdef Q_WS_WIN
     m_loop = g_main_loop_new (NULL, FALSE);
index 5e59f1a..c2a1c9d 100644 (file)
@@ -26,7 +26,6 @@
 
 #include <gst/gl/gstglcontext.h>
 
-#include "glcontextid.h"
 #include "AsyncQueue.h"
 
 
index 218b8e4..c7726d1 100644 (file)
@@ -122,6 +122,10 @@ QGLRenderer::newFrame()
     this->updateGL();
 }
 
+static void flushGstreamerGL(GstGLContext* context,void *data){
+    context->gl_vtable->Flush();
+}
+
 void
 QGLRenderer::paintGL()
 {
@@ -142,6 +146,10 @@ QGLRenderer::paintGL()
 
         Q_ASSERT(gst_is_gl_memory (mem));
 
+        GstGLMemory *gl_memory=(GstGLMemory*)mem;
+
+        gst_gl_context_thread_add(gl_memory->context,flushGstreamerGL,NULL);
+
         gst_video_info_set_format (&v_info, v_meta->format, v_meta->width,
                 v_meta->height);
 
index 13014ac..83e67d8 100644 (file)
@@ -18,6 +18,7 @@ INCLUDEPATH += \
 LIBS += -L"C:/gstreamer/lib" \
     -L"C:/gstreamer/bin" \
     -lgstreamer-1.0 \
+    -lgstgl-1.0 \
     -lgstvideo-1.0 \
     -lglib-2.0 \
     -lgmodule-2.0 \
@@ -74,7 +75,6 @@ HEADERS += gstthread.h \
     pipeline.h \
     qglrenderer.h \
     AsyncQueue.h \
-    glcontextid.h
 
 # Source files
 SOURCES += gstthread.cpp \