diff options
author | sletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2008-07-04 13:43:55 +0000 |
---|---|---|
committer | sletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2008-07-04 13:43:55 +0000 |
commit | e2833b1098074d9390b53c44724723759bf48c8c (patch) | |
tree | a22ad2d299f97189fc4cd4cf9dc21cc4a5155aa4 /windows | |
parent | 25d31e49db9cff576453b61e5fd57a465b1c8271 (diff) | |
download | jack2-e2833b1098074d9390b53c44724723759bf48c8c.tar.gz |
Better error handling in netioadapter
git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2645 0c269be4-1314-0410-8aa9-9f06e86f4224
Diffstat (limited to 'windows')
-rw-r--r-- | windows/JackPortAudioIOAdapter.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/windows/JackPortAudioIOAdapter.cpp b/windows/JackPortAudioIOAdapter.cpp index fc978b75..8f49cda8 100644 --- a/windows/JackPortAudioIOAdapter.cpp +++ b/windows/JackPortAudioIOAdapter.cpp @@ -33,6 +33,7 @@ int JackPortAudioIOAdapter::Render(const void* inputBuffer, void* outputBuffer, JackPortAudioIOAdapter* adapter = static_cast<JackPortAudioIOAdapter*>(userData); float** paBuffer; float* buffer; + bool failure = false; jack_nframes_t time1, time2; adapter->ResampleFactor(time1, time2); @@ -41,21 +42,28 @@ int JackPortAudioIOAdapter::Render(const void* inputBuffer, void* outputBuffer, for (int i = 0; i < adapter->fCaptureChannels; i++) { buffer = (float*)paBuffer[i]; adapter->fCaptureRingBuffer[i]->SetRatio(time1, time2); - adapter->fCaptureRingBuffer[i]->WriteResample(buffer, framesPerBuffer); + if (adapter->fCaptureRingBuffer[i]->WriteResample(buffer, framesPerBuffer) == 0) + failure = true; } paBuffer = (float**)outputBuffer; for (int i = 0; i < adapter->fPlaybackChannels; i++) { buffer = (float*)paBuffer[i]; adapter->fPlaybackRingBuffer[i]->SetRatio(time2, time1); - adapter->fPlaybackRingBuffer[i]->ReadResample(buffer, framesPerBuffer); + if (adapter->fPlaybackRingBuffer[i]->ReadResample(buffer, framesPerBuffer) == 0) + failure = true; } #ifdef DEBUG adapter->fTable.Write(time1, time2, double(time1) / double(time2), double(time2) / double(time1), adapter->fCaptureRingBuffer[0]->ReadSpace(), adapter->fPlaybackRingBuffer[0]->WriteSpace()); #endif - + + // Reset all ringbuffers in case of failure + if (failure) { + jack_error("JackPortAudioIOAdapter::Render ringbuffer failure... reset"); + adapter->ResetRingBuffers(); + } return paContinue; } |