X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=main.cpp;h=37ac4a4ae226943cfb279ddc857f649770427fdd;hb=177725e4f259a75dcdbd4260ac57e5dd9c01fd57;hp=a0d8f669ca083085deaca67119451303cd7226a4;hpb=7017a3bd997cbf5d7c327187afecfecd610bf24d;p=nageru diff --git a/main.cpp b/main.cpp index a0d8f66..37ac4a4 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,7 @@ extern "C" { #include #include #include +#include #include #include @@ -40,6 +41,11 @@ int main(int argc, char *argv[]) fmt.setProfile(QSurfaceFormat::CoreProfile); fmt.setMajorVersion(3); fmt.setMinorVersion(1); + + // Turn off vsync, since Qt generally gives us at most frame rate + // (display frequency) / (number of QGLWidgets active). + fmt.setSwapInterval(0); + QSurfaceFormat::setDefaultFormat(fmt); QGLFormat::setDefaultFormat(QGLFormat::fromSurfaceFormat(fmt)); @@ -47,11 +53,25 @@ int main(int argc, char *argv[]) global_share_widget = new QGLWidget(); MainWindow mainWindow; - mainWindow.resize(QSize(1500, 810)); + mainWindow.resize(QSize(1500, 850)); mainWindow.show(); app.installEventFilter(&mainWindow); // For white balance color picking. + // Even on an otherwise unloaded system, it would seem writing the recording + // to disk (potentially terabytes of data as time goes by) causes Nageru + // to be pushed out of RAM. If we have the right privileges, simply lock us + // into memory for better realtime behavior. + if (mlockall(MCL_CURRENT | MCL_FUTURE) == -1) { + perror("mlockall()"); + fprintf(stderr, "Failed to lock Nageru into RAM. You probably want to\n"); + fprintf(stderr, "increase \"memlock\" for your user in limits.conf\n"); + fprintf(stderr, "for better realtime behavior.\n"); + uses_mlock = false; + } else { + uses_mlock = true; + } + int rc = app.exec(); global_mixer->quit(); mainWindow.mixer_shutting_down();