Commit a6798883 authored by Eike Hein's avatar Eike Hein

Initial commit.

parents
cmake_minimum_required(VERSION 3.12)
find_package(ECM 5.54.0 REQUIRED NO_MODULE)
set(CMAKE_CXX_STANDARD 14)
set(CXX_STANDARD_REQUIRED ON)
set(QT_MIN_VERSION "5.12.0")
set(KF5_MIN_VERSION "5.54.0")
project(kirogi VERSION 0.1)
set(CMAKE_AUTOMOC ON)
set(AUTOMOC_MOC_OPTIONS -Muri=org.kde.kirogi)
set(CMAKE_AUTORCC ON)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
include(CMakePackageConfigHelpers)
include(GenerateExportHeader)
include(WriteBasicConfigVersionFile)
include(FeatureSummary)
include(ECMGenerateHeaders)
include(ECMAddAppIcon)
include(ECMInstallIcons)
include(ECMSetupVersion)
include(ECMQMLModules)
include(ECMQtDeclareLoggingCategory)
include(GNUInstallDirs)
include(KDEInstallDirs)
include(KDECompilerSettings NO_POLICY_SCOPE)
include(KDECMakeSettings)
include(FindPkgConfig)
option(BUILD_APP "Build the Kirogi application." TRUE)
add_feature_info(BUILD_APP BUILD_APP "Build the Kirogi application.")
option(BUILD_QT_QUICK_LIB "Build the Kirogi library with Qt Quick support." TRUE)
add_feature_info(BUILD_QT_QUICK_LIB BUILD_QT_QUICK_LIB "Build the Kirogi library with Qt Quick support.")
option(BUILD_PLUGINS "Build the Kirogi plugins." TRUE)
add_feature_info(BUILD_PLUGINS BUILD_PLUGINS "Build the Kirogi plugins.")
option(COMPILE_QML "Pre-compile QML files using the Qt Quick compiler." FALSE)
add_feature_info(COMPILE_QML COMPILE_QML "Pre-compile QML files using the Qt Quick compiler.")
if (BUILD_APP)
if(NOT ANDROID)
set(qtDesktopComponents "Widgets")
set(kfDesktopComponents
"Crash"
"DNSSD"
)
else()
# The Material style requires QtSvg.
set(qtAndroidComponents
"AndroidExtras"
"Svg"
)
endif()
ecm_find_qmlmodule(QtGamePad 5.12)
ecm_find_qmlmodule(QtGraphicalEffects 1.12)
ecm_find_qmlmodule(QtLocation 5.12)
ecm_find_qmlmodule(QtPositioning 5.12)
ecm_find_qmlmodule(org.kde.kirigami 2.6)
endif()
if(BUILD_APP OR BUILD_QT_QUICK_LIB)
set(qtQuickComponents
"Qml"
"Quick"
)
endif()
find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS
Core
Gamepad
Network
Positioning
${qtQuickComponents}
${qtDesktopComponents}
${qtAndroidComponents}
)
find_package(KF5 ${KF5_MIN_VERSION} REQUIRED
ConfigWidgets
CoreAddons
I18n
Kirigami2
${kfDesktopComponents}
)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GSTREAMER REQUIRED
gstreamer-1.0
gstreamer-video-1.0
)
link_directories(${GSTREAMER_LIBRARY_DIRS})
include_directories (${GSTREAMER_INCLUDE_DIRS})
if(ANDROID)
pkg_check_modules(GSTREAMER REQUIRED
gstreamer-1.0
gstreamer-audio-1.0
gstreamer-codecparsers-1.0
gstreamer-controller-1.0
gstreamer-gl-1.0
gstreamer-net-1.0
gstreamer-pbutils-1.0
gstreamer-rtp-1.0
gstreamer-tag-1.0
gstreamer-video-1.0
gio-2.0
graphene-1.0
libjpeg
libpng16
libavformat
libavcodec
libavfilter
libavutil
libswresample
x264
)
link_directories(${GSTREAMER_LIBRARY_DIRS}/gstreamer-1.0/)
endif()
if(COMPILE_QML)
find_package(Qt5QuickCompiler)
set_package_properties(Qt5QuickCompiler PROPERTIES
DESCRIPTION "Pre-compile QML files using the Qt Quick compiler."
TYPE OPTIONAL
)
endif()
add_definitions(
-DQT_USE_QSTRINGBUILDER
-DQT_NO_CAST_TO_ASCII
-DQT_STRICT_ITERATORS
-DQT_NO_URL_CAST_FROM_STRING
-DQT_NO_CAST_FROM_BYTEARRAY
-DQT_NO_SIGNALS_SLOTS_KEYWORDS
-DQT_USE_FAST_OPERATOR_PLUS
)
# For KConfigXT out-of-source builds.
include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_subdirectory(data)
add_subdirectory(src)
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#! /bin/sh
$XGETTEXT `find . -name \*.cpp -o -name \*.qml -o -name \*.js` -o $podir/kirogi.pot
# Kirogi
Kirogi is a ground control application for drones. Take to the skies, open source-style.
### Screenshot
![A screenshot of Kirogi's in-flight UI](https://www.kde.org/images/screenshots/kirogi.png "Kirogi's in-flight UI")
### Features
* Direct flight controls
* Fly by touch on a Navigation Map
* Trigger vehicle actions (e.g. flips, trim)
* Gamepad/joypad support
* Live video
* Configure flight parameters (speed, altitude limits)
* Support for Parrot (Anafi, Bebop 2) and Ryze Tello drones (more planned)
## FAQ
### How is Kirogi different from other ground control applications?
Created from scratch in February 2019, Kirogi benefits from a lot of prior art. It aims to provide the following unique combination of features:
* **End-user focus.** As a [KDE application](https://manifesto.kde.org/), Kirogi aims to be a polished experience that is fun and easy to use for novices and experts alike, with special emphasis on a premium direct control experience.
* **Multi-vendor.** Kirogi aims to have wide out-of-the-box support for many vehicles by different manufacturers. Users should be able to use different vehicles without needing to switch ground control software.
* **Highly portable.** Kirogi aims to support many different mobile and desktop platforms. Users should be able to switch platforms without needing to switch ground control software.
* **Freedom.** Kirogi will always be freely-licensed. Users should have control over and be able to extend and modify their ground control on their own.
* **Open governance.** Created and maintained by the [KDE community](https://manifesto.kde.org/), an organization with more than two decades of experience in hosting free software projects.
### Will Kirogi support my drone?
The Kirogi project is currently in its early stages. For now it supports the following drones:
* Parrot Anafi
* Parrot Bebop 2
* Ryze Tello
Support for additional vehicles, also by other manufacturers, is very much a goal. If your vehicle is not on the list yet, check back later!
In particular, we plan to add support for [MAVLink](https://en.wikipedia.org/wiki/MAVLink) to interface with open vehicle systems.
Vehicle support is subject to availability for development and testing. If you are a manufacturer and would like to see Kirogi support your hardware, please [contact the board of directors of KDE e.V.](https://ev.kde.org/contact.php) for this and any other business inquiries.
### Can Kirogi download photos and videos from my drone?
Not yet. This feature is considered high priority and will be added before version 1.0.
### Does Kirogi support mission planning and upload?
Not yet. A mission planning mode is a future goal.
### Do I need a touchscreen to use Kirogi?
A touchscreen is not required to use Kirogi. It has basic support for two-stick gamepad/joypad controllers (it was tested with a Xbox One controller).
### Does Kirogi support the Parrot Skycontroller peripherals?
Not yet. There is basic support for two-stick gamepad/joypad controllers, however.
### What does the name mean?
The Kirogi project was started in South Korea. Kirogi (written "기러기" in the native writing system) is the Korean word for wild geese.
_Wild_ geese are known as expert flyers. Kirogi's mascot is a farm goose with an adventurous spirit, who flies just as well thanks to the use of superior technology.
## Technology and License
### Does Kirogi support [MAVLink](https://en.wikipedia.org/wiki/MAVLink)?
Not yet. MAVLink support for both manual control and flight plans is planned for future versions.
### What technology does Kirogi use?
Kirogi is written in C++14 and QML. It uses the [Kirigami](https://www.kde.org/products/kirigami/) UI toolkit (part of [KDE Frameworks](https://www.kde.org/products/frameworks/)) and Qt Quick, supported on a diverse array of mobile an desktop platforms.
### What is the license?
Kirogi's library and bundled vehicle support plugins are licensed under LGPL v2.1 (or later). The frontend (UI and other business logic) is licensed under GPL v2 (or later).
### I have a supported Parrot drone. Do I need the Parrot SDK to use Kirogi?
The Parrot SDK is not required to use Kirogi. It contains its own implementation of the protocol used to operate Parrot brand drones.
# Planned Features
## Major functionality
* Mission / flight planning; flight plan upload
* Flight Recorder: Database of past flight with stats & graphs
* Media Gallery: Browse videos and photos; download media to device
## Vehicle Management
* Persistent per-vehicle settings
## Piloting
* Trigger planned animations/flight plans (fly a circle, etc.)
* Follow Me
* Subject tracking
## Camera/media support
* Still picture taking
* Still picture settings
* Video picture settings
* Display video recording duration
* Display storage status
* Camera gimbal control
* Local stream recording
* Multiple cameras
## Navigation Map
* Flight regulationss overlay
## Protocol/vendor support
* MAVLink
* MultiWii Serial Protocol (MSP)
## Library/backend
* Multiple concurrent vehicle connections
* More control over discovery
* Vehicle->VehicleComponents abstraction
#
# Copyright 2019 Eike Hein <hein@kde.org>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) version 3, or any
# later version accepted by the membership of KDE e.V. (or its
# successor approved by the membership of KDE e.V.), which shall
# act as a proxy defined in Section 6 of version 3 of the license.
#
# 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
if (QTZEROCONF_INCLUDE_DIR AND QTZEROCONF_LIBRARIES)
set (QTZEROCONF_FOUND TRUE)
else (QTZEROCONF_INCLUDE_DIR AND QTZEROCONF_LIBRARIES)
find_library(QTZEROCONF_LIBRARIES NAMES QtZeroConf)
find_path(QTZEROCONF_INCLUDE_DIR NAMES QtZeroConf/qzeroconf.h)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(QtZeroConf DEFAULT_MSG QTZEROCONF_LIBRARIES QTZEROCONF_INCLUDE_DIR)
endif (QTZEROCONF_INCLUDE_DIR AND QTZEROCONF_LIBRARIES)
mark_as_advanced(QTZEROCONF_LIBRARIES QTZEROCONF_INCLUDE_DIR)
add_subdirectory(icons)
install(PROGRAMS org.kde.kirogi.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/org.kde.kirogi.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
ecm_install_icons(ICONS sc-apps-kirogi.svg DESTINATION ${ICON_INSTALL_DIR} THEME hicolor)
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2019 Eike Hein -->
<component type="desktop-application">
<id>org.kde.kirogi.desktop</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>LGPL-2.1+ AND GPL-2.0+</project_license>
<name>Kirogi</name>
<summary>UAV (drone) ground control</summary>
<developer_name>KDE Kirogi Developers</developer_name>
<update_contact>hein_AT_kde.org</update_contact>
<description>
<p>Kirogi is a ground control application for drones. Take to the skies, open source-style.</p>
<p>Features:</p>
<ul>
<li>Direct flight controls</li>
<li>Fly by touch on a Navigation Map</li>
<li>Trigger vehicle actions (e.g. flips, trim)</li>
<li>Gamepad/joypad support</li>
<li>Live video</li>
<li>Take photo and record video</li>
<li>Configure flight parameters (speed, altitude limits)</li>
<li>Support for Parrot (Anafi, Bebop 2) and Ryze Tello drones (more planned)</li>
</ul>
</description>
<categories>
<category>Science</category>
<category>Geoscience</category>
<category>RemoteAccess</category>
<category>Sports</category>
<category>Photography</category>
</categories>
<screenshots>
<screenshot type="default">
<image width="1920" height="1080">https://www.kde.org/images/screenshots/kirogi.png</image>
<caption>The Kirogi in-flight UI</caption>
</screenshot>
</screenshots>
<url type="homepage">https://www.kirogi.org/</url>
<url type="bugtracker">https://bugs.kde.org/enter_bug.cgi?format=guided&amp;product=kirogi</url>
<project_group>KDE</project_group>
<translation type="gettext">kirogi</translation>
<translation type="gettext">kirogiparrotplugin</translation>
<translation type="gettext">kirogiryzetelloplugin</translation>
<provides>
<binary>kirogi</binary>
</provides>
<launchable type="desktop-id">org.kde.kirogi.desktop</launchable>
</component>
[Desktop Entry]
Type=Application
Exec=kirogi -qwindowtitle %c %u
Icon=kirogi
GenericName=Drone ground control
Terminal=false
Name=Kirogi
Categories=Qt;KDE;Network;IRCClient;Science;Geoscience;RemoteAccess;Sports;Photography
X-DBUS-StartupType=Unique
X-DBUS-ServiceName=org.kde.kirogi
StartupNotify=true
<?xml version='1.0' encoding='utf-8'?>
<manifest package="org.kde.kirogi" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="0.1" android:versionCode="1" android:installLocation="auto">
<application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="Kirogi" android:icon="@mipmap/ic_launcher">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|locale|fontScale|keyboard|keyboardHidden|navigation"
android:name="org.qtproject.qt5.android.bindings.QtActivity"
android:label="@string/app_name"
android:screenOrientation="userLandscape"
android:launchMode="singleTask"
android:keepScreenOn="true"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<meta-data android:name="android.app.auto_screen_scale_factor" android:value="true"/>
<meta-data android:name="android.app.extract_android_style" android:value="minimal"/>
<meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/splash"/>
<meta-data android:name="android.app.splash_screen_sticky" android:value="true"/>
<meta-data android:name="android.app.lib_name" android:value="kirogi"/>
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
<meta-data android:name="android.app.repository" android:value="default"/>
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
<meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
<!-- Deploy Qt libs as part of package -->
<meta-data android:name="android.app.bundle_local_qt_libs" android:value="1"/>
<meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
<meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
<!-- Run with local libs -->
<meta-data android:name="android.app.use_local_qt_libs" android:value="1"/>
<meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
<meta-data android:name="android.app.load_local_libs" android:value="plugins/platforms/android/libqtforandroid.so:plugins/bearer/libqandroidbearer.so:plugins/position/libqtposition_android.so"/>
<meta-data android:name="android.app.load_local_jars" android:value="jar/QtAndroid.jar:jar/QtAndroidAccessibility.jar:jar/QtAndroid-bundled.jar:jar/QtAndroidAccessibility-bundled.jar:jar/QtAndroidBearer.jar:jar/QtAndroidBearer-bundled.jar:jar/QtPositioning.jar:jar/QtPositioning-bundled.jar"/>
<meta-data android:name="android.app.static_init_classes" android:value="org.qtproject.qt5.android.positioning.QtPositioning:org.qtproject.qt5.android.positioning.QtPositioning"/>
<!-- Messages maps -->
<meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
<meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
<meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
<!-- Messages maps -->
</activity>
</application>
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<uses-feature android:name="android.hardware.location.network" />
<uses-feature android:name="android.hardware.location.gps" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle" >
<solid android:color="#FFFFFFFF"/>
</shape>
</item>
<item>
<bitmap android:src="@mipmap/ic_launcher"
android:gravity="center"/>
</item>
</layer-list>
<?xml version='1.0' encoding='utf-8'?>
<resources>
<array name="qt_sources">
<item>https://download.qt-project.org/ministro/android/qt5/latest</item>
</array>
<!-- The following is handled automatically by the deployment tool. It should
not be edited manually. -->
<array name="bundled_libs">
<!-- %%INSERT_EXTRA_LIBS%% -->
</array>
<array name="qt_libs">
<!-- %%INSERT_QT_LIBS%% -->
</array>
<array name="bundled_in_lib">
<!-- %%INSERT_BUNDLED_IN_LIB%% -->
</array>
<array name="bundled_in_assets">
<!-- %%INSERT_BUNDLED_IN_ASSETS%% -->
</array>
</resources>
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="app_name">Kirogi</string>
</resources>
add_subdirectory(lib)
if(BUILD_PLUGINS)
add_subdirectory(plugins)
endif()
if(NOT BUILD_APP)
return()
endif()
if(ANDROID)
kirigami_package_breeze_icons(ICONS
arrow-down
arrow-up
battery-000
battery-010
battery-020
battery-030
battery-040
battery-050
battery-060
battery-070
battery-080
battery-100
battery-missing
chronometer-reset
clock
computer-symbolic
configure
documentinfo
edit-redo
edit-undo
emblem-default-symbolic
emblem-important-symbolic
emblem-photos-symbolic
emblem-videos-symbolic
format-align-vertical-bottom
go-down
go-home-symbolic
go-next
go-previous
go-up
gps
help-about
input-gamepad-symbolic
kruler-south
kruler-west
map-flat
media-record-symbolic
network-wireless-acquiring
network-wireless-connected-00
network-wireless-connected-100
network-wireless-connected-25
network-wireless-connected-50
network-wireless-connected-75
network-wireless-disconnected
phone-symbolic
question
speedometer
transform-move
uav
uav-quadcopter
window
)
endif()
if(ANDROID)
set(ANDROID_HEADERS
"gstreamer/gstreamer_android.h"
)
set(ANDROID_SOURCES
"gstreamer/gstreamer_android-1.0.c"
"gstreamer/qt_gstreamer_android-1.0.cpp"
)
endif()
set(kirogi_SRCS
main.cpp
permissions.cpp
gstreamer/gstreamerintegration.cpp
${ANDROID_HEADERS}
${ANDROID_SOURCES}
)
ecm_qt_declare_logging_category(kirogi_SRCS
HEADER debug.h
IDENTIFIER KIROGI_APP
CATEGORY_NAME "kirogi.app"
)
kconfig_add_kcfg_files(kirogi_SRCS GENERATE_MOC settings.kcfgc)
file(GLOB ICONS_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/../data/icons/*apps-kirogi.svg")
ecm_add_app_icon(kirogi_SRCS ICONS ${ICONS_SRCS})
# FIXME In lieu of `ecm_add_app_icon` having Android support.
if(ANDROID)
install(FILES ${ICONS_SRCS} DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/kirigami.2/icons/ RENAME "kirogi.svg")
endif()
if(COMPILE_QML)
qtquick_compiler_add_resources(RESOURCES resources.qrc)
else()
qt5_add_resources(RESOURCES resources.qrc)
endif()
add_executable(kirogi ${kirogi_SRCS} ${RESOURCES})
target_compile_definitions(kirogi PRIVATE -DUSE_QRC)
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
target_compile_options(kirogi PRIVATE -pedantic)
endif()
target_link_libraries(kirogi
Qt5::Core
Qt5::Positioning
Qt5::Qml
Qt5::Quick
KF5::ConfigWidgets
KF5::CoreAddons
KF5::I18n
${GSTREAMER_LIBRARIES}
)
if(NOT ANDROID)
target_link_libraries(kirogi
Qt5::Widgets
KF5::Crash
${GSTREAMER_LIBRARIES}
)
else()
target_link_libraries(kirogi
Qt5::AndroidExtras
# The Material style requires QtSvg.
Qt5::Svg
# GStreamer plugins
gstcoreelements
gsttypefindfunctions
gstplayback
gstvideotestsrc
gstvideoparsersbad
gstx264
gstudp
gstrtpmanager
gstrtp
gstqmlgl
gstopengl
gstlibav
x264
# Optional
gstandroidmedia
gstphotography-1.0
${GSTREAMER_STATIC_LIBRARIES}
)
endif()
install(FILES kirogi.kcfg DESTINATION ${KCFG_INSTALL_DIR})
install(TARGETS kirogi ${KF5_INSTALL_TARGETS_DEFAULT_ARGS})
This diff is collapsed.
#ifndef GSTREAMER_ANDROID_H
#define GSTREAMER_ANDROID_H
#include <gst/gst.h>
G_BEGIN_DECLS
void gst_android_init(JNIEnv *env, jclass klass, jobject context);
G_END_DECLS
#endif
/*
* Copyright 2019 Eike Hein <hein@kde.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "gstreamerintegration.h"
#include <QQuickItem>
#include <QQuickWindow>
#include <QRunnable>
class SetPlaying : public QRunnable
{
public:
SetPlaying(GstElement *);
~SetPlaying();
void run() override;
private:
GstElement *m_pipeline;
};
SetPlaying::SetPlaying(GstElement *pipeline)
{