diff options
author | Matt Porter <mporter@konsulko.com> | 2017-04-15 09:18:25 -0400 |
---|---|---|
committer | Matt Porter <mporter@konsulko.com> | 2017-04-20 22:00:09 -0400 |
commit | 3fd71f4b6bc026f2f9054140f7bf612855e45d7d (patch) | |
tree | 202cb27d30a55843e44d828b9f8043dd9697eddf /app/main.cpp | |
parent | 392effc544e3d94b82f806378d4ac1d11a185422 (diff) |
Rewrite PulseAudio backend into a threaded class
Converts the Mixer PulseAudio backend from a C library to a PaClient
class which runs in its own QThread. This faciliates isolation of
PaControlModel updates to the QML thread where they belong. It also
provides the foundation for runtime updates of the model and reuse
of the PaClient class in other apps.
AGL-Bug: SPEC-548
Change-Id: I13c4c220fde2fd4bc4aea2e04f39152a963b5fa0
Signed-off-by: Matt Porter <mporter@konsulko.com>
Diffstat (limited to 'app/main.cpp')
-rw-r--r-- | app/main.cpp | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/app/main.cpp b/app/main.cpp index d89287c..76e755b 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2016 The Qt Company Ltd. - * Copyright (C) 2016 Konsulko Group + * Copyright (C) 2016,2017 Konsulko Group * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,9 +15,13 @@ * limitations under the License. */ +#include "paclient.h" +#include "pacontrolmodel.h" + #include <QtCore/QDebug> #include <QtCore/QDir> #include <QtCore/QStandardPaths> +#include <QtCore/QThread> #include <QtGui/QGuiApplication> #include <QtQml/QQmlApplicationEngine> #include <QtQml/QQmlContext> @@ -26,7 +30,6 @@ #include <QtQuick/qquickitem.h> #include <QtQuick/qquickview.h> -#include "pacontrolmodel.h" #ifdef HAVE_LIBHOMESCREEN #include <libhomescreen.hpp> @@ -47,10 +50,28 @@ int main(int argc, char *argv[]) QQuickStyle::setStyle("AGL"); + // Fire up PA client QThread + QThread* pat = new QThread; + PaClient* client = new PaClient(); + client->moveToThread(pat); + pat->start(); + + // Register the PA Control Model qmlRegisterType<PaControlModel>("PaControlModel", 1, 0, "PaControlModel"); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/Mixer.qml"))); + // Find the instantiated model QObject and connect the signals/slots + QList<QObject *> mobjs = engine.rootObjects(); + PaControlModel *pacm = mobjs.first()->findChild<PaControlModel *>("pacm"); + QObject::connect(client, SIGNAL(controlAdded(int, QString, int, int, const char *, int)), + pacm, SLOT(addOneControl(int, QString, int, int, const char *, int))); + QObject::connect(pacm, SIGNAL(volumeChanged(uint32_t, uint32_t, uint32_t, uint32_t)), + client, SLOT(setVolume(uint32_t, uint32_t, uint32_t, uint32_t))); + + // Initalize PA client + client->init(); + return app.exec(); } |