summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-07 18:21:31 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-07 18:21:31 +1000
commitad2b389e2331d6072da1e5919279e7f0f190555e (patch)
tree12ffb1add1559708421b5f64f0a00cae97e9fc00
parentplugin: add cava provider (diff)
downloadcaelestia-shell-ad2b389e2331d6072da1e5919279e7f0f190555e.tar.gz
caelestia-shell-ad2b389e2331d6072da1e5919279e7f0f190555e.tar.bz2
caelestia-shell-ad2b389e2331d6072da1e5919279e7f0f190555e.zip
plugin/ap: cleaner chunk loading/accessing
-rw-r--r--plugin/src/Caelestia/audioprovider.cpp32
-rw-r--r--plugin/src/Caelestia/audioprovider.hpp5
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;