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

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


+ 21
- 14
common/JackNetDriver.cpp View File

@@ -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


+ 1
- 1
common/JackNetInterface.cpp View File

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


+ 16
- 2
common/JackNetInterface.h View File

@@ -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



Loading…
Cancel
Save