From 49c423a7fb8ace862a7cf759dad422f5326bb9d4 Mon Sep 17 00:00:00 2001 From: Elliott Liggett Date: Mon, 29 Aug 2022 14:33:30 -0700 Subject: [PATCH] Lower latency without the conversion. Added needed thread destructor to pa handler. --- audiohandler.cpp | 3 +-- audiomonitor.h | 2 +- pahandler.cpp | 23 ++++++++++++++++++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/audiohandler.cpp b/audiohandler.cpp index 8e96dd8..d5f1d36 100644 --- a/audiohandler.cpp +++ b/audiohandler.cpp @@ -16,8 +16,7 @@ audioHandler::audioHandler(QObject* parent) : QObject(parent) } audioHandler::~audioHandler() -{ - +{ if (converterThread != Q_NULLPTR) { converterThread->quit(); converterThread->wait(); diff --git a/audiomonitor.h b/audiomonitor.h index ff579d1..bdd9196 100644 --- a/audiomonitor.h +++ b/audiomonitor.h @@ -13,7 +13,7 @@ #include #endif -#define audioMonitorBufferSize (10) +#define audioMonitorBufferSize (8) struct sharedAudioType diff --git a/pahandler.cpp b/pahandler.cpp index b9b5b03..13eb3af 100644 --- a/pahandler.cpp +++ b/pahandler.cpp @@ -15,6 +15,12 @@ paHandler::paHandler(QObject* parent) paHandler::~paHandler() { + if (converterToMonitorThread != Q_NULLPTR) + { + converterToMonitorThread->quit(); + converterToMonitorThread->wait(); + } + if (converterThread != Q_NULLPTR) { converterThread->quit(); converterThread->wait(); @@ -255,7 +261,12 @@ void paHandler::incomingAudio(audioPacket packet) { // Try sending directly to the hardware: //convertedOutput(packet); - emit sendToMonitorConverter(packet); + + // Convert: + //emit sendToMonitorConverter(packet); + + // if the formats are actually the same, no need to convert: + convertedMonitorAudio(packet); } return; } @@ -312,6 +323,16 @@ void paHandler::convertedOutput(audioPacket packet) { //int readPos = sharedAudioInfo->bufferReadPosition; int readPos = (monitorBufferPosition++)%audioMonitorBufferSize; + /* + if( (readPos+2)%audioMonitorBufferSize == sharedAudioInfo->bufferWritePosition) + { + // then we are too close, let's step back + qDebug(logAudio()) << "Warning, monitor buffer read is too close, moving back. Write position: " << sharedAudioInfo->bufferWritePosition << ", read position: " << readPos; + monitorBufferPosition = (sharedAudioInfo->bufferWritePosition-3)%audioMonitorBufferSize; + readPos = monitorBufferPosition; + } + */ + // if(packet.data.size() != sharedAudioInfo->monitorAudioBuffer[readPos].data.size()) // { // qDebug(logAudio()) << "ERROR, size mismatch. packet is " << packet.data.size() << "bytes, monitor audio is " << sharedAudioInfo->monitorAudioBuffer[readPos].data.size() << "bytes.";