From fffcbe7dbf85a80d4aafc18080cf5f9a37285169 Mon Sep 17 00:00:00 2001 From: dogmaphobic Date: Wed, 31 Aug 2016 17:24:49 -0400 Subject: [PATCH] Adding static RTSP libraries and dependencies to Android. --- QGCCommon.pri | 1 + src/VideoStreaming/VideoStreaming.cc | 57 ++++++++++++++++++++++++++- src/VideoStreaming/VideoStreaming.pri | 15 ++++--- 3 files changed, 67 insertions(+), 6 deletions(-) diff --git a/QGCCommon.pri b/QGCCommon.pri index 345aa8e07..3784a46ae 100644 --- a/QGCCommon.pri +++ b/QGCCommon.pri @@ -38,6 +38,7 @@ linux { equals(ANDROID_TARGET_ARCH, x86) { CONFIG += Androidx86Build DEFINES += __androidx86__ + DEFINES += QGC_DISABLE_UVC message("Android x86 build") } else { message("Android Arm build") diff --git a/src/VideoStreaming/VideoStreaming.cc b/src/VideoStreaming/VideoStreaming.cc index 69c2fa9b9..f70ddd60b 100644 --- a/src/VideoStreaming/VideoStreaming.cc +++ b/src/VideoStreaming/VideoStreaming.cc @@ -1,4 +1,4 @@ - /**************************************************************************** +/**************************************************************************** * * (c) 2009-2016 QGROUNDCONTROL PROJECT * @@ -19,6 +19,9 @@ #if defined(QGC_GST_STREAMING) #include +#ifdef __android__ +//#define ANDDROID_GST_DEBUG +#endif #endif #include "VideoStreaming.h" @@ -34,9 +37,11 @@ GST_PLUGIN_STATIC_DECLARE(coreelements); GST_PLUGIN_STATIC_DECLARE(libav); GST_PLUGIN_STATIC_DECLARE(rtp); + GST_PLUGIN_STATIC_DECLARE(rtsp); GST_PLUGIN_STATIC_DECLARE(udp); GST_PLUGIN_STATIC_DECLARE(videoparsersbad); GST_PLUGIN_STATIC_DECLARE(x264); + GST_PLUGIN_STATIC_DECLARE(rtpmanager); #endif G_END_DECLS #endif @@ -51,6 +56,49 @@ static void qgcputenv(const QString& key, const QString& root, const QString& pa #endif #endif +#ifdef ANDDROID_GST_DEBUG +// Redirects stdio and stderr to logcat +#include +#include +#include + +static int pfd[2]; +static pthread_t thr; +static const char *tag = "myapp"; + +static void *thread_func(void*) +{ + ssize_t rdsz; + char buf[128]; + while((rdsz = read(pfd[0], buf, sizeof buf - 1)) > 0) { + if(buf[rdsz - 1] == '\n') --rdsz; + buf[rdsz] = 0; /* add null-terminator */ + __android_log_write(ANDROID_LOG_DEBUG, tag, buf); + } + return 0; +} + +int start_logger(const char *app_name) +{ + tag = app_name; + + /* make stdout line-buffered and stderr unbuffered */ + setvbuf(stdout, 0, _IOLBF, 0); + setvbuf(stderr, 0, _IONBF, 0); + + /* create the pipe and redirect stdout and stderr */ + pipe(pfd); + dup2(pfd[1], 1); + dup2(pfd[1], 2); + + /* spawn the logging thread */ + if(pthread_create(&thr, 0, thread_func, 0) == -1) + return -1; + pthread_detach(thr); + return 0; +} +#endif + void initializeVideoStreaming(int &argc, char* argv[]) { #if defined(QGC_GST_STREAMING) @@ -70,6 +118,11 @@ void initializeVideoStreaming(int &argc, char* argv[]) qgcputenv("GST_PLUGIN_PATH", currentDir, "/gstreamer-plugins"); #endif // Initialize GStreamer + #ifdef ANDDROID_GST_DEBUG + start_logger("gst_log"); + qputenv("GST_DEBUG", "*:4"); + qputenv("GST_DEBUG_NO_COLOR", "1"); + #endif GError* error = NULL; if (!gst_init_check(&argc, &argv, &error)) { qCritical() << "gst_init_check() failed: " << error->message; @@ -82,9 +135,11 @@ void initializeVideoStreaming(int &argc, char* argv[]) GST_PLUGIN_STATIC_REGISTER(coreelements); GST_PLUGIN_STATIC_REGISTER(libav); GST_PLUGIN_STATIC_REGISTER(rtp); + GST_PLUGIN_STATIC_REGISTER(rtsp); GST_PLUGIN_STATIC_REGISTER(udp); GST_PLUGIN_STATIC_REGISTER(videoparsersbad); GST_PLUGIN_STATIC_REGISTER(x264); + GST_PLUGIN_STATIC_REGISTER(rtpmanager); #endif #else Q_UNUSED(argc); diff --git a/src/VideoStreaming/VideoStreaming.pri b/src/VideoStreaming/VideoStreaming.pri index 03a3bc1bb..cd78836ff 100644 --- a/src/VideoStreaming/VideoStreaming.pri +++ b/src/VideoStreaming/VideoStreaming.pri @@ -89,19 +89,24 @@ LinuxBuild { -lgstcoreelements \ -lgstudp \ -lgstrtp \ + -lgstrtsp \ -lgstx264 \ -lgstlibav \ - -lgstvideoparsersbad + -lgstsdpelem \ + -lgstvideoparsersbad \ + -lgstrtpmanager \ + -lgstrmdemux \ # Rest of GStreamer dependencies LIBS += -L$$GST_ROOT/lib \ -lgstfft-1.0 -lm \ -lgstnet-1.0 -lgio-2.0 \ -lgstaudio-1.0 -lgstcodecparsers-1.0 -lgstbase-1.0 \ - -lgstreamer-1.0 -lgsttag-1.0 -lgstrtp-1.0 -lgstpbutils-1.0 \ - -lgstvideo-1.0 -lavformat -lavcodec -lavresample -lavutil -lx264 \ - -lbz2 -lgobject-2.0 \ - -Wl,--export-dynamic -lgmodule-2.0 -pthread -lglib-2.0 -lorc-0.4 -liconv -lffi -lintl + -lgstreamer-1.0 -lgstrtp-1.0 -lgstpbutils-1.0 -lgstrtsp-1.0 -lgsttag-1.0 \ + -lgstvideo-1.0 -lavformat -lavcodec -lavutil -lx264 -lavresample \ + -lgstriff-1.0 -lgstcontroller-1.0 -lgstapp-1.0 \ + -lgstsdp-1.0 -lbz2 -lgobject-2.0 \ + -Wl,--export-dynamic -lgmodule-2.0 -pthread -lglib-2.0 -lorc-0.4 -liconv -lffi -lintl \ INCLUDEPATH += \ $$GST_ROOT/include/gstreamer-1.0 \ -- 2.22.0