Browse Source

Add Latency to Netjack2's ports for transport integration

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2696 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
moret 17 years ago
parent
commit
5ca867a286
6 changed files with 53 additions and 21 deletions
  1. +10
    -7
      common/JackNetDriver.cpp
  2. +1
    -0
      common/JackNetDriver.h
  3. +33
    -5
      common/JackNetManager.cpp
  4. +5
    -4
      common/JackNetManager.h
  5. +3
    -4
      common/JackNetTool.h
  6. +1
    -1
      windows/Setup/jack.ci

+ 10
- 7
common/JackNetDriver.cpp View File

@@ -26,7 +26,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackThreadedDriver.h"
#include "JackWaitThreadedDriver.h"
#include "JackException.h"
#include "JackExports.h"

#define DEFAULT_MULTICAST_IP "225.3.19.154"
#define DEFAULT_PORT 19000
@@ -314,9 +313,9 @@ namespace Jack
}
port = fGraphManager->GetPort ( port_id );
port->SetAlias ( alias );
port->SetLatency ( fEngineControl->fBufferSize + fCaptureLatency );
port->SetLatency ( fEngineControl->fBufferSize );
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;
for ( audio_port_index = 0; audio_port_index < fPlaybackChannels; audio_port_index++ )
@@ -331,9 +330,9 @@ namespace Jack
}
port = fGraphManager->GetPort ( port_id );
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;
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
port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal;
@@ -347,8 +346,10 @@ namespace Jack
jack_error ( "driver: cannot register port for %s", name );
return -1;
}
port = fGraphManager->GetPort ( port_id );
port->SetLatency ( fEngineControl->fBufferSize );
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;
@@ -362,8 +363,10 @@ namespace Jack
jack_error ( "driver: cannot register port for %s", name );
return -1;
}
port = fGraphManager->GetPort ( port_id );
port->SetLatency ( fEngineControl->fBufferSize + ( ( fEngineControl->fSyncMode ) ? 0 : fEngineControl->fBufferSize ) );
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;


+ 1
- 0
common/JackNetDriver.h View File

@@ -23,6 +23,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

#include "JackAudioDriver.h"
#include "JackNetTool.h"
#include "transport_types.h"

namespace Jack
{


+ 33
- 5
common/JackNetManager.cpp View File

@@ -21,7 +21,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackError.h"
#include "JackExports.h"
#include "driver_interface.h"
//#include "JackInternalClient.h"

#define DEFAULT_MULTICAST_IP "225.3.19.154"
#define DEFAULT_PORT 19000
@@ -189,31 +188,41 @@ namespace Jack
//port registering
uint i;
char name[24];
jack_nframes_t port_latency = jack_get_buffer_size ( fJackClient );
unsigned long port_flags;
//audio
port_flags = JackPortIsInput | JackPortIsTerminal;
for ( i = 0; i < fParams.fSendAudioChannels; i++ )
{
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;
jack_port_set_latency ( fAudioCapturePorts[i], port_latency );
}
port_flags = JackPortIsOutput | JackPortIsTerminal;
for ( i = 0; i < fParams.fReturnAudioChannels; i++ )
{
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;
jack_port_set_latency ( fAudioPlaybackPorts[i], port_latency );
}
//midi
port_flags = JackPortIsInput | JackPortIsTerminal;
for ( i = 0; i < fParams.fSendMidiChannels; i++ )
{
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;
jack_port_set_latency ( fMidiCapturePorts[i], port_latency );
}
port_flags = JackPortIsOutput | JackPortIsTerminal;
for ( i = 0; i < fParams.fReturnMidiChannels; i++ )
{
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;
jack_port_set_latency ( fMidiPlaybackPorts[i], port_latency );
}

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
if ( jack_client_create_thread ( fManagerClient, &fManagerThread, 0, 0, NetManagerThread, this ) )
jack_error ( "Can't create the network manager control thread." );
@@ -479,6 +494,13 @@ fail:
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 )
{
JackNetMasterManager* master_manager = static_cast<JackNetMasterManager*> ( arg );
@@ -488,6 +510,12 @@ fail:
return NULL;
}

int JackNetMasterManager::SyncCallback ( jack_transport_state_t state, jack_position_t* pos )
{
jack_log ( "JackNetMasterManager::SyncCallback" );
return 0;
}

void JackNetMasterManager::Run()
{
jack_log ( "JackNetMasterManager::Run" );


+ 5
- 4
common/JackNetManager.h View File

@@ -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 "thread.h"
@@ -86,8 +86,8 @@ namespace Jack
{
friend class JackNetMaster;
private:
static int SetSyncCallback ( jack_transport_state_t state, jack_position_t* pos, void* arg );
static void* NetManagerThread ( void* arg );
static int SetProcess ( jack_nframes_t nframes, void* arg );

jack_client_t* fManagerClient;
const char* fManagerName;
@@ -103,7 +103,8 @@ namespace Jack
master_list_it_t FindMaster ( uint32_t client_id );
void KillMaster ( session_params_t* params );
void SetSlaveName ( session_params_t& params );
int Process();

int SyncCallback ( jack_transport_state_t state, jack_position_t* pos );
public:
JackNetMasterManager ( jack_client_t* jack_client, const JSList* params );
~JackNetMasterManager();


+ 3
- 4
common/JackNetTool.h View File

@@ -17,7 +17,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#include "types.h"
#include "JackConstants.h"
#include "JackMidiPort.h"
#include "JackExports.h"
@@ -119,7 +118,7 @@ namespace Jack
char* fBuffer;
char* fNetBuffer;
JackMidiBuffer** fPortBuffer;
public:
NetMidiBuffer ( session_params_t* params, uint32_t nports, char* net_buffer );
~NetMidiBuffer();
@@ -134,7 +133,7 @@ namespace Jack
//network<->buffer
int RenderFromNetwork ( int subcycle, size_t copy_size );
int RenderToNetwork ( int subcycle, size_t total_size );
void SetBuffer(int index, JackMidiBuffer* buffer);
};

@@ -157,7 +156,7 @@ namespace Jack
//jack<->buffer
void RenderFromJackPorts ( int subcycle );
void RenderToJackPorts ( int subcycle );
void SetBuffer(int index, sample_t* buffer);
};



+ 1
- 1
windows/Setup/jack.ci View File

@@ -33,7 +33,7 @@
<dlgsavepath> 1</>
<dlgautoprog> 1</>
<dlgfinish> 1</>
<comptype> ppmdmax</>
<comptype> deffast</>
<solid> 1</>
<srcfolder> </>
<ifexist> over</>


Loading…
Cancel
Save