Browse Source

Better SocketAPIInit/SocketAPIEnd handling.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2846 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
sletz 16 years ago
parent
commit
2bf698816d
4 changed files with 57 additions and 28 deletions
  1. +19
    -11
      common/JackNetAdapter.cpp
  2. +21
    -14
      common/JackNetDriver.cpp
  3. +1
    -1
      common/JackNetInterface.cpp
  4. +16
    -2
      common/JackNetInterface.h

+ 19
- 11
common/JackNetAdapter.cpp View File

@@ -28,9 +28,6 @@ namespace Jack
{ {
jack_log ( "JackNetAdapter::JackNetAdapter" ); jack_log ( "JackNetAdapter::JackNetAdapter" );


if ( SocketAPIInit() < 0 )
jack_error ( "Can't init Socket API, exiting..." );

//global parametering //global parametering
//we can't call JackNetSlaveInterface constructor with some parameters before //we can't call JackNetSlaveInterface constructor with some parameters before
//because we don't have full parametering right now //because we don't have full parametering right now
@@ -165,6 +162,7 @@ namespace Jack
} }
break; break;
// Stop when the thread cycle is finished // Stop when the thread cycle is finished
case JackThread::kRunning: case JackThread::kRunning:
if ( fThread.Stop() < 0 ) if ( fThread.Stop() < 0 )
{ {
@@ -172,6 +170,7 @@ namespace Jack
return -1; return -1;
} }
break; break;
default: default:
break; break;
} }
@@ -268,11 +267,13 @@ namespace Jack
jack_transport_stop ( fJackClient ); jack_transport_stop ( fJackClient );
jack_info ( "NetMaster : transport stops." ); jack_info ( "NetMaster : transport stops." );
break; break;
case JackTransportStarting : case JackTransportStarting :
jack_transport_reposition ( fJackClient, &fSendTransportData.fPosition ); jack_transport_reposition ( fJackClient, &fSendTransportData.fPosition );
jack_transport_start ( fJackClient ); jack_transport_start ( fJackClient );
jack_info ( "NetMaster : transport starts." ); jack_info ( "NetMaster : transport starts." );
break; break;
case JackTransportRolling : case JackTransportRolling :
//TODO , we need to : //TODO , we need to :
// - find a way to call TransportEngine->SetNetworkSync() // - find a way to call TransportEngine->SetNetworkSync()
@@ -405,6 +406,7 @@ namespace Jack
if ( fCaptureRingBuffer[port_index]->WriteResample ( fSoftCaptureBuffer[port_index], fAdaptedBufferSize ) < fAdaptedBufferSize ) if ( fCaptureRingBuffer[port_index]->WriteResample ( fSoftCaptureBuffer[port_index], fAdaptedBufferSize ) < fAdaptedBufferSize )
failure = true; failure = true;
} }
//and output data, //and output data,
for ( port_index = 0; port_index < fPlaybackChannels; port_index++ ) for ( port_index = 0; port_index < fPlaybackChannels; port_index++ )
{ {
@@ -529,15 +531,21 @@ extern "C"
Jack::JackAudioAdapter* adapter; Jack::JackAudioAdapter* adapter;
jack_nframes_t buffer_size = jack_get_buffer_size ( jack_client ); jack_nframes_t buffer_size = jack_get_buffer_size ( jack_client );
jack_nframes_t sample_rate = jack_get_sample_rate ( 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; return 1;
} }
} }


+ 21
- 14
common/JackNetDriver.cpp View File

@@ -152,9 +152,11 @@ namespace Jack
case 's' : case 's' :
plot_name += string ( "_slow" ); plot_name += string ( "_slow" );
break; break;
case 'n' : case 'n' :
plot_name += string ( "_normal" ); plot_name += string ( "_normal" );
break; break;
case 'f' : case 'f' :
plot_name += string ( "_fast" ); plot_name += string ( "_fast" );
break; break;
@@ -372,11 +374,13 @@ namespace Jack
fEngineControl->fTransport.SetCommand ( TransportCommandStop ); fEngineControl->fTransport.SetCommand ( TransportCommandStop );
jack_info ( "Master stops transport." ); jack_info ( "Master stops transport." );
break; break;
case JackTransportStarting : case JackTransportStarting :
fEngineControl->fTransport.RequestNewPos ( &fSendTransportData.fPosition ); fEngineControl->fTransport.RequestNewPos ( &fSendTransportData.fPosition );
fEngineControl->fTransport.SetCommand ( TransportCommandStart ); fEngineControl->fTransport.SetCommand ( TransportCommandStart );
jack_info ( "Master starts transport." ); jack_info ( "Master starts transport." );
break; break;
case JackTransportRolling : case JackTransportRolling :
fEngineControl->fTransport.SetState ( JackTransportRolling ); fEngineControl->fTransport.SetState ( JackTransportRolling );
jack_info ( "Master is rolling." ); 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 ) 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]; char multicast_ip[16];
strcpy ( multicast_ip, DEFAULT_MULTICAST_IP ); strcpy ( multicast_ip, DEFAULT_MULTICAST_IP );
char name[JACK_CLIENT_NAME_SIZE]; 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 #ifdef __cplusplus


+ 1
- 1
common/JackNetInterface.cpp View File

@@ -719,7 +719,7 @@ namespace Jack
fRxHeader.fIsLastPckt = rx_head->fIsLastPckt; fRxHeader.fIsLastPckt = rx_head->fIsLastPckt;
fNetAudioCaptureBuffer->RenderToJackPorts ( rx_head->fSubCycle ); fNetAudioCaptureBuffer->RenderToJackPorts ( rx_head->fSubCycle );
break; break;
case 's': //sync case 's': //sync
jack_info ( "NetSlave : overloaded, skipping receive." ); jack_info ( "NetSlave : overloaded, skipping receive." );
return 0; return 0;


+ 16
- 2
common/JackNetInterface.h View File

@@ -147,11 +147,23 @@ namespace Jack
public: public:
JackNetSlaveInterface() : JackNetInterface() 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 ) 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() ~JackNetSlaveInterface()
{ {
@@ -164,7 +176,9 @@ namespace Jack


#define DEFAULT_MULTICAST_IP "225.3.19.154" #define DEFAULT_MULTICAST_IP "225.3.19.154"
#define DEFAULT_PORT 19000 #define DEFAULT_PORT 19000

#define SLAVE_SETUP_RETRY 5 #define SLAVE_SETUP_RETRY 5

#define MASTER_INIT_TIMEOUT 1000000 // in usec #define MASTER_INIT_TIMEOUT 1000000 // in usec
#define SLAVE_INIT_TIMEOUT 2000000 // in usec #define SLAVE_INIT_TIMEOUT 2000000 // in usec




Loading…
Cancel
Save