From ad2b389e2331d6072da1e5919279e7f0f190555e Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Sun, 7 Sep 2025 18:21:31 +1000 Subject: plugin/ap: cleaner chunk loading/accessing --- plugin/src/Caelestia/audioprovider.cpp | 32 +++++++++----------------------- plugin/src/Caelestia/audioprovider.hpp | 5 +---- 2 files changed, 10 insertions(+), 27 deletions(-) (limited to 'plugin/src') diff --git a/plugin/src/Caelestia/audioprovider.cpp b/plugin/src/Caelestia/audioprovider.cpp index 0219ca2..3424e22 100644 --- a/plugin/src/Caelestia/audioprovider.cpp +++ b/plugin/src/Caelestia/audioprovider.cpp @@ -73,10 +73,7 @@ void AudioCollector::loadChunk() { i += toCopy; if (m_chunkOffset == m_chunkSize) { - m_provider->withLock([&] { - m_provider->loadChunk(m_chunk); - }); - + m_provider->loadChunk(m_chunk); m_chunkOffset = 0; } } @@ -134,14 +131,7 @@ void AudioProcessor::stop() { } void AudioProcessor::handleTimeout() { - QVector chunk; - - m_provider->withLock([&] { - if (m_provider->hasChunks()) { - chunk = m_provider->nextChunk(); - } - }); - + const QVector chunk = m_provider->nextChunk(); if (!chunk.isEmpty()) { processChunk(chunk); } @@ -181,21 +171,17 @@ int AudioProvider::chunkSize() const { return m_chunkSize; } -void AudioProvider::withLock(std::function fn) { - QMutexLocker locker(&m_mutex); - fn(); -} - -bool AudioProvider::hasChunks() const { - return !m_chunks.isEmpty(); -} - QVector AudioProvider::nextChunk() { + QMutexLocker lock(&m_mutex); + if (m_chunks.isEmpty()) { + return {}; + } return m_chunks.dequeue(); } -void AudioProvider::loadChunk(QVector chunk) { - m_chunks.enqueue(std::move(chunk)); +void AudioProvider::loadChunk(const QVector& chunk) { + QMutexLocker lock(&m_mutex); + m_chunks.enqueue(chunk); } void AudioProvider::init() { diff --git a/plugin/src/Caelestia/audioprovider.hpp b/plugin/src/Caelestia/audioprovider.hpp index 2acdb2d..44c6890 100644 --- a/plugin/src/Caelestia/audioprovider.hpp +++ b/plugin/src/Caelestia/audioprovider.hpp @@ -76,11 +76,8 @@ public: [[nodiscard]] int sampleRate() const; [[nodiscard]] int chunkSize() const; - void withLock(std::function fn); - - [[nodiscard]] bool hasChunks() const; [[nodiscard]] QVector nextChunk(); - void loadChunk(QVector chunk); + void loadChunk(const QVector& chunk); protected: int m_sampleRate; -- cgit v1.2.3-freya