Browse Source

Add jack_flush_adapter API.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/branches/libjacknet@3953 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.8
sletz 15 years ago
parent
commit
52993cd859
7 changed files with 42 additions and 9 deletions
  1. +5
    -4
      common/JackAudioAdapterInterface.h
  2. +18
    -1
      common/JackNetAPI.cpp
  3. +3
    -1
      common/JackNetInterface.cpp
  4. +1
    -0
      common/JackResampler.cpp
  5. +3
    -0
      common/jack/net.h
  6. +1
    -0
      common/ringbuffer.c
  7. +11
    -3
      macosx/iphone/main_slave.mm

+ 5
- 4
common/JackAudioAdapterInterface.h View File

@@ -102,7 +102,7 @@ namespace Jack
public: public:


JackAudioAdapterInterface ( jack_nframes_t buffer_size, jack_nframes_t sample_rate ):
JackAudioAdapterInterface ( jack_nframes_t buffer_size, jack_nframes_t sample_rate, jack_nframes_t ring_buffer_size = DEFAULT_ADAPTATIVE_SIZE):
fCaptureChannels ( 0 ), fCaptureChannels ( 0 ),
fPlaybackChannels ( 0 ), fPlaybackChannels ( 0 ),
fHostBufferSize ( buffer_size ), fHostBufferSize ( buffer_size ),
@@ -112,7 +112,7 @@ namespace Jack
fPIControler(sample_rate / sample_rate, 256), fPIControler(sample_rate / sample_rate, 256),
fCaptureRingBuffer(NULL), fPlaybackRingBuffer(NULL), fCaptureRingBuffer(NULL), fPlaybackRingBuffer(NULL),
fQuality(0), fQuality(0),
fRingbufferCurSize(DEFAULT_ADAPTATIVE_SIZE),
fRingbufferCurSize(ring_buffer_size),
fPullAndPushTime(0), fPullAndPushTime(0),
fRunning(false), fRunning(false),
fAdaptative(true) fAdaptative(true)
@@ -120,7 +120,8 @@ namespace Jack
JackAudioAdapterInterface ( jack_nframes_t host_buffer_size, JackAudioAdapterInterface ( jack_nframes_t host_buffer_size,
jack_nframes_t host_sample_rate, jack_nframes_t host_sample_rate,
jack_nframes_t adapted_buffer_size, jack_nframes_t adapted_buffer_size,
jack_nframes_t adapted_sample_rate ) :
jack_nframes_t adapted_sample_rate,
jack_nframes_t ring_buffer_size = DEFAULT_ADAPTATIVE_SIZE ) :
fCaptureChannels ( 0 ), fCaptureChannels ( 0 ),
fPlaybackChannels ( 0 ), fPlaybackChannels ( 0 ),
fHostBufferSize ( host_buffer_size ), fHostBufferSize ( host_buffer_size ),
@@ -129,7 +130,7 @@ namespace Jack
fAdaptedSampleRate ( adapted_sample_rate ), fAdaptedSampleRate ( adapted_sample_rate ),
fPIControler(host_sample_rate / host_sample_rate, 256), fPIControler(host_sample_rate / host_sample_rate, 256),
fQuality(0), fQuality(0),
fRingbufferCurSize(DEFAULT_ADAPTATIVE_SIZE),
fRingbufferCurSize(ring_buffer_size),
fPullAndPushTime(0), fPullAndPushTime(0),
fRunning(false), fRunning(false),
fAdaptative(true) fAdaptative(true)


+ 18
- 1
common/JackNetAPI.cpp View File

@@ -111,6 +111,7 @@ extern "C"
jack_nframes_t adapted_buffer_size, jack_nframes_t adapted_buffer_size,
jack_nframes_t adapted_sample_rate); jack_nframes_t adapted_sample_rate);
SERVER_EXPORT int jack_destroy_adapter(jack_adapter_t* adapter); SERVER_EXPORT int jack_destroy_adapter(jack_adapter_t* adapter);
SERVER_EXPORT void jack_flush_adapter(jack_adapter_t* adapter);


SERVER_EXPORT int jack_adapter_push_and_pull(jack_adapter_t* adapter, float** input, float** output, unsigned int frames); SERVER_EXPORT int jack_adapter_push_and_pull(jack_adapter_t* adapter, float** input, float** output, unsigned int frames);
SERVER_EXPORT int jack_adapter_pull_and_push(jack_adapter_t* adapter, float** input, float** output, unsigned int frames); SERVER_EXPORT int jack_adapter_pull_and_push(jack_adapter_t* adapter, float** input, float** output, unsigned int frames);
@@ -485,7 +486,7 @@ struct JackNetExtSlave : public JackNetSlaveInterface, public JackRunnableInterf
return 0; return 0;
} }
int Restart()
int Restart()
{ {
// If shutdown cb is set, then call it // If shutdown cb is set, then call it
if (fShutdownCallback) if (fShutdownCallback)
@@ -782,6 +783,16 @@ struct JackNetAdapter : public JackAudioAdapterInterface {
{ {
Destroy(); Destroy();
} }
int Flush()
{
for (int i = 0; i < fCaptureChannels; i++ ) {
fCaptureRingBuffer[i]->Reset(fRingbufferCurSize);
}
for (int i = 0; i < fPlaybackChannels; i++ ) {
fPlaybackRingBuffer[i]->Reset(fRingbufferCurSize);
}
}
}; };


@@ -894,6 +905,12 @@ SERVER_EXPORT int jack_destroy_adapter(jack_adapter_t* adapter)
return 0; return 0;
} }


SERVER_EXPORT void jack_flush_adapter(jack_adapter_t* adapter)
{
JackNetAdapter* slave = (JackNetAdapter*)adapter;
slave->Flush();
}

SERVER_EXPORT int jack_adapter_push_and_pull(jack_adapter_t* adapter, float** input, float** output, unsigned int frames) SERVER_EXPORT int jack_adapter_push_and_pull(jack_adapter_t* adapter, float** input, float** output, unsigned int frames)
{ {
JackNetAdapter* slave = (JackNetAdapter*)adapter; JackNetAdapter* slave = (JackNetAdapter*)adapter;


+ 3
- 1
common/JackNetInterface.cpp View File

@@ -436,13 +436,15 @@ namespace Jack
// - this mode will skip the two first cycles, thus it lets time for data to be processed and queued on the socket rx buffer // - this mode will skip the two first cycles, thus it lets time for data to be processed and queued on the socket rx buffer
//the slow mode is the safest mode because it wait twice the bandwidth relative time (send/return + process) //the slow mode is the safest mode because it wait twice the bandwidth relative time (send/return + process)
/*
if (fCycleOffset < CYCLE_OFFSET_SLOW) { if (fCycleOffset < CYCLE_OFFSET_SLOW) {
return 0; return 0;
} else { } else {
rx_bytes = Recv ( rx_head->fPacketSize, 0 ); rx_bytes = Recv ( rx_head->fPacketSize, 0 );
} }
*/
//rx_bytes = Recv ( rx_head->fPacketSize, 0 );
rx_bytes = Recv ( rx_head->fPacketSize, 0 );
if (fCycleOffset != fLastfCycleOffset) if (fCycleOffset != fLastfCycleOffset)
jack_info("Warning : '%s' runs in slow network mode, but data received too late (%d cycle(s) offset)", fParams.fName, fCycleOffset); jack_info("Warning : '%s' runs in slow network mode, but data received too late (%d cycle(s) offset)", fParams.fName, fCycleOffset);


+ 1
- 0
common/JackResampler.cpp View File

@@ -39,6 +39,7 @@ JackResampler::~JackResampler()
void JackResampler::Reset(unsigned int new_size) void JackResampler::Reset(unsigned int new_size)
{ {
fRingBufferSize = new_size; fRingBufferSize = new_size;
jack_ringbuffer_reset(fRingBuffer);
jack_ringbuffer_reset_size(fRingBuffer, sizeof(float) * fRingBufferSize); jack_ringbuffer_reset_size(fRingBuffer, sizeof(float) * fRingBufferSize);
jack_ringbuffer_read_advance(fRingBuffer, (sizeof(float) * fRingBufferSize / 2)); jack_ringbuffer_read_advance(fRingBuffer, (sizeof(float) * fRingBufferSize / 2));
} }


+ 3
- 0
common/jack/net.h View File

@@ -268,6 +268,9 @@ jack_adapter_t* jack_create_adapter(int input, int output,
*/ */
int jack_destroy_adapter(jack_adapter_t* adapter); int jack_destroy_adapter(jack_adapter_t* adapter);



void jack_flush_adapter(jack_adapter_t* adapter);

/** /**
* Push input to and pull output from ringbuffer * Push input to and pull output from ringbuffer
* *


+ 1
- 0
common/ringbuffer.c View File

@@ -126,6 +126,7 @@ jack_ringbuffer_reset (jack_ringbuffer_t * rb)
{ {
rb->read_ptr = 0; rb->read_ptr = 0;
rb->write_ptr = 0; rb->write_ptr = 0;
memset(rb->buf, 0, rb->size);
} }


/* Reset the read and write pointers to zero. This is not thread /* Reset the read and write pointers to zero. This is not thread


+ 11
- 3
macosx/iphone/main_slave.mm View File

@@ -14,13 +14,12 @@
#define NUM_INPUT 0 #define NUM_INPUT 0
#define NUM_OUTPUT 2 #define NUM_OUTPUT 2


jack_net_slave_t* net;
jack_adapter_t* adapter;
jack_net_slave_t* net = NULL;
jack_adapter_t* adapter = NULL;


int buffer_size; int buffer_size;
int sample_rate; int sample_rate;



static int net_process(jack_nframes_t buffer_size, static int net_process(jack_nframes_t buffer_size,
int audio_input, int audio_input,
float** audio_input_buffer, float** audio_input_buffer,
@@ -46,6 +45,13 @@ static int net_process(jack_nframes_t buffer_size,
return 0; return 0;
} }


static void net_shutdown(void *arg)
{
if (adapter)
jack_flush_adapter(adapter);
}


static void SlaveAudioCallback(int frames, float** inputs, float** outputs, void* arg) static void SlaveAudioCallback(int frames, float** inputs, float** outputs, void* arg)
{ {
jack_adapter_push_and_pull(adapter, inputs, outputs, frames); jack_adapter_push_and_pull(adapter, inputs, outputs, frames);
@@ -80,6 +86,8 @@ int main(int argc, char *argv[]) {
jack_set_net_slave_process_callback(net, net_process, NULL); jack_set_net_slave_process_callback(net, net_process, NULL);
jack_set_net_slave_shutdown_callback(net, net_shutdown, NULL);
if (jack_net_slave_activate(net) != 0) { if (jack_net_slave_activate(net) != 0) {
return -1; return -1;
} }


Loading…
Cancel
Save