From 7ca13a6b254d6d41930740a6087650f488550b59 Mon Sep 17 00:00:00 2001 From: sletz Date: Mon, 25 May 2009 13:04:22 +0000 Subject: [PATCH] rebase from trunk 3528:3550 git-svn-id: http://subversion.jackaudio.org/jack/jack2/branches/libjacknet@3551 0c269be4-1314-0410-8aa9-9f06e86f4224 --- ChangeLog | 24 ++- common/JackAPI.cpp | 6 + common/JackControlAPI.cpp | 31 +-- common/JackDriver.cpp | 1 + common/JackServer.cpp | 9 +- common/JackServer.h | 3 +- common/JackServerGlobals.cpp | 11 +- common/JackServerGlobals.h | 1 - common/jack/control.h | 229 +++++++++++----------- common/jack/jack.h | 10 + dbus/controller.c | 38 ++++ dbus/controller_iface_control.c | 49 +++++ dbus/controller_iface_patchbay.c | 6 +- dbus/controller_internal.h | 10 + linux/JackLinuxTime.c | 1 + linux/alsa/JackAlsaDriver.cpp | 1 + linux/firewire/JackFFADODriver.cpp | 71 +++---- linux/freebob/JackFreebobDriver.cpp | 1 + linux/wscript | 15 +- macosx/JackMachNotifyChannel.h | 1 - macosx/JackMachServerChannel.h | 1 - macosx/wscript | 17 +- posix/JackPosixServerLaunch.cpp | 34 ++-- posix/JackSocketServerChannel.h | 3 +- posix/JackSocketServerNotifyChannel.h | 1 - solaris/oss/JackBoomerDriver.cpp | 1 + windows/JackWinNamedPipeClientChannel.cpp | 5 +- windows/JackWinNamedPipeNotifyChannel.h | 1 - windows/JackWinNamedPipeServerChannel.h | 1 - windows/JackWinSemaphore.cpp | 6 +- windows/JackWinTime.c | 3 +- windows/Setup/JackRouter.dll | Bin 32768 -> 32768 bytes windows/winmme/JackWinMMEDriver.cpp | 4 +- wscript | 13 +- 34 files changed, 362 insertions(+), 246 deletions(-) diff --git a/ChangeLog b/ChangeLog index c0598e0d..ff7e9a47 100644 --- a/ChangeLog +++ b/ChangeLog @@ -25,9 +25,31 @@ Paul Davis Jackdmp changes log --------------------------- +2009-05-18 Stephane Letz + + * Correct wcsript files to create jackdbus only (and not create jackd anymore) when compiled in --dbus mode, add a --classic option. Both options are possible but issue a warning. + +2009-05-15 Stephane Letz + + * Move InitFrameTime in JackDriver::Start method. + +2009-05-13 Stephane Letz + + * Reworked Torben Hohn fix for server restart issue on Windows. + +2009-05-11 Stephane Letz + + * New jack_free function added in jack.h. + * Torben Hohn fix for InitTime and GetMicroSeconds in JackWinTime.c. + +2009-05-07 Stephane Letz + + * Cleanup "loopback" stuff in server. + 2009-05-06 Stephane Letz - * Fix transport callback (timebase master, sync) issue when used after jack_activate (RT thread was not running). + * Fix transport callback (timebase master, sync) issue when used after jack_activate (RT thread was not running). + * D-Bus access for jackctl_server_add_slave/jackctl_server_remove_slave API. 2009-05-05 Stephane Letz diff --git a/common/JackAPI.cpp b/common/JackAPI.cpp index c8a85f1b..3312c9f1 100644 --- a/common/JackAPI.cpp +++ b/common/JackAPI.cpp @@ -241,6 +241,7 @@ extern "C" EXPORT jack_status_t jack_internal_client_unload (jack_client_t *client, jack_intclient_t intclient); + EXPORT void jack_free(void* ptr); #ifdef __cplusplus } @@ -1930,3 +1931,8 @@ jack_get_version_string() { return VERSION; } + +EXPORT void jack_free(void* ptr) +{ + free(ptr); +} diff --git a/common/JackControlAPI.cpp b/common/JackControlAPI.cpp index 6199b13d..abd6d28a 100644 --- a/common/JackControlAPI.cpp +++ b/common/JackControlAPI.cpp @@ -77,10 +77,6 @@ struct jackctl_server /* int32_t, msecs; if zero, use period size. */ union jackctl_parameter_value client_timeout; union jackctl_parameter_value default_client_timeout; - - /* uint32_t, ports of the loopback driver */ - union jackctl_parameter_value loopback_ports; - union jackctl_parameter_value default_loopback_ports; /* uint32_t, clock source type */ union jackctl_parameter_value clock_source; @@ -643,7 +639,7 @@ EXPORT jackctl_server_t * jackctl_server_create() if (jackctl_add_parameter( &server_ptr->parameters, "name", - "server name to use", + "Server name to use.", "", JackParamString, &server_ptr->name, @@ -657,7 +653,7 @@ EXPORT jackctl_server_t * jackctl_server_create() if (jackctl_add_parameter( &server_ptr->parameters, "realtime", - "Whether to use realtime mode", + "Whether to use realtime mode.", "Use realtime scheduling. This is needed for reliable low-latency performance. On most systems, it requires JACK to run with special scheduler and memory allocation privileges, which may be obtained in several ways. On Linux you should use PAM.", JackParamBool, &server_ptr->realtime, @@ -714,7 +710,7 @@ EXPORT jackctl_server_t * jackctl_server_create() if (jackctl_add_parameter( &server_ptr->parameters, "client-timeout", - "Client timeout limit in milliseconds", + "Client timeout limit in milliseconds.", "", JackParamInt, &server_ptr->client_timeout, @@ -724,25 +720,11 @@ EXPORT jackctl_server_t * jackctl_server_create() goto fail_free_parameters; } - value.ui = 0; - if (jackctl_add_parameter( - &server_ptr->parameters, - "loopback-ports", - "Number of loopback ports", - "", - JackParamUInt, - &server_ptr->loopback_ports, - &server_ptr->default_loopback_ports, - value) == NULL) - { - goto fail_free_parameters; - } - value.ui = 0; if (jackctl_add_parameter( &server_ptr->parameters, "clock-source", - "Clocksource type : c(ycle) | h(pet) | s(ystem)", + "Clocksource type : c(ycle) | h(pet) | s(ystem).", "", JackParamUInt, &server_ptr->clock_source, @@ -756,7 +738,7 @@ EXPORT jackctl_server_t * jackctl_server_create() if (jackctl_add_parameter( &server_ptr->parameters, "replace-registry", - "Replace registry", + "Replace shared memory registry.", "", JackParamBool, &server_ptr->replace_registry, @@ -770,7 +752,7 @@ EXPORT jackctl_server_t * jackctl_server_create() if (jackctl_add_parameter( &server_ptr->parameters, "sync", - "Use synchronous mode", + "Use server synchronous mode.", "", JackParamBool, &server_ptr->sync, @@ -880,7 +862,6 @@ jackctl_server_start( server_ptr->client_timeout.i, server_ptr->realtime.b, server_ptr->realtime_priority.i, - server_ptr->loopback_ports.ui, server_ptr->verbose.b, (jack_timer_type_t)server_ptr->clock_source.ui, server_ptr->name.str); diff --git a/common/JackDriver.cpp b/common/JackDriver.cpp index 5a2092c8..609952dc 100644 --- a/common/JackDriver.cpp +++ b/common/JackDriver.cpp @@ -315,6 +315,7 @@ int JackDriver::Write() int JackDriver::Start() { + fEngineControl->InitFrameTime(); return 0; } diff --git a/common/JackServer.cpp b/common/JackServer.cpp index dd521a99..081e743b 100644 --- a/common/JackServer.cpp +++ b/common/JackServer.cpp @@ -22,7 +22,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "JackServerGlobals.h" #include "JackTime.h" #include "JackFreewheelDriver.h" -#include "JackLoopbackDriver.h" #include "JackDummyDriver.h" #include "JackThreadedDriver.h" #include "JackGlobals.h" @@ -39,7 +38,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. namespace Jack { -JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, long loopback, bool verbose, jack_timer_type_t clock, const char* server_name) +JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, bool verbose, jack_timer_type_t clock, const char* server_name) { if (rt) { jack_info("JACK server starting in realtime mode with priority %ld", priority); @@ -54,7 +53,6 @@ JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long pr fDriverInfo = new JackDriverInfo(); fAudioDriver = NULL; fFreewheel = false; - fLoopback = loopback; JackServerGlobals::fInstance = this; // Unique instance JackServerGlobals::fUserCount = 1; // One user jack_verbose = verbose; @@ -170,7 +168,6 @@ int JackServer::InternalClientLoadAux(JackLoadableInternalClient* client, const int JackServer::Start() { jack_log("JackServer::Start"); - fEngineControl->InitFrameTime(); return fAudioDriver->Start(); } @@ -203,13 +200,11 @@ int JackServer::SetBufferSize(jack_nframes_t buffer_size) if (fAudioDriver->SetBufferSize(buffer_size) == 0) { fFreewheelDriver->SetBufferSize(buffer_size); fEngine->NotifyBufferSize(buffer_size); - fEngineControl->InitFrameTime(); return fAudioDriver->Start(); } else { // Failure: try to restore current value jack_error("Cannot SetBufferSize for audio driver, restore current value %ld", current_buffer_size); fAudioDriver->SetBufferSize(current_buffer_size); fFreewheelDriver->SetBufferSize(current_buffer_size); - fEngineControl->InitFrameTime(); fAudioDriver->Start(); // SetBufferSize actually failed, so return an error... return -1; @@ -241,7 +236,6 @@ int JackServer::SetFreewheel(bool onoff) fGraphManager->Restore(&fConnectionState); // Restore previous connection state fEngine->NotifyFreewheel(onoff); fFreewheelDriver->SetMaster(false); - fEngineControl->InitFrameTime(); return fAudioDriver->Start(); } } else { @@ -346,7 +340,6 @@ int JackServer::SwitchMaster(jack_driver_desc_t* driver_desc, JSList* driver_par // Activate master fAudioDriver = master; fDriverInfo = info; - fEngineControl->InitFrameTime(); fAudioDriver->Attach(); fAudioDriver->SetMaster(true); return fAudioDriver->Start(); diff --git a/common/JackServer.h b/common/JackServer.h index 79e2fd40..325237de 100644 --- a/common/JackServer.h +++ b/common/JackServer.h @@ -57,13 +57,12 @@ class SERVER_EXPORT JackServer JackConnectionManager fConnectionState; JackSynchro fSynchroTable[CLIENT_NUM]; bool fFreewheel; - long fLoopback; int InternalClientLoadAux(JackLoadableInternalClient* client, const char* so_name, const char* client_name, int options, int* int_ref, int* status); public: - JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, long loopback, bool verbose, jack_timer_type_t clock, const char* server_name); + JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, bool verbose, jack_timer_type_t clock, const char* server_name); ~JackServer(); int Open(jack_driver_desc_t* driver_desc, JSList* driver_params); diff --git a/common/JackServerGlobals.cpp b/common/JackServerGlobals.cpp index 0dbe0cf2..815d5330 100644 --- a/common/JackServerGlobals.cpp +++ b/common/JackServerGlobals.cpp @@ -39,12 +39,11 @@ int JackServerGlobals::Start(const char* server_name, int time_out_ms, int rt, int priority, - int loopback, int verbose, jack_timer_type_t clock) { jack_log("Jackdmp: sync = %ld timeout = %ld rt = %ld priority = %ld verbose = %ld ", sync, time_out_ms, rt, priority, verbose); - new JackServer(sync, temporary, time_out_ms, rt, priority, loopback, verbose, clock, server_name); // Will setup fInstance and fUserCount globals + new JackServer(sync, temporary, time_out_ms, rt, priority, verbose, clock, server_name); // Will setup fInstance and fUserCount globals int res = fInstance->Open(driver_desc, driver_params); return (res < 0) ? res : fInstance->Start(); } @@ -71,7 +70,6 @@ bool JackServerGlobals::Init() int verbose_aux = 0; int do_mlock = 1; unsigned int port_max = 128; - int loopback = 0; int do_unlock = 0; int temporary = 0; @@ -112,7 +110,6 @@ bool JackServerGlobals::Init() { "name", 0, 0, 'n' }, { "unlock", 0, 0, 'u' }, { "realtime", 0, 0, 'R' }, - { "loopback", 0, 0, 'L' }, { "realtime-priority", 1, 0, 'P' }, { "timeout", 1, 0, 't' }, { "temporary", 0, 0, 'T' }, @@ -204,10 +201,6 @@ bool JackServerGlobals::Init() realtime = 1; break; - case 'L': - loopback = atoi(optarg); - break; - case 'T': temporary = 1; break; @@ -296,7 +289,7 @@ bool JackServerGlobals::Init() free(argv[i]); } - int res = Start(server_name, driver_desc, driver_params, sync, temporary, client_timeout, realtime, realtime_priority, loopback, verbose_aux, clock_source); + int res = Start(server_name, driver_desc, driver_params, sync, temporary, client_timeout, realtime, realtime_priority, verbose_aux, clock_source); if (res < 0) { jack_error("Cannot start server... exit"); Delete(); diff --git a/common/JackServerGlobals.h b/common/JackServerGlobals.h index d2db8960..c972a9bf 100644 --- a/common/JackServerGlobals.h +++ b/common/JackServerGlobals.h @@ -52,7 +52,6 @@ struct SERVER_EXPORT JackServerGlobals int time_out_ms, int rt, int priority, - int loopback, int verbose, jack_timer_type_t clock); static void Stop(); diff --git a/common/jack/control.h b/common/jack/control.h index a4935dff..b3f5756e 100644 --- a/common/jack/control.h +++ b/common/jack/control.h @@ -31,6 +31,7 @@ #include #include +#include /** Parameter types, intentionally similar to jack_driver_param_type_t */ typedef enum @@ -124,19 +125,6 @@ void jackctl_server_destroy( jackctl_server_t * server); -/** - * Call this function to get list of available drivers. List node data - * pointers is a driver object handle (::jackctl_driver_t). - * - * @param server server object handle to get drivers for - * - * @return Single linked list of driver object handles. Must not be - * modified. Always same for same server object. - */ -const JSList * -jackctl_server_get_drivers_list( - jackctl_server_t * server); - /** * Call this function to start JACK server * @@ -161,6 +149,19 @@ bool jackctl_server_stop( jackctl_server_t * server); +/** + * Call this function to get list of available drivers. List node data + * pointers is a driver object handle (::jackctl_driver_t). + * + * @param server server object handle to get drivers for + * + * @return Single linked list of driver object handles. Must not be + * modified. Always same for same server object. + */ +const JSList * +jackctl_server_get_drivers_list( + jackctl_server_t * server); + /** * Call this function to get list of server parameters. List node data * pointers is a parameter object handle (::jackctl_parameter_t). @@ -174,6 +175,82 @@ const JSList * jackctl_server_get_parameters( jackctl_server_t * server); +/** + * Call this function to get list of available internal clients. List node data + * pointers is a internal client object handle (::jackctl_internal_t). + * + * @param server server object handle to get internal clients for + * + * @return Single linked list of internal client object handles. Must not be + * modified. Always same for same server object. + */ +const JSList * +jackctl_server_get_internals_list( + jackctl_server_t * server); + +/** + * Call this function to load one internal client. + * + * @param server server object handle + * @param internal internal to use + * + * @return success status: true - success, false - fail + */ +bool +jackctl_server_load_internal( + jackctl_server_t * server, + jackctl_internal_t * internal); + +/** + * Call this function to unload one internal client. + * + * @param server server object handle + * @param internal internal to unload + * + * @return success status: true - success, false - fail + */ +bool +jackctl_server_unload_internal( + jackctl_server_t * server, + jackctl_internal_t * internal); + +/** + * Call this function to add a slave in the driver slave list. + * + * @param server server object handle + * @param driver driver to add in the driver slave list. + * + * @return success status: true - success, false - fail + */ +bool +jackctl_server_add_slave(jackctl_server_t * server, + jackctl_driver_t * driver); + +/** + * Call this function to remove a slave from the driver slave list. + * + * @param server server object handle + * @param driver driver to remove from the driver slave list. + * + * @return success status: true - success, false - fail + */ +bool +jackctl_server_remove_slave(jackctl_server_t * server, + jackctl_driver_t * driver); + +/** + * Call this function to switch master driver. + * + * @param server server object handle + * @param driver driver to switch to + * + * @return success status: true - success, false - fail + */ +bool +jackctl_server_switch_master(jackctl_server_t * server, + jackctl_driver_t * driver); + + /** * Call this function to get name of driver. * @@ -199,6 +276,31 @@ const JSList * jackctl_driver_get_parameters( jackctl_driver_t * driver); +/** + * Call this function to get name of internal client. + * + * @param internal internal object handle to get name of + * + * @return internal name. Must not be modified. Always same for same + * internal object. + */ +const char * +jackctl_internal_get_name( + jackctl_internal_t * internal); + +/** + * Call this function to get list of internal parameters. List node data + * pointers is a parameter object handle (::jackctl_parameter_t). + * + * @param internal internal object handle to get parameters for + * + * @return Single linked list of parameter object handles. Must not be + * modified. Always same for same internal object. + */ +const JSList * +jackctl_internal_get_parameters( + jackctl_internal_t * internal); + /** * Call this function to get parameter name. * @@ -413,70 +515,6 @@ bool jackctl_parameter_constraint_is_fake_value( jackctl_parameter_t * parameter); -/** - * Call this function to get list of available internal clients. List node data - * pointers is a internal client object handle (::jackctl_internal_t). - * - * @param server server object handle to get internal clients for - * - * @return Single linked list of internal client object handles. Must not be - * modified. Always same for same server object. - */ -const JSList * -jackctl_server_get_internals_list( - jackctl_server_t * server); - -/** - * Call this function to get name of internal client. - * - * @param internal internal object handle to get name of - * - * @return internal name. Must not be modified. Always same for same - * internal object. - */ -const char * -jackctl_internal_get_name( - jackctl_internal_t * internal); - -/** - * Call this function to get list of internal parameters. List node data - * pointers is a parameter object handle (::jackctl_parameter_t). - * - * @param internal internal object handle to get parameters for - * - * @return Single linked list of parameter object handles. Must not be - * modified. Always same for same internal object. - */ -const JSList * -jackctl_internal_get_parameters( - jackctl_internal_t * internal); - -/** - * Call this function to load one internal client. - * - * @param server server object handle - * @param internal internal to use - * - * @return success status: true - success, false - fail - */ -bool -jackctl_server_load_internal( - jackctl_server_t * server, - jackctl_internal_t * internal); - -/** - * Call this function to unload one internal client. - * - * @param server server object handle - * @param internal internal to unload - * - * @return success status: true - success, false - fail - */ -bool -jackctl_server_unload_internal( - jackctl_server_t * server, - jackctl_internal_t * internal); - /** * Call this function to log an error message. * @@ -510,43 +548,6 @@ jack_log( /* @} */ -/** - * Call this function to add a slave in the driver slave list. - * - * @param server server object handle - * @param driver driver to add in the driver slave list. - * - * @return success status: true - success, false - fail - */ -bool -jackctl_server_add_slave(jackctl_server_t * server, - jackctl_driver_t * driver); - -/** - * Call this function to remove a slave from the driver slave list. - * - * @param server server object handle - * @param driver driver to remove from the driver slave list. - * - * @return success status: true - success, false - fail - */ -bool -jackctl_server_remove_slave(jackctl_server_t * server, - jackctl_driver_t * driver); - -/** - * Call this function to switch master driver. - * - * @param server server object handle - * @param driver driver to switch to - * - * @return success status: true - success, false - fail - */ -bool -jackctl_server_switch_master(jackctl_server_t * server, - jackctl_driver_t * driver); - - #if 0 { /* Adjust editor indent */ #endif diff --git a/common/jack/jack.h b/common/jack/jack.h index a0b0e397..f9d8d4e0 100644 --- a/common/jack/jack.h +++ b/common/jack/jack.h @@ -1070,6 +1070,16 @@ void jack_set_info_function (void (*func)(const char *)); /*@}*/ +/** + * The free function to be used on memory returned by jack_port_get_connections, + * jack_port_get_all_connections and jack_get_ports functions. + * This is MANDATORY on Windows when otherwise all nasty runtime version related crashes can occur. + * Developers are strongly encouraged to use this function instead of the standard "free" function in new code. + * + */ +void jack_free(void* ptr); + + #ifdef __cplusplus } #endif diff --git a/dbus/controller.c b/dbus/controller.c index bd1c6a9b..f5c53f69 100644 --- a/dbus/controller.c +++ b/dbus/controller.c @@ -391,6 +391,44 @@ fail: return NULL; } +bool +jack_controller_add_slave( + struct jack_controller *controller_ptr, + const char * driver_name) +{ + jackctl_driver_t *driver; + + driver = jack_controller_find_driver(controller_ptr->server, driver_name); + + if (driver == NULL) + { + return false; + } + + jack_info("driver \"%s\" selected", driver_name); + + return jackctl_server_add_slave(controller_ptr->server, driver); +} + +bool +jack_controller_remove_slave( + struct jack_controller *controller_ptr, + const char * driver_name) +{ + jackctl_driver_t *driver; + + driver = jack_controller_find_driver(controller_ptr->server, driver_name); + + if (driver == NULL) + { + return false; + } + + jack_info("driver \"%s\" selected", driver_name); + + return jackctl_server_remove_slave(controller_ptr->server, driver); +} + bool jack_controller_load_internal( struct jack_controller *controller_ptr, diff --git a/dbus/controller_iface_control.c b/dbus/controller_iface_control.c index fb0dab75..f55fb608 100644 --- a/dbus/controller_iface_control.c +++ b/dbus/controller_iface_control.c @@ -215,6 +215,44 @@ jack_control_run_method( "jack_controller_load_internal failed for internal (%s)", internal_name); } } + else if (strcmp (call->method_name, "AddSlave") == 0) + { + const char *driver_name; + + if (!jack_dbus_get_method_args(call, DBUS_TYPE_STRING, &driver_name, DBUS_TYPE_INVALID)) + { + /* The method call had invalid arguments meaning that + * get_method_args() has constructed an error for us. + */ + goto exit; + } + + if (!jack_controller_add_slave(controller_ptr, driver_name)) { + jack_dbus_error( + call, + JACK_DBUS_ERROR_GENERIC, + "jack_controller_add_slave failed for driver (%s)", driver_name); + } + } + else if (strcmp (call->method_name, "RemoveSlave") == 0) + { + const char *driver_name; + + if (!jack_dbus_get_method_args(call, DBUS_TYPE_STRING, &driver_name, DBUS_TYPE_INVALID)) + { + /* The method call had invalid arguments meaning that + * get_method_args() has constructed an error for us. + */ + goto exit; + } + + if (!jack_controller_remove_slave(controller_ptr, driver_name)) { + jack_dbus_error( + call, + JACK_DBUS_ERROR_GENERIC, + "jack_controller_remove_slave failed for driver (%s)", driver_name); + } + } else if (strcmp (call->method_name, "UnloadInternal") == 0) { const char *internal_name; @@ -234,6 +272,7 @@ jack_control_run_method( "jack_controller_unload_internal failed for internal (%s)", internal_name); } } + else { return false; @@ -305,6 +344,14 @@ JACK_DBUS_METHOD_ARGUMENTS_BEGIN(UnlooadInternal) JACK_DBUS_METHOD_ARGUMENT("internal", "s", false) JACK_DBUS_METHOD_ARGUMENTS_END +JACK_DBUS_METHOD_ARGUMENTS_BEGIN(AddSlave) + JACK_DBUS_METHOD_ARGUMENT("internal", "s", false) +JACK_DBUS_METHOD_ARGUMENTS_END + +JACK_DBUS_METHOD_ARGUMENTS_BEGIN(RemoveSlave) + JACK_DBUS_METHOD_ARGUMENT("internal", "s", false) +JACK_DBUS_METHOD_ARGUMENTS_END + JACK_DBUS_METHODS_BEGIN JACK_DBUS_METHOD_DESCRIBE(IsStarted, NULL) JACK_DBUS_METHOD_DESCRIBE(StartServer, NULL) @@ -320,6 +367,8 @@ JACK_DBUS_METHODS_BEGIN JACK_DBUS_METHOD_DESCRIBE(ResetXruns, NULL) JACK_DBUS_METHOD_DESCRIBE(LoadInternal, NULL) JACK_DBUS_METHOD_DESCRIBE(UnlooadInternal, NULL) + JACK_DBUS_METHOD_DESCRIBE(AddSlave, NULL) + JACK_DBUS_METHOD_DESCRIBE(RemoveSlave, NULL) JACK_DBUS_METHODS_END JACK_DBUS_SIGNAL_ARGUMENTS_BEGIN(ServerStarted) diff --git a/dbus/controller_iface_patchbay.c b/dbus/controller_iface_patchbay.c index 84391404..6c9763a7 100644 --- a/dbus/controller_iface_patchbay.c +++ b/dbus/controller_iface_patchbay.c @@ -423,7 +423,7 @@ jack_controller_patchbay_new_port( const char *port_short_name; size_t client_name_len; - //jack_info("name: %s", port_full_name); + //jack_info("new port: %s", port_full_name); port_short_name = strchr(port_full_name, ':'); if (port_short_name == NULL) @@ -489,6 +489,8 @@ jack_controller_patchbay_remove_port( struct jack_controller_patchbay *patchbay_ptr, struct jack_graph_port *port_ptr) { + //jack_info("remove port: %s", port_ptr->name); + pthread_mutex_lock(&patchbay_ptr->lock); list_del(&port_ptr->siblings_client); list_del(&port_ptr->siblings_graph); @@ -1604,7 +1606,7 @@ jack_controller_port_connect_callback( } else { - jack_info("Disonnecting '%s' from '%s'", port1_name, port2_name); + jack_info("Disconnecting '%s' from '%s'", port1_name, port2_name); connection_ptr = jack_controller_patchbay_find_connection(patchbay_ptr, port1_ptr, port2_ptr); if (connection_ptr == NULL) { diff --git a/dbus/controller_internal.h b/dbus/controller_internal.h index a4cef0f6..a7711a8d 100644 --- a/dbus/controller_internal.h +++ b/dbus/controller_internal.h @@ -85,6 +85,16 @@ bool jack_controller_switch_master( struct jack_controller *controller_ptr, void *dbus_call_context_ptr); + +bool +jack_controller_add_slave( + struct jack_controller *controller_ptr, + const char * driver_name); + +bool +jack_controller_remove_slave( + struct jack_controller *controller_ptr, + const char * driver_name); bool jack_controller_select_driver( diff --git a/linux/JackLinuxTime.c b/linux/JackLinuxTime.c index 9679da6d..37ae9fb0 100644 --- a/linux/JackLinuxTime.c +++ b/linux/JackLinuxTime.c @@ -1,5 +1,6 @@ /* Copyright (C) 2001-2003 Paul Davis +Copyright (C) 2005 Jussi Laako Copyright (C) 2004-2008 Grame This program is free software; you can redistribute it and/or modify diff --git a/linux/alsa/JackAlsaDriver.cpp b/linux/alsa/JackAlsaDriver.cpp index 7ed400d4..59743dc9 100644 --- a/linux/alsa/JackAlsaDriver.cpp +++ b/linux/alsa/JackAlsaDriver.cpp @@ -2255,6 +2255,7 @@ int JackAlsaDriver::Close() int JackAlsaDriver::Start() { + JackAudioDriver::Start(); return alsa_driver_start((alsa_driver_t *)fDriver); } diff --git a/linux/firewire/JackFFADODriver.cpp b/linux/firewire/JackFFADODriver.cpp index b89a0cf8..b6080d69 100644 --- a/linux/firewire/JackFFADODriver.cpp +++ b/linux/firewire/JackFFADODriver.cpp @@ -48,9 +48,6 @@ namespace Jack #define jack_get_microseconds GetMicroSeconds -#define SAMPLE_MAX_24BIT 8388608.0f -#define SAMPLE_MAX_16BIT 32768.0f - int JackFFADODriver::ffado_driver_read (ffado_driver_t * driver, jack_nframes_t nframes) { @@ -250,10 +247,10 @@ JackFFADODriver::ffado_driver_wait (ffado_driver_t *driver, int extra_fd, int *s wait_enter = jack_get_microseconds (); if (wait_enter > driver->wait_next) { /* - * This processing cycle was delayed past the - * next due interrupt! Do not account this as - * a wakeup delay: - */ + * This processing cycle was delayed past the + * next due interrupt! Do not account this as + * a wakeup delay: + */ driver->wait_next = 0; driver->wait_late++; } @@ -270,7 +267,7 @@ JackFFADODriver::ffado_driver_wait (ffado_driver_t *driver, int extra_fd, int *s } driver->wait_last = wait_ret; driver->wait_next = wait_ret + driver->period_usecs; -// driver->engine->transport_cycle_start (driver->engine, wait_ret); +// driver->engine->transport_cycle_start (driver->engine, wait_ret); if(response == ffado_wait_ok) { // all good @@ -344,8 +341,8 @@ JackFFADODriver::SetBufferSize (jack_nframes_t nframes) /* driver->period_size = nframes; driver->period_usecs = - (jack_time_t) floor ((((float) nframes) / driver->sample_rate) - * 1000000.0f); + (jack_time_t) floor ((((float) nframes) / driver->sample_rate) + * 1000000.0f); */ /* tell the engine to change its buffer size */ @@ -376,16 +373,16 @@ JackFFADODriver::ffado_driver_new (const char *name, /* Setup the jack interfaces */ jack_driver_nt_init ((jack_driver_nt_t *) driver); - /* driver->nt_attach = (JackDriverNTAttachFunction) ffado_driver_attach; - driver->nt_detach = (JackDriverNTDetachFunction) ffado_driver_detach; - driver->nt_start = (JackDriverNTStartFunction) ffado_driver_start; - driver->nt_stop = (JackDriverNTStopFunction) ffado_driver_stop; - driver->nt_run_cycle = (JackDriverNTRunCycleFunction) ffado_driver_run_cycle; - driver->null_cycle = (JackDriverNullCycleFunction) ffado_driver_null_cycle; - driver->write = (JackDriverReadFunction) ffado_driver_write; - driver->read = (JackDriverReadFunction) ffado_driver_read; - driver->nt_bufsize = (JackDriverNTBufSizeFunction) ffado_driver_bufsize; - */ + /* driver->nt_attach = (JackDriverNTAttachFunction) ffado_driver_attach; + driver->nt_detach = (JackDriverNTDetachFunction) ffado_driver_detach; + driver->nt_start = (JackDriverNTStartFunction) ffado_driver_start; + driver->nt_stop = (JackDriverNTStopFunction) ffado_driver_stop; + driver->nt_run_cycle = (JackDriverNTRunCycleFunction) ffado_driver_run_cycle; + driver->null_cycle = (JackDriverNullCycleFunction) ffado_driver_null_cycle; + driver->write = (JackDriverReadFunction) ffado_driver_write; + driver->read = (JackDriverReadFunction) ffado_driver_read; + driver->nt_bufsize = (JackDriverNTBufSizeFunction) ffado_driver_bufsize; + */ /* copy command line parameter contents to the driver structure */ memcpy(&driver->settings, params, sizeof(ffado_jack_settings_t)); @@ -398,7 +395,7 @@ JackFFADODriver::ffado_driver_new (const char *name, driver->period_usecs = (jack_time_t) floor ((((float) driver->period_size) * 1000000.0f) / driver->sample_rate); -// driver->client = client; +// driver->client = client; driver->engine = NULL; memset(&driver->device_options, 0, sizeof(driver->device_options)); @@ -709,6 +706,7 @@ int JackFFADODriver::Close() int JackFFADODriver::Start() { + JackAudioDriver::Start(); return ffado_driver_start((ffado_driver_t *)fDriver); } @@ -918,6 +916,8 @@ extern "C" ffado_jack_settings_t cmlparams; + char *device_name="hw:0"; + cmlparams.period_size_set = 0; cmlparams.sample_rate_set = 0; cmlparams.buffer_size_set = 0; @@ -941,6 +941,9 @@ extern "C" param = (jack_driver_param_t *) node->data; switch (param->character) { + case 'd': + device_name = strdup (param->value.str); + break; case 'p': cmlparams.period_size = param->value.ui; cmlparams.period_size_set = 1; @@ -953,15 +956,11 @@ extern "C" cmlparams.sample_rate = param->value.ui; cmlparams.sample_rate_set = 1; break; - case 'C': - cmlparams.capture_ports = 1; - break; - case 'P': - cmlparams.playback_ports = 1; + case 'i': + cmlparams.capture_ports = param->value.ui; break; - case 'D': - cmlparams.capture_ports = 1; - cmlparams.playback_ports = 1; + case 'o': + cmlparams.playback_ports = param->value.ui; break; case 'I': cmlparams.capture_frame_latency = param->value.ui; @@ -969,10 +968,11 @@ extern "C" case 'O': cmlparams.playback_frame_latency = param->value.ui; break; - // ignore these for now - case 'i': + case 'x': + cmlparams.slave_mode = param->value.ui; break; - case 'o': + case 'X': + cmlparams.snoop_mode = param->value.ui; break; case 'v': cmlparams.verbose_level = param->value.ui; @@ -981,10 +981,13 @@ extern "C" /* duplex is the default */ if (!cmlparams.playback_ports && !cmlparams.capture_ports) { - cmlparams.playback_ports = TRUE; - cmlparams.capture_ports = TRUE; + cmlparams.playback_ports = 1; + cmlparams.capture_ports = 1; } + // temporary + cmlparams.device_info = device_name; + Jack::JackFFADODriver* ffado_driver = new Jack::JackFFADODriver("system", "firewire_pcm", engine, table); Jack::JackDriverClientInterface* threaded_driver = new Jack::JackThreadedDriver(ffado_driver); // Special open for FFADO driver... diff --git a/linux/freebob/JackFreebobDriver.cpp b/linux/freebob/JackFreebobDriver.cpp index 04076b92..c5d5770a 100644 --- a/linux/freebob/JackFreebobDriver.cpp +++ b/linux/freebob/JackFreebobDriver.cpp @@ -841,6 +841,7 @@ int JackFreebobDriver::Close() int JackFreebobDriver::Start() { + JackAudioDriver::Start(); return freebob_driver_start((freebob_driver_t *)fDriver); } diff --git a/linux/wscript b/linux/wscript index 46af1bc9..b9383b16 100644 --- a/linux/wscript +++ b/linux/wscript @@ -26,13 +26,14 @@ def create_jack_driver_obj(bld, target, sources, uselib = None): return driver def build(bld): - jackd = bld.new_task_gen('cxx', 'program') - jackd.includes = ['../linux', '../posix', '../common/jack', '../common', '../dbus'] - jackd.defines = 'HAVE_CONFIG_H' - jackd.source = ['../common/Jackdmp.cpp'] - jackd.uselib = 'PTHREAD DL RT' - jackd.uselib_local = 'serverlib' - jackd.target = 'jackd' + if bld.env['BUILD_JACKD'] == True: + jackd = bld.new_task_gen('cxx', 'program') + jackd.includes = ['../linux', '../posix', '../common/jack', '../common', '../dbus'] + jackd.defines = 'HAVE_CONFIG_H' + jackd.source = ['../common/Jackdmp.cpp'] + jackd.uselib = 'PTHREAD DL RT' + jackd.uselib_local = 'serverlib' + jackd.target = 'jackd' create_jack_driver_obj(bld, 'dummy', '../common/JackDummyDriver.cpp') diff --git a/macosx/JackMachNotifyChannel.h b/macosx/JackMachNotifyChannel.h index 0cae49dd..14afeb3f 100644 --- a/macosx/JackMachNotifyChannel.h +++ b/macosx/JackMachNotifyChannel.h @@ -20,7 +20,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef __JackMachNotifyChannel__ #define __JackMachNotifyChannel__ -#include "JackChannel.h" #include "JackMachPort.h" namespace Jack diff --git a/macosx/JackMachServerChannel.h b/macosx/JackMachServerChannel.h index a6b351c7..9e5ac35f 100644 --- a/macosx/JackMachServerChannel.h +++ b/macosx/JackMachServerChannel.h @@ -20,7 +20,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef __JackMachServerChannel__ #define __JackMachServerChannel__ -#include "JackChannel.h" #include "JackPlatformPlug.h" #include "JackMachPort.h" #include diff --git a/macosx/wscript b/macosx/wscript index 198edef6..ade18b4a 100644 --- a/macosx/wscript +++ b/macosx/wscript @@ -46,14 +46,15 @@ def create_jack_midi_driver_obj(bld, target, sources, uselib = None): return driver def build(bld): - jackd = bld.new_task_gen('cxx', 'program') - jackd.includes = ['.', '../macosx', '../posix', '../common', '../common/jack'] - jackd.defines = 'HAVE_CONFIG_H' - jackd.source = ['../common/Jackdmp.cpp'] - jackd.uselib = 'PTHREAD DL' - jackd.uselib_local = 'serverlib' - jackd.env.append_value("LINKFLAGS", "-framework CoreFoundation") - jackd.target = 'jackd' + if bld.env['BUILD_JACKD'] == True: + jackd = bld.new_task_gen('cxx', 'program') + jackd.includes = ['.', '../macosx', '../posix', '../common', '../common/jack'] + jackd.defines = 'HAVE_CONFIG_H' + jackd.source = ['../common/Jackdmp.cpp'] + jackd.uselib = 'PTHREAD DL' + jackd.uselib_local = 'serverlib' + jackd.env.append_value("LINKFLAGS", "-framework CoreFoundation") + jackd.target = 'jackd' create_jack_driver_obj(bld, 'dummy', '../common/JackDummyDriver.cpp') diff --git a/posix/JackPosixServerLaunch.cpp b/posix/JackPosixServerLaunch.cpp index 99aa4f05..1931474d 100644 --- a/posix/JackPosixServerLaunch.cpp +++ b/posix/JackPosixServerLaunch.cpp @@ -26,8 +26,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. using namespace Jack; -#ifndef WIN32 - #if defined(JACK_DBUS) #include @@ -75,10 +73,10 @@ static int start_server_dbus(const char* server_name) return 0; } -#else +#endif /* Exec the JACK server in this process. Does not return. */ -static void start_server_aux(const char* server_name) +static void start_server_classic_aux(const char* server_name) { FILE* fp = 0; char filename[255]; @@ -161,18 +159,8 @@ static void start_server_aux(const char* server_name) fprintf(stderr, "exec of JACK server (command = \"%s\") failed: %s\n", command, strerror(errno)); } -#endif - -static int start_server(const char* server_name, jack_options_t options) +static int start_server_classic(const char* server_name) { - if ((options & JackNoStartServer) || getenv("JACK_NO_START_SERVER")) { - return 1; - } - -#if defined(JACK_DBUS) - return start_server_dbus(server_name); -#else - /* The double fork() forces the server to become a child of * init, which will always clean up zombie process state on * termination. This even works in cases where the server @@ -186,7 +174,7 @@ static int start_server(const char* server_name, jack_options_t options) case 0: /* child process */ switch (fork()) { case 0: /* grandchild process */ - start_server_aux(server_name); + start_server_classic_aux(server_name); _exit(99); /* exec failed */ case - 1: _exit(98); @@ -199,6 +187,18 @@ static int start_server(const char* server_name, jack_options_t options) /* only the original parent process goes here */ return 0; /* (probably) successful */ +} + +static int start_server(const char* server_name, jack_options_t options) +{ + if ((options & JackNoStartServer) || getenv("JACK_NO_START_SERVER")) { + return 1; + } + +#if defined(JACK_DBUS) + return start_server_dbus(server_name); +#else + return start_server_classic(server_name); #endif } @@ -234,5 +234,3 @@ int try_start_server(jack_varargs_t* va, jack_options_t options, jack_status_t* return 0; } - -#endif diff --git a/posix/JackSocketServerChannel.h b/posix/JackSocketServerChannel.h index d0c1ba64..98a812aa 100644 --- a/posix/JackSocketServerChannel.h +++ b/posix/JackSocketServerChannel.h @@ -20,7 +20,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef __JackSocketServerChannel__ #define __JackSocketServerChannel__ -#include "JackChannel.h" #include "JackSocket.h" #include "JackPlatformPlug.h" #include @@ -29,6 +28,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. namespace Jack { +class JackServer; + /*! \brief JackServerChannel using sockets. */ diff --git a/posix/JackSocketServerNotifyChannel.h b/posix/JackSocketServerNotifyChannel.h index 4d8afa54..d8687dfa 100644 --- a/posix/JackSocketServerNotifyChannel.h +++ b/posix/JackSocketServerNotifyChannel.h @@ -20,7 +20,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef __JackSocketServerNotifyChannel__ #define __JackSocketServerNotifyChannel__ -#include "JackChannel.h" #include "JackSocket.h" namespace Jack diff --git a/solaris/oss/JackBoomerDriver.cpp b/solaris/oss/JackBoomerDriver.cpp index 3080dcde..b77e7747 100644 --- a/solaris/oss/JackBoomerDriver.cpp +++ b/solaris/oss/JackBoomerDriver.cpp @@ -533,6 +533,7 @@ void JackBoomerDriver::CloseAux() int JackBoomerDriver::Start() { jack_log("JackBoomerDriver::Start"); + JackAudioDriver::Start(); // Start output thread only when needed if (fOutFD > 0) { diff --git a/windows/JackWinNamedPipeClientChannel.cpp b/windows/JackWinNamedPipeClientChannel.cpp index 35755b45..b36f03e1 100644 --- a/windows/JackWinNamedPipeClientChannel.cpp +++ b/windows/JackWinNamedPipeClientChannel.cpp @@ -311,7 +311,6 @@ bool JackWinNamedPipeClientChannel::Execute() JackResult res; if (event.Read(&fNotificationListenPipe) < 0) { - fNotificationListenPipe.Close(); jack_error("JackWinNamedPipeClientChannel read fail"); goto error; } @@ -320,7 +319,6 @@ bool JackWinNamedPipeClientChannel::Execute() if (event.fSync) { if (res.Write(&fNotificationListenPipe) < 0) { - fNotificationListenPipe.Close(); jack_error("JackWinNamedPipeClientChannel write fail"); goto error; } @@ -328,6 +326,9 @@ bool JackWinNamedPipeClientChannel::Execute() return true; error: + // Close the pipes, server wont be able to create them otherwise. + fNotificationListenPipe.Close(); + fRequestPipe.Close(); fClient->ShutDown(); return false; } diff --git a/windows/JackWinNamedPipeNotifyChannel.h b/windows/JackWinNamedPipeNotifyChannel.h index 5d3b9488..0ade63d1 100644 --- a/windows/JackWinNamedPipeNotifyChannel.h +++ b/windows/JackWinNamedPipeNotifyChannel.h @@ -20,7 +20,6 @@ Copyright (C) 2004-2006 Grame #ifndef __JackWinNamedPipeNotifyChannel__ #define __JackWinNamedPipeNotifyChannel__ -#include "JackChannel.h" #include "JackWinNamedPipe.h" namespace Jack diff --git a/windows/JackWinNamedPipeServerChannel.h b/windows/JackWinNamedPipeServerChannel.h index 74ea7cca..adb6941b 100644 --- a/windows/JackWinNamedPipeServerChannel.h +++ b/windows/JackWinNamedPipeServerChannel.h @@ -20,7 +20,6 @@ Copyright (C) 2004-2006 Grame #ifndef __JackWinNamedPipeServerChannel__ #define __JackWinNamedPipeServerChannel__ -#include "JackChannel.h" #include "JackWinNamedPipe.h" #include "JackPlatformPlug.h" #include diff --git a/windows/JackWinSemaphore.cpp b/windows/JackWinSemaphore.cpp index 88236d49..8ce52d62 100644 --- a/windows/JackWinSemaphore.cpp +++ b/windows/JackWinSemaphore.cpp @@ -137,9 +137,9 @@ bool JackWinSemaphore::Allocate(const char* name, const char* server_name, int v return false; } else if (GetLastError() == ERROR_ALREADY_EXISTS) { jack_error("Allocate: named semaphore already exist name = %s", fName); - CloseHandle(fSemaphore); - fSemaphore = NULL; - return false; + // Try to open it + fSemaphore = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, fName); + return (fSemaphore != NULL); } else { return true; } diff --git a/windows/JackWinTime.c b/windows/JackWinTime.c index 54da0411..bd950806 100644 --- a/windows/JackWinTime.c +++ b/windows/JackWinTime.c @@ -30,14 +30,13 @@ SERVER_EXPORT void JackSleep(long usec) SERVER_EXPORT void InitTime() { QueryPerformanceFrequency(&_jack_freq); - _jack_freq.QuadPart = _jack_freq.QuadPart / 1000000; // by usec } SERVER_EXPORT jack_time_t GetMicroSeconds(void) { LARGE_INTEGER t1; QueryPerformanceCounter(&t1); - return (jack_time_t)(((double)t1.QuadPart) / ((double)_jack_freq.QuadPart)); + return (jack_time_t)(((double)t1.QuadPart) / ((double)_jack_freq.QuadPart) * 1000000.0); } SERVER_EXPORT void SetClockSource(jack_timer_type_t source) diff --git a/windows/Setup/JackRouter.dll b/windows/Setup/JackRouter.dll index 4f2ada62f24aca423bfe88ee7ce08e1fb6a73265..92e743e05a03509a61eafd2bf65531633377cdf5 100644 GIT binary patch delta 4000 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 RcCbg-Ugw*&tly)w@?R!>nSuZS delta 3936 zcmeH~jbBt%8pqFp0Wm=@DDQ6r3=Hx*bML(0J9j`w90lcqVuB^1I! z6Yc0>+blE6cD0Q)b<#!GY*1EoW0OtYCBvdJ8(&IHD?Vw?KKC*d?e_V!f54v4=X;-X ze)rtxob#OLo;y=tA5dQ(;Cj5St@f4E-zZ1PI(1X|DzpoGhm;*)v)tfF z%4=ZX>b<0V32b5Sb*W$Y+1tupQu~f_H`wwO%N*h}$X|pR2$kR;a4_PI0=QHy{(fK>bUl$p z^D%=kEAJ=6J|FX5&kR%#t(GNJPw;B@J<cn5PWYeu_dgB4Lz1{ zY+`!>?8a~_bQTtPXOXtVyYa{5a^k$nEr|#@pIQjp)6!H4(Jk|?Awp7om?s`l<>$9o zivgcbo=8%LCA?=OvLQdDeACx%^VZt4p}sLK9WcPKQa93fYdGVo3kkz9sL zNlmgAPbSYMXW&hwE4dQ?l_bem;HBC>_x+B#oK}U*)-Zh6 z!|6UnqmAS#v!kR0=E)G@hZf(!GI=hdKW6rVds#u0{RCCUKhDX;IeUaN> zcZoSG1)m~SS&`;iafs~$FoZKu^fFs=y*B&@uC*Xau2Z4n9F`^%C_rxP&1#7LmpHv5 znbRg~!L22V%mz??y- zqLq-=t4MoZj`lGzj!$(%!ZN@9Ps_7BfS@ znXP4J2s}mW+sPVsdL0EB=}W%~G4rL%r24Q_PmtM^ZgRx`s;E80or4y8F6x?SyNuzxdJ*L#x5;xf@1X8|tf7$O3(lZSEot zW4w*n%=_TbzGXIreEhA?x9C{sFNv8?gtL1wUx3@mHr^22`Hs)mIYiF!#ZfWS5p^j5 zI`;Oq&N<^te*|22ItXh?n%wY(&nLcE&N)MV-9=Ve+DJQ=*Ih0`=p4`s9091A2+4sw z;5M|yB7m(03V*gVA}x?Afy6mh^o#&6oT`V z0z~`$a6ekN{8WdZxKE0vO@kcUJ1stpf{&^^h{OiNQaz%gRe>TdoCk}+&ISwLZ8RS& zoCoM$uyE|5`@xD&ihU@8r^ko6{EFzyAS&8EP{gn9yMFtj-(L3H8-9BW?5MA1$roiA zQN)q=h)SIb6lkDAupL&hHd2~lw-p5lRr^y>RQG|_4_fn>e!Q3spzRsc&kkB;Ct* z&fPWR`G9fufS*0Md^sXZZ0YVNY+15dqd)1tftZSk7v$#zvl6m_<5lM zE|?L@pM#JECi5T zsxnoRYO`vI`a|{S>Iixby@BqbZ_y#l6U;6qU1QO#(`?pE)MjcIYZLW0eTiPsSLhe& zEA`d-8ofimO21m4YFKA@($HquZ#Z3NSZ;jOxYfAVc))nv_^I)hG0xOs>NX9UhD~=& zfvlQk*;2NHoyYxxBivSQ7uUu0aR1~6x%$&oh0@SteLBK@+Dj!m5fjO_~=qf6%<9>DQdsT+-a7ourM?8nlI4LAy-r z(5}(8X}4;BuRW+etBuiFbt`m_=yvJe)cs9&T6a_Ttu8^IqR-MVfH*AGKd%3^-lgx? zf2vQeGfXv<8fpwH4F?S$8Lk!)|9^X8*|U zVGpo}*`w?U_HFhIdyXAsFS1wJFW6!B4lCm#xEL;-%i+}Ae2CVI+)miuHz8tYxpUkH z+y(9$cbf|~$D5VrTyv>;sd?TT=5yvj^JnI7%)xvDU&NR5c77$lj^Dr^(=Y^r/lib]") + opt.add_option('--classic', action='store_true', default=False, help='Enable standard JACK (jackd)') opt.add_option('--dbus', action='store_true', default=False, help='Enable D-Bus JACK (jackdbus)') opt.add_option('--doxygen', action='store_true', default=False, help='Enable build of doxygen documentation') opt.add_option('--profile', action='store_true', default=False, help='Build with engine profiling') @@ -122,6 +123,8 @@ def configure(conf): conf.env['BUILD_DOXYGEN_DOCS'] = Options.options.doxygen conf.env['BUILD_WITH_PROFILE'] = Options.options.profile conf.env['BUILD_WITH_32_64'] = Options.options.mixed + conf.env['BUILD_JACKDBUS'] = Options.options.dbus + conf.env['BUILD_JACKD'] = Options.options.classic if Options.options.libdir: conf.env['LIBDIR'] = Options.options.libdir @@ -168,13 +171,19 @@ def configure(conf): display_feature('Build doxygen documentation', conf.env['BUILD_DOXYGEN_DOCS']) display_feature('Build with engine profiling', conf.env['BUILD_WITH_PROFILE']) display_feature('Build with 32/64 bits mixed mode', conf.env['BUILD_WITH_32_64']) - + if conf.env['BUILD_JACKDBUS'] and conf.env['BUILD_JACKD']: + display_feature('Build standard (jackd) and D-Bus JACK (jackdbus) : WARNING !! mixing both program may cause issues...', True) + elif conf.env['BUILD_JACKDBUS']: + display_feature('Build D-Bus JACK (jackdbus)', True) + else: + conf.env['BUILD_JACKD'] = True; # jackd is always built be default + display_feature('Build standard JACK (jackd)', True) if conf.env['IS_LINUX']: display_feature('Build with ALSA support', conf.env['BUILD_DRIVER_ALSA'] == True) display_feature('Build with FireWire (FreeBob) support', conf.env['BUILD_DRIVER_FREEBOB'] == True) display_feature('Build with FireWire (FFADO) support', conf.env['BUILD_DRIVER_FFADO'] == True) - display_feature('Build D-Bus JACK (jackdbus)', conf.env['BUILD_JACKDBUS'] == True) + if conf.env['BUILD_JACKDBUS'] == True: display_msg('D-Bus service install directory', conf.env['DBUS_SERVICES_DIR'], 'CYAN') #display_msg('Settings persistence', xxx)