]> git.sesse.net Git - nageru/blobdiff - main.cpp
Rename ui_foo.ui to foo.ui; seemingly, it is more standard.
[nageru] / main.cpp
index dcaf2a6936ce7fb84532457c515f36ddcc7ed2e2..c1a52c0489a6d7b4e9054da338635290846cf1cb 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -13,28 +13,69 @@ extern "C" {
 #include <QSurfaceFormat>
 #include <string>
 
+#ifdef HAVE_CEF
+#include <cef_app.h>
+#include <cef_browser.h>
+#include <cef_client.h>
+#include <cef_version.h>
+#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<NageruCefApp> cef_app;
+#endif
 
 int main(int argc, char *argv[])
 {
-       parse_flags(argc, 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<NageruCefApp>(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() ||
-           global_flags.va_display[0] != '/') {
+       if (global_flags.va_display.empty() && !global_flags.x264_video_to_disk) {
+               // The user didn't specify a VA-API display, but we need one.
+               // 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] != '/') && !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
 
        QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true);
-       QApplication app(argc, argv);
 
        QSurfaceFormat fmt;
        fmt.setDepthBufferSize(0);
@@ -51,6 +92,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");
@@ -58,7 +100,7 @@ int main(int argc, char *argv[])
        }
 
        MainWindow mainWindow;
-       mainWindow.resize(QSize(1500, 850));
+       mainWindow.resize(QSize(1500, 910));
        mainWindow.show();
 
        app.installEventFilter(&mainWindow);  // For white balance color picking.