PA stop stream if latency exceeded and start again when data is received.

half-duplex
Phil Taylor 2022-12-01 13:16:05 +00:00
rodzic 65ba69822a
commit 0b39b91665
1 zmienionych plików z 10 dodań i 3 usunięć

Wyświetl plik

@ -224,7 +224,13 @@ void paHandler::setVolume(unsigned char volume)
void paHandler::incomingAudio(audioPacket packet) void paHandler::incomingAudio(audioPacket packet)
{ {
packet.volume = volume; packet.volume = volume;
emit sendToConverter(packet); if (Pa_IsStreamActive(audio) == 1) {
emit sendToConverter(packet);
}
else
{
Pa_StartStream(audio);
}
return; return;
} }
@ -266,7 +272,7 @@ void paHandler::convertedOutput(audioPacket packet) {
if (packet.data.size() > 0) { if (packet.data.size() > 0) {
if (Pa_IsStreamActive(audio) == 1) { if (Pa_IsStreamActive(audio) == 1) {
if (currentLatency < (setup.latency)) { if (currentLatency < (setup.latency+latencyAllowance)) {
PaError err = Pa_WriteStream(audio, (char*)packet.data.data(), packet.data.size() / sizeof(float) / outFormat.channelCount()); PaError err = Pa_WriteStream(audio, (char*)packet.data.data(), packet.data.size() / sizeof(float) / outFormat.channelCount());
if (err != paNoError) { if (err != paNoError) {
@ -275,7 +281,8 @@ void paHandler::convertedOutput(audioPacket packet) {
} }
else { else {
qDebug(logAudio()) << (setup.isinput ? "Input" : "Output") << "Disgarding audio data as current latency" << currentLatency << "exceeds setup latency" << setup.latency; qDebug(logAudio()) << (setup.isinput ? "Input" : "Output") << "Disgarding audio data as current latency" << currentLatency << "exceeds setup latency" << setup.latency;
setup.latency++; Pa_StopStream(audio);
latencyAllowance++;
} }
const PaStreamInfo* info = Pa_GetStreamInfo(audio); const PaStreamInfo* info = Pa_GetStreamInfo(audio);
currentLatency = packet.time.msecsTo(QTime::currentTime()) + (info->outputLatency * 1000); currentLatency = packet.time.msecsTo(QTime::currentTime()) + (info->outputLatency * 1000);