diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-09-07 18:21:31 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-09-07 18:21:31 +1000 |
| commit | ad2b389e2331d6072da1e5919279e7f0f190555e (patch) | |
| tree | 12ffb1add1559708421b5f64f0a00cae97e9fc00 /plugin/src/Caelestia | |
| parent | plugin: add cava provider (diff) | |
| download | caelestia-shell-ad2b389e2331d6072da1e5919279e7f0f190555e.tar.gz caelestia-shell-ad2b389e2331d6072da1e5919279e7f0f190555e.tar.bz2 caelestia-shell-ad2b389e2331d6072da1e5919279e7f0f190555e.zip | |
plugin/ap: cleaner chunk loading/accessing
Diffstat (limited to 'plugin/src/Caelestia')
| -rw-r--r-- | plugin/src/Caelestia/audioprovider.cpp | 32 | ||||
| -rw-r--r-- | plugin/src/Caelestia/audioprovider.hpp | 5 |
2 files changed, 10 insertions, 27 deletions
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<double> chunk; - - m_provider->withLock([&] { - if (m_provider->hasChunks()) { - chunk = m_provider->nextChunk(); - } - }); - + const QVector<double> 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<void()> fn) { - QMutexLocker locker(&m_mutex); - fn(); -} - -bool AudioProvider::hasChunks() const { - return !m_chunks.isEmpty(); -} - QVector<double> AudioProvider::nextChunk() { + QMutexLocker lock(&m_mutex); + if (m_chunks.isEmpty()) { + return {}; + } return m_chunks.dequeue(); } -void AudioProvider::loadChunk(QVector<double> chunk) { - m_chunks.enqueue(std::move(chunk)); +void AudioProvider::loadChunk(const QVector<double>& 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<void()> fn); - - [[nodiscard]] bool hasChunks() const; [[nodiscard]] QVector<double> nextChunk(); - void loadChunk(QVector<double> chunk); + void loadChunk(const QVector<double>& chunk); protected: int m_sampleRate; |