kopia lustrzana https://gitlab.com/eliggett/wfview
Use a mutex to protect RT buffer.
rodzic
a855c931b6
commit
b28dab4dc2
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Ładowanie…
Reference in New Issue