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)); | ||||