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()
#include <QtGui/QOpenGLContext>
#include "mainwindow.h"
+#include "mixer.h"
int main(int argc, char *argv[])
{
mainWindow.resize(mainWindow.sizeHint());
mainWindow.show();
- return app.exec();
+ int rc = app.exec();
+ mixer_quit();
+ return rc;
}
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;
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();
+}
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();