From 491513adf69d9cf08fbc50041f38ef89229450cb Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Sun, 28 Sep 2014 20:21:50 +1000 Subject: [PATCH] examples: port GL/Qt examples to Qt5 Update the GL Qt integration examples for Qt5 changes and for GstGL signal signature changes. --- tests/examples/gl/qt/.gitignore | 2 + tests/examples/gl/qt/README | 15 ++--- tests/examples/gl/qt/mousevideooverlay/main.cpp | 9 +-- .../gl/qt/mousevideooverlay/mousevideooverlay.pro | 22 ++------ .../examples/gl/qt/mousevideooverlay/pipeline.cpp | 59 ++++++++++---------- tests/examples/gl/qt/mousevideooverlay/pipeline.h | 7 ++- .../examples/gl/qt/mousevideooverlay/qrenderer.cpp | 2 +- tests/examples/gl/qt/mousevideooverlay/qrenderer.h | 2 +- .../examples/gl/qt/qglwidgetvideooverlay/main.cpp | 7 ++- .../gl/qt/qglwidgetvideooverlay/pipeline.cpp | 61 +++++++++++---------- .../gl/qt/qglwidgetvideooverlay/pipeline.h | 6 +- .../qglwidgetvideooverlay.pro | 17 ++---- .../gl/qt/qglwtextureshare/qglrenderer.cpp | 2 + .../gl/qt/qglwtextureshare/qglwtextureshare.pro | 17 +----- .../examples/gl/qt/videooverlay/Debug/videooverlay | Bin 165466 -> 0 bytes .../{videovideooverlay.pro => videooverlay.pro} | 21 ++----- 16 files changed, 110 insertions(+), 139 deletions(-) create mode 100644 tests/examples/gl/qt/.gitignore delete mode 100755 tests/examples/gl/qt/videooverlay/Debug/videooverlay rename tests/examples/gl/qt/videooverlay/{videovideooverlay.pro => videooverlay.pro} (69%) diff --git a/tests/examples/gl/qt/.gitignore b/tests/examples/gl/qt/.gitignore new file mode 100644 index 0000000..6be72a2 --- /dev/null +++ b/tests/examples/gl/qt/.gitignore @@ -0,0 +1,2 @@ +GeneratedFiles/ +debug/ diff --git a/tests/examples/gl/qt/README b/tests/examples/gl/qt/README index aa843d6..a050fc2 100644 --- a/tests/examples/gl/qt/README +++ b/tests/examples/gl/qt/README @@ -1,22 +1,23 @@ --- Description of the Qt examples --- +- videooverlay: +Show how to use the videooverlay interface through Qt. +The video is displayed as normal 2D scene. +The window is dynamically resized to have the same size as the original video. + - mousevideooverlay: Show how to use the videooverlay interface through Qt. The cube is rotating when moving the mouse (+ click maintained) -- qglvideooverlay: +- qglwidgetvideooverlay: Show how to use the videooverlay interface through Qt. The cube is rotating automatically into a QGLWidget -- videovdieooverlay: -Show how to use the videooverlay interface through Qt. -The video is displayed as normal 2D scene. -The window is dynamically resized to have the same size as the original video. --- How to build the Qt examples --- -sudo apt-get install g++ -sudo apt-get install libqt4-dev +sudo apt-get install g++ libqt5-dev + cd qglvideooverlay qmake make diff --git a/tests/examples/gl/qt/mousevideooverlay/main.cpp b/tests/examples/gl/qt/mousevideooverlay/main.cpp index 0cec1b9..de86b77 100644 --- a/tests/examples/gl/qt/mousevideooverlay/main.cpp +++ b/tests/examples/gl/qt/mousevideooverlay/main.cpp @@ -18,7 +18,8 @@ * Boston, MA 02110-1301, USA. */ -#include +#include +#include #include "qrenderer.h" int main(int argc, char *argv[]) @@ -26,13 +27,13 @@ int main(int argc, char *argv[]) QApplication a(argc, argv); a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit())); - QString videolcoation = QFileDialog::getOpenFileName(0, "Select a video file", + QString videolocation = QFileDialog::getOpenFileName(0, "Select a video file", ".", "Format (*.avi *.mkv *.ogg *.asf *.mov)"); - if (videolcoation.isEmpty()) + if (videolocation.isEmpty()) return -1; - QRenderer w(videolcoation); + QRenderer w(videolocation); w.setWindowTitle("glimagesink implements the gstvideooverlay interface"); return a.exec(); diff --git a/tests/examples/gl/qt/mousevideooverlay/mousevideooverlay.pro b/tests/examples/gl/qt/mousevideooverlay/mousevideooverlay.pro index efd69cd..98e918d 100644 --- a/tests/examples/gl/qt/mousevideooverlay/mousevideooverlay.pro +++ b/tests/examples/gl/qt/mousevideooverlay/mousevideooverlay.pro @@ -1,8 +1,10 @@ TEMPLATE = app TARGET = mousevideooverlay DESTDIR = ./debug -CONFIG += debug gui widget -DEFINES += UNICODE +QT += gui widgets opengl +CONFIG += debug link_pkgconfig compile_libtool +DEFINES += UNICODE QT_THREAD_SUPPORT QT_CORE_LIB QT_GUI_LIB +PKGCONFIG = gstreamer-1.0 gstreamer-video-1.0 win32 { DEFINES += WIN32 @@ -28,20 +30,8 @@ LIBS += -L"C:/gstreamer/lib" \ unix { DEFINES += UNIX INCLUDEPATH += GeneratedFiles \ - GeneratedFiles/Debug \ - /usr/include/gstreamer-1.0 \ - /usr/local/include/gstreamer-1.0 \ - /usr/include/glib-2.0 \ - /usr/lib/glib-2.0/include \ - /usr/include/libxml2 -LIBS += -lgstreamer-video \ - -lgstvideo-1.0 \ - -lglib-2.0 \ - -lgmodule-2.0 \ - -lgobject-2.0 \ - -lgthread-2.0 \ - -lGLU \ - -lGL + GeneratedFiles/Debug +LIBS += -lGLU -lGL } DEPENDPATH += . diff --git a/tests/examples/gl/qt/mousevideooverlay/pipeline.cpp b/tests/examples/gl/qt/mousevideooverlay/pipeline.cpp index 941f8d1..40cc8d1 100644 --- a/tests/examples/gl/qt/mousevideooverlay/pipeline.cpp +++ b/tests/examples/gl/qt/mousevideooverlay/pipeline.cpp @@ -20,6 +20,7 @@ #include #include +#include #include "pipeline.h" Pipeline::Pipeline(const WId id, const QString videoLocation): @@ -39,7 +40,7 @@ Pipeline::~Pipeline() void Pipeline::create() { - qDebug("Loading video: %s", m_videoLocation.toAscii().data()); + qDebug("Loading video: %s", m_videoLocation.toLatin1().data()); gst_init (NULL, NULL); @@ -50,7 +51,7 @@ void Pipeline::create() m_bus = gst_pipeline_get_bus (GST_PIPELINE (m_pipeline)); gst_bus_add_watch (m_bus, (GstBusFunc) bus_call, this); - gst_bus_set_sync_handler (m_bus, (GstBusSyncHandler) create_window, this); + gst_bus_set_sync_handler (m_bus, (GstBusSyncHandler) create_window, this, NULL); gst_object_unref (m_bus); GstElement* videosrc = gst_element_factory_make ("filesrc", "filesrc0"); @@ -64,7 +65,7 @@ void Pipeline::create() } g_object_set(G_OBJECT(videosrc), "num-buffers", 800, NULL); - g_object_set(G_OBJECT(videosrc), "location", m_videoLocation.toAscii().data(), NULL); + g_object_set(G_OBJECT(videosrc), "location", m_videoLocation.toLatin1().data(), NULL); g_signal_connect(G_OBJECT(m_glimagesink), "client-reshape", G_CALLBACK (reshapeCallback), NULL); g_signal_connect(G_OBJECT(m_glimagesink), "client-draw", G_CALLBACK (drawCallback), NULL); @@ -72,7 +73,7 @@ void Pipeline::create() gst_element_link_pads (videosrc, "src", decodebin, "sink"); - g_signal_connect (decodebin, "new-decoded-pad", G_CALLBACK (cb_new_pad), this); + g_signal_connect (decodebin, "pad-added", G_CALLBACK (cb_new_pad), this); } void Pipeline::start() @@ -159,7 +160,7 @@ float Pipeline::m_yrot = 0; float Pipeline::m_zrot = 0; //client reshape callback -gboolean Pipeline::reshapeCallback (void *sink, guint width, guint height, gpointer data) +gboolean Pipeline::reshapeCallback (void *sink, void *context, guint width, guint height, gpointer data) { glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); @@ -171,7 +172,7 @@ gboolean Pipeline::reshapeCallback (void *sink, guint width, guint height, gpoin } //client draw callback -gboolean Pipeline::drawCallback (void *sink, uint texture, uint width, uint height, gpointer data) +gboolean Pipeline::drawCallback (void *sink, void *context, uint texture, uint width, uint height, gpointer data) { static GTimeVal current_time; static glong last_sec = current_time.tv_sec; @@ -182,7 +183,7 @@ gboolean Pipeline::drawCallback (void *sink, uint texture, uint width, uint heig if ((current_time.tv_sec - last_sec) >= 1) { - qDebug ("GRPHIC FPS = %d", nbFrames); + qDebug ("GRAPHIC FPS = %d", nbFrames); nbFrames = 0; last_sec = current_time.tv_sec; } @@ -209,39 +210,39 @@ gboolean Pipeline::drawCallback (void *sink, uint texture, uint width, uint heig glBegin(GL_QUADS); // Front Face - glTexCoord2f((gfloat)width, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); + glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); - glTexCoord2f(0.0f, (gfloat)height); glVertex3f( 1.0f, 1.0f, 1.0f); - glTexCoord2f((gfloat)width, (gfloat)height); glVertex3f(-1.0f, 1.0f, 1.0f); + glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); + glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Back Face glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); - glTexCoord2f(0.0f, (gfloat)height); glVertex3f(-1.0f, 1.0f, -1.0f); - glTexCoord2f((gfloat)width, (gfloat)height); glVertex3f( 1.0f, 1.0f, -1.0f); - glTexCoord2f((gfloat)width, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); + glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); + glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); + glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // Top Face - glTexCoord2f((gfloat)width, (gfloat)height); glVertex3f(-1.0f, 1.0f, -1.0f); - glTexCoord2f((gfloat)width, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); + glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); + glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); - glTexCoord2f(0.0f, (gfloat)height); glVertex3f( 1.0f, 1.0f, -1.0f); + glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Bottom Face - glTexCoord2f((gfloat)width, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); + glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); - glTexCoord2f(0.0f, (gfloat)height); glVertex3f( 1.0f, -1.0f, 1.0f); - glTexCoord2f((gfloat)width,(gfloat)height); glVertex3f(-1.0f, -1.0f, 1.0f); + glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, 1.0f); + glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Right face glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); - glTexCoord2f(0.0f, (gfloat)height); glVertex3f( 1.0f, 1.0f, -1.0f); - glTexCoord2f((gfloat)width, (gfloat)height); glVertex3f( 1.0f, 1.0f, 1.0f); - glTexCoord2f((gfloat)width, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); + glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); + glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); + glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // Left Face - glTexCoord2f((gfloat)width, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); + glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); - glTexCoord2f(0.0f, (gfloat)height); glVertex3f(-1.0f, 1.0f, 1.0f); - glTexCoord2f((gfloat)width, (gfloat)height); glVertex3f(-1.0f, 1.0f, -1.0f); + glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); + glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glEnd(); //return TRUE causes a postRedisplay - return FALSE; + return TRUE; } gboolean Pipeline::bus_call (GstBus *bus, GstMessage *msg, Pipeline* p) @@ -274,10 +275,10 @@ gboolean Pipeline::bus_call (GstBus *bus, GstMessage *msg, Pipeline* p) return TRUE; } -void Pipeline::cb_new_pad (GstElement* decodebin, GstPad* pad, gboolean last, Pipeline* p) +void Pipeline::cb_new_pad (GstElement* decodebin, GstPad* pad, Pipeline* p) { GstElement* glimagesink = p->getVideoSink(); - GstPad* glpad = gst_element_get_pad (glimagesink, "sink"); + GstPad* glpad = gst_element_get_static_pad (glimagesink, "sink"); //only link once if (GST_PAD_IS_LINKED (glpad)) @@ -286,7 +287,7 @@ void Pipeline::cb_new_pad (GstElement* decodebin, GstPad* pad, gboolean last, Pi return; } - GstCaps* caps = gst_pad_get_caps (pad); + GstCaps* caps = gst_pad_get_current_caps (pad); GstStructure* str = gst_caps_get_structure (caps, 0); if (!g_strrstr (gst_structure_get_name (str), "video")) { diff --git a/tests/examples/gl/qt/mousevideooverlay/pipeline.h b/tests/examples/gl/qt/mousevideooverlay/pipeline.h index 326e465..66511ed 100644 --- a/tests/examples/gl/qt/mousevideooverlay/pipeline.h +++ b/tests/examples/gl/qt/mousevideooverlay/pipeline.h @@ -22,6 +22,7 @@ #define PIPELINE_H #include +#include #include //#include @@ -60,10 +61,10 @@ private: void doExpose() const; void doRotate(); - static gboolean reshapeCallback (void *sink, guint width, guint height, gpointer data); - static gboolean drawCallback (void *sink, guint texture, guint width, guint height, gpointer data); + static gboolean reshapeCallback (void *sink, void *context, guint width, guint height, gpointer data); + static gboolean drawCallback (void *sink, void *context, guint texture, guint width, guint height, gpointer data); static gboolean bus_call (GstBus *bus, GstMessage *msg, Pipeline* p); - static void cb_new_pad (GstElement* decodebin, GstPad* pad, gboolean last, Pipeline* p); + static void cb_new_pad (GstElement* decodebin, GstPad* pad, Pipeline* p); static gboolean cb_expose (gpointer data); static gboolean cb_rotate (gpointer data); static GstBusSyncReply create_window (GstBus* bus, GstMessage* message, const Pipeline* pipeline); diff --git a/tests/examples/gl/qt/mousevideooverlay/qrenderer.cpp b/tests/examples/gl/qt/mousevideooverlay/qrenderer.cpp index 54e94fc..b5187bd 100644 --- a/tests/examples/gl/qt/mousevideooverlay/qrenderer.cpp +++ b/tests/examples/gl/qt/mousevideooverlay/qrenderer.cpp @@ -20,7 +20,7 @@ #include "qrenderer.h" -QRenderer::QRenderer(const QString videoLocation, QWidget *parent, Qt::WFlags flags) +QRenderer::QRenderer(const QString videoLocation, QWidget *parent, Qt::WindowFlags flags) : QWidget(parent, flags), m_gt(winId(), videoLocation) { diff --git a/tests/examples/gl/qt/mousevideooverlay/qrenderer.h b/tests/examples/gl/qt/mousevideooverlay/qrenderer.h index 771876d..90e85ff 100644 --- a/tests/examples/gl/qt/mousevideooverlay/qrenderer.h +++ b/tests/examples/gl/qt/mousevideooverlay/qrenderer.h @@ -30,7 +30,7 @@ class QRenderer : public QWidget Q_OBJECT public: - QRenderer(const QString videoLocation, QWidget *parent = 0, Qt::WFlags flags = 0); + QRenderer(const QString videoLocation, QWidget *parent = 0, Qt::WindowFlags flags = 0); ~QRenderer(); void paintEvent(QPaintEvent* event); void mouseMoveEvent(QMouseEvent* event); diff --git a/tests/examples/gl/qt/qglwidgetvideooverlay/main.cpp b/tests/examples/gl/qt/qglwidgetvideooverlay/main.cpp index fa54a6b..a099d36 100644 --- a/tests/examples/gl/qt/qglwidgetvideooverlay/main.cpp +++ b/tests/examples/gl/qt/qglwidgetvideooverlay/main.cpp @@ -19,6 +19,7 @@ */ #include +#include #include "qglrenderer.h" int main(int argc, char *argv[]) @@ -26,13 +27,13 @@ int main(int argc, char *argv[]) QApplication a(argc, argv); a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit())); - QString videolcoation = QFileDialog::getOpenFileName(0, "Select a video file", + QString videolocation = QFileDialog::getOpenFileName(0, "Select a video file", ".", "Format (*.avi *.mkv *.ogg *.asf *.mov)"); - if (videolcoation.isEmpty()) + if (videolocation.isEmpty()) return -1; - QGLRenderer w(videolcoation); + QGLRenderer w(videolocation); w.setWindowTitle("glimagesink implements the gstvideooverlay interface"); return a.exec(); diff --git a/tests/examples/gl/qt/qglwidgetvideooverlay/pipeline.cpp b/tests/examples/gl/qt/qglwidgetvideooverlay/pipeline.cpp index bed38b4..84d69e7 100644 --- a/tests/examples/gl/qt/qglwidgetvideooverlay/pipeline.cpp +++ b/tests/examples/gl/qt/qglwidgetvideooverlay/pipeline.cpp @@ -20,6 +20,7 @@ #include #include +#include #include "pipeline.h" Pipeline::Pipeline(const WId id, const QString videoLocation): @@ -40,7 +41,7 @@ Pipeline::~Pipeline() void Pipeline::create() { - qDebug("Loading video: %s", m_videoLocation.toAscii().data()); + qDebug("Loading video: %s", m_videoLocation.toLatin1().data()); gst_init (NULL, NULL); @@ -51,12 +52,12 @@ void Pipeline::create() m_bus = gst_pipeline_get_bus (GST_PIPELINE (m_pipeline)); gst_bus_add_watch (m_bus, (GstBusFunc) bus_call, this); - gst_bus_set_sync_handler (m_bus, (GstBusSyncHandler) create_window, this); + gst_bus_set_sync_handler (m_bus, (GstBusSyncHandler) create_window, this, NULL); gst_object_unref (m_bus); GstElement* videosrc = gst_element_factory_make ("filesrc", "filesrc0"); GstElement* decodebin = gst_element_factory_make ("decodebin", "decodebin0"); - m_glupload = gst_element_factory_make ("glupload", "glupload0"); + m_glupload = gst_element_factory_make ("glcolorscale", NULL); m_glimagesink = gst_element_factory_make ("glimagesink", "sink0"); if (!videosrc || !decodebin || !m_glupload || !m_glimagesink ) @@ -71,9 +72,9 @@ void Pipeline::create() NULL) ; g_object_set(G_OBJECT(videosrc), "num-buffers", 800, NULL); - g_object_set(G_OBJECT(videosrc), "location", m_videoLocation.toAscii().data(), NULL); - g_object_set(G_OBJECT(m_glimagesink), "client-reshape-callback", reshapeCallback, NULL); - g_object_set(G_OBJECT(m_glimagesink), "client-draw-callback", drawCallback, NULL); + g_object_set(G_OBJECT(videosrc), "location", m_videoLocation.toLatin1().data(), NULL); + g_signal_connect_object (G_OBJECT(m_glimagesink), "client-reshape", (GCallback) reshapeCallback, NULL, G_CONNECT_AFTER); + g_signal_connect_object (G_OBJECT(m_glimagesink), "client-draw", (GCallback) drawCallback, NULL, G_CONNECT_AFTER); gst_bin_add_many (GST_BIN (m_pipeline), videosrc, decodebin, m_glupload, m_glimagesink, NULL); @@ -87,7 +88,7 @@ void Pipeline::create() gst_element_link_pads (videosrc, "src", decodebin, "sink"); - g_signal_connect (decodebin, "new-decoded-pad", G_CALLBACK (cb_new_pad), this); + g_signal_connect (decodebin, "pad-added", G_CALLBACK (cb_new_pad), this); } void Pipeline::start() @@ -156,7 +157,7 @@ void Pipeline::exposeRequested() //----------------------------------------------------------------------- //client reshape callback -gboolean Pipeline::reshapeCallback (void *sink, guint width, guint height, gpointer data) +gboolean Pipeline::reshapeCallback (void *sink, void *context, guint width, guint height, gpointer data) { glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); @@ -168,7 +169,7 @@ gboolean Pipeline::reshapeCallback (void *sink, guint width, guint height, gpoin } //client draw callback -gboolean Pipeline::drawCallback (void *sink, guint texture, guint width, guint height, gpointer data) +gboolean Pipeline::drawCallback (void *sink, void *context, guint texture, guint width, guint height, gpointer data) { static GLfloat xrot = 0; static GLfloat yrot = 0; @@ -209,35 +210,35 @@ gboolean Pipeline::drawCallback (void *sink, guint texture, guint width, guint h glBegin(GL_QUADS); // Front Face - glTexCoord2f((gfloat)width, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); + glTexCoord2f(1.0, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); - glTexCoord2f(0.0f, (gfloat)height); glVertex3f( 1.0f, 1.0f, 1.0f); - glTexCoord2f((gfloat)width, (gfloat)height); glVertex3f(-1.0f, 1.0f, 1.0f); + glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); + glTexCoord2f(1.0, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Back Face glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); - glTexCoord2f(0.0f, (gfloat)height); glVertex3f(-1.0f, 1.0f, -1.0f); - glTexCoord2f((gfloat)width, (gfloat)height); glVertex3f( 1.0f, 1.0f, -1.0f); - glTexCoord2f((gfloat)width, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); + glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); + glTexCoord2f(1.0, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); + glTexCoord2f(1.0, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // Top Face - glTexCoord2f((gfloat)width, (gfloat)height); glVertex3f(-1.0f, 1.0f, -1.0f); - glTexCoord2f((gfloat)width, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); + glTexCoord2f(1.0, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); + glTexCoord2f(1.0, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); - glTexCoord2f(0.0f, (gfloat)height); glVertex3f( 1.0f, 1.0f, -1.0f); + glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Bottom Face - glTexCoord2f((gfloat)width, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); + glTexCoord2f(1.0, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); - glTexCoord2f(0.0f, (gfloat)height); glVertex3f( 1.0f, -1.0f, 1.0f); - glTexCoord2f((gfloat)width,(gfloat)height); glVertex3f(-1.0f, -1.0f, 1.0f); + glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, 1.0f); + glTexCoord2f(1.0,1.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Right face glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); - glTexCoord2f(0.0f, (gfloat)height); glVertex3f( 1.0f, 1.0f, -1.0f); - glTexCoord2f((gfloat)width, (gfloat)height); glVertex3f( 1.0f, 1.0f, 1.0f); - glTexCoord2f((gfloat)width, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); + glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); + glTexCoord2f(1.0, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); + glTexCoord2f(1.0, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // Left Face - glTexCoord2f((gfloat)width, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); + glTexCoord2f(1.0, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); - glTexCoord2f(0.0f, (gfloat)height); glVertex3f(-1.0f, 1.0f, 1.0f); - glTexCoord2f((gfloat)width, (gfloat)height); glVertex3f(-1.0f, 1.0f, -1.0f); + glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); + glTexCoord2f(1.0, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glEnd(); xrot+=0.03f; @@ -278,10 +279,10 @@ gboolean Pipeline::bus_call (GstBus *bus, GstMessage *msg, Pipeline* p) return TRUE; } -void Pipeline::cb_new_pad (GstElement* decodebin, GstPad* pad, gboolean last, Pipeline* p) +void Pipeline::cb_new_pad (GstElement* decodebin, GstPad* pad, Pipeline* p) { GstElement* glupload = p->getVideoSink(); - GstPad* glpad = gst_element_get_pad (glupload, "sink"); + GstPad* glpad = gst_element_get_static_pad (glupload, "sink"); //only link once if (GST_PAD_IS_LINKED (glpad)) @@ -290,7 +291,7 @@ void Pipeline::cb_new_pad (GstElement* decodebin, GstPad* pad, gboolean last, Pi return; } - GstCaps* caps = gst_pad_get_caps (pad); + GstCaps* caps = gst_pad_get_current_caps (pad); GstStructure* str = gst_caps_get_structure (caps, 0); if (!g_strrstr (gst_structure_get_name (str), "video")) { diff --git a/tests/examples/gl/qt/qglwidgetvideooverlay/pipeline.h b/tests/examples/gl/qt/qglwidgetvideooverlay/pipeline.h index b702647..459d117 100644 --- a/tests/examples/gl/qt/qglwidgetvideooverlay/pipeline.h +++ b/tests/examples/gl/qt/qglwidgetvideooverlay/pipeline.h @@ -59,10 +59,10 @@ private: WId winId() const { return m_winId; } void doExpose() const; - static gboolean reshapeCallback (void *sink, guint width, guint height, gpointer data); - static gboolean drawCallback (void *sink, guint texture, guint width, guint height, gpointer data); + static gboolean reshapeCallback (void *sink, void *context, guint width, guint height, gpointer data); + static gboolean drawCallback (void *sink, void *context, guint texture, guint width, guint height, gpointer data); static gboolean bus_call (GstBus *bus, GstMessage *msg, Pipeline* p); - static void cb_new_pad (GstElement* decodebin, GstPad* pad, gboolean last, Pipeline* p); + static void cb_new_pad (GstElement* decodebin, GstPad* pad, Pipeline* p); static gboolean cb_expose (gpointer data); static GstBusSyncReply create_window (GstBus* bus, GstMessage* message, const Pipeline* pipeline); }; diff --git a/tests/examples/gl/qt/qglwidgetvideooverlay/qglwidgetvideooverlay.pro b/tests/examples/gl/qt/qglwidgetvideooverlay/qglwidgetvideooverlay.pro index 2fa56e8..0fa30a9 100644 --- a/tests/examples/gl/qt/qglwidgetvideooverlay/qglwidgetvideooverlay.pro +++ b/tests/examples/gl/qt/qglwidgetvideooverlay/qglwidgetvideooverlay.pro @@ -3,7 +3,10 @@ TARGET = qglwidgetvideooverlay DESTDIR = ./debug QT += opengl CONFIG += debug +CONFIG += link_pkgconfig +CONFIG+= compile_libtool DEFINES += UNICODE QT_THREAD_SUPPORT QT_CORE_LIB QT_GUI_LIB +PKGCONFIG = gstreamer-1.0 gstreamer-video-1.0 win32 { DEFINES += WIN32 @@ -29,18 +32,8 @@ LIBS += -L"C:/gstreamer/lib" \ unix { DEFINES += UNIX INCLUDEPATH += GeneratedFiles \ - GeneratedFiles/Debug \ - /usr/include/gstreamer-1.0 \ - /usr/local/include/gstreamer-1.0 \ - /usr/include/glib-2.0 \ - /usr/lib/glib-2.0/include \ - /usr/include/libxml2 -LIBS += -lgstreamer-1.0 \ - -lgstvideo-1.0 \ - -lglib-2.0 \ - -lgmodule-2.0 \ - -lgobject-2.0 \ - -lgthread-2.0 \ + GeneratedFiles/Debug +LIBS += \ -lGLU \ -lGL } diff --git a/tests/examples/gl/qt/qglwtextureshare/qglrenderer.cpp b/tests/examples/gl/qt/qglwtextureshare/qglrenderer.cpp index c7726d1..200c3e4 100644 --- a/tests/examples/gl/qt/qglwtextureshare/qglrenderer.cpp +++ b/tests/examples/gl/qt/qglwtextureshare/qglrenderer.cpp @@ -32,6 +32,8 @@ #include "qglrenderer.h" #include "pipeline.h" +#include + #if defined(Q_WS_MAC) extern void *qt_current_nsopengl_context(); #endif diff --git a/tests/examples/gl/qt/qglwtextureshare/qglwtextureshare.pro b/tests/examples/gl/qt/qglwtextureshare/qglwtextureshare.pro index 83e67d8..c3d3f3a 100644 --- a/tests/examples/gl/qt/qglwtextureshare/qglwtextureshare.pro +++ b/tests/examples/gl/qt/qglwtextureshare/qglwtextureshare.pro @@ -6,6 +6,8 @@ QT += opengl # the console on Windows # CONFIG += console DEFINES += UNICODE QT_THREAD_SUPPORT QT_CORE_LIB QT_GUI_LIB +CONFIG += link_pkgconfig compile_libtool +PKGCONFIG=gstreamer-1.0 gstreamer-video-1.0 gstreamer-gl-1.0 win32 { DEFINES += WIN32 @@ -30,21 +32,8 @@ LIBS += -L"C:/gstreamer/lib" \ } unix:!mac { DEFINES += UNIX - INCLUDEPATH += /home/matt/Projects/jhbuild/native/usr/include/gstreamer-1.0 \ - /home/matt/Projects/jhbuild/native/usr/include/glib-2.0 \ - /home/matt/Projects/jhbuild/native/usr/lib/glib-2.0/include \ - /usr/include/gstreamer-1.0 \ - /usr/local/include/gstreamer-1.0 \ - /usr/include/glib-2.0 \ - /usr/lib/glib-2.0/include \ - /usr/include/libxml2 - LIBS += -L/home/matt/Projects/jhbuild/native/usr/lib \ - -lgstreamer-1.0 \ + LIBS += \ -lgstvideo-1.0 \ - -lglib-2.0 \ - -lgmodule-2.0 \ - -lgobject-2.0 \ - -lgthread-2.0 \ -lgstgl-1.0 \ -lGLU \ -lGL diff --git a/tests/examples/gl/qt/videooverlay/Debug/videooverlay b/tests/examples/gl/qt/videooverlay/Debug/videooverlay deleted file mode 100755 index 3651f2b64cfdcdcc54beea1a3dd305d3cca5b5f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165466 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

33s97+r*O$*Epq|CXj9m{IC>Y~ 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 IRkU6FZ#kLMK>z>% diff --git a/tests/examples/gl/qt/videooverlay/videovideooverlay.pro b/tests/examples/gl/qt/videooverlay/videooverlay.pro similarity index 69% rename from tests/examples/gl/qt/videooverlay/videovideooverlay.pro rename to tests/examples/gl/qt/videooverlay/videooverlay.pro index 173b8c6..91f8419 100644 --- a/tests/examples/gl/qt/videooverlay/videovideooverlay.pro +++ b/tests/examples/gl/qt/videooverlay/videooverlay.pro @@ -1,9 +1,10 @@ TEMPLATE = app TARGET = videooverlay -DESTDIR = ./Debug -CONFIG += debug +DESTDIR = ./debug +CONFIG += debug link_pkgconfig compile_libtool DEFINES += UNICODE QT_THREAD_SUPPORT QT_CORE_LIB QT_GUI_LIB QT += gui widgets +PKGCONFIG=gstreamer-1.0 gstreamer-video-1.0 win32 { DEFINES += WIN32 @@ -27,20 +28,8 @@ LIBS += -L"C:/gstreamer/bin" \ unix { DEFINES += UNIX INCLUDEPATH += GeneratedFiles \ - GeneratedFiles/Debug \ - /usr/include/gstreamer-1.0 \ - /usr/local/include/gstreamer-1.0 \ - /usr/include/glib-2.0 \ - /usr/lib/glib-2.0/include \ - /usr/include/libxml2 -LIBS += -lgstreamer-1.0 \ - -lgstvideo-1.0 \ - -lglib-2.0 \ - -lgmodule-2.0 \ - -lgobject-2.0 \ - -lgthread-2.0 \ - -lGLU \ - -lGL + GeneratedFiles/Debug +LIBS += -lGLU -lGL } DEPENDPATH += . -- 2.7.4