git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2585 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.90
@@ -38,6 +38,8 @@ int JackCallbackNetIOAdapter::Process(jack_nframes_t frames, void* arg) | |||||
if (!adapter->fIOAdapter->IsRunning()) | if (!adapter->fIOAdapter->IsRunning()) | ||||
return 0; | return 0; | ||||
adapter->fIOAdapter->SetCallbackTime(jack_get_time()); | |||||
for (i = 0; i < adapter->fCaptureChannels; i++) { | for (i = 0; i < adapter->fCaptureChannels; i++) { | ||||
@@ -45,7 +47,7 @@ int JackCallbackNetIOAdapter::Process(jack_nframes_t frames, void* arg) | |||||
size_t len = jack_ringbuffer_read_space(adapter->fCaptureRingBuffer); | size_t len = jack_ringbuffer_read_space(adapter->fCaptureRingBuffer); | ||||
if (len < frames * sizeof(float)) { | if (len < frames * sizeof(float)) { | ||||
jack_error("JackCallbackNetIOAdapter::Process : consumer too slow, skip frames = %d", (frames * sizeof(float)) - len); | |||||
jack_error("JackCallbackNetIOAdapter::Process : consumer too slow, skip frames = %d", frames - len / sizeof(float)); | |||||
jack_ringbuffer_read(adapter->fCaptureRingBuffer, buffer, len); | jack_ringbuffer_read(adapter->fCaptureRingBuffer, buffer, len); | ||||
} else { | } else { | ||||
jack_ringbuffer_read(adapter->fCaptureRingBuffer, buffer, frames * sizeof(float)); | jack_ringbuffer_read(adapter->fCaptureRingBuffer, buffer, frames * sizeof(float)); | ||||
@@ -58,7 +60,7 @@ int JackCallbackNetIOAdapter::Process(jack_nframes_t frames, void* arg) | |||||
size_t len = jack_ringbuffer_write_space(adapter->fPlaybackRingBuffer); | size_t len = jack_ringbuffer_write_space(adapter->fPlaybackRingBuffer); | ||||
if (len < frames * sizeof(float)) { | if (len < frames * sizeof(float)) { | ||||
jack_error("JackCallbackNetIOAdapter::Process : producer too slow, missing frames = %d", (frames * sizeof(float)) - len); | |||||
jack_error("JackCallbackNetIOAdapter::Process : producer too slow, missing frames = %d", frames - len / sizeof(float)); | |||||
jack_ringbuffer_write(adapter->fPlaybackRingBuffer, buffer, len); | jack_ringbuffer_write(adapter->fPlaybackRingBuffer, buffer, len); | ||||
} else { | } else { | ||||
jack_ringbuffer_write(adapter->fPlaybackRingBuffer, buffer, frames * sizeof(float)); | jack_ringbuffer_write(adapter->fPlaybackRingBuffer, buffer, frames * sizeof(float)); | ||||
@@ -21,6 +21,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
#define __JackIOAdapter__ | #define __JackIOAdapter__ | ||||
#include "ringbuffer.h" | #include "ringbuffer.h" | ||||
#include "jack.h" | |||||
#include "JackError.h" | |||||
namespace Jack | namespace Jack | ||||
{ | { | ||||
@@ -34,6 +36,8 @@ namespace Jack | |||||
int fPlaybackChannels; | int fPlaybackChannels; | ||||
int fBufferSize; | int fBufferSize; | ||||
float fSampleRate; | float fSampleRate; | ||||
jack_time_t fCallbackTime; | |||||
jack_time_t fFirstCallbackTime; | |||||
jack_ringbuffer_t* fCaptureRingBuffer; | jack_ringbuffer_t* fCaptureRingBuffer; | ||||
jack_ringbuffer_t* fPlaybackRingBuffer; | jack_ringbuffer_t* fPlaybackRingBuffer; | ||||
@@ -46,6 +50,7 @@ namespace Jack | |||||
fPlaybackChannels(output), | fPlaybackChannels(output), | ||||
fBufferSize(buffer_size), | fBufferSize(buffer_size), | ||||
fSampleRate(sample_rate), | fSampleRate(sample_rate), | ||||
fCallbackTime(0), | |||||
fRunning(false) | fRunning(false) | ||||
{} | {} | ||||
virtual ~JackIOAdapterInterface() | virtual ~JackIOAdapterInterface() | ||||
@@ -66,6 +71,11 @@ namespace Jack | |||||
{ | { | ||||
fBufferSize = buffer_size; | fBufferSize = buffer_size; | ||||
} | } | ||||
virtual void SetCallbackTime(jack_time_t usec) | |||||
{ | |||||
fCallbackTime = usec; | |||||
} | |||||
}; | }; | ||||
} | } | ||||
@@ -34,7 +34,12 @@ int JackPortAudioIOAdapter::Render(const void* inputBuffer, void* outputBuffer, | |||||
float** paBuffer; | float** paBuffer; | ||||
char* buffer; | char* buffer; | ||||
adapter->fRunning = true; | |||||
if (!adapter->fRunning) { | |||||
adapter->fRunning = true; | |||||
adapter->fFirstCallbackTime = jack_get_time(); | |||||
} | |||||
jack_log("Coef %f", double(jack_get_time() - adapter->fFirstCallbackTime) / double( adapter->fCallbackTime - adapter->fFirstCallbackTime)); | |||||
paBuffer = (float**)inputBuffer; | paBuffer = (float**)inputBuffer; | ||||
for (int i = 0; i < adapter->fCaptureChannels; i++) { | for (int i = 0; i < adapter->fCaptureChannels; i++) { | ||||
@@ -43,7 +48,7 @@ int JackPortAudioIOAdapter::Render(const void* inputBuffer, void* outputBuffer, | |||||
size_t len = jack_ringbuffer_write_space(adapter->fCaptureRingBuffer); | size_t len = jack_ringbuffer_write_space(adapter->fCaptureRingBuffer); | ||||
if (len < framesPerBuffer * sizeof(float)) { | if (len < framesPerBuffer * sizeof(float)) { | ||||
jack_error("JackPortAudioIOAdapter::Process : producer too slow, missing frames = %d", (framesPerBuffer * sizeof(float)) - len); | |||||
jack_error("JackPortAudioIOAdapter::Process : producer too slow, missing frames = %d", framesPerBuffer - len / sizeof(float)); | |||||
jack_ringbuffer_write(adapter->fCaptureRingBuffer, buffer, len); | jack_ringbuffer_write(adapter->fCaptureRingBuffer, buffer, len); | ||||
} else { | } else { | ||||
jack_ringbuffer_write(adapter->fCaptureRingBuffer, buffer, framesPerBuffer * sizeof(float)); | jack_ringbuffer_write(adapter->fCaptureRingBuffer, buffer, framesPerBuffer * sizeof(float)); | ||||
@@ -57,7 +62,7 @@ int JackPortAudioIOAdapter::Render(const void* inputBuffer, void* outputBuffer, | |||||
size_t len = jack_ringbuffer_read_space(adapter->fPlaybackRingBuffer); | size_t len = jack_ringbuffer_read_space(adapter->fPlaybackRingBuffer); | ||||
if (len < framesPerBuffer * sizeof(float)) { | if (len < framesPerBuffer * sizeof(float)) { | ||||
jack_error("JackPortAudioIOAdapter::Process : consumer too slow, skip frames = %d", (framesPerBuffer * sizeof(float)) - len); | |||||
jack_error("JackPortAudioIOAdapter::Process : consumer too slow, skip frames = %d", framesPerBuffer - len / sizeof(float)); | |||||
jack_ringbuffer_read(adapter->fPlaybackRingBuffer, buffer, len); | jack_ringbuffer_read(adapter->fPlaybackRingBuffer, buffer, len); | ||||
} else { | } else { | ||||
jack_ringbuffer_read(adapter->fPlaybackRingBuffer, buffer, framesPerBuffer * sizeof(float)); | jack_ringbuffer_read(adapter->fPlaybackRingBuffer, buffer, framesPerBuffer * sizeof(float)); | ||||