summaryrefslogtreecommitdiff
path: root/plugin/src/Caelestia/Services/audioprovider.cpp
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-16 23:58:44 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-16 23:58:44 +1000
commit1984458565462f0f7d54266021e7f1977bc4b302 (patch)
treecfa2c7cbd6630acc8caf4b8740d7446abd2f0cd3 /plugin/src/Caelestia/Services/audioprovider.cpp
parentutilities/toggles: add dnd (diff)
downloadcaelestia-shell-1984458565462f0f7d54266021e7f1977bc4b302.tar.gz
caelestia-shell-1984458565462f0f7d54266021e7f1977bc4b302.tar.bz2
caelestia-shell-1984458565462f0f7d54266021e7f1977bc4b302.zip
plugin: fix crashes
Fixes #629
Diffstat (limited to 'plugin/src/Caelestia/Services/audioprovider.cpp')
-rw-r--r--plugin/src/Caelestia/Services/audioprovider.cpp64
1 files changed, 10 insertions, 54 deletions
diff --git a/plugin/src/Caelestia/Services/audioprovider.cpp b/plugin/src/Caelestia/Services/audioprovider.cpp
index f31480e..c8a1261 100644
--- a/plugin/src/Caelestia/Services/audioprovider.cpp
+++ b/plugin/src/Caelestia/Services/audioprovider.cpp
@@ -7,9 +7,8 @@
namespace caelestia {
-AudioProcessor::AudioProcessor(AudioCollector* collector, QObject* parent)
- : QObject(parent)
- , m_collector(collector) {}
+AudioProcessor::AudioProcessor(QObject* parent)
+ : QObject(parent) {}
AudioProcessor::~AudioProcessor() {
stop();
@@ -17,53 +16,26 @@ AudioProcessor::~AudioProcessor() {
void AudioProcessor::init() {
m_timer = new QTimer(this);
- if (m_collector) {
- m_timer->setInterval(static_cast<int>(m_collector->chunkSize() * 1000.0 / m_collector->sampleRate()));
- }
+ m_timer->setInterval(static_cast<int>(ac::CHUNK_SIZE * 1000.0 / ac::SAMPLE_RATE));
connect(m_timer, &QTimer::timeout, this, &AudioProcessor::process);
}
-void AudioProcessor::setCollector(AudioCollector* collector) {
- if (m_collector == collector) {
- return;
- }
-
- if (m_timer) {
- if (m_timer->isActive()) {
- if (m_collector) {
- m_collector->unref();
- }
- if (collector) {
- collector->ref();
- }
- }
- if (collector) {
- m_timer->setInterval(static_cast<int>(collector->chunkSize() * 1000.0 / collector->sampleRate()));
- } else {
- m_timer->stop();
- }
- }
-
- m_collector = collector;
-}
-
void AudioProcessor::start() {
- if (m_timer && m_collector) {
- m_collector->ref();
+ QMetaObject::invokeMethod(&AudioCollector::instance(), &AudioCollector::ref);
+ if (m_timer) {
m_timer->start();
}
}
void AudioProcessor::stop() {
- if (m_timer && m_collector) {
+ if (m_timer) {
m_timer->stop();
- m_collector->unref();
}
+ QMetaObject::invokeMethod(&AudioCollector::instance(), &AudioCollector::unref);
}
AudioProvider::AudioProvider(QObject* parent)
: Service(parent)
- , m_collector(nullptr)
, m_processor(nullptr)
, m_thread(nullptr) {}
@@ -74,23 +46,6 @@ AudioProvider::~AudioProvider() {
}
}
-AudioCollector* AudioProvider::collector() const {
- return m_collector;
-}
-
-void AudioProvider::setCollector(AudioCollector* collector) {
- if (m_collector == collector) {
- return;
- }
-
- m_collector = collector;
- emit collectorChanged();
-
- if (m_processor) {
- QMetaObject::invokeMethod(m_processor, "setCollector", Qt::QueuedConnection, Q_ARG(AudioCollector*, collector));
- }
-}
-
void AudioProvider::init() {
if (!m_processor) {
qWarning() << "AudioProvider::init: attempted to init with no processor set";
@@ -109,13 +64,14 @@ void AudioProvider::init() {
void AudioProvider::start() {
if (m_processor) {
- QMetaObject::invokeMethod(m_processor, "start", Qt::QueuedConnection);
+ AudioCollector::instance(); // Create instance on main thread
+ QMetaObject::invokeMethod(m_processor, &AudioProcessor::start);
}
}
void AudioProvider::stop() {
if (m_processor) {
- QMetaObject::invokeMethod(m_processor, "stop", Qt::QueuedConnection);
+ QMetaObject::invokeMethod(m_processor, &AudioProcessor::stop);
}
}