From 068e599fcd849f98019374212d53d64e0033bd28 Mon Sep 17 00:00:00 2001 From: moret Date: Fri, 18 Jul 2008 15:14:39 +0000 Subject: [PATCH] Add 'transport_sync' option to jacknetdriver (not active yet) git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2699 0c269be4-1314-0410-8aa9-9f06e86f4224 --- common/JackNetDriver.cpp | 22 +++++++++++++++++++--- common/JackNetDriver.h | 3 ++- common/JackNetManager.cpp | 8 ++++---- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/common/JackNetDriver.cpp b/common/JackNetDriver.cpp index 27487d9d..0829765b 100644 --- a/common/JackNetDriver.cpp +++ b/common/JackNetDriver.cpp @@ -33,7 +33,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. namespace Jack { JackNetDriver::JackNetDriver ( const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table, - const char* ip, int port, int mtu, int midi_input_ports, int midi_output_ports, const char* net_name ) + const char* ip, int port, int mtu, int midi_input_ports, int midi_output_ports, const char* net_name, uint transport_sync ) : JackAudioDriver ( name, alias, engine, table ), fSocket ( ip, port ) { fMulticastIP = new char[strlen ( ip ) + 1]; @@ -43,6 +43,7 @@ namespace Jack fParams.fReturnMidiChannels = midi_output_ports; strcpy ( fParams.fName, net_name ); fSocket.GetName ( fParams.fSlaveNetName ); + fTransportSync = transport_sync; } JackNetDriver::~JackNetDriver() @@ -100,6 +101,10 @@ namespace Jack fParams.fSendAudioChannels = fCaptureChannels; fParams.fReturnAudioChannels = fPlaybackChannels; + //is transport sync ? + if ( fTransportSync ) + jack_info ( "NetDriver started with Master's Transport Sync." ); + //init loop : get a master and start, do it until connection is ok net_status_t status; do @@ -566,7 +571,7 @@ namespace Jack { jack_driver_desc_t* desc = ( jack_driver_desc_t* ) calloc ( 1, sizeof ( jack_driver_desc_t ) ); strcpy ( desc->name, "net" ); - desc->nparams = 8; + desc->nparams = 9; desc->params = ( jack_driver_param_desc_t* ) calloc ( desc->nparams, sizeof ( jack_driver_param_desc_t ) ); int i = 0; @@ -633,6 +638,14 @@ namespace Jack strcpy ( desc->params[i].short_desc, "Name of the jack client" ); strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + i++; + strcpy ( desc->params[i].name, "transport_sync" ); + desc->params[i].character = 't'; + desc->params[i].type = JackDriverParamUInt; + desc->params[i].value.ui = 1U; + strcpy ( desc->params[i].short_desc, "Sync transport with master's" ); + strcpy ( desc->params[i].long_desc, desc->params[i].short_desc ); + return desc; } @@ -648,6 +661,7 @@ namespace Jack GetHostName ( name, JACK_CLIENT_NAME_SIZE ); int udp_port = DEFAULT_PORT; int mtu = 1500; + uint transport_sync = 1; jack_nframes_t period_size = 128; jack_nframes_t sample_rate = 48000; int audio_capture_ports = 2; @@ -686,12 +700,14 @@ namespace Jack break; case 'n' : strncpy ( name, param->value.str, JACK_CLIENT_NAME_SIZE ); + case 't' : + transport_sync = param->value.ui; } } Jack::JackDriverClientInterface* driver = new Jack::JackWaitThreadedDriver ( new Jack::JackNetDriver ( "system", "net_pcm", engine, table, multicast_ip, udp_port, mtu, - midi_input_ports, midi_output_ports, name ) ); + midi_input_ports, midi_output_ports, name, transport_sync ) ); if ( driver->Open ( period_size, sample_rate, 1, 1, audio_capture_ports, audio_playback_ports, monitor, "from_master_", "to_master_", 0, 0 ) == 0 ) return driver; diff --git a/common/JackNetDriver.h b/common/JackNetDriver.h index f64f4488..a13fec59 100644 --- a/common/JackNetDriver.h +++ b/common/JackNetDriver.h @@ -34,6 +34,7 @@ namespace Jack char* fMulticastIP; JackNetSocket fSocket; uint fNSubProcess; + uint fTransportSync; jack_port_id_t* fMidiCapturePortList; jack_port_id_t* fMidiPlaybackPortList; @@ -70,7 +71,7 @@ namespace Jack public: JackNetDriver ( const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table, - const char* ip, int port, int mtu, int midi_input_ports, int midi_output_ports, const char* master_name ); + const char* ip, int port, int mtu, int midi_input_ports, int midi_output_ports, const char* master_name, uint transport_sync ); ~JackNetDriver(); int Open ( jack_nframes_t frames_per_cycle, jack_nframes_t rate, bool capturing, bool playing, diff --git a/common/JackNetManager.cpp b/common/JackNetManager.cpp index c889e196..a5e9e89d 100644 --- a/common/JackNetManager.cpp +++ b/common/JackNetManager.cpp @@ -191,7 +191,7 @@ namespace Jack jack_nframes_t port_latency = jack_get_buffer_size ( fJackClient ); unsigned long port_flags; //audio - port_flags = JackPortIsInput | JackPortIsTerminal; + port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; for ( i = 0; i < fParams.fSendAudioChannels; i++ ) { sprintf ( name, "to_slave_%d", i+1 ); @@ -199,7 +199,7 @@ namespace Jack goto fail; jack_port_set_latency ( fAudioCapturePorts[i], port_latency ); } - port_flags = JackPortIsOutput | JackPortIsTerminal; + port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; for ( i = 0; i < fParams.fReturnAudioChannels; i++ ) { sprintf ( name, "from_slave_%d", i+1 ); @@ -208,7 +208,7 @@ namespace Jack jack_port_set_latency ( fAudioPlaybackPorts[i], port_latency ); } //midi - port_flags = JackPortIsInput | JackPortIsTerminal; + port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; for ( i = 0; i < fParams.fSendMidiChannels; i++ ) { sprintf ( name, "midi_to_slave_%d", i+1 ); @@ -216,7 +216,7 @@ namespace Jack goto fail; jack_port_set_latency ( fMidiCapturePorts[i], port_latency ); } - port_flags = JackPortIsOutput | JackPortIsTerminal; + port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; for ( i = 0; i < fParams.fReturnMidiChannels; i++ ) { sprintf ( name, "midi_from_slave_%d", i+1 );