summaryrefslogtreecommitdiff
path: root/windows
diff options
context:
space:
mode:
authorsletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224>2008-07-04 13:43:55 +0000
committersletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224>2008-07-04 13:43:55 +0000
commite2833b1098074d9390b53c44724723759bf48c8c (patch)
treea22ad2d299f97189fc4cd4cf9dc21cc4a5155aa4 /windows
parent25d31e49db9cff576453b61e5fd57a465b1c8271 (diff)
downloadjack2-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.cpp14
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;
}