git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2666 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.90
@@ -20,6 +20,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
#include "JackNetManager.h" | |||
#include "JackError.h" | |||
#include "JackExports.h" | |||
#include "driver_interface.h" | |||
#define DEFAULT_MULTICAST_IP "225.3.19.154" | |||
#define DEFAULT_PORT 19000 | |||
@@ -41,7 +42,7 @@ namespace Jack | |||
fClientName = const_cast<char*> ( fParams.fName ); | |||
fNetJumpCnt = 0; | |||
fJackClient = NULL; | |||
fRunning = false; | |||
fRunning = false; | |||
uint port_index; | |||
//jack audio ports | |||
@@ -457,8 +458,8 @@ namespace Jack | |||
Exit(); | |||
master_list_t::iterator it; | |||
for ( it = fMasterList.begin(); it != fMasterList.end(); it++ ) | |||
delete ( *it ); | |||
fSocket.Close(); | |||
delete ( *it ); | |||
fSocket.Close(); | |||
SocketAPIEnd(); | |||
} | |||
@@ -473,7 +474,7 @@ namespace Jack | |||
void JackNetMasterManager::Run() | |||
{ | |||
jack_log ( "JackNetMasterManager::Run" ); | |||
//utility variables | |||
//utility variables | |||
int msec_timeout = 2000; | |||
int attempt = 0; | |||
@@ -481,13 +482,13 @@ namespace Jack | |||
session_params_t params; | |||
int rx_bytes = 0; | |||
JackNetMaster* net_master; | |||
//init socket API (win32) | |||
if ( SocketAPIInit() < 0 ) | |||
{ | |||
jack_error ( "Can't init Socket API, exiting..." ); | |||
return; | |||
} | |||
//init socket API (win32) | |||
if ( SocketAPIInit() < 0 ) | |||
{ | |||
jack_error ( "Can't init Socket API, exiting..." ); | |||
return; | |||
} | |||
//socket | |||
if ( fSocket.NewSocket() == SOCKET_ERROR ) | |||
@@ -505,12 +506,12 @@ namespace Jack | |||
} | |||
//join multicast group | |||
if ( fSocket.JoinMCastGroup ( fMulticastIP ) == SOCKET_ERROR ) | |||
if ( fSocket.JoinMCastGroup ( fMulticastIP ) == SOCKET_ERROR ) | |||
jack_error ( "Can't join multicast group : %s", StrError ( NET_ERROR_CODE ) ); | |||
//local loop | |||
if ( fSocket.SetLocalLoop() == SOCKET_ERROR ) | |||
jack_error ( "Can't set local loop : %s", StrError ( NET_ERROR_CODE ) ); | |||
//local loop | |||
if ( fSocket.SetLocalLoop() == SOCKET_ERROR ) | |||
jack_error ( "Can't set local loop : %s", StrError ( NET_ERROR_CODE ) ); | |||
//set a timeout on the multicast receive (the thread can now be cancelled) | |||
if ( fSocket.SetTimeOut ( msec_timeout ) == SOCKET_ERROR ) | |||
@@ -622,6 +623,17 @@ static Jack::JackNetMasterManager* master_manager = NULL; | |||
extern "C" | |||
{ | |||
#endif | |||
EXPORT jack_driver_desc_t* jack_get_descriptor() | |||
{ | |||
jack_driver_desc_t *desc; | |||
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||
// TODO | |||
return desc; | |||
} | |||
EXPORT int jack_initialize ( jack_client_t* jack_client, const char* load_init ) | |||
{ | |||
if ( master_manager ) | |||
@@ -107,11 +107,76 @@ extern "C" | |||
EXPORT jack_driver_desc_t* jack_get_descriptor() | |||
{ | |||
jack_driver_desc_t *desc; | |||
jack_driver_param_desc_t * params; | |||
unsigned int i; | |||
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||
// TODO : fill parameter description | |||
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||
strcpy (desc->name, "alsa-adapter"); | |||
desc->nparams = 7; | |||
params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); | |||
i = 0; | |||
strcpy(params[i].name, "capture"); | |||
params[i].character = 'C'; | |||
params[i].type = JackDriverParamString; | |||
strcpy (params[i].value.str, "none"); | |||
strcpy (params[i].short_desc, | |||
"Provide capture ports. Optionally set device"); | |||
strcpy (params[i].long_desc, params[i].short_desc); | |||
i++; | |||
strcpy(params[i].name, "playback"); | |||
params[i].character = 'P'; | |||
params[i].type = JackDriverParamString; | |||
strcpy(params[i].value.str, "none"); | |||
strcpy(params[i].short_desc, | |||
"Provide playback ports. Optionally set device"); | |||
strcpy(params[i].long_desc, params[i].short_desc); | |||
i++; | |||
strcpy(params[i].name, "device"); | |||
params[i].character = 'd'; | |||
params[i].type = JackDriverParamString; | |||
strcpy(params[i].value.str, "hw:0"); | |||
strcpy(params[i].short_desc, "ALSA device name"); | |||
strcpy(params[i].long_desc, params[i].short_desc); | |||
i++; | |||
strcpy(params[i].name, "nperiods"); | |||
params[i].character = 'n'; | |||
params[i].type = JackDriverParamUInt; | |||
params[i].value.ui = 2U; | |||
strcpy(params[i].short_desc, "Number of periods of playback latency"); | |||
strcpy(params[i].long_desc, params[i].short_desc); | |||
i++; | |||
strcpy(params[i].name, "duplex"); | |||
params[i].character = 'D'; | |||
params[i].type = JackDriverParamBool; | |||
params[i].value.i = 1; | |||
strcpy(params[i].short_desc, | |||
"Provide both capture and playback ports"); | |||
strcpy(params[i].long_desc, params[i].short_desc); | |||
i++; | |||
strcpy(params[i].name, "inchannels"); | |||
params[i].character = 'i'; | |||
params[i].type = JackDriverParamUInt; | |||
params[i].value.i = 0; | |||
strcpy(params[i].short_desc, | |||
"Number of capture channels (defaults to hardware max)"); | |||
strcpy(params[i].long_desc, params[i].short_desc); | |||
i++; | |||
strcpy(params[i].name, "outchannels"); | |||
params[i].character = 'o'; | |||
params[i].type = JackDriverParamUInt; | |||
params[i].value.i = 0; | |||
strcpy(params[i].short_desc, | |||
"Number of playback channels (defaults to hardware max)"); | |||
strcpy(params[i].long_desc, params[i].short_desc); | |||
desc->params = params; | |||
return desc; | |||
} | |||
@@ -2405,7 +2405,8 @@ extern "C" | |||
#endif | |||
static int | |||
dither_opt (char c, DitherAlgorithm* dither) { | |||
dither_opt (char c, DitherAlgorithm* dither) | |||
{ | |||
switch (c) { | |||
case '-': | |||
case 'n': | |||
@@ -2431,7 +2432,8 @@ extern "C" | |||
return 0; | |||
} | |||
EXPORT const jack_driver_desc_t* driver_get_descriptor () { | |||
EXPORT const jack_driver_desc_t* driver_get_descriptor () | |||
{ | |||
jack_driver_desc_t * desc; | |||
jack_driver_param_desc_t * params; | |||
unsigned int i; | |||
@@ -2604,7 +2606,8 @@ extern "C" | |||
return desc; | |||
} | |||
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) | |||
{ | |||
jack_nframes_t srate = 48000; | |||
jack_nframes_t frames_per_interrupt = 1024; | |||
unsigned long user_nperiods = 2; | |||
@@ -571,16 +571,83 @@ extern "C" | |||
#include "JackExports.h" | |||
#include "driver_interface.h" | |||
EXPORT jack_driver_desc_t* jack_get_descriptor() | |||
{ | |||
EXPORT jack_driver_desc_t* jack_get_descriptor() | |||
{ | |||
jack_driver_desc_t *desc; | |||
unsigned int i; | |||
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||
// TODO : fill parameter description | |||
strcpy(desc->name, "coreaudio-adapter"); | |||
desc->nparams = 8; | |||
desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); | |||
i = 0; | |||
strcpy(desc->params[i].name, "channels"); | |||
desc->params[i].character = 'c'; | |||
desc->params[i].type = JackDriverParamInt; | |||
desc->params[i].value.ui = 0; | |||
strcpy(desc->params[i].short_desc, "Maximum number of channels"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
i++; | |||
strcpy(desc->params[i].name, "inchannels"); | |||
desc->params[i].character = 'i'; | |||
desc->params[i].type = JackDriverParamInt; | |||
desc->params[i].value.ui = 0; | |||
strcpy(desc->params[i].short_desc, "Maximum number of input channels"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
i++; | |||
strcpy(desc->params[i].name, "outchannels"); | |||
desc->params[i].character = 'o'; | |||
desc->params[i].type = JackDriverParamInt; | |||
desc->params[i].value.ui = 0; | |||
strcpy(desc->params[i].short_desc, "Maximum number of output channels"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
i++; | |||
strcpy(desc->params[i].name, "capture"); | |||
desc->params[i].character = 'C'; | |||
desc->params[i].type = JackDriverParamString; | |||
strcpy(desc->params[i].value.str, "will take default CoreAudio input device"); | |||
strcpy(desc->params[i].short_desc, "Provide capture ports. Optionally set CoreAudio device name"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
i++; | |||
strcpy(desc->params[i].name, "playback"); | |||
desc->params[i].character = 'P'; | |||
desc->params[i].type = JackDriverParamString; | |||
strcpy(desc->params[i].value.str, "will take default CoreAudio output device"); | |||
strcpy(desc->params[i].short_desc, "Provide playback ports. Optionally set CoreAudio device name"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
i++; | |||
strcpy(desc->params[i].name, "duplex"); | |||
desc->params[i].character = 'D'; | |||
desc->params[i].type = JackDriverParamBool; | |||
desc->params[i].value.i = TRUE; | |||
strcpy(desc->params[i].short_desc, "Provide both capture and playback ports"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
i++; | |||
strcpy(desc->params[i].name, "device"); | |||
desc->params[i].character = 'd'; | |||
desc->params[i].type = JackDriverParamString; | |||
strcpy(desc->params[i].value.str, "will take default CoreAudio device name"); | |||
strcpy(desc->params[i].short_desc, "CoreAudio device name"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
i++; | |||
strcpy(desc->params[i].name, "list-devices"); | |||
desc->params[i].character = 'l'; | |||
desc->params[i].type = JackDriverParamBool; | |||
desc->params[i].value.i = TRUE; | |||
strcpy(desc->params[i].short_desc, "Display available CoreAudio devices"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
return desc; | |||
} | |||
#ifdef __cplusplus | |||
} | |||
@@ -1127,7 +1127,8 @@ extern "C" | |||
{ | |||
#endif | |||
EXPORT jack_driver_desc_t* driver_get_descriptor() { | |||
EXPORT jack_driver_desc_t* driver_get_descriptor() | |||
{ | |||
jack_driver_desc_t *desc; | |||
unsigned int i; | |||
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||
@@ -1251,7 +1252,8 @@ extern "C" | |||
return desc; | |||
} | |||
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) | |||
{ | |||
jack_nframes_t srate = 44100; | |||
jack_nframes_t frames_per_interrupt = 128; | |||
int capture = FALSE; | |||
@@ -170,9 +170,76 @@ extern "C" | |||
jack_driver_desc_t *desc; | |||
unsigned int i; | |||
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||
strcpy(desc->name, "portaudio-adapter"); | |||
desc->nparams = 8; | |||
desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); | |||
i = 0; | |||
strcpy(desc->params[i].name, "channels"); | |||
desc->params[i].character = 'c'; | |||
desc->params[i].type = JackDriverParamInt; | |||
desc->params[i].value.ui = 0; | |||
strcpy(desc->params[i].short_desc, "Maximum number of channels"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
i++; | |||
strcpy(desc->params[i].name, "inchannels"); | |||
desc->params[i].character = 'i'; | |||
desc->params[i].type = JackDriverParamInt; | |||
desc->params[i].value.ui = 0; | |||
strcpy(desc->params[i].short_desc, "Maximum number of input channels"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
i++; | |||
strcpy(desc->params[i].name, "outchannels"); | |||
desc->params[i].character = 'o'; | |||
desc->params[i].type = JackDriverParamInt; | |||
desc->params[i].value.ui = 0; | |||
strcpy(desc->params[i].short_desc, "Maximum number of output channels"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
i++; | |||
strcpy(desc->params[i].name, "capture"); | |||
desc->params[i].character = 'C'; | |||
desc->params[i].type = JackDriverParamString; | |||
strcpy(desc->params[i].value.str, "will take default PortAudio input device"); | |||
strcpy(desc->params[i].short_desc, "Provide capture ports. Optionally set PortAudio device name"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
i++; | |||
strcpy(desc->params[i].name, "playback"); | |||
desc->params[i].character = 'P'; | |||
desc->params[i].type = JackDriverParamString; | |||
strcpy(desc->params[i].value.str, "will take default PortAudio output device"); | |||
strcpy(desc->params[i].short_desc, "Provide playback ports. Optionally set PortAudio device name"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
i++; | |||
strcpy(desc->params[i].name, "duplex"); | |||
desc->params[i].character = 'D'; | |||
desc->params[i].type = JackDriverParamBool; | |||
desc->params[i].value.i = TRUE; | |||
strcpy(desc->params[i].short_desc, "Provide both capture and playback ports"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
// TODO : fill parameter description | |||
i++; | |||
strcpy(desc->params[i].name, "device"); | |||
desc->params[i].character = 'd'; | |||
desc->params[i].type = JackDriverParamString; | |||
desc->params[i].value.ui = 128U; | |||
strcpy(desc->params[i].value.str, "will take default PortAudio device name"); | |||
strcpy(desc->params[i].short_desc, "PortAudio device name"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
i++; | |||
strcpy(desc->params[i].name, "list-devices"); | |||
desc->params[i].character = 'l'; | |||
desc->params[i].type = JackDriverParamBool; | |||
desc->params[i].value.i = TRUE; | |||
strcpy(desc->params[i].short_desc, "Display available PortAudio devices"); | |||
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
return desc; | |||
} | |||
@@ -279,7 +279,6 @@ extern "C" | |||
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); | |||
strcpy(desc->name, "portaudio"); | |||
desc->nparams = 13; | |||
desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); | |||