From 2659d91b942f932053dce3a53ac2daac5129327c Mon Sep 17 00:00:00 2001 From: sletz Date: Fri, 4 Jul 2008 14:07:10 +0000 Subject: [PATCH] Better error handling in netioadapter (2) git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2646 0c269be4-1314-0410-8aa9-9f06e86f4224 --- common/JackCallbackNetIOAdapter.cpp | 4 ++-- common/JackLibSampleRateResampler.cpp | 14 ++++++++++---- common/JackLibSampleRateResampler.h | 4 ++-- common/JackResampler.cpp | 8 ++++---- common/JackResampler.h | 8 ++++---- macosx/JackCoreAudioIOAdapter.cpp | 4 ++-- windows/JackPortAudioIOAdapter.cpp | 4 ++-- 7 files changed, 26 insertions(+), 20 deletions(-) diff --git a/common/JackCallbackNetIOAdapter.cpp b/common/JackCallbackNetIOAdapter.cpp index a0d8186a..20f23315 100644 --- a/common/JackCallbackNetIOAdapter.cpp +++ b/common/JackCallbackNetIOAdapter.cpp @@ -45,13 +45,13 @@ int JackCallbackNetIOAdapter::Process(jack_nframes_t frames, void* arg) // Push/pull from ringbuffer for (i = 0; i < adapter->fCaptureChannels; i++) { buffer = static_cast(jack_port_get_buffer(adapter->fCapturePortList[i], frames)); - if (adapter->fCaptureRingBuffer[i]->Read(buffer, frames) == 0) + if (adapter->fCaptureRingBuffer[i]->Read(buffer, frames) < frames) failure = true; } for (i = 0; i < adapter->fPlaybackChannels; i++) { buffer = static_cast(jack_port_get_buffer(adapter->fPlaybackPortList[i], frames)); - if (adapter->fPlaybackRingBuffer[i]->Write(buffer, frames) == 0) + if (adapter->fPlaybackRingBuffer[i]->Write(buffer, frames) < frames) failure = true; } diff --git a/common/JackLibSampleRateResampler.cpp b/common/JackLibSampleRateResampler.cpp index e15db04f..0d4aa65d 100644 --- a/common/JackLibSampleRateResampler.cpp +++ b/common/JackLibSampleRateResampler.cpp @@ -42,7 +42,7 @@ void JackLibSampleRateResampler::Reset() src_reset(fResampler); } -int JackLibSampleRateResampler::ReadResample(float* buffer, unsigned int frames) +unsigned int JackLibSampleRateResampler::ReadResample(float* buffer, unsigned int frames) { jack_ringbuffer_data_t ring_buffer_data[2]; SRC_DATA src_data; @@ -66,14 +66,17 @@ int JackLibSampleRateResampler::ReadResample(float* buffer, unsigned int frames) src_data.src_ratio = fRatio; res = src_process(fResampler, &src_data); - if (res != 0) + if (res != 0) { jack_error("JackLibSampleRateResampler::ReadResample err = %s", src_strerror(res)); + return 0; + } frames_to_write -= src_data.output_frames_gen; written_frames += src_data.output_frames_gen; if ((src_data.input_frames_used == 0 || src_data.output_frames_gen == 0) && j == 0) { jack_error("Output : j = %d input_frames_used = %ld output_frames_gen = %ld", j, src_data.input_frames_used, src_data.output_frames_gen); + return 0; } jack_log("Output : j = %d input_frames_used = %ld output_frames_gen = %ld", j, src_data.input_frames_used, src_data.output_frames_gen); @@ -89,7 +92,7 @@ int JackLibSampleRateResampler::ReadResample(float* buffer, unsigned int frames) return written_frames; } -int JackLibSampleRateResampler::WriteResample(float* buffer, unsigned int frames) +unsigned int JackLibSampleRateResampler::WriteResample(float* buffer, unsigned int frames) { jack_ringbuffer_data_t ring_buffer_data[2]; SRC_DATA src_data; @@ -113,14 +116,17 @@ int JackLibSampleRateResampler::WriteResample(float* buffer, unsigned int frames src_data.src_ratio = fRatio; res = src_process(fResampler, &src_data); - if (res != 0) + if (res != 0) { jack_error("JackLibSampleRateResampler::ReadResample err = %s", src_strerror(res)); + return 0; + } frames_to_read -= src_data.input_frames_used; read_frames += src_data.input_frames_used; if ((src_data.input_frames_used == 0 || src_data.output_frames_gen == 0) && j == 0) { jack_error("Input : j = %d input_frames_used = %ld output_frames_gen = %ld", j, src_data.input_frames_used, src_data.output_frames_gen); + return 0; } jack_log("Input : j = %d input_frames_used = %ld output_frames_gen = %ld", j, src_data.input_frames_used, src_data.output_frames_gen); diff --git a/common/JackLibSampleRateResampler.h b/common/JackLibSampleRateResampler.h index 80d9e71a..1127f889 100644 --- a/common/JackLibSampleRateResampler.h +++ b/common/JackLibSampleRateResampler.h @@ -39,8 +39,8 @@ namespace Jack JackLibSampleRateResampler(); virtual ~JackLibSampleRateResampler(); - int ReadResample(float* buffer, unsigned int frames); - int WriteResample(float* buffer, unsigned int frames); + unsigned int ReadResample(float* buffer, unsigned int frames); + unsigned int WriteResample(float* buffer, unsigned int frames); void SetRatio(unsigned int num, unsigned int denom) { diff --git a/common/JackResampler.cpp b/common/JackResampler.cpp index 0d2af0c0..f09b0413 100644 --- a/common/JackResampler.cpp +++ b/common/JackResampler.cpp @@ -49,7 +49,7 @@ unsigned int JackResampler::WriteSpace() return (jack_ringbuffer_write_space(fRingBuffer) / sizeof(float)); } -int JackResampler::Read(float* buffer, unsigned int frames) +unsigned int JackResampler::Read(float* buffer, unsigned int frames) { size_t len = jack_ringbuffer_read_space(fRingBuffer); jack_log("JackResampler::Read input available = %ld", len / sizeof(float)); @@ -63,7 +63,7 @@ int JackResampler::Read(float* buffer, unsigned int frames) } } -int JackResampler::Write(float* buffer, unsigned int frames) +unsigned int JackResampler::Write(float* buffer, unsigned int frames) { size_t len = jack_ringbuffer_write_space(fRingBuffer); jack_log("JackResampler::Write output available = %ld", len / sizeof(float)); @@ -77,12 +77,12 @@ int JackResampler::Write(float* buffer, unsigned int frames) } } -int JackResampler::ReadResample(float* buffer, unsigned int frames) +unsigned int JackResampler::ReadResample(float* buffer, unsigned int frames) { return Read(buffer, frames); } -int JackResampler::WriteResample(float* buffer, unsigned int frames) +unsigned int JackResampler::WriteResample(float* buffer, unsigned int frames) { return Write(buffer, frames); } diff --git a/common/JackResampler.h b/common/JackResampler.h index a3398028..af13f88b 100644 --- a/common/JackResampler.h +++ b/common/JackResampler.h @@ -45,11 +45,11 @@ namespace Jack virtual void Reset(); - virtual int ReadResample(float* buffer, unsigned int frames); - virtual int WriteResample(float* buffer, unsigned int frames); + virtual unsigned int ReadResample(float* buffer, unsigned int frames); + virtual unsigned int WriteResample(float* buffer, unsigned int frames); - virtual int Read(float* buffer, unsigned int frames); - virtual int Write(float* buffer, unsigned int frames); + virtual unsigned int Read(float* buffer, unsigned int frames); + virtual unsigned int Write(float* buffer, unsigned int frames); virtual unsigned int ReadSpace(); virtual unsigned int WriteSpace(); diff --git a/macosx/JackCoreAudioIOAdapter.cpp b/macosx/JackCoreAudioIOAdapter.cpp index 30fde818..4bafbd9d 100644 --- a/macosx/JackCoreAudioIOAdapter.cpp +++ b/macosx/JackCoreAudioIOAdapter.cpp @@ -129,13 +129,13 @@ OSStatus JackCoreAudioIOAdapter::Render(void *inRefCon, for (int i = 0; i < adapter->fCaptureChannels; i++) { adapter->fCaptureRingBuffer[i]->SetRatio(time1, time2); - if (adapter->fCaptureRingBuffer[i]->WriteResample((float*)adapter->fInputData->mBuffers[i].mData, inNumberFrames) == 0) + if (adapter->fCaptureRingBuffer[i]->WriteResample((float*)adapter->fInputData->mBuffers[i].mData, inNumberFrames) < inNumberFrames) failure = true; } for (int i = 0; i < adapter->fPlaybackChannels; i++) { adapter->fPlaybackRingBuffer[i]->SetRatio(time2, time1); - if (adapter->fPlaybackRingBuffer[i]->ReadResample((float*)ioData->mBuffers[i].mData, inNumberFrames) == 0) + if (adapter->fPlaybackRingBuffer[i]->ReadResample((float*)ioData->mBuffers[i].mData, inNumberFrames) < inNumberFrames) failure = true; } diff --git a/windows/JackPortAudioIOAdapter.cpp b/windows/JackPortAudioIOAdapter.cpp index 8f49cda8..94f0a44d 100644 --- a/windows/JackPortAudioIOAdapter.cpp +++ b/windows/JackPortAudioIOAdapter.cpp @@ -42,7 +42,7 @@ 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); - if (adapter->fCaptureRingBuffer[i]->WriteResample(buffer, framesPerBuffer) == 0) + if (adapter->fCaptureRingBuffer[i]->WriteResample(buffer, framesPerBuffer) < framesPerBuffer) failure = true; } @@ -50,7 +50,7 @@ int JackPortAudioIOAdapter::Render(const void* inputBuffer, void* outputBuffer, for (int i = 0; i < adapter->fPlaybackChannels; i++) { buffer = (float*)paBuffer[i]; adapter->fPlaybackRingBuffer[i]->SetRatio(time2, time1); - if (adapter->fPlaybackRingBuffer[i]->ReadResample(buffer, framesPerBuffer) == 0) + if (adapter->fPlaybackRingBuffer[i]->ReadResample(buffer, framesPerBuffer) < framesPerBuffer) failure = true; }