]> git.sesse.net Git - nageru/blobdiff - nageru/main.cpp
Implement SRT output.
[nageru] / nageru / main.cpp
index c1a52c0489a6d7b4e9054da338635290846cf1cb..9b26426fb0a9e2e81111d9f62260df95b791b500 100644 (file)
@@ -20,11 +20,15 @@ extern "C" {
 #include <cef_version.h>
 #endif
 
+#ifdef HAVE_SRT
+#include <srt/srt.h>
+#endif
+
 #include "basic_stats.h"
 #ifdef HAVE_CEF
 #include "nageru_cef_app.h"
 #endif
-#include "context.h"
+#include "shared/context.h"
 #include "flags.h"
 #include "image_input.h"
 #include "mainwindow.h"
@@ -63,18 +67,26 @@ int main(int argc, char *argv[])
                global_flags.va_display = QuickSyncEncoder::get_usable_va_display();
        }
 
+       // The OpenGL widgets do not work well with the native Wayland integration.
+       setenv("QT_QPA_PLATFORM", "xcb", 0);
+
        if ((global_flags.va_display.empty() ||
             global_flags.va_display[0] != '/') && !global_flags.x264_video_to_disk) {
                // We normally use EGL for zerocopy, but if we use VA against DRM
                // instead of against X11, we turn it off, and then don't need EGL.
                setenv("QT_XCB_GL_INTEGRATION", "xcb_egl", 0);
-               using_egl = true;
        }
        setlinebuf(stdout);
 #if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(58, 9, 100)
        av_register_all();
 #endif
 
+#ifdef HAVE_SRT
+       if (global_flags.srt_port >= 0 || !global_flags.srt_destination_host.empty()) {
+               srt_startup();
+       }
+#endif
+
        QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true);
 
        QSurfaceFormat fmt;
@@ -96,7 +108,7 @@ int main(int argc, char *argv[])
        global_share_widget = new QGLWidget();
        if (!global_share_widget->isValid()) {
                fprintf(stderr, "Failed to initialize OpenGL. Nageru needs at least OpenGL 3.1 to function properly.\n");
-               exit(1);
+               abort();
        }
 
        MainWindow mainWindow;
@@ -120,9 +132,11 @@ int main(int argc, char *argv[])
        }
 
        int rc = app.exec();
-       global_mixer->quit();
-       mainWindow.mixer_shutting_down();
        delete global_mixer;
-       ImageInput::shutdown_updaters();
+#ifdef HAVE_SRT
+       if (global_flags.srt_port >= 0) {
+               srt_cleanup();
+       }
+#endif
        return rc;
 }