Browse Source

rebase from trunk 3528:3550

git-svn-id: http://subversion.jackaudio.org/jack/jack2/branches/libjacknet@3551 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.8
sletz 16 years ago
parent
commit
7ca13a6b25
34 changed files with 362 additions and 246 deletions
  1. +23
    -1
      ChangeLog
  2. +6
    -0
      common/JackAPI.cpp
  3. +6
    -25
      common/JackControlAPI.cpp
  4. +1
    -0
      common/JackDriver.cpp
  5. +1
    -8
      common/JackServer.cpp
  6. +1
    -2
      common/JackServer.h
  7. +2
    -9
      common/JackServerGlobals.cpp
  8. +0
    -1
      common/JackServerGlobals.h
  9. +115
    -114
      common/jack/control.h
  10. +10
    -0
      common/jack/jack.h
  11. +38
    -0
      dbus/controller.c
  12. +49
    -0
      dbus/controller_iface_control.c
  13. +4
    -2
      dbus/controller_iface_patchbay.c
  14. +10
    -0
      dbus/controller_internal.h
  15. +1
    -0
      linux/JackLinuxTime.c
  16. +1
    -0
      linux/alsa/JackAlsaDriver.cpp
  17. +37
    -34
      linux/firewire/JackFFADODriver.cpp
  18. +1
    -0
      linux/freebob/JackFreebobDriver.cpp
  19. +8
    -7
      linux/wscript
  20. +0
    -1
      macosx/JackMachNotifyChannel.h
  21. +0
    -1
      macosx/JackMachServerChannel.h
  22. +9
    -8
      macosx/wscript
  23. +16
    -18
      posix/JackPosixServerLaunch.cpp
  24. +2
    -1
      posix/JackSocketServerChannel.h
  25. +0
    -1
      posix/JackSocketServerNotifyChannel.h
  26. +1
    -0
      solaris/oss/JackBoomerDriver.cpp
  27. +3
    -2
      windows/JackWinNamedPipeClientChannel.cpp
  28. +0
    -1
      windows/JackWinNamedPipeNotifyChannel.h
  29. +0
    -1
      windows/JackWinNamedPipeServerChannel.h
  30. +3
    -3
      windows/JackWinSemaphore.cpp
  31. +1
    -2
      windows/JackWinTime.c
  32. BIN
      windows/Setup/JackRouter.dll
  33. +2
    -2
      windows/winmme/JackWinMMEDriver.cpp
  34. +11
    -2
      wscript

+ 23
- 1
ChangeLog View File

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


+ 6
- 0
common/JackAPI.cpp View File

@@ -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);
}

+ 6
- 25
common/JackControlAPI.cpp View File

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


+ 1
- 0
common/JackDriver.cpp View File

@@ -315,6 +315,7 @@ int JackDriver::Write()

int JackDriver::Start()
{
fEngineControl->InitFrameTime();
return 0;
}



+ 1
- 8
common/JackServer.cpp View File

@@ -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();


+ 1
- 2
common/JackServer.h View File

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


+ 2
- 9
common/JackServerGlobals.cpp View File

@@ -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();


+ 0
- 1
common/JackServerGlobals.h View File

@@ -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();


+ 115
- 114
common/jack/control.h View File

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


+ 10
- 0
common/jack/jack.h View File

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


+ 38
- 0
dbus/controller.c View File

@@ -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,


+ 49
- 0
dbus/controller_iface_control.c View File

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


+ 4
- 2
dbus/controller_iface_patchbay.c View File

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


+ 10
- 0
dbus/controller_internal.h View File

@@ -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
- 0
linux/JackLinuxTime.c View File

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


+ 1
- 0
linux/alsa/JackAlsaDriver.cpp View File

@@ -2255,6 +2255,7 @@ int JackAlsaDriver::Close()

int JackAlsaDriver::Start()
{
JackAudioDriver::Start();
return alsa_driver_start((alsa_driver_t *)fDriver);
}



+ 37
- 34
linux/firewire/JackFFADODriver.cpp View File

@@ -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...


+ 1
- 0
linux/freebob/JackFreebobDriver.cpp View File

@@ -841,6 +841,7 @@ int JackFreebobDriver::Close()

int JackFreebobDriver::Start()
{
JackAudioDriver::Start();
return freebob_driver_start((freebob_driver_t *)fDriver);
}



+ 8
- 7
linux/wscript View File

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



+ 0
- 1
macosx/JackMachNotifyChannel.h View File

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


+ 0
- 1
macosx/JackMachServerChannel.h View File

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


+ 9
- 8
macosx/wscript View File

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



+ 16
- 18
posix/JackPosixServerLaunch.cpp View File

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

+ 2
- 1
posix/JackSocketServerChannel.h View File

@@ -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.
*/


+ 0
- 1
posix/JackSocketServerNotifyChannel.h View File

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


+ 1
- 0
solaris/oss/JackBoomerDriver.cpp View File

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


+ 3
- 2
windows/JackWinNamedPipeClientChannel.cpp View File

@@ -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;
}


+ 0
- 1
windows/JackWinNamedPipeNotifyChannel.h View File

@@ -20,7 +20,6 @@ Copyright (C) 2004-2006 Grame
#ifndef __JackWinNamedPipeNotifyChannel__
#define __JackWinNamedPipeNotifyChannel__

#include "JackChannel.h"
#include "JackWinNamedPipe.h"

namespace Jack


+ 0
- 1
windows/JackWinNamedPipeServerChannel.h View File

@@ -20,7 +20,6 @@ Copyright (C) 2004-2006 Grame
#ifndef __JackWinNamedPipeServerChannel__
#define __JackWinNamedPipeServerChannel__

#include "JackChannel.h"
#include "JackWinNamedPipe.h"
#include "JackPlatformPlug.h"
#include <list>


+ 3
- 3
windows/JackWinSemaphore.cpp View File

@@ -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;
}


+ 1
- 2
windows/JackWinTime.c View File

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


BIN
windows/Setup/JackRouter.dll View File


+ 2
- 2
windows/winmme/JackWinMMEDriver.cpp View File

@@ -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];


+ 11
- 2
wscript View File

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


Loading…
Cancel
Save