]> git.sesse.net Git - nageru/commitdiff
Clean mixer thread shutdown.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 3 Oct 2015 10:08:25 +0000 (12:08 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 3 Oct 2015 10:08:25 +0000 (12:08 +0200)
glwidget.cpp
main.cpp
mixer.cpp
mixer.h

index cc2b4fdc59c89f8d23936449315af5e99586f7fd..4a6eafe10bfd3f77cee02743694d68bbb0848657 100644 (file)
@@ -37,9 +37,7 @@ void GLWidget::initializeGL()
        QSurface *surface2 = create_surface(format());
        QSurface *surface3 = create_surface(format());
        QSurface *surface4 = create_surface(format());
-       std::thread([surface, surface2, surface3, surface4]{
-               mixer_thread(surface, surface2, surface3, surface4);
-       }).detach();
+       start_mixer(surface, surface2, surface3, surface4);
 }
 
 void GLWidget::paintGL()
index 34a1c497a48497c39580ae8cb24b5bd910eb78fc..e4df08946dcf7a1249f70c027d10ac2521f45f23 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -4,6 +4,7 @@
 #include <QtGui/QOpenGLContext>
 
 #include "mainwindow.h"
+#include "mixer.h"
 
 int main(int argc, char *argv[])
 {
@@ -24,5 +25,7 @@ int main(int argc, char *argv[])
        mainWindow.resize(mainWindow.sizeHint());
        mainWindow.show();
 
-       return app.exec();
+       int rc = app.exec();
+       mixer_quit();
+       return rc;
 }
index b8cdbe609244af2aaf14b8a42ac210a51c1aa2ea..6b576811a507b9772bc131851b34043178ed7477 100644 (file)
--- a/mixer.cpp
+++ b/mixer.cpp
@@ -202,11 +202,11 @@ void place_rectangle(Effect *resample_effect, Effect *padding_effect, float x0,
        CHECK(padding_effect->set_float("border_offset_top", y_subpixel_offset));
        CHECK(padding_effect->set_float("border_offset_bottom", y1 - (floor(y0) + height)));
 }
-
-void mixer_thread(QSurface *surface, QSurface *surface2, QSurface *surface3, QSurface *surface4)
+       
+static bool quit = false;
+       
+void mixer_thread_func(QSurface *surface, QSurface *surface2, QSurface *surface3, QSurface *surface4)
 {
-       bool quit = false;
-
        cards[0].surface = surface3;
 #if NUM_CARDS == 2
        cards[1].surface = surface4;
@@ -652,3 +652,18 @@ void mixer_thread(QSurface *surface, QSurface *surface2, QSurface *surface3, QSu
        resource_pool->release_2d_texture(chroma_tex);
        BMUSBCapture::stop_bm_thread();
 }
+
+std::thread mixer_thread;
+
+void start_mixer(QSurface *surface, QSurface *surface2, QSurface *surface3, QSurface *surface4)
+{
+       mixer_thread = std::thread([surface, surface2, surface3, surface4]{
+               mixer_thread_func(surface, surface2, surface3, surface4);
+       });
+}
+
+void mixer_quit()
+{
+       quit = true;
+       mixer_thread.join();
+}
diff --git a/mixer.h b/mixer.h
index ef7701fc2e781b6306f5047e07e07c40e55c9432..bf04dee396b37a77ce8e2b967b7ddc4c8d17b387 100644 (file)
--- a/mixer.h
+++ b/mixer.h
@@ -1,2 +1,3 @@
 class QSurface;
-void mixer_thread(QSurface *surface, QSurface *surface2, QSurface *surface3, QSurface *surface4);
+void start_mixer(QSurface *surface, QSurface *surface2, QSurface *surface3, QSurface *surface4);
+void mixer_quit();