summaryrefslogtreecommitdiff
path: root/plugin/src/Caelestia/audiocollector.hpp
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-08 23:12:25 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-08 23:12:25 +1000
commitdc42e4f38e731cda0651540b4629f3e196792a85 (patch)
tree944904da920a152c4203528e3e08b1df2ee891d0 /plugin/src/Caelestia/audiocollector.hpp
parentnix: remove cava dep (diff)
downloadcaelestia-shell-dc42e4f38e731cda0651540b4629f3e196792a85.tar.gz
caelestia-shell-dc42e4f38e731cda0651540b4629f3e196792a85.tar.bz2
caelestia-shell-dc42e4f38e731cda0651540b4629f3e196792a85.zip
plugin/ac: use double buffer
Double buffer instead of circular buffer
Diffstat (limited to 'plugin/src/Caelestia/audiocollector.hpp')
-rw-r--r--plugin/src/Caelestia/audiocollector.hpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/plugin/src/Caelestia/audiocollector.hpp b/plugin/src/Caelestia/audiocollector.hpp
index d60736f..420452c 100644
--- a/plugin/src/Caelestia/audiocollector.hpp
+++ b/plugin/src/Caelestia/audiocollector.hpp
@@ -2,6 +2,7 @@
#include "service.hpp"
#include <QObject>
+#include <atomic>
#include <cstdint>
#include <mutex>
#include <pipewire/pipewire.h>
@@ -43,15 +44,13 @@ class AudioCollector : public Service {
Q_OBJECT
public:
- explicit AudioCollector(
- uint32_t sampleRate = 44100, uint32_t chunkSize = 512, uint32_t bufferSize = 512, QObject* parent = nullptr);
+ explicit AudioCollector(uint32_t sampleRate = 44100, uint32_t chunkSize = 512, QObject* parent = nullptr);
~AudioCollector();
static AudioCollector* instance();
[[nodiscard]] uint32_t sampleRate() const;
[[nodiscard]] uint32_t chunkSize() const;
- [[nodiscard]] uint32_t bufferSize() const;
void clearBuffer();
void loadChunk(const int16_t* samples, uint32_t count);
@@ -63,13 +62,14 @@ private:
inline static std::mutex s_mutex;
std::jthread m_thread;
- std::vector<float> m_buffer;
- uint32_t m_bufferIndex;
- std::mutex m_bufferMutex;
+ std::vector<float> m_buffer1;
+ std::vector<float> m_buffer2;
+ std::atomic<std::vector<float>*> m_readBuffer;
+ std::atomic<std::vector<float>*> m_writeBuffer;
+ uint32_t m_sampleCount;
const uint32_t m_sampleRate;
const uint32_t m_chunkSize;
- const uint32_t m_bufferSize;
void start() override;
void stop() override;