Clear audio buffer if too many packets are delayed

merge-requests/9/head
Phil Taylor 2022-01-14 16:00:05 +00:00
rodzic 317cbd640a
commit 94a89dea33
2 zmienionych plików z 16 dodań i 1 usunięć

Wyświetl plik

@ -439,13 +439,13 @@ qint64 audioHandler::readData(char* buffer, qint64 nBytes)
if (!isReady) {
isReady = true;
}
audioPacket packet;
if (ringBuf->size()>0)
{
// Output buffer is ALWAYS 16 bit.
//qDebug(logAudio()) << "Read: nFrames" << nFrames << "nBytes" << nBytes;
while (sentlen < nBytes)
{
audioPacket packet;
if (!ringBuf->try_read(packet))
{
qDebug(logAudio()) << "No more data available but buffer is not full! sentlen:" << sentlen << " nBytes:" << nBytes ;
@ -479,6 +479,7 @@ qint64 audioHandler::readData(char* buffer, qint64 nBytes)
}
currentLatency = packet.time.msecsTo(QTime::currentTime());
}
delayedPackets++;
}
int send = qMin((int)nBytes - sentlen, packet.data.length());
@ -510,6 +511,12 @@ qint64 audioHandler::readData(char* buffer, qint64 nBytes)
if (nBytes > sentlen) {
memset(buffer+sentlen,0,nBytes-sentlen);
}
if (delayedPackets > 10) {
while (ringBuf->try_read(packet)); // Empty buffer
delayedPackets = 0;
}
#if defined(RTAUDIO)
return 0;
#elif defined(PORTAUDIO)
@ -751,6 +758,7 @@ void audioHandler::getNextAudioChunk(QByteArray& ret)
qInfo(logAudio()) << (setup.isinput ? "Input" : "Output") << "Packet " << hex << packet.seq <<
" arrived too late (increase latency!) " <<
dec << packet.time.msecsTo(QTime::currentTime()) << "ms";
delayedPackets++;
// if (!ringBuf->try_read(packet))
// break;
// currentLatency = packet.time.msecsTo(QTime::currentTime());
@ -851,6 +859,11 @@ void audioHandler::getNextAudioChunk(QByteArray& ret)
ret = packet.data;
//qDebug(logAudio()) << "Now radio format, length" << packet.data.length();
if (delayedPackets > 10) {
while (ringBuf->try_read(packet)); // Empty buffer
delayedPackets = 0;
}
}

Wyświetl plik

@ -195,6 +195,8 @@ private:
quint8 radioSampleBits;
quint8 radioChannels;
int delayedPackets=0;
QMap<quint32, audioPacket>audioBuffer;
double resampleRatio;