From: Steinar H. Gunderson Date: Sat, 3 Oct 2015 10:08:25 +0000 (+0200) Subject: Clean mixer thread shutdown. X-Git-Tag: 1.0.0~325 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=12677633d653f654e3d75c232206585aebb06362;p=nageru Clean mixer thread shutdown. --- diff --git a/glwidget.cpp b/glwidget.cpp index cc2b4fd..4a6eafe 100644 --- a/glwidget.cpp +++ b/glwidget.cpp @@ -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() diff --git a/main.cpp b/main.cpp index 34a1c49..e4df089 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,7 @@ #include #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; } diff --git a/mixer.cpp b/mixer.cpp index b8cdbe6..6b57681 100644 --- 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 ef7701f..bf04dee 100644 --- 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();