X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=main.cpp;h=1c7e5da1e6bb6be70d2f5aeda8da98b5cbcb3342;hb=a5746714e6ca1e665bf9e74344e67712443f947a;hp=fb67e0ea23ecb0e57456edfbb7dd8e55778bf0e4;hpb=ad1641ad3ab50ecd17af2e1c2d980f26e6adf0bb;p=nageru diff --git a/main.cpp b/main.cpp index fb67e0e..1c7e5da 100644 --- a/main.cpp +++ b/main.cpp @@ -13,16 +13,56 @@ extern "C" { #include #include +#ifdef HAVE_CEF +#include +#include +#include +#include +#endif + +#include "basic_stats.h" +#ifdef HAVE_CEF +#include "nageru_cef_app.h" +#endif #include "context.h" #include "flags.h" #include "image_input.h" #include "mainwindow.h" #include "mixer.h" +#include "quicksync_encoder.h" + +#ifdef HAVE_CEF +CefRefPtr cef_app; +#endif int main(int argc, char *argv[]) { +#ifdef HAVE_CEF + // Let CEF have first priority on parsing the command line, because we might be + // launched as a CEF sub-process. + CefMainArgs main_args(argc, argv); + cef_app = CefRefPtr(new NageruCefApp()); + int err = CefExecuteProcess(main_args, cef_app.get(), nullptr); + if (err >= 0) { + return err; + } + + // CEF wants to use GLib for its main loop, which interferes with Qt's use of it. + // The alternative is trying to integrate CEF into Qt's main loop, but that requires + // fairly extensive cross-thread communication and that parts of CEF runs on Qt's UI + // thread. + setenv("QT_NO_GLIB", "1", 0); +#endif + parse_flags(PROGRAM_NAGERU, argc, argv); + if (global_flags.va_display.empty()) { + // The user didn't specify a VA-API display. See if the default works, + // and if not, let's try to help the user by seeing if there's any + // that would work automatically. + global_flags.va_display = QuickSyncEncoder::get_usable_va_display(); + } + if (global_flags.va_display.empty() || global_flags.va_display[0] != '/') { // We normally use EGL for zerocopy, but if we use VA against DRM @@ -34,7 +74,6 @@ int main(int argc, char *argv[]) av_register_all(); QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true); - QApplication app(argc, argv); QSurfaceFormat fmt; fmt.setDepthBufferSize(0); @@ -51,6 +90,7 @@ int main(int argc, char *argv[]) QGLFormat::setDefaultFormat(QGLFormat::fromSurfaceFormat(fmt)); + QApplication app(argc, 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");