git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2696 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.90
@@ -26,7 +26,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
#include "JackThreadedDriver.h" | #include "JackThreadedDriver.h" | ||||
#include "JackWaitThreadedDriver.h" | #include "JackWaitThreadedDriver.h" | ||||
#include "JackException.h" | #include "JackException.h" | ||||
#include "JackExports.h" | |||||
#define DEFAULT_MULTICAST_IP "225.3.19.154" | #define DEFAULT_MULTICAST_IP "225.3.19.154" | ||||
#define DEFAULT_PORT 19000 | #define DEFAULT_PORT 19000 | ||||
@@ -314,9 +313,9 @@ namespace Jack | |||||
} | } | ||||
port = fGraphManager->GetPort ( port_id ); | port = fGraphManager->GetPort ( port_id ); | ||||
port->SetAlias ( alias ); | port->SetAlias ( alias ); | ||||
port->SetLatency ( fEngineControl->fBufferSize + fCaptureLatency ); | |||||
port->SetLatency ( fEngineControl->fBufferSize ); | |||||
fCapturePortList[audio_port_index] = port_id; | fCapturePortList[audio_port_index] = port_id; | ||||
jack_log ( "JackNetDriver::AllocPorts() fCapturePortList[%d] audio_port_index = %ld", audio_port_index, port_id ); | |||||
jack_log ( "JackNetDriver::AllocPorts() fCapturePortList[%d] audio_port_index = %ld fPortLatency = %ld", audio_port_index, port_id, port->GetLatency() ); | |||||
} | } | ||||
port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; | port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; | ||||
for ( audio_port_index = 0; audio_port_index < fPlaybackChannels; audio_port_index++ ) | for ( audio_port_index = 0; audio_port_index < fPlaybackChannels; audio_port_index++ ) | ||||
@@ -331,9 +330,9 @@ namespace Jack | |||||
} | } | ||||
port = fGraphManager->GetPort ( port_id ); | port = fGraphManager->GetPort ( port_id ); | ||||
port->SetAlias ( alias ); | port->SetAlias ( alias ); | ||||
port->SetLatency ( fEngineControl->fBufferSize + ( ( fEngineControl->fSyncMode ) ? 0 : fEngineControl->fBufferSize ) + fPlaybackLatency ); | |||||
port->SetLatency ( fEngineControl->fBufferSize + ( ( fEngineControl->fSyncMode ) ? 0 : fEngineControl->fBufferSize ) ); | |||||
fPlaybackPortList[audio_port_index] = port_id; | fPlaybackPortList[audio_port_index] = port_id; | ||||
jack_log ( "JackNetDriver::AllocPorts() fPlaybackPortList[%d] audio_port_index = %ld", audio_port_index, port_id ); | |||||
jack_log ( "JackNetDriver::AllocPorts() fPlaybackPortList[%d] audio_port_index = %ld fPortLatency = %ld", audio_port_index, port_id, port->GetLatency() ); | |||||
} | } | ||||
//midi | //midi | ||||
port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; | port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; | ||||
@@ -347,8 +346,10 @@ namespace Jack | |||||
jack_error ( "driver: cannot register port for %s", name ); | jack_error ( "driver: cannot register port for %s", name ); | ||||
return -1; | return -1; | ||||
} | } | ||||
port = fGraphManager->GetPort ( port_id ); | |||||
port->SetLatency ( fEngineControl->fBufferSize ); | |||||
fMidiCapturePortList[midi_port_index] = port_id; | fMidiCapturePortList[midi_port_index] = port_id; | ||||
jack_log ( "JackNetDriver::AllocPorts() fMidiCapturePortList[%d] midi_port_index = %ld", midi_port_index, port_id ); | |||||
jack_log ( "JackNetDriver::AllocPorts() fMidiCapturePortList[%d] midi_port_index = %ld fPortLatency = %ld", midi_port_index, port_id, port->GetLatency() ); | |||||
} | } | ||||
port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; | port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; | ||||
@@ -362,8 +363,10 @@ namespace Jack | |||||
jack_error ( "driver: cannot register port for %s", name ); | jack_error ( "driver: cannot register port for %s", name ); | ||||
return -1; | return -1; | ||||
} | } | ||||
port = fGraphManager->GetPort ( port_id ); | |||||
port->SetLatency ( fEngineControl->fBufferSize + ( ( fEngineControl->fSyncMode ) ? 0 : fEngineControl->fBufferSize ) ); | |||||
fMidiPlaybackPortList[midi_port_index] = port_id; | fMidiPlaybackPortList[midi_port_index] = port_id; | ||||
jack_log ( "JackNetDriver::AllocPorts() fMidiPlaybackPortList[%d] midi_port_index = %ld", midi_port_index, port_id ); | |||||
jack_log ( "JackNetDriver::AllocPorts() fMidiPlaybackPortList[%d] midi_port_index = %ld fPortLatency = %ld", midi_port_index, port_id, port->GetLatency() ); | |||||
} | } | ||||
return 0; | return 0; | ||||
@@ -23,6 +23,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
#include "JackAudioDriver.h" | #include "JackAudioDriver.h" | ||||
#include "JackNetTool.h" | #include "JackNetTool.h" | ||||
#include "transport_types.h" | |||||
namespace Jack | namespace Jack | ||||
{ | { | ||||
@@ -21,7 +21,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
#include "JackError.h" | #include "JackError.h" | ||||
#include "JackExports.h" | #include "JackExports.h" | ||||
#include "driver_interface.h" | #include "driver_interface.h" | ||||
//#include "JackInternalClient.h" | |||||
#define DEFAULT_MULTICAST_IP "225.3.19.154" | #define DEFAULT_MULTICAST_IP "225.3.19.154" | ||||
#define DEFAULT_PORT 19000 | #define DEFAULT_PORT 19000 | ||||
@@ -189,31 +188,41 @@ namespace Jack | |||||
//port registering | //port registering | ||||
uint i; | uint i; | ||||
char name[24]; | char name[24]; | ||||
jack_nframes_t port_latency = jack_get_buffer_size ( fJackClient ); | |||||
unsigned long port_flags; | |||||
//audio | //audio | ||||
port_flags = JackPortIsInput | JackPortIsTerminal; | |||||
for ( i = 0; i < fParams.fSendAudioChannels; i++ ) | for ( i = 0; i < fParams.fSendAudioChannels; i++ ) | ||||
{ | { | ||||
sprintf ( name, "to_slave_%d", i+1 ); | sprintf ( name, "to_slave_%d", i+1 ); | ||||
if ( ( fAudioCapturePorts[i] = jack_port_register ( fJackClient, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0 ) ) == NULL ) | |||||
if ( ( fAudioCapturePorts[i] = jack_port_register ( fJackClient, name, JACK_DEFAULT_AUDIO_TYPE, port_flags, 0 ) ) == NULL ) | |||||
goto fail; | goto fail; | ||||
jack_port_set_latency ( fAudioCapturePorts[i], port_latency ); | |||||
} | } | ||||
port_flags = JackPortIsOutput | JackPortIsTerminal; | |||||
for ( i = 0; i < fParams.fReturnAudioChannels; i++ ) | for ( i = 0; i < fParams.fReturnAudioChannels; i++ ) | ||||
{ | { | ||||
sprintf ( name, "from_slave_%d", i+1 ); | sprintf ( name, "from_slave_%d", i+1 ); | ||||
if ( ( fAudioPlaybackPorts[i] = jack_port_register ( fJackClient, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ) ) == NULL ) | |||||
if ( ( fAudioPlaybackPorts[i] = jack_port_register ( fJackClient, name, JACK_DEFAULT_AUDIO_TYPE, port_flags, 0 ) ) == NULL ) | |||||
goto fail; | goto fail; | ||||
jack_port_set_latency ( fAudioPlaybackPorts[i], port_latency ); | |||||
} | } | ||||
//midi | //midi | ||||
port_flags = JackPortIsInput | JackPortIsTerminal; | |||||
for ( i = 0; i < fParams.fSendMidiChannels; i++ ) | for ( i = 0; i < fParams.fSendMidiChannels; i++ ) | ||||
{ | { | ||||
sprintf ( name, "midi_to_slave_%d", i+1 ); | sprintf ( name, "midi_to_slave_%d", i+1 ); | ||||
if ( ( fMidiCapturePorts[i] = jack_port_register ( fJackClient, name, JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0 ) ) == NULL ) | |||||
if ( ( fMidiCapturePorts[i] = jack_port_register ( fJackClient, name, JACK_DEFAULT_MIDI_TYPE, port_flags, 0 ) ) == NULL ) | |||||
goto fail; | goto fail; | ||||
jack_port_set_latency ( fMidiCapturePorts[i], port_latency ); | |||||
} | } | ||||
port_flags = JackPortIsOutput | JackPortIsTerminal; | |||||
for ( i = 0; i < fParams.fReturnMidiChannels; i++ ) | for ( i = 0; i < fParams.fReturnMidiChannels; i++ ) | ||||
{ | { | ||||
sprintf ( name, "midi_from_slave_%d", i+1 ); | sprintf ( name, "midi_from_slave_%d", i+1 ); | ||||
if ( ( fMidiPlaybackPorts[i] = jack_port_register ( fJackClient, name, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0 ) ) == NULL ) | |||||
if ( ( fMidiPlaybackPorts[i] = jack_port_register ( fJackClient, name, JACK_DEFAULT_MIDI_TYPE, port_flags, 0 ) ) == NULL ) | |||||
goto fail; | goto fail; | ||||
jack_port_set_latency ( fMidiPlaybackPorts[i], port_latency ); | |||||
} | } | ||||
fRunning = true; | fRunning = true; | ||||
@@ -463,6 +472,12 @@ fail: | |||||
} | } | ||||
} | } | ||||
jack_set_sync_callback ( fManagerClient, SetSyncCallback, this ); | |||||
//activate the client | |||||
if ( jack_activate ( fManagerClient ) != 0 ) | |||||
jack_error ( "Can't activate the network manager client, transport disables." ); | |||||
//launch the manager thread | //launch the manager thread | ||||
if ( jack_client_create_thread ( fManagerClient, &fManagerThread, 0, 0, NetManagerThread, this ) ) | if ( jack_client_create_thread ( fManagerClient, &fManagerThread, 0, 0, NetManagerThread, this ) ) | ||||
jack_error ( "Can't create the network manager control thread." ); | jack_error ( "Can't create the network manager control thread." ); | ||||
@@ -479,6 +494,13 @@ fail: | |||||
SocketAPIEnd(); | SocketAPIEnd(); | ||||
} | } | ||||
int JackNetMasterManager::SetSyncCallback ( jack_transport_state_t state, jack_position_t* pos, void* arg ) | |||||
{ | |||||
JackNetMasterManager* master_manager = static_cast<JackNetMasterManager*>(arg); | |||||
master_manager->SyncCallback ( state, pos ); | |||||
return 1; | |||||
} | |||||
void* JackNetMasterManager::NetManagerThread ( void* arg ) | void* JackNetMasterManager::NetManagerThread ( void* arg ) | ||||
{ | { | ||||
JackNetMasterManager* master_manager = static_cast<JackNetMasterManager*> ( arg ); | JackNetMasterManager* master_manager = static_cast<JackNetMasterManager*> ( arg ); | ||||
@@ -488,6 +510,12 @@ fail: | |||||
return NULL; | return NULL; | ||||
} | } | ||||
int JackNetMasterManager::SyncCallback ( jack_transport_state_t state, jack_position_t* pos ) | |||||
{ | |||||
jack_log ( "JackNetMasterManager::SyncCallback" ); | |||||
return 0; | |||||
} | |||||
void JackNetMasterManager::Run() | void JackNetMasterManager::Run() | ||||
{ | { | ||||
jack_log ( "JackNetMasterManager::Run" ); | jack_log ( "JackNetMasterManager::Run" ); | ||||
@@ -17,8 +17,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
*/ | */ | ||||
#ifndef __JACKNETMASTER_H__ | |||||
#define __JACKNETMASTER_H__ | |||||
#ifndef __JACKNETMANAGER_H__ | |||||
#define __JACKNETMANAGER_H__ | |||||
#include "JackNetTool.h" | #include "JackNetTool.h" | ||||
#include "thread.h" | #include "thread.h" | ||||
@@ -86,8 +86,8 @@ namespace Jack | |||||
{ | { | ||||
friend class JackNetMaster; | friend class JackNetMaster; | ||||
private: | private: | ||||
static int SetSyncCallback ( jack_transport_state_t state, jack_position_t* pos, void* arg ); | |||||
static void* NetManagerThread ( void* arg ); | static void* NetManagerThread ( void* arg ); | ||||
static int SetProcess ( jack_nframes_t nframes, void* arg ); | |||||
jack_client_t* fManagerClient; | jack_client_t* fManagerClient; | ||||
const char* fManagerName; | const char* fManagerName; | ||||
@@ -103,7 +103,8 @@ namespace Jack | |||||
master_list_it_t FindMaster ( uint32_t client_id ); | master_list_it_t FindMaster ( uint32_t client_id ); | ||||
void KillMaster ( session_params_t* params ); | void KillMaster ( session_params_t* params ); | ||||
void SetSlaveName ( session_params_t& params ); | void SetSlaveName ( session_params_t& params ); | ||||
int Process(); | |||||
int SyncCallback ( jack_transport_state_t state, jack_position_t* pos ); | |||||
public: | public: | ||||
JackNetMasterManager ( jack_client_t* jack_client, const JSList* params ); | JackNetMasterManager ( jack_client_t* jack_client, const JSList* params ); | ||||
~JackNetMasterManager(); | ~JackNetMasterManager(); | ||||
@@ -17,7 +17,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
*/ | */ | ||||
#include "types.h" | |||||
#include "JackConstants.h" | #include "JackConstants.h" | ||||
#include "JackMidiPort.h" | #include "JackMidiPort.h" | ||||
#include "JackExports.h" | #include "JackExports.h" | ||||
@@ -119,7 +118,7 @@ namespace Jack | |||||
char* fBuffer; | char* fBuffer; | ||||
char* fNetBuffer; | char* fNetBuffer; | ||||
JackMidiBuffer** fPortBuffer; | JackMidiBuffer** fPortBuffer; | ||||
public: | public: | ||||
NetMidiBuffer ( session_params_t* params, uint32_t nports, char* net_buffer ); | NetMidiBuffer ( session_params_t* params, uint32_t nports, char* net_buffer ); | ||||
~NetMidiBuffer(); | ~NetMidiBuffer(); | ||||
@@ -134,7 +133,7 @@ namespace Jack | |||||
//network<->buffer | //network<->buffer | ||||
int RenderFromNetwork ( int subcycle, size_t copy_size ); | int RenderFromNetwork ( int subcycle, size_t copy_size ); | ||||
int RenderToNetwork ( int subcycle, size_t total_size ); | int RenderToNetwork ( int subcycle, size_t total_size ); | ||||
void SetBuffer(int index, JackMidiBuffer* buffer); | void SetBuffer(int index, JackMidiBuffer* buffer); | ||||
}; | }; | ||||
@@ -157,7 +156,7 @@ namespace Jack | |||||
//jack<->buffer | //jack<->buffer | ||||
void RenderFromJackPorts ( int subcycle ); | void RenderFromJackPorts ( int subcycle ); | ||||
void RenderToJackPorts ( int subcycle ); | void RenderToJackPorts ( int subcycle ); | ||||
void SetBuffer(int index, sample_t* buffer); | void SetBuffer(int index, sample_t* buffer); | ||||
}; | }; | ||||
@@ -33,7 +33,7 @@ | |||||
<dlgsavepath> 1</> | <dlgsavepath> 1</> | ||||
<dlgautoprog> 1</> | <dlgautoprog> 1</> | ||||
<dlgfinish> 1</> | <dlgfinish> 1</> | ||||
<comptype> ppmdmax</> | |||||
<comptype> deffast</> | |||||
<solid> 1</> | <solid> 1</> | ||||
<srcfolder> </> | <srcfolder> </> | ||||
<ifexist> over</> | <ifexist> over</> | ||||