]> git.sesse.net Git - nageru/blobdiff - mixer.cpp
Clean mixer thread shutdown.
[nageru] / mixer.cpp
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();
+}