diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-09-16 23:58:44 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-09-16 23:58:44 +1000 |
| commit | 1984458565462f0f7d54266021e7f1977bc4b302 (patch) | |
| tree | cfa2c7cbd6630acc8caf4b8740d7446abd2f0cd3 /plugin/src/Caelestia/Services/audiocollector.hpp | |
| parent | utilities/toggles: add dnd (diff) | |
| download | caelestia-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/audiocollector.hpp')
| -rw-r--r-- | plugin/src/Caelestia/Services/audiocollector.hpp | 34 |
1 files changed, 12 insertions, 22 deletions
diff --git a/plugin/src/Caelestia/Services/audiocollector.hpp b/plugin/src/Caelestia/Services/audiocollector.hpp index 74b0877..4ec6d84 100644 --- a/plugin/src/Caelestia/Services/audiocollector.hpp +++ b/plugin/src/Caelestia/Services/audiocollector.hpp @@ -12,6 +12,13 @@ namespace caelestia { +namespace ac { + +constexpr quint32 SAMPLE_RATE = 44100; +constexpr quint32 CHUNK_SIZE = 512; + +} // namespace ac + class AudioCollector; class PipeWireWorker { @@ -29,47 +36,30 @@ private: std::stop_token m_token; AudioCollector* m_collector; - void cleanup(); - static void handleTimeout(void* data, uint64_t expirations); void streamStateChanged(pw_stream_state state); void processStream(); - void processSamples(const qint16* samples, quint32 count); [[nodiscard]] unsigned int nextPowerOf2(unsigned int n); }; class AudioCollector : public Service { Q_OBJECT - QML_ELEMENT - - Q_PROPERTY(quint32 nodeId READ nodeId WRITE setNodeId NOTIFY nodeIdChanged) public: - explicit AudioCollector(QObject* parent = nullptr); - ~AudioCollector(); - - [[nodiscard]] quint32 sampleRate() const; - [[nodiscard]] quint32 chunkSize() const; + AudioCollector(const AudioCollector&) = delete; + AudioCollector& operator=(const AudioCollector&) = delete; - [[nodiscard]] quint32 nodeId(); - void setNodeId(quint32 nodeId); + static AudioCollector& instance(); void clearBuffer(); void loadChunk(const qint16* samples, quint32 count); quint32 readChunk(float* out, quint32 count = 0); quint32 readChunk(double* out, quint32 count = 0); -signals: - void sampleRateChanged(); - void chunkSizeChanged(); - void nodeIdChanged(); - private: - const quint32 m_sampleRate; - const quint32 m_chunkSize; - quint32 m_nodeId; - QMutex m_nodeIdMutex; + explicit AudioCollector(QObject* parent = nullptr); + ~AudioCollector(); std::jthread m_thread; std::vector<float> m_buffer1; |