git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2646 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.90
@@ -45,13 +45,13 @@ int JackCallbackNetIOAdapter::Process(jack_nframes_t frames, void* arg) | |||||
// Push/pull from ringbuffer | // Push/pull from ringbuffer | ||||
for (i = 0; i < adapter->fCaptureChannels; i++) { | for (i = 0; i < adapter->fCaptureChannels; i++) { | ||||
buffer = static_cast<float*>(jack_port_get_buffer(adapter->fCapturePortList[i], frames)); | buffer = static_cast<float*>(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; | failure = true; | ||||
} | } | ||||
for (i = 0; i < adapter->fPlaybackChannels; i++) { | for (i = 0; i < adapter->fPlaybackChannels; i++) { | ||||
buffer = static_cast<float*>(jack_port_get_buffer(adapter->fPlaybackPortList[i], frames)); | buffer = static_cast<float*>(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; | failure = true; | ||||
} | } | ||||
@@ -42,7 +42,7 @@ void JackLibSampleRateResampler::Reset() | |||||
src_reset(fResampler); | 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]; | jack_ringbuffer_data_t ring_buffer_data[2]; | ||||
SRC_DATA src_data; | SRC_DATA src_data; | ||||
@@ -66,14 +66,17 @@ int JackLibSampleRateResampler::ReadResample(float* buffer, unsigned int frames) | |||||
src_data.src_ratio = fRatio; | src_data.src_ratio = fRatio; | ||||
res = src_process(fResampler, &src_data); | res = src_process(fResampler, &src_data); | ||||
if (res != 0) | |||||
if (res != 0) { | |||||
jack_error("JackLibSampleRateResampler::ReadResample err = %s", src_strerror(res)); | jack_error("JackLibSampleRateResampler::ReadResample err = %s", src_strerror(res)); | ||||
return 0; | |||||
} | |||||
frames_to_write -= src_data.output_frames_gen; | frames_to_write -= src_data.output_frames_gen; | ||||
written_frames += 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) { | 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); | 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); | 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; | 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]; | jack_ringbuffer_data_t ring_buffer_data[2]; | ||||
SRC_DATA src_data; | SRC_DATA src_data; | ||||
@@ -113,14 +116,17 @@ int JackLibSampleRateResampler::WriteResample(float* buffer, unsigned int frames | |||||
src_data.src_ratio = fRatio; | src_data.src_ratio = fRatio; | ||||
res = src_process(fResampler, &src_data); | res = src_process(fResampler, &src_data); | ||||
if (res != 0) | |||||
if (res != 0) { | |||||
jack_error("JackLibSampleRateResampler::ReadResample err = %s", src_strerror(res)); | jack_error("JackLibSampleRateResampler::ReadResample err = %s", src_strerror(res)); | ||||
return 0; | |||||
} | |||||
frames_to_read -= src_data.input_frames_used; | frames_to_read -= src_data.input_frames_used; | ||||
read_frames += 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) { | 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); | 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); | jack_log("Input : j = %d input_frames_used = %ld output_frames_gen = %ld", j, src_data.input_frames_used, src_data.output_frames_gen); | ||||
@@ -39,8 +39,8 @@ namespace Jack | |||||
JackLibSampleRateResampler(); | JackLibSampleRateResampler(); | ||||
virtual ~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) | void SetRatio(unsigned int num, unsigned int denom) | ||||
{ | { | ||||
@@ -49,7 +49,7 @@ unsigned int JackResampler::WriteSpace() | |||||
return (jack_ringbuffer_write_space(fRingBuffer) / sizeof(float)); | 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); | size_t len = jack_ringbuffer_read_space(fRingBuffer); | ||||
jack_log("JackResampler::Read input available = %ld", len / sizeof(float)); | 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); | size_t len = jack_ringbuffer_write_space(fRingBuffer); | ||||
jack_log("JackResampler::Write output available = %ld", len / sizeof(float)); | 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); | 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); | return Write(buffer, frames); | ||||
} | } | ||||
@@ -45,11 +45,11 @@ namespace Jack | |||||
virtual void Reset(); | 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 ReadSpace(); | ||||
virtual unsigned int WriteSpace(); | virtual unsigned int WriteSpace(); | ||||
@@ -129,13 +129,13 @@ OSStatus JackCoreAudioIOAdapter::Render(void *inRefCon, | |||||
for (int i = 0; i < adapter->fCaptureChannels; i++) { | for (int i = 0; i < adapter->fCaptureChannels; i++) { | ||||
adapter->fCaptureRingBuffer[i]->SetRatio(time1, time2); | 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; | failure = true; | ||||
} | } | ||||
for (int i = 0; i < adapter->fPlaybackChannels; i++) { | for (int i = 0; i < adapter->fPlaybackChannels; i++) { | ||||
adapter->fPlaybackRingBuffer[i]->SetRatio(time2, time1); | 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; | failure = true; | ||||
} | } | ||||
@@ -42,7 +42,7 @@ int JackPortAudioIOAdapter::Render(const void* inputBuffer, void* outputBuffer, | |||||
for (int i = 0; i < adapter->fCaptureChannels; i++) { | for (int i = 0; i < adapter->fCaptureChannels; i++) { | ||||
buffer = (float*)paBuffer[i]; | buffer = (float*)paBuffer[i]; | ||||
adapter->fCaptureRingBuffer[i]->SetRatio(time1, time2); | adapter->fCaptureRingBuffer[i]->SetRatio(time1, time2); | ||||
if (adapter->fCaptureRingBuffer[i]->WriteResample(buffer, framesPerBuffer) == 0) | |||||
if (adapter->fCaptureRingBuffer[i]->WriteResample(buffer, framesPerBuffer) < framesPerBuffer) | |||||
failure = true; | failure = true; | ||||
} | } | ||||
@@ -50,7 +50,7 @@ int JackPortAudioIOAdapter::Render(const void* inputBuffer, void* outputBuffer, | |||||
for (int i = 0; i < adapter->fPlaybackChannels; i++) { | for (int i = 0; i < adapter->fPlaybackChannels; i++) { | ||||
buffer = (float*)paBuffer[i]; | buffer = (float*)paBuffer[i]; | ||||
adapter->fPlaybackRingBuffer[i]->SetRatio(time2, time1); | adapter->fPlaybackRingBuffer[i]->SetRatio(time2, time1); | ||||
if (adapter->fPlaybackRingBuffer[i]->ReadResample(buffer, framesPerBuffer) == 0) | |||||
if (adapter->fPlaybackRingBuffer[i]->ReadResample(buffer, framesPerBuffer) < framesPerBuffer) | |||||
failure = true; | failure = true; | ||||
} | } | ||||