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) | |||