git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2846 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.90
@@ -28,9 +28,6 @@ namespace Jack | |||
{ | |||
jack_log ( "JackNetAdapter::JackNetAdapter" ); | |||
if ( SocketAPIInit() < 0 ) | |||
jack_error ( "Can't init Socket API, exiting..." ); | |||
//global parametering | |||
//we can't call JackNetSlaveInterface constructor with some parameters before | |||
//because we don't have full parametering right now | |||
@@ -165,6 +162,7 @@ namespace Jack | |||
} | |||
break; | |||
// Stop when the thread cycle is finished | |||
case JackThread::kRunning: | |||
if ( fThread.Stop() < 0 ) | |||
{ | |||
@@ -172,6 +170,7 @@ namespace Jack | |||
return -1; | |||
} | |||
break; | |||
default: | |||
break; | |||
} | |||
@@ -268,11 +267,13 @@ namespace Jack | |||
jack_transport_stop ( fJackClient ); | |||
jack_info ( "NetMaster : transport stops." ); | |||
break; | |||
case JackTransportStarting : | |||
jack_transport_reposition ( fJackClient, &fSendTransportData.fPosition ); | |||
jack_transport_start ( fJackClient ); | |||
jack_info ( "NetMaster : transport starts." ); | |||
break; | |||
case JackTransportRolling : | |||
//TODO , we need to : | |||
// - find a way to call TransportEngine->SetNetworkSync() | |||
@@ -405,6 +406,7 @@ namespace Jack | |||
if ( fCaptureRingBuffer[port_index]->WriteResample ( fSoftCaptureBuffer[port_index], fAdaptedBufferSize ) < fAdaptedBufferSize ) | |||
failure = true; | |||
} | |||
//and output data, | |||
for ( port_index = 0; port_index < fPlaybackChannels; port_index++ ) | |||
{ | |||
@@ -529,15 +531,21 @@ extern "C" | |||
Jack::JackAudioAdapter* adapter; | |||
jack_nframes_t buffer_size = jack_get_buffer_size ( jack_client ); | |||
jack_nframes_t sample_rate = jack_get_sample_rate ( jack_client ); | |||
try { | |||
adapter = new Jack::JackAudioAdapter ( jack_client, new Jack::JackNetAdapter ( jack_client, buffer_size, sample_rate, params ) ); | |||
assert ( adapter ); | |||
adapter = new Jack::JackAudioAdapter ( jack_client, new Jack::JackNetAdapter ( jack_client, buffer_size, sample_rate, params ) ); | |||
assert ( adapter ); | |||
if ( adapter->Open() == 0 ) | |||
return 0; | |||
else | |||
{ | |||
delete adapter; | |||
if ( adapter->Open() == 0 ) | |||
return 0; | |||
else | |||
{ | |||
delete adapter; | |||
return 1; | |||
} | |||
} catch (...) { | |||
return 1; | |||
} | |||
} | |||
@@ -152,9 +152,11 @@ namespace Jack | |||
case 's' : | |||
plot_name += string ( "_slow" ); | |||
break; | |||
case 'n' : | |||
plot_name += string ( "_normal" ); | |||
break; | |||
case 'f' : | |||
plot_name += string ( "_fast" ); | |||
break; | |||
@@ -372,11 +374,13 @@ namespace Jack | |||
fEngineControl->fTransport.SetCommand ( TransportCommandStop ); | |||
jack_info ( "Master stops transport." ); | |||
break; | |||
case JackTransportStarting : | |||
fEngineControl->fTransport.RequestNewPos ( &fSendTransportData.fPosition ); | |||
fEngineControl->fTransport.SetCommand ( TransportCommandStart ); | |||
jack_info ( "Master starts transport." ); | |||
break; | |||
case JackTransportRolling : | |||
fEngineControl->fTransport.SetState ( JackTransportRolling ); | |||
jack_info ( "Master is rolling." ); | |||
@@ -638,11 +642,6 @@ namespace Jack | |||
EXPORT Jack::JackDriverClientInterface* driver_initialize ( Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params ) | |||
{ | |||
if ( SocketAPIInit() < 0 ) | |||
{ | |||
jack_error ( "Can't init Socket API, exiting..." ); | |||
return NULL; | |||
} | |||
char multicast_ip[16]; | |||
strcpy ( multicast_ip, DEFAULT_MULTICAST_IP ); | |||
char name[JACK_CLIENT_NAME_SIZE]; | |||
@@ -706,15 +705,23 @@ namespace Jack | |||
} | |||
} | |||
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, transport_sync, network_mode ) ); | |||
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; | |||
delete driver; | |||
return NULL; | |||
try { | |||
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, transport_sync, network_mode)); | |||
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; | |||
} else { | |||
delete driver; | |||
return NULL; | |||
} | |||
} catch (...) { | |||
return NULL; | |||
} | |||
} | |||
#ifdef __cplusplus | |||
@@ -719,7 +719,7 @@ namespace Jack | |||
fRxHeader.fIsLastPckt = rx_head->fIsLastPckt; | |||
fNetAudioCaptureBuffer->RenderToJackPorts ( rx_head->fSubCycle ); | |||
break; | |||
case 's': //sync | |||
jack_info ( "NetSlave : overloaded, skipping receive." ); | |||
return 0; | |||
@@ -147,11 +147,23 @@ namespace Jack | |||
public: | |||
JackNetSlaveInterface() : JackNetInterface() | |||
{ | |||
fSlaveCounter++; | |||
//open Socket API with the first slave | |||
if (fSlaveCounter++ == 0) { | |||
if (SocketAPIInit() < 0) { | |||
jack_error ( "Can't init Socket API, exiting..." ); | |||
throw -1; | |||
} | |||
} | |||
} | |||
JackNetSlaveInterface ( const char* ip, int port ) : JackNetInterface ( ip, port ) | |||
{ | |||
fSlaveCounter++; | |||
//open Socket API with the first slave | |||
if (fSlaveCounter++ == 0) { | |||
if (SocketAPIInit() < 0) { | |||
jack_error ( "Can't init Socket API, exiting..." ); | |||
throw -1; | |||
} | |||
} | |||
} | |||
~JackNetSlaveInterface() | |||
{ | |||
@@ -164,7 +176,9 @@ namespace Jack | |||
#define DEFAULT_MULTICAST_IP "225.3.19.154" | |||
#define DEFAULT_PORT 19000 | |||
#define SLAVE_SETUP_RETRY 5 | |||
#define MASTER_INIT_TIMEOUT 1000000 // in usec | |||
#define SLAVE_INIT_TIMEOUT 2000000 // in usec | |||