Use a mutex to protect RT buffer.

merge-requests/9/merge
Phil Taylor 2022-05-12 20:30:51 +01:00
rodzic a855c931b6
commit b28dab4dc2
2 zmienionych plików z 9 dodań i 2 usunięć

Wyświetl plik

@ -249,8 +249,11 @@ int rtHandler::readData(void* outputBuffer, void* inputBuffer,
//lastSentSeq = packet.seq;
if (arrayBuffer.length() >= nBytes) {
std::memcpy(outputBuffer, arrayBuffer.constData(), nBytes);
arrayBuffer.remove(0, nBytes);
if (audioMutex.tryLock(0)) {
std::memcpy(outputBuffer, arrayBuffer.constData(), nBytes);
arrayBuffer.remove(0, nBytes);
audioMutex.unlock();
}
}
if (status == RTAUDIO_INPUT_OVERFLOW) {
@ -299,7 +302,9 @@ int rtHandler::writeData(void* outputBuffer, void* inputBuffer,
void rtHandler::convertedOutput(audioPacket packet)
{
audioMutex.lock();
arrayBuffer.append(packet.data);
audioMutex.unlock();
amplitude = packet.amplitude;
currentLatency = packet.time.msecsTo(QTime::currentTime()) + (outFormat.durationForBytes(audio->getStreamLatency() * (outFormat.sampleSize() / 8) * outFormat.channelCount()) * 1000);
emit haveLevels(getAmplitude(), setup.latency, currentLatency, isUnderrun, isOverrun);

Wyświetl plik

@ -4,6 +4,7 @@
#include <QObject>
#include <QByteArray>
#include <QThread>
#include <QMutex>
#ifdef Q_OS_WIN
#include "RtAudio.h"
@ -106,6 +107,7 @@ private:
QByteArray arrayBuffer;
bool isUnderrun = false;
bool isOverrun = true;
QMutex audioMutex;
};
#endif // rtHandler_H