From 9215d1e82c52ca6b718b28bddc570e09570c4d2a Mon Sep 17 00:00:00 2001 From: sletz Date: Fri, 4 Jul 2008 14:53:05 +0000 Subject: [PATCH] Corect JackAlsaIOAdapter::Execute git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2648 0c269be4-1314-0410-8aa9-9f06e86f4224 --- linux/alsa/JackAlsaIOAdapter.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/linux/alsa/JackAlsaIOAdapter.cpp b/linux/alsa/JackAlsaIOAdapter.cpp index cdb4ca1d..e2bbb097 100644 --- a/linux/alsa/JackAlsaIOAdapter.cpp +++ b/linux/alsa/JackAlsaIOAdapter.cpp @@ -55,17 +55,20 @@ bool JackAlsaIOAdapter::Execute() if (fAudioInterface.read() < 0) return false; + bool failure = false; jack_nframes_t time1, time2; ResampleFactor(time1, time2); for (int i = 0; i < fCaptureChannels; i++) { fCaptureRingBuffer[i]->SetRatio(time1, time2); - fCaptureRingBuffer[i]->WriteResample(fAudioInterface.fInputSoftChannels[i], fBufferSize); - } + if (fCaptureRingBuffer[i]->WriteResample(fAudioInterface.fInputSoftChannels[i], fBufferSize) < fBufferSize) + failure = true; + } for (int i = 0; i < fPlaybackChannels; i++) { fPlaybackRingBuffer[i]->SetRatio(time2, time1); - fPlaybackRingBuffer[i]->ReadResample(fAudioInterface.fOutputSoftChannels[i], fBufferSize); + if (fPlaybackRingBuffer[i]->ReadResample(fAudioInterface.fOutputSoftChannels[i], fBufferSize) < fBufferSize) + failure = true; } #ifdef DEBUG @@ -75,7 +78,12 @@ bool JackAlsaIOAdapter::Execute() if (fAudioInterface.write() < 0) return false; - + + // Reset all ringbuffers in case of failure + if (failure) { + jack_error("JackAlsaIOAdapter::Execute ringbuffer failure... reset"); + adapter->ResetRingBuffers(); + } return true; }