plugin/ap: cleaner chunk loading/accessing

This commit is contained in:
2 * r + 2 * t 2025-09-07 18:21:31 +10:00
parent 07bee23126
commit ad2b389e23
2 changed files with 10 additions and 27 deletions

View file

@ -73,10 +73,7 @@ void AudioCollector::loadChunk() {
i += toCopy; i += toCopy;
if (m_chunkOffset == m_chunkSize) { if (m_chunkOffset == m_chunkSize) {
m_provider->withLock([&] {
m_provider->loadChunk(m_chunk); m_provider->loadChunk(m_chunk);
});
m_chunkOffset = 0; m_chunkOffset = 0;
} }
} }
@ -134,14 +131,7 @@ void AudioProcessor::stop() {
} }
void AudioProcessor::handleTimeout() { void AudioProcessor::handleTimeout() {
QVector<double> chunk; const QVector<double> chunk = m_provider->nextChunk();
m_provider->withLock([&] {
if (m_provider->hasChunks()) {
chunk = m_provider->nextChunk();
}
});
if (!chunk.isEmpty()) { if (!chunk.isEmpty()) {
processChunk(chunk); processChunk(chunk);
} }
@ -181,21 +171,17 @@ int AudioProvider::chunkSize() const {
return m_chunkSize; 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() { QVector<double> AudioProvider::nextChunk() {
QMutexLocker lock(&m_mutex);
if (m_chunks.isEmpty()) {
return {};
}
return m_chunks.dequeue(); return m_chunks.dequeue();
} }
void AudioProvider::loadChunk(QVector<double> chunk) { void AudioProvider::loadChunk(const QVector<double>& chunk) {
m_chunks.enqueue(std::move(chunk)); QMutexLocker lock(&m_mutex);
m_chunks.enqueue(chunk);
} }
void AudioProvider::init() { void AudioProvider::init() {

View file

@ -76,11 +76,8 @@ public:
[[nodiscard]] int sampleRate() const; [[nodiscard]] int sampleRate() const;
[[nodiscard]] int chunkSize() const; [[nodiscard]] int chunkSize() const;
void withLock(std::function<void()> fn);
[[nodiscard]] bool hasChunks() const;
[[nodiscard]] QVector<double> nextChunk(); [[nodiscard]] QVector<double> nextChunk();
void loadChunk(QVector<double> chunk); void loadChunk(const QVector<double>& chunk);
protected: protected:
int m_sampleRate; int m_sampleRate;