plugin/ap: cleaner chunk loading/accessing
This commit is contained in:
parent
07bee23126
commit
ad2b389e23
2 changed files with 10 additions and 27 deletions
|
|
@ -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() {
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue