diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 4bd40cfd4b09cbec6c2ac763d53ff505706e3e6b..a5815d36ccdc850d0b999619113a6c745b3ee172 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -331,6 +331,13 @@ contains (DEFINES, QGC_DISABLE_PAIRING) { DEFINES += QGC_ENABLE_PAIRING } + +# +# Add qmlglsink (libs/gst-plugins-good/ext/qt) +# + +include(qmlglsink.pri) + # # External library configuration # diff --git a/qmlglsink.pri b/qmlglsink.pri new file mode 100644 index 0000000000000000000000000000000000000000..e7af926debbe222fe915c28ff94ca574013bb41b --- /dev/null +++ b/qmlglsink.pri @@ -0,0 +1,30 @@ +LinuxBuild { + DEFINES += HAVE_QT_X11 HAVE_QT_EGLFS HAVE_QT_WAYLAND +} else:MacBuild { + DEFINES += HAVE_QT_MAC +} else:iOSBuild { + DEFINES += HAVE_QT_IOS +} else:WindowsBuild { + DEFINES += HAVE_QT_WIN32 + LIBS += opengl32.lib +} else:AndroidBuild { + DEFINES += HAVE_QT_ANDROID +} + +SOURCES += \ + libs/gst-plugins-good/ext/qt/gstplugin.cc \ + libs/gst-plugins-good/ext/qt/gstqtglutility.cc \ + libs/gst-plugins-good/ext/qt/gstqsgtexture.cc \ + libs/gst-plugins-good/ext/qt/gstqtsink.cc \ + libs/gst-plugins-good/ext/qt/gstqtsrc.cc \ + libs/gst-plugins-good/ext/qt/qtwindow.cc \ + libs/gst-plugins-good/ext/qt/qtitem.cc + +HEADERS += \ + libs/gst-plugins-good/ext/qt/gstqsgtexture.h \ + libs/gst-plugins-good/ext/qt/gstqtgl.h \ + libs/gst-plugins-good/ext/qt/gstqtglutility.h \ + libs/gst-plugins-good/ext/qt/gstqtsink.h \ + libs/gst-plugins-good/ext/qt/gstqtsrc.h \ + libs/gst-plugins-good/ext/qt/qtwindow.h \ + libs/gst-plugins-good/ext/qt/qtitem.h diff --git a/src/VideoStreaming/VideoStreaming.cc b/src/VideoStreaming/VideoStreaming.cc index f97d6e9a604fdaa5737181fdd19e7bf46ad0124f..bf2700f97162c0643790ce3e5566dff6a34e825e 100644 --- a/src/VideoStreaming/VideoStreaming.cc +++ b/src/VideoStreaming/VideoStreaming.cc @@ -43,10 +43,12 @@ GST_PLUGIN_STATIC_DECLARE(rtpmanager); GST_PLUGIN_STATIC_DECLARE(isomp4); GST_PLUGIN_STATIC_DECLARE(matroska); + GST_PLUGIN_STATIC_DECLARE(opengl); #endif #if defined(__android__) GST_PLUGIN_STATIC_DECLARE(androidmedia); #endif + GST_PLUGIN_STATIC_DECLARE(qmlgl); G_END_DECLS #endif @@ -158,21 +160,32 @@ void initializeVideoStreaming(int &argc, char* argv[], char* logpath, char* debu GST_PLUGIN_STATIC_REGISTER(matroska); GST_PLUGIN_STATIC_REGISTER(androidmedia); #endif -#else - Q_UNUSED(argc); - Q_UNUSED(argv); - Q_UNUSED(logpath); - Q_UNUSED(debuglevel); + +#if defined(__mobile__) + GST_PLUGIN_STATIC_REGISTER(opengl); #endif + /* the plugin must be loaded before loading the qml file to register the * GstGLVideoItem qml item * FIXME Add a QQmlExtensionPlugin into qmlglsink to register GstGLVideoItem * with the QML engine, then remove this */ - GstElement *sink = gst_element_factory_make ("qmlglsink", NULL); - if (sink != NULL) { + GstElement *sink = gst_element_factory_make("qmlglsink", nullptr); + + if (sink == nullptr) { + GST_PLUGIN_STATIC_REGISTER(qmlgl); + sink = gst_element_factory_make("qmlglsink", nullptr); + } + + if (sink != nullptr) { gst_object_unref(sink); - sink = NULL; + sink = nullptr; } else { qCritical() << "unable to find qmlglsink - you need to build it yourself and add to GST_PLUGIN_PATH"; } +#else + Q_UNUSED(argc); + Q_UNUSED(argv); + Q_UNUSED(logpath); + Q_UNUSED(debuglevel); +#endif } diff --git a/src/VideoStreaming/VideoStreaming.pri b/src/VideoStreaming/VideoStreaming.pri index c0373d5a123db60f2b23bfe073da38c7897192bc..d6b92ee7d6c1561658669a56bebe80694597372a 100644 --- a/src/VideoStreaming/VideoStreaming.pri +++ b/src/VideoStreaming/VideoStreaming.pri @@ -12,9 +12,10 @@ # LinuxBuild { + QT += x11extras waylandclient CONFIG += link_pkgconfig packagesExist(gstreamer-1.0) { - PKGCONFIG += gstreamer-1.0 gstreamer-video-1.0 + PKGCONFIG += gstreamer-1.0 gstreamer-video-1.0 gstreamer-gl-1.0 CONFIG += VideoEnabled } } else:MacBuild { @@ -39,10 +40,11 @@ LinuxBuild { exists($$GST_ROOT) { CONFIG += VideoEnabled - LIBS += -L$$GST_ROOT/lib -lgstreamer-1.0 -lgstvideo-1.0 -lgstbase-1.0 + LIBS += -L$$GST_ROOT/lib -lgstreamer-1.0 -lgstgl-1.0 -lgstvideo-1.0 -lgstbase-1.0 LIBS += -lglib-2.0 -lintl -lgobject-2.0 INCLUDEPATH += \ + $$GST_ROOT/include \ $$GST_ROOT/include/gstreamer-1.0 \ $$GST_ROOT/include/glib-2.0 \ $$GST_ROOT/lib/gstreamer-1.0/include \ @@ -86,10 +88,12 @@ LinuxBuild { -lgstrtpmanager \ -lgstisomp4 \ -lgstmatroska \ - -lgstandroidmedia + -lgstandroidmedia \ + -lgstopengl # Rest of GStreamer dependencies LIBS += -L$$GST_ROOT/lib \ + -lgraphene-1.0 -ljpeg -lpng16 \ -lgstfft-1.0 -lm \ -lgstnet-1.0 -lgio-2.0 \ -lgstphotography-1.0 -lgstgl-1.0 -lEGL \