git-svn-id: http://subversion.jackaudio.org/jack/jack2/branches/libjacknet@3551 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.9.8
@@ -25,9 +25,31 @@ Paul Davis | |||
Jackdmp changes log | |||
--------------------------- | |||
2009-05-18 Stephane Letz <letz@grame.fr> | |||
* 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 <letz@grame.fr> | |||
* Move InitFrameTime in JackDriver::Start method. | |||
2009-05-13 Stephane Letz <letz@grame.fr> | |||
* Reworked Torben Hohn fix for server restart issue on Windows. | |||
2009-05-11 Stephane Letz <letz@grame.fr> | |||
* New jack_free function added in jack.h. | |||
* Torben Hohn fix for InitTime and GetMicroSeconds in JackWinTime.c. | |||
2009-05-07 Stephane Letz <letz@grame.fr> | |||
* Cleanup "loopback" stuff in server. | |||
2009-05-06 Stephane Letz <letz@grame.fr> | |||
* 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 <letz@grame.fr> | |||
@@ -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); | |||
} |
@@ -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); | |||
@@ -315,6 +315,7 @@ int JackDriver::Write() | |||
int JackDriver::Start() | |||
{ | |||
fEngineControl->InitFrameTime(); | |||
return 0; | |||
} | |||
@@ -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(); | |||
@@ -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); | |||
@@ -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(); | |||
@@ -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(); | |||
@@ -31,6 +31,7 @@ | |||
#include <jack/jslist.h> | |||
#include <jack/systemdeps.h> | |||
#include <stdbool.h> | |||
/** 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 | |||
@@ -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 | |||
@@ -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, | |||
@@ -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) | |||
@@ -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) | |||
{ | |||
@@ -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( | |||
@@ -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 | |||
@@ -2255,6 +2255,7 @@ int JackAlsaDriver::Close() | |||
int JackAlsaDriver::Start() | |||
{ | |||
JackAudioDriver::Start(); | |||
return alsa_driver_start((alsa_driver_t *)fDriver); | |||
} | |||
@@ -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... | |||
@@ -841,6 +841,7 @@ int JackFreebobDriver::Close() | |||
int JackFreebobDriver::Start() | |||
{ | |||
JackAudioDriver::Start(); | |||
return freebob_driver_start((freebob_driver_t *)fDriver); | |||
} | |||
@@ -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') | |||
@@ -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 | |||
@@ -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 <map> | |||
@@ -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') | |||
@@ -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 <dbus/dbus.h> | |||
@@ -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 |
@@ -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 <poll.h> | |||
@@ -29,6 +28,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||
namespace Jack | |||
{ | |||
class JackServer; | |||
/*! | |||
\brief JackServerChannel using sockets. | |||
*/ | |||
@@ -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 | |||
@@ -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) { | |||
@@ -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; | |||
} | |||
@@ -20,7 +20,6 @@ Copyright (C) 2004-2006 Grame | |||
#ifndef __JackWinNamedPipeNotifyChannel__ | |||
#define __JackWinNamedPipeNotifyChannel__ | |||
#include "JackChannel.h" | |||
#include "JackWinNamedPipe.h" | |||
namespace Jack | |||
@@ -20,7 +20,6 @@ Copyright (C) 2004-2006 Grame | |||
#ifndef __JackWinNamedPipeServerChannel__ | |||
#define __JackWinNamedPipeServerChannel__ | |||
#include "JackChannel.h" | |||
#include "JackWinNamedPipe.h" | |||
#include "JackPlatformPlug.h" | |||
#include <list> | |||
@@ -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; | |||
} | |||
@@ -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) | |||
@@ -106,10 +106,10 @@ int JackWinMMEDriver::Open(bool capturing, | |||
jack_log("JackWinMMEDriver::Open"); | |||
fRealCaptureChannels = midiInGetNumDevs(); | |||
fRealPlaybackChannels = midiOutGetNumDevs (); | |||
fRealPlaybackChannels = midiOutGetNumDevs(); | |||
// Generic JackMidiDriver Open | |||
if (JackMidiDriver::Open(capturing, playing, inchannels + fRealCaptureChannels, outchannels + fRealPlaybackChannels, monitor, capture_driver_name, playback_driver_name, capture_latency, playback_latency) != 0) | |||
if (JackMidiDriver::Open(capturing, playing, fRealCaptureChannels, fRealPlaybackChannels, monitor, capture_driver_name, playback_driver_name, capture_latency, playback_latency) != 0) | |||
return -1; | |||
fMidiDestination = new MidiSlot[fRealCaptureChannels]; | |||
@@ -61,6 +61,7 @@ def set_options(opt): | |||
opt.tool_options('compiler_cc') | |||
opt.add_option('--libdir', type='string', help="Library directory [Default: <prefix>/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) | |||