Browse Source

rebase from trunk 4004:4041

git-svn-id: http://subversion.jackaudio.org/jack/jack2/branches/libjacknet@4042 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.8
sletz 13 years ago
parent
commit
7a2863cf55
47 changed files with 1351 additions and 151 deletions
  1. +46
    -6
      ChangeLog
  2. +3
    -2
      common/JackClient.cpp
  3. +5
    -7
      common/JackError.cpp
  4. +1
    -2
      common/JackError.h
  5. +1
    -1
      common/JackPhysicalMidiInput.h
  6. +1
    -1
      common/JackPhysicalMidiOutput.h
  7. +1
    -1
      common/Jackdmp.cpp
  8. +1
    -1
      common/jack/systemdeps.h
  9. +1
    -1
      common/netjack.c
  10. +0
    -1
      common/netjack.h
  11. +1
    -1
      common/shm.c
  12. +1
    -1
      dbus/audio_reserve.c
  13. +7
    -16
      dbus/controller.c
  14. +29
    -12
      dbus/controller_iface_control.c
  15. +4
    -0
      dbus/sigsegv.c
  16. +21
    -21
      example-clients/ipload.c
  17. +5
    -0
      linux/JackPlatformPlug_os.h
  18. +32
    -7
      linux/cycles.h
  19. +12
    -3
      linux/firewire/JackFFADODriver.cpp
  20. +17
    -54
      macosx/coreaudio/JackCoreAudioDriver.cpp
  21. +0
    -8
      macosx/coreaudio/JackCoreAudioDriver.h
  22. BIN
      macosx/libcelt.a
  23. +97
    -0
      man/alsa_in.0
  24. +1
    -0
      man/alsa_out.0
  25. +5
    -0
      man/fill_template
  26. +14
    -0
      man/jack_bufsize.0
  27. +11
    -0
      man/jack_connect.0
  28. +1
    -0
      man/jack_disconnect.0
  29. +16
    -0
      man/jack_freewheel.0
  30. +11
    -0
      man/jack_impulse_grabber.0
  31. +28
    -0
      man/jack_load.0
  32. +47
    -0
      man/jack_lsp.0
  33. +40
    -0
      man/jack_metro.0
  34. +18
    -0
      man/jack_monitor_client.0
  35. +109
    -0
      man/jack_netsource.0
  36. +9
    -0
      man/jack_samplerate.0
  37. +13
    -0
      man/jack_showtime.0
  38. +20
    -0
      man/jack_simple_client.0
  39. +13
    -0
      man/jack_transport.0
  40. +19
    -0
      man/jack_unload.0
  41. +41
    -0
      man/jack_wait.0
  42. +547
    -0
      man/jackd.0
  43. +23
    -0
      man/jackrec.0
  44. +13
    -0
      man/wscript
  45. +4
    -3
      posix/JackPosixSemaphore.cpp
  46. +52
    -1
      tests/test.cpp
  47. +10
    -1
      wscript

+ 46
- 6
ChangeLog View File

@@ -24,20 +24,60 @@ Peter L Jones
Devin Anderson
Josh Green
Mario Lang
Arnold Krille
Arnold Krille
Jan Engelhardt
Adrian Knoth
---------------------------
Jackdmp changes log
---------------------------

2010-04-016 Stephane Letz <letz@grame.fr>
2010-08-23 Stephane Letz <letz@grame.fr>
* Make jack_connect/jack_disconnect wait for effective port connection/disconnection.
* Adrian Knoth fix for linux cycle.h (ticket 188).

2010-07-07 Stephane Letz <letz@grame.fr>
* Jan Engelhardt patch for get_cycles on SPARC.
* Adrian Knoth hurd.patch, kfreebsd-fix.patch and alpha_ia64-sigsegv.patch from ticket 177.

2010-06-29 Stephane Letz <letz@grame.fr>
* Arnold Krille firewire snooping patch.

2010-06-16 Stephane Letz <letz@grame.fr>
* David Garcia Garzon unused_pkt_buf_field_jack2 netone patch.

2010-06-13 Stephane Letz <letz@grame.fr>
* Fix JackPosixSemaphore::TimedWait : same behavior as JackPosixSemaphore::Wait regarding EINTR.

2010-05-31 Stephane Letz <letz@grame.fr>
* Fix from Fernando Lopez-Lezcano for compilation on fc13.

2010-05-30 Stephane Letz <letz@grame.fr>
* David Garcia Garzon netone patch.

2010-05-27 Stephane Letz <letz@grame.fr>
* In JackCoreAudioDriver, move code called in MeasureCallback to be called once in IO thread.
2010-05-07 Stephane Letz <letz@grame.fr>
* Add tests to validate intclient.h API.
* On Linux, inter-process synchronization primitive switched to POSIX semaphore.
2010-04-16 Stephane Letz <letz@grame.fr>
* Make jack_connect/jack_disconnect wait for effective port connection/disconnection.
2010-04-07 Stephane Letz <letz@grame.fr>
* Remove call to exit in library code.

2010-03-26 Stephane Letz <letz@grame.fr>
* ffado-portname-sync.patch from ticket #163 applied.
@@ -45,7 +85,7 @@ Arnold Krille
2010-03-24 Stephane Letz <letz@grame.fr>
* On Windows, now use TRE library for regexp (BSD license instead of GPL license).
2010-03-19 Stephane Letz <letz@grame.fr>
* Fix some file header to have library side code use LGPL.
@@ -234,7 +274,7 @@ Arnold Krille
2009-10-20 Stephane Letz <letz@grame.fr>
* Add a string parameter to server ==> client notification, add a new JackInfoShutdownCallback type.
* CoreAudio backend now issue a JackInfoShutdownCallback when an unrecoverable error is detected (sampling rate change, stream configuration changeÉ)
* CoreAudio backend now issue a JackInfoShutdownCallback when an unrecoverable error is detected (sampling rate change, stream configuration changed)
2009-10-17 Stephane Letz <letz@grame.fr>


+ 3
- 2
common/JackClient.cpp View File

@@ -1012,7 +1012,7 @@ int JackClient::InternalClientLoad(const char* client_name, jack_options_t optio
if (va->load_name && (strlen(va->load_name) >= JACK_PATH_MAX)) {
jack_error("\"%s\" is too long for a shared object name.\n"
"Please use %lu characters or less.",
va->load_name, PATH_MAX);
va->load_name, JACK_PATH_MAX);
int my_status1 = *status | (JackFailure | JackInvalidOption);
*status = (jack_status_t)my_status1;
return 0;
@@ -1027,7 +1027,8 @@ int JackClient::InternalClientLoad(const char* client_name, jack_options_t optio
return 0;
}

int int_ref, result = -1;
int int_ref = 0;
int result = -1;
fChannel->InternalClientLoad(GetClientControl()->fRefNum, client_name, va->load_name, va->load_init, options, (int*)status, &int_ref, &result);
return int_ref;
}


+ 5
- 7
common/JackError.cpp View File

@@ -27,17 +27,15 @@

using namespace Jack;

void change_thread_log_function(jack_log_function_t log_function)
static bool change_thread_log_function(jack_log_function_t log_function)
{
if (!jack_tls_set(JackGlobals::fKeyLogFunction, (void*)log_function))
{
jack_error("failed to set thread log function");
}
return (jack_tls_get(JackGlobals::fKeyLogFunction) == NULL
&& jack_tls_set(JackGlobals::fKeyLogFunction, (void*)log_function));
}

SERVER_EXPORT void set_threaded_log_function()
SERVER_EXPORT int set_threaded_log_function()
{
change_thread_log_function(JackMessageBufferAdd);
return change_thread_log_function(JackMessageBufferAdd);
}

void jack_log_function(int level, const char *message)


+ 1
- 2
common/JackError.h View File

@@ -53,10 +53,9 @@ extern "C"

typedef void (* jack_log_function_t)(int level, const char *message);

void change_thread_log_function(jack_log_function_t log_function);
void jack_log_function(int level, const char *message);
SERVER_EXPORT void set_threaded_log_function();
SERVER_EXPORT int set_threaded_log_function();

#ifdef __cplusplus
}


+ 1
- 1
common/JackPhysicalMidiInput.h View File

@@ -120,7 +120,7 @@ namespace Jack {
public:

JackPhysicalMidiInput(size_t buffer_size=1024);
~JackPhysicalMidiInput();
virtual ~JackPhysicalMidiInput();

/**
* Called to process MIDI data during a period.


+ 1
- 1
common/JackPhysicalMidiOutput.h View File

@@ -92,7 +92,7 @@ namespace Jack {

JackPhysicalMidiOutput(size_t non_rt_buffer_size=1024,
size_t rt_buffer_size=64);
~JackPhysicalMidiOutput();
virtual ~JackPhysicalMidiOutput();

/**
* Called to process MIDI data during a period.


+ 1
- 1
common/Jackdmp.cpp View File

@@ -85,7 +85,7 @@ static void copyright(FILE* file)
{
fprintf(file, "jackdmp " VERSION "\n"
"Copyright 2001-2005 Paul Davis and others.\n"
"Copyright 2004-2009 Grame.\n"
"Copyright 2004-2010 Grame.\n"
"jackdmp comes with ABSOLUTELY NO WARRANTY\n"
"This is free software, and you are welcome to redistribute it\n"
"under certain conditions; see the file COPYING for details\n");


+ 1
- 1
common/jack/systemdeps.h View File

@@ -53,7 +53,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

#endif /* WIN32 */

#if defined(__APPLE__) || defined(__linux__) || defined(__sun__) || defined(sun)
#if defined(__APPLE__) || defined(__linux__) || defined(__sun__) || defined(sun) || defined(__unix__)
#include <inttypes.h>
#include <pthread.h>
#include <sys/types.h>


+ 1
- 1
common/netjack.c View File

@@ -564,6 +564,7 @@ netjack_driver_state_t *netjack_init (netjack_driver_state_t *netj,
netj->resample_factor = resample_factor;
netj->resample_factor_up = resample_factor_up;

netj->jitter_val = jitter_val;

return netj;
}
@@ -734,7 +735,6 @@ netjack_startup( netjack_driver_state_t *netj )
}

netj->rx_bufsize = sizeof (jacknet_packet_header) + netj->net_period_down * netj->capture_channels * get_sample_size (netj->bitdepth);
netj->pkt_buf = malloc (netj->rx_bufsize);
global_packcache = packet_cache_new (netj->latency + 50, netj->rx_bufsize, netj->mtu);

netj->expected_framecnt_valid = 0;


+ 0
- 1
common/netjack.h View File

@@ -85,7 +85,6 @@ struct _netjack_driver_state {
unsigned int handle_transport_sync;

unsigned int *rx_buf;
unsigned int *pkt_buf;
unsigned int rx_bufsize;
//unsigned int tx_bufsize;
unsigned int mtu;


+ 1
- 1
common/shm.c View File

@@ -512,7 +512,7 @@ jack_register_server (const char *server_name, int new_registry)

unlock:
jack_shm_unlock_registry ();
return 0;
return res;
}

/* release server_name registration */


+ 1
- 1
dbus/audio_reserve.c View File

@@ -60,7 +60,7 @@ SERVER_EXPORT int audio_reservation_finish()
if (gConnection) {
dbus_connection_unref(gConnection);
gConnection = NULL;
jack_info("audio_reservation_finish");
jack_info("audio_reservation_finish");
}
return 0;
}


+ 7
- 16
dbus/controller.c View File

@@ -1,6 +1,6 @@
/* -*- Mode: C ; c-basic-offset: 4 -*- */
/*
Copyright (C) 2007,2008 Nedko Arnaudov
Copyright (C) 2007,2008,2010 Nedko Arnaudov
Copyright (C) 2007-2008 Juuso Alasuutari

This program is free software; you can redistribute it and/or modify
@@ -25,6 +25,7 @@
#include <stdint.h>
#include <string.h>
#include <dbus/dbus.h>
#include <assert.h>

#include "controller.h"
#include "controller_internal.h"
@@ -142,11 +143,7 @@ jack_controller_start_server(

jack_info("Starting jack server...");

if (controller_ptr->started)
{
jack_info("Already started.");
return TRUE;
}
assert(!controller_ptr->started); /* should be ensured by caller */

if (controller_ptr->driver == NULL)
{
@@ -171,7 +168,6 @@ jack_controller_start_server(
if (controller_ptr->client == NULL)
{
jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "failed to create dbusapi jack client");

goto fail_stop_server;
}

@@ -179,13 +175,12 @@ jack_controller_start_server(
if (ret != 0)
{
jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "failed to set xrun callback. error is %d", ret);

goto fail_close_client;
}

if (!jack_controller_patchbay_init(controller_ptr))
{
jack_error("Failed to initialize patchbay district");
jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "Failed to initialize patchbay district");
goto fail_close_client;
}

@@ -193,7 +188,6 @@ jack_controller_start_server(
if (ret != 0)
{
jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "failed to activate dbusapi jack client. error is %d", ret);

goto fail_patchbay_uninit;
}

@@ -232,16 +226,12 @@ jack_controller_stop_server(

jack_info("Stopping jack server...");

if (!controller_ptr->started)
{
jack_info("Already stopped.");
return TRUE;
}
assert(controller_ptr->started); /* should be ensured by caller */

ret = jack_deactivate(controller_ptr->client);
if (ret != 0)
{
jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "failed to deactivate dbusapi jack client. error is %d", ret);
jack_error("failed to deactivate dbusapi jack client. error is %d", ret);
}

jack_controller_patchbay_uninit(controller_ptr);
@@ -256,6 +246,7 @@ jack_controller_stop_server(

if (!jackctl_server_stop(controller_ptr->server))
{
jack_dbus_error(dbus_call_context_ptr, JACK_DBUS_ERROR_GENERIC, "Failed to stop server");
return FALSE;
}



+ 29
- 12
dbus/controller_iface_control.c View File

@@ -1,6 +1,6 @@
/* -*- Mode: C ; c-basic-offset: 4 -*- */
/*
Copyright (C) 2007,2008 Nedko Arnaudov
Copyright (C) 2007,2008,2010 Nedko Arnaudov
Copyright (C) 2007-2008 Juuso Alasuutari

This program is free software; you can redistribute it and/or modify
@@ -85,29 +85,46 @@ jack_control_run_method(
}
else if (strcmp (call->method_name, "StartServer") == 0)
{
if (!jack_controller_start_server(controller_ptr, call))
if (controller_ptr->started)
{
jack_dbus_error(call, JACK_DBUS_ERROR_GENERIC, "Failed to start server");
return true;
jack_info("Ignoring JACK server start request because server is already started.");
}
else
{
if (!jack_controller_start_server(controller_ptr, call))
{
/* the reply is set by the failed function */
assert(call->reply != NULL);
return true;
}

jack_controller_control_send_signal_server_started();
}

jack_controller_control_send_signal_server_started();
}
else if (strcmp (call->method_name, "StopServer") == 0)
{
if (!jack_controller_stop_server(controller_ptr, call))
if (!controller_ptr->started)
{
jack_dbus_error(call, JACK_DBUS_ERROR_GENERIC, "Failed to stop server");
return true;
jack_info("Ignoring JACK server stop request because server is already stopped.");
}
else
{
if (!jack_controller_stop_server(controller_ptr, call))
{
/* the reply is set by the failed function */
assert(call->reply != NULL);
return true;
}

jack_controller_control_send_signal_server_stopped();
}

jack_controller_control_send_signal_server_stopped();
}
else if (strcmp (call->method_name, "SwitchMaster") == 0)
{
if (!jack_controller_switch_master(controller_ptr, call))
{
jack_dbus_error(call, JACK_DBUS_ERROR_GENERIC, "Failed to switch master");
/* the reply is set by the failed function */
assert(call->reply != NULL);
return true;
}



+ 4
- 0
dbus/sigsegv.c View File

@@ -98,14 +98,18 @@ static void signal_segv(int signum, siginfo_t* info, void*ptr) {
jack_error("info.si_errno = %d", info->si_errno);
jack_error("info.si_code = %d (%s)", info->si_code, si_codes[info->si_code]);
jack_error("info.si_addr = %p", info->si_addr);
#if !defined(__alpha__) && !defined(__ia64__) && !defined(__FreeBSD_kernel__) && !defined(__arm__) && !defined(__hppa__) && !defined(__sh__)
for(i = 0; i < NGREG; i++)
jack_error("reg[%02d] = 0x" REGFORMAT, i,
#if defined(__powerpc__)
ucontext->uc_mcontext.uc_regs[i]
#elif defined(__sparc__) && defined(__arch64__)
ucontext->uc_mcontext.mc_gregs[i]
#else
ucontext->uc_mcontext.gregs[i]
#endif
);
#endif /* alpha, ia64, kFreeBSD, arm, hppa */

#if defined(SIGSEGV_STACK_X86) || defined(SIGSEGV_STACK_IA64)
# if defined(SIGSEGV_STACK_IA64)


+ 21
- 21
example-clients/ipload.c View File

@@ -17,9 +17,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <signal.h>
#ifndef WIN32
#include <unistd.h>
#include <unistd.h>
#endif
#include <getopt.h>
#include <jack/jack.h>
@@ -126,7 +126,7 @@ parse_args (int argc, char *argv[])
int
main (int argc, char *argv[])
{
jack_status_t status;
jack_status_t status;
char* name;

/* parse and validate command arguments */
@@ -157,8 +157,8 @@ main (int argc, char *argv[])
(JackLoadName|JackLoadInit),
&status, load_name, load_init);
if (status & JackFailure) {
fprintf (stderr, "could not load %s, status = 0x%2.0x\n",
load_name, status);
fprintf (stderr, "could not load %s, intclient = %d status = 0x%2.0x\n",
load_name, (int)intclient, status);
return 2;
}
if (status & JackNameNotUnique) {
@@ -178,23 +178,23 @@ main (int argc, char *argv[])

if (wait_opt) {
/* define a signal handler to unload the client, then
* wait for it to exit */
#ifdef WIN32
signal(SIGINT, signal_handler);
signal(SIGABRT, signal_handler);
signal(SIGTERM, signal_handler);
#else
signal(SIGQUIT, signal_handler);
signal(SIGTERM, signal_handler);
signal(SIGHUP, signal_handler);
signal(SIGINT, signal_handler);
#endif
while (1) {
#ifdef WIN32
Sleep(1000);
* wait for it to exit */
#ifdef WIN32
signal(SIGINT, signal_handler);
signal(SIGABRT, signal_handler);
signal(SIGTERM, signal_handler);
#else
signal(SIGQUIT, signal_handler);
signal(SIGTERM, signal_handler);
signal(SIGHUP, signal_handler);
signal(SIGINT, signal_handler);
#endif
while (1) {
#ifdef WIN32
Sleep(1000);
#else
sleep (1);
sleep (1);
#endif
}
}


+ 5
- 0
linux/JackPlatformPlug_os.h View File

@@ -49,8 +49,13 @@ namespace Jack {typedef JackPosixMutex JackMutex; }
namespace Jack { typedef JackPosixThread JackThread; }

/* __JackPlatformSynchro__ client activation */
/*
#include "JackFifo.h"
namespace Jack { typedef JackFifo JackSynchro; }
*/

#include "JackPosixSemaphore.h"
namespace Jack { typedef JackPosixSemaphore JackSynchro; }

/* __JackPlatformChannelTransaction__ */
#include "JackSocket.h"


+ 32
- 7
linux/cycles.h View File

@@ -51,7 +51,17 @@ static inline unsigned long get_cycles(void)
return (((unsigned long)hi)<<32) | ((unsigned long)lo);
}

#endif
#endif /* __x86_64__ */

#ifdef __sparc_v9__
/* rd is V9 only */
static inline unsigned long long get_cycles(void)
{
unsigned long long res;
__asm__ __volatile__("rd %%tick, %0" : "=r"(res));
return res;
}
#endif /* __sparc_v9__ */

#ifdef __PPC__

@@ -82,7 +92,7 @@ static inline cycles_t get_cycles(void)
return ret;
}

#endif
#endif /* __PPC__ */

#ifdef __i386__

@@ -101,10 +111,26 @@ static inline cycles_t get_cycles (void)
return ret;
}

#endif
#endif /* __i386__ */

/* everything else but x86, amd64, sparcv9 or ppc */
#if !defined (__PPC__) && !defined (__x86_64__) && !defined (__i386__) && !defined (__sparc_v9__)

#warning No suitable get_cycles() implementation. Returning 0 instead

typedef unsigned long long cycles_t;

static inline cycles_t get_cycles(void)
{
return 0;
}

#endif /* everything else but x86, amd64, sparcv9 or ppc */

#endif /* __linux__ */


/* everything else but x86, amd64 or ppc */
#if !defined (__PPC__) && !defined (__x86_64__) && !defined (__i386__)
#if defined(__FreeBSD_kernel__)

#warning No suitable get_cycles() implementation. Returning 0 instead

@@ -115,8 +141,7 @@ static inline cycles_t get_cycles(void)
return 0;
}

#endif
#endif /* __FreeBSD_kernel__ */

#endif

#endif /* __jack_cycles_h__ */

+ 12
- 3
linux/firewire/JackFFADODriver.cpp View File

@@ -338,6 +338,7 @@ JackFFADODriver::ffado_driver_new (const char *name,
driver->device_options.verbose = params->verbose_level;
driver->capture_frame_latency = params->capture_frame_latency;
driver->playback_frame_latency = params->playback_frame_latency;
driver->device_options.snoop_mode = params->snoop_mode;

debugPrint(DEBUG_LEVEL_STARTUP, " Driver compiled on %s %s", __DATE__, __TIME__);
debugPrint(DEBUG_LEVEL_STARTUP, " Created driver %s", name);
@@ -753,7 +754,7 @@ extern "C"
strcpy (desc->name, "firewire"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1
strcpy(desc->desc, "Linux FFADO API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1
desc->nparams = 12;
desc->nparams = 13;

params = (jack_driver_param_desc_t *)calloc (desc->nparams, sizeof (jack_driver_param_desc_t));
desc->params = params;
@@ -854,6 +855,14 @@ extern "C"
strcpy (params[i].short_desc, "libffado verbose level");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "snoop");
params[i].character = 'X';
params[i].type = JackDriverParamBool;
params[i].value.i = 0;
strcpy (params[i].short_desc, "Snoop firewire traffic");
strcpy (params[i].long_desc, params[i].short_desc);

return desc;
}

@@ -863,7 +872,7 @@ extern "C"

ffado_jack_settings_t cmlparams;

char *device_name="hw:0";
char *device_name=(char*)"hw:0";

cmlparams.period_size_set = 0;
cmlparams.sample_rate_set = 0;
@@ -919,7 +928,7 @@ extern "C"
cmlparams.slave_mode = param->value.ui;
break;
case 'X':
cmlparams.snoop_mode = param->value.ui;
cmlparams.snoop_mode = param->value.i;
break;
case 'v':
cmlparams.verbose_level = param->value.ui;


+ 17
- 54
macosx/coreaudio/JackCoreAudioDriver.cpp View File

@@ -194,6 +194,22 @@ OSStatus JackCoreAudioDriver::Render(void *inRefCon,
driver->fActionFags = ioActionFlags;
driver->fCurrentTime = (AudioTimeStamp *)inTimeStamp;
driver->fDriverOutputData = ioData;
// Setup threadded based log function once...
if (set_threaded_log_function()) {
jack_log("set_threaded_log_function");
JackMachThread::GetParams(pthread_self(), &driver->fEngineControl->fPeriod, &driver->fEngineControl->fComputation, &driver->fEngineControl->fConstraint);
if (driver->fComputationGrain > 0) {
jack_log("JackCoreAudioDriver::Render : RT thread computation setup to %d percent of period", int(driver->fComputationGrain * 100));
driver->fEngineControl->fComputation = driver->fEngineControl->fPeriod * driver->fComputationGrain;
}
// Signal waiting start function...
driver->fState = true;
}
driver->CycleTakeBeginTime();
return driver->Process();
}
@@ -221,33 +237,6 @@ int JackCoreAudioDriver::Write()
return 0;
}

// Will run only once
OSStatus JackCoreAudioDriver::MeasureCallback(AudioDeviceID inDevice,
const AudioTimeStamp* inNow,
const AudioBufferList* inInputData,
const AudioTimeStamp* inInputTime,
AudioBufferList* outOutputData,
const AudioTimeStamp* inOutputTime,
void* inClientData)
{
JackCoreAudioDriver* driver = (JackCoreAudioDriver*)inClientData;
AudioDeviceStop(driver->fDeviceID, MeasureCallback);
jack_log("JackCoreAudioDriver::MeasureCallback called");
JackMachThread::GetParams(pthread_self(), &driver->fEngineControl->fPeriod, &driver->fEngineControl->fComputation, &driver->fEngineControl->fConstraint);
if (driver->fComputationGrain > 0) {
jack_log("JackCoreAudioDriver::MeasureCallback : RT thread computation setup to %d percent of period", int(driver->fComputationGrain * 100));
driver->fEngineControl->fComputation = driver->fEngineControl->fPeriod * driver->fComputationGrain;
}
// Signal waiting start function...
driver->fState = true;
// Setup threadded based log function
set_threaded_log_function();
return noErr;
}

OSStatus JackCoreAudioDriver::SRNotificationCallback(AudioDeviceID inDevice,
UInt32 inChannel,
@@ -1682,27 +1671,10 @@ int JackCoreAudioDriver::Start()
{
jack_log("JackCoreAudioDriver::Start");
JackAudioDriver::Start();
/*
#ifdef MAC_OS_X_VERSION_10_5
OSStatus err = AudioDeviceCreateIOProcID(fDeviceID, MeasureCallback, this, &fMesureCallbackID);
#else
OSStatus err = AudioDeviceAddIOProc(fDeviceID, MeasureCallback, this);
#endif
*/
OSStatus err = AudioDeviceAddIOProc(fDeviceID, MeasureCallback, this);
if (err != noErr)
return -1;

err = AudioOutputUnitStart(fAUHAL);
OSStatus err = AudioOutputUnitStart(fAUHAL);
if (err != noErr)
return -1;

if ((err = AudioDeviceStart(fDeviceID, MeasureCallback)) != noErr) {
jack_error("Cannot start MeasureCallback");
printError(err);
return -1;
}
// Waiting for Measure callback to be called (= driver has started)
fState = false;
@@ -1724,15 +1696,6 @@ int JackCoreAudioDriver::Start()
int JackCoreAudioDriver::Stop()
{
jack_log("JackCoreAudioDriver::Stop");
AudioDeviceStop(fDeviceID, MeasureCallback);
/*
#ifdef MAC_OS_X_VERSION_10_5
AudioDeviceDestroyIOProcID(fDeviceID, fMesureCallbackID);
#else
AudioDeviceRemoveIOProc(fDeviceID, MeasureCallback);
#endif
*/
AudioDeviceRemoveIOProc(fDeviceID, MeasureCallback);
return (AudioOutputUnitStop(fAUHAL) == noErr) ? 0 : -1;
}



+ 0
- 8
macosx/coreaudio/JackCoreAudioDriver.h View File

@@ -96,14 +96,6 @@ class JackCoreAudioDriver : public JackAudioDriver
UInt32 inNumberFrames,
AudioBufferList *ioData);

static OSStatus MeasureCallback(AudioDeviceID inDevice,
const AudioTimeStamp* inNow,
const AudioBufferList* inInputData,
const AudioTimeStamp* inInputTime,
AudioBufferList* outOutputData,
const AudioTimeStamp* inOutputTime,
void* inClientData);

static OSStatus DeviceNotificationCallback(AudioDeviceID inDevice,
UInt32 inChannel,
Boolean isInput,


BIN
macosx/libcelt.a View File


+ 97
- 0
man/alsa_in.0 View File

@@ -0,0 +1,97 @@
.TH ALSA_IO "1" "!DATE!" "!VERSION!"
.SH NAME
\fBalsa_in\fR, \fBalsa_out\fR \- Jack clients that perform I/O with an alternate audio interface
.SH SYNOPSIS
\fBalsa_in\fR [\fIoptions\fR]
.br
\fBalsa_out\fR [\fIoptions\fR]

.SH DESCRIPTION
A JACK client that opens a specified audio interface (different to the
one used by the JACK server, if any) and moves audio data between its
JACK ports and the interface. alsa_in will provide data from the
interface (potentially for capture); alsa_out will deliver data to it
(for playback).

The audio interface used by alsa_in/alsa_out does not need to be
synchronized with JACK backend (or the hardware it might be using).
alsa_in/alsa_out tries to resample the output stream in an attempt to
compensate for drift between the two clocks.

As of jack-0.116.3 this works almost perfectly. It takes some time, to reach
absolute resample-rate stability. So give it some minutes (its intended to be
running permanently anyways)

.SH OPTIONS
.TP
\fB\-j \fI jack_client_name\fR
.br
Set Client Name.
.TP
\fB\-d \fI alsa_device\fR
.br
Use this Soundcard.
.TP
\fB\-v\fR
.br
Verbose, prints out resample coefficient and other parameters useful for debugging, every 500ms.
also reports soft xruns.
.TP
\fB\-i\fR
.br
Instrumentation. This logs the 4 important parameters of the samplerate control algorithm every 1ms.
You can pipe this into a file, and plot it. Should only be necessary, if it does not work as
expected, and we need to adjust some of the obscure parameters, to make it work.
Find me on irc.freenode.org #jack in order to set this up correctly.
.TP
\fB\-c \fI channels\fR
.br
Set Number of channels.
.TP
\fB\-r \fI sample_rate\fR
.br
Set sample_rate. The program resamples as necessary.
So you can connect a 44k1 jackd to a soundcard only supporting
48k. (default is jack sample_rate)
.TP
\fB\-p \fI period_size\fR
.br
Set the period size. It is not related to the jackd period_size.
Sometimes it affects the quality of the delay measurements.
Setting this lower than the jackd period_size will only work, if you
use a higher number of periods.
.TP
\fB\-n \fI num_period\fR
.br
Set number of periods. See note for period_size.
.TP
\fB\-q \fI quality\fR
.br
Set the quality of the resampler from 0 to 4. can significanly reduce cpu usage.
.TP
\fB\-m \fI max_diff\fR
.br
The value when a soft xrun occurs. Basically the window, in which
the dma pointer may jitter. I don't think its necessary to play with this anymore.
.TP
\fB\-t \fI target_delay\fR
.br
The delay alsa_io should try to approach. Same as for max_diff. It will be setup based on \-p and \-n
which is generally sufficient.
.TP
\fB\-s \fI smooth_array_size\fR
.br
This parameter controls the size of the array used for smoothing the delay measurement. Its default is 256.
If you use a pretty low period size, you can lower the CPU usage a bit by decreasing this parameter.
However most CPU time is spent in the resampling so this will not be much.
.TP
\fB\-C \fI P Control Clamp\fR
.br
If you have a PCI card, then the default value (15) of this parameter is too high for \-p64 \-n2... Setting it to 5 should fix that.
Be aware that setting this parameter too low, lets the hf noise on the delay measurement come through onto the resamplerate, so this
might degrade the quality of the output. (but its a threshold value, and it has been chosen, to mask the noise of a USB card,
which has an amplitude which is 50 times higher than that of a PCI card, so 5 wont loose you any quality on a PCI card)

.SH AUTHOR
Torben Hohn


+ 1
- 0
man/alsa_out.0 View File

@@ -0,0 +1 @@
.so man1/alsa_in.1

+ 5
- 0
man/fill_template View File

@@ -0,0 +1,5 @@
#!/bin/sh

for i in *.0 ; do
sed -e "s/!VERSION!/${1}/g" -e "s/!DATE!/`date '+%B %Y'`/g" < ${i} > ${i%%0}1
done

+ 14
- 0
man/jack_bufsize.0 View File

@@ -0,0 +1,14 @@
.TH JACK_BUFSIZE "1" "!DATE!" "!VERSION!"
.SH NAME
jack_bufsize \- JACK toolkit client to change the JACK buffer size
.SH SYNOPSIS
.B jack_bufsize bufsize
.SH DESCRIPTION
.B jack_bufsize
jack_bufsize sets the size of the buffer (frames per period) used in JACK.
This change happens on-line (the JACK server and its clients do not need to be
restarted).
.br
When invoked without arguments, it prints the current bufsize, and exits.



+ 11
- 0
man/jack_connect.0 View File

@@ -0,0 +1,11 @@
.TH JACK_CONNECT "1" "!DATE!" "!VERSION!"
.SH NAME
\fBjack_connect\fR, \fBjack_disconnect\fR \- JACK toolkit clients for connecting & disconnecting ports
.SH SYNOPSIS
\fB jack_connect\fR [ \fI-s\fR | \fI--server servername\fR ] [\fI-h\fR | \fI--help\fR ] port1 port2
\fB jack_disconnect\fR [ \fI-s\fR | \fI--server servername\fR ] [\fI-h\fR | \fI--help\fR ] port1 port2
.SH DESCRIPTION
\fBjack_connect\fR connects the two named ports. \fBjack_connect\fR disconnects the two named ports.
.SH RETURNS
The exit status is zero if successful, 1 otherwise


+ 1
- 0
man/jack_disconnect.0 View File

@@ -0,0 +1 @@
.so man1/jack_connect.1

+ 16
- 0
man/jack_freewheel.0 View File

@@ -0,0 +1,16 @@
.TH JACK_FREEWHEEL "1" "!DATE!" "!VERSION!"
.SH NAME
jack_freewheel \- JACK toolkit client to control freewheeling mode
.SH SYNOPSIS
.B jack_freewheel [y|n]
.SH DESCRIPTION
.B jack_freewheel
Turns freewheeling mode on (y) or off (n). While in freewheeling mode,
the JACK server does not wait in between process() calls, and does not
read or write data from/to any audio interface. That results in the JACK graph
processing data as fast as possible. Freewheeling makes fast exports to
files possible.
.PP
There is no useful reason to use this tool other than testing. JACK
clients that use freewheeling will turn it on and off themselves.


+ 11
- 0
man/jack_impulse_grabber.0 View File

@@ -0,0 +1,11 @@
.TH JACK_IMPULSE_GRABBER "1" "!DATE!" "!VERSION!"
.SH NAME
jack_impulse_grabber \- JACK toolkit client to grab an impulse (response)
.SH SYNOPSIS
\fBjack_impulse_grabber\fR \fB-d\fR \fIduration\fR [\fI-f\fR (C|gnuplot)]
.SH DESCRIPTION
\fBjack_impulse_grabber\fR is a JACK example client for collecting
impulses recordings from JACK ports.




+ 28
- 0
man/jack_load.0 View File

@@ -0,0 +1,28 @@
.TH JACK_LOAD "1" "!DATE!" "!VERSION!"
.SH NAME
jack_load \- JACK toolkit client for loading in-process clients
.SH SYNOPSIS
\fBjack_load\fR [ \fI-i\fR initstring ] [ \fI-s\fR servername ] [\fI-w\fR ] client-name so-name [ initstring ]
.SH DESCRIPTION
\fBjack_load\fR is a JACK toolkit client. It loads the specified plugin and creates an in-process client.
.SH ARGUMENTS
.PP
The client-name must be a currently unused client name.
.PP
The so-name is the name of file that client code is stored in (typically, \fIclientname.so\fR)
.SH OPTIONS
.TP
\fB-i\fR, \fB--init\fR init-string
.br
initialization string passed to the in-process client. Note that this can also be specified as the last argument on the command line.
.TP
\fB-s\fR, \fB--server\fR servername
.br
Name of JACK server to connect to
.TP
\fB-w\fR, \fB--wait\fR
Wait for a signal (eg. from Ctrl-c) and then unload the client.
.SH AUTHOR
Jeremy Hall



+ 47
- 0
man/jack_lsp.0 View File

@@ -0,0 +1,47 @@
.TH JACK_LSP "1" "!DATE!" "!VERSION!"
.SH NAME
jack_lsp \- JACK toolkit client to list informtion on ports
.SH SYNOPSIS
\fBjack_lsp\fR [ \fI-s\fR | \fI--server\fR servername ] [ \fI-AclLptvh\fR ]
.SH DESCRIPTION
\fBjack_lsp\fR lists all known ports associated with a JACK
server. It can also optionally list various kinds of information about each port.
.SH OPTIONS
.TP
\fB-s\fR, \fB--server\fR \fIservername\fR
.br
Connect to the jack server named \fIservername\fR
.TP
\fB-A\fR, \fB--aliases\fR
.br
List aliases for each port
.TP
\fB-c\fR, \fB--connections\fR
.br
List connections to/from each port
.TP
\fB-l\fR, \fB--latency\fR
.br
Display per-port latency in frames at each port
.TP
\fB-L\fR, \fI--latency\fR
.br
Display total latency in frames at each port
.TP
\fB-p\fR, \fB--properties\fR
.br
Display port properties. Output may include input|output, can-monitor, physical, terminal
.TP
\fB-t\fR, \fB--type\fR
.br
Display port type
.TP
\fB-h\fR, \fB--help\fR
.br
Display help/usage message
.TP
\fB-v\fR, \fB--version\fR
.br
Output version information and exit



+ 40
- 0
man/jack_metro.0 View File

@@ -0,0 +1,40 @@
.TH JACK_METRO "1" "!DATE!" "!VERSION!"
.SH NAME
jack_metro \- JACK toolkit metronome
.SH SYNOPSIS
\fBjack_metro\fR [ \fI-n\fR name ] [ \fI-f\fR hz ] [ \fI-D\fR msecs ] [\fI-a\fR % ] [ \fI-d\fR % ] \fI-b\fR bpm
.SH DESCRIPTION
\fBjack_metro\fR is a simple metronome for JACK. It generates a
synthetic "tick" sound for every beat. Note that is does \fBnot\fR
connect its output port by default - to hear the sound it makes you must
connect them using some other tool.
.SH OPTIONS
.TP
\fB-n\fR, \fB--name\fR
.br
Specify a name for this instance of the metronome.
.TP
\fB-f\fR, \fB--frequency\fR Hz
.br
Define the frequency of the "tick" in Hz.
.TP
\fB-D\fR, \fB--duration\fR msecs
.br
Define the duration of the "tick" in milliseconds.
.TP
\fB-a\fR, \fB--attack\fR %-age
.br
Define the duration of the attack phase of the "tick" as a percentage
of the duration.
.TP
\fB-d\fR, \fB--decay\fR %-age
.br
Define the duration of the decay phase of the "tick" as a percentage
of the duration.
.TP
\fB--b\fR, \fB--bpm\fR bpm
.br
Define the number of beats per minute.
.SH AUTHOR
Anthony Van Groningen


+ 18
- 0
man/jack_monitor_client.0 View File

@@ -0,0 +1,18 @@
.TH JACK_CONNECT "1" "!DATE!" "!VERSION!"
.SH NAME
jack_monitor_client \- The JACK Audio Connection Kit example client
.SH SYNOPSIS
.B jack_monitor_client
client-name
.PP
The client-name must be the name of a existing client that monitoring is
to be enabled for.
.SH DESCRIPTION
.B jack_monitor_client
is an example client for the JACK Audio Connection Kit. It enables
monitoring for the specified client.
.SH AUTHOR
Jeremy Hall
.PP
This manpage was written by Robert Jordens <jordens@debian.org> for Debian.


+ 109
- 0
man/jack_netsource.0 View File

@@ -0,0 +1,109 @@
.TH JACK_NETSOURCE "1" "!DATE!" "!VERSION!"
.SH NAME
jack_netsource \- Netjack Master client for one slave
.SH SYNOPSIS
\fBjack_netsource\fR [ \fI-H\fR hostname ] [ \fIoptions\fR ]

.SH DESCRIPTION
\fBjack_netsource\fR The Master side of a netjack connection. Represents the slave jackd -dnet in the master jack graph.
Most connection parameters are configured via the netsource, and the slave will set itself up according to the commandline
option given to jack_netsource.
.br
Netjack allows low latency audio connections over general IP networks. When using celt for compression, it is even possible
to establish transatlantic links, with latencies not much over the actual ping time.
.br
But the main usecase is of course a LAN, where it can achieve one jack period of latency.

.SH OPTIONS
.TP
\fB-h\fR this help text
.TP
\fB-H\fR \fIslave host\fR
.br
Host name of the slave JACK
.TP
\fB-o\fR \fInum channels\fR
.br
Number of audio playback channels
.TP
\fB-i\fR \fInum channels\fR
.br
Number of audio capture channels
.TP
\fB-O\fR \fInum channels\fR
.br
Number of midi playback channels
.TP
\fB-I\fR \fInum channels\fR
.br
Number of midi capture channels
.TP
\fB-n\fR \fIperiods\fR
.br
Network latency in JACK periods
.TP
\fB-p\fR \fIport\fR
.br
UDP port that the slave is listening on
.TP
\fB-r\fR \fIreply port\fR
.br
UDP port that we are listening on
.TP
\fB-B\fR \fIbind port\fR
.br
reply port, for use in NAT environments
.TP
\fB-b\fR \fIbitdepth\fR
.br
Set transport to use 16bit or 8bit
.TP
\fB-c\fR \fIbytes\fR
.br
Use CELT encoding with <bytes> per period and channel
.TP
\fB-m\fR \fImtu\fR
.br
Assume this mtu for the link
.TP
\fB-R\fR \fIN\fR
.br
Redundancy: send out packets N times.
.TP
\fB-e\fR
.br
skip host-to-network endianness conversion
.TP
\fB-N\fR \fIjack name\fR
.br
Reports a different client name to jack
.TP
.TP
\fB-s\fR, \fB--server\fR \fIservername\fR
.br
Connect to the jack server named \fIservername\fR
.TP
\fB-h\fR, \fB--help\fR
.br
Display help/usage message
.TP
\fB-v\fR, \fB--version\fR
.br
Output version information and exit


.SH EXAMPLES

.PP
run a 4 audio channel bidirectional link with one period of latency and no midi channels. Audio data is flowing uncompressed over the wire:
.br
On \fIhostA\fR:
.IP
\fBjackd \-d alsa \fR
.br
\fBjack_netsource \-H hostB -n1 -i4 -o4 -I0 -O0 \fR
.PP
On \fIhostB\fR:
.IP
\fBjackd \-d net \fR


+ 9
- 0
man/jack_samplerate.0 View File

@@ -0,0 +1,9 @@
.TH JACK_SAMPLERATE "1" "!DATE!" "!VERSION!"
.SH NAME
jack_samplerate \- JACK toolkit client to print current samplerate
.SH SYNOPSIS
.B jack_samplerate
.SH DESCRIPTION
.B jack_samplerate prints the current samplerate, and exits.



+ 13
- 0
man/jack_showtime.0 View File

@@ -0,0 +1,13 @@
.TH JACK_SHOWTIME "1" "!DATE!" "!VERSION!"
.SH NAME
jack_showtime \- The JACK Audio Connection Kit example client
.SH SYNOPSIS
.B jack_showtime
.SH DESCRIPTION
.B jack_showtime
prints the current timebase information to stdout
.SH AUTHOR
Paul Davis
.PP
This manpage was written by Stefan Schwandter <swan@debian.org>


+ 20
- 0
man/jack_simple_client.0 View File

@@ -0,0 +1,20 @@
.TH JACK_CONNECT "1" "!DATE!" "!VERSION!"
.SH NAME
jack_simple_client \- The JACK Audio Connection Kit example client
.SH SYNOPSYS
.B jack_simple_client
client-name
.PP
The client-name must be a yet unused client name.
.SH DESCRIPTION
.B jack_simple_client
is an example client for the JACK Audio Connection Kit. It creates two
ports (client-name:input and client-name:output) that pass the data
unmodified.
.SH EXAMPLE
jack_simple_client in_process_test
.SH AUTHOR
Jeremy Hall
.PP
This manpage was written by Robert Jordens <jordens@debian.org> for Debian.


+ 13
- 0
man/jack_transport.0 View File

@@ -0,0 +1,13 @@
.TH JACK_TRANSPORT "1" "!DATE!" "!VERSION!"
.SH NAME
jack_transport \- JACK toolkit client for transport control
.SH SYNOPSIS
.B jack_transport
.SH DESCRIPTION
.B jack_transport
is a toolkit client for the JACK Audio Connection Kit. It provides command-line
control over the JACK transport system. Type help at jack_transport's
command prompt to see the available commands.
.SH AUTHOR
Jeremy Hall


+ 19
- 0
man/jack_unload.0 View File

@@ -0,0 +1,19 @@
.TH JACK_UNLOAD "1" "!DATE!" "!VERSION!"
.SH NAME
jack_unload \- The JACK Audio Connection Kit example client
.SH SYNOPSIS
.B jack_unload
client-name
.PP
The client-name must be the name of a loaded client that can be unloaded.
.SH DESCRIPTION
.B jack_unload
is the counterpart to
.B jack_load
and unloads the specified client.
.SH EXAMPLE
.B jack_unload in_process_test
.SH AUTHOR
Jeremy Hall
.PP
This manpage was written by Robert Jordens <jordens@debian.org> for Debian.

+ 41
- 0
man/jack_wait.0 View File

@@ -0,0 +1,41 @@
.TH JACK_WAIT "1" "!DATE!" "!VERSION!"
.SH NAME
jack_wait \- JACK toolkit client to check and wait for existence/exit of jackd.
.SH SYNOPSIS
\fBjack_wait\fR [ \fI-s\fR | \fI--server\fR servername ] [ \fI-t\fR | \fI--timeout\fR timeout_seconds [ \fI-cqwhv\fR ]
.SH DESCRIPTION
\fBjack_wait\fR When invoked with \fI-c\fR it only checks for the existence of a jack server. When invoked with \fI-w\fR the
program will wait for a jackd to be available.
The \fI-q\fR makes it wait for the jackd to exit.

.SH OPTIONS
.TP
\fB-w\fR, \fB--wait\fR
.br
Wait for jackd to be available.
.TP
\fB-q\fR, \fB--quit\fR
.br
Wait for jackd quit.
.TP
\fB-c\fR, \fB--check\fR
.br
Only check for existence of jackd, and exit.
.TP
\fB-s\fR, \fB--server\fR \fIservername\fR
.br
Connect to the jack server named \fIservername\fR
.TP
\fB-t\fR, \fB--timeout\fR \fItimeout_seconds\fR
.br
Only wait \fItimeout_seconds\fR.
.TP
\fB-h\fR, \fB--help\fR
.br
Display help/usage message
.TP
\fB-v\fR, \fB--version\fR
.br
Output version information and exit



+ 547
- 0
man/jackd.0 View File

@@ -0,0 +1,547 @@
.TH "JACKD" "1" "!VERSION!" "!DATE!" ""
.SH "NAME"
jackd \- JACK Audio Connection Kit sound server
.SH "SYNOPSIS"
\fBjackd\fR [\fIoptions\fR] \fB\-d\fI backend \fR
[\fIbackend\-parameters\fR]
.br
\fBjackd \-\-help\fR
.SH "DESCRIPTION"
\fBjackd\fR is the JACK audio server daemon, a low\-latency audio
server. Originally written for the
GNU/Linux operating system, it also supports Mac OS X and various Unix
platforms. JACK can connect a number of different client applications
to an audio device and also to each other. Most clients are external,
running in their own processes as normal applications. JACK also
supports internal clients, which run within the \fBjackd\fR process
using a loadable "plugin" interface.

JACK differs from other audio servers in being designed from the
ground up for professional audio work. It focuses on two key areas:
synchronous execution of all clients, and low latency operation.

For the latest JACK information, please consult the web site,
<\fBhttp://www.jackaudio.org\fR>.
.SH "OPTIONS"
.TP
\fB\-d, \-\-driver \fIbackend\fR [\fIbackend\-parameters\fR ]
.br
Select the audio interface backend. The current list of supported
backends is: \fBalsa\fR, \fBcoreaudio\fR, \fBdummy\fR, \fBfreebob\fR,
\fBoss\fR \fBsun\fR and \fBportaudio\fR. They are not all available
on all platforms. All \fIbackend\-parameters\fR are optional.

.TP
\fB\-h, \-\-help\fR
.br
Print a brief usage message describing the main \fBjackd\fR options.
These do not include \fIbackend\-parameters\fR, which are listed using
the \fB\-\-help\fR option for each specific backend. Examples below
show how to list them.
.TP
\fB\-m, \-\-no\-mlock\fR
Do not attempt to lock memory, even if \fB\-\-realtime\fR.
.TP
\fB\-n, \-\-name\fR \fIserver\-name\fR
Name this \fBjackd\fR instance \fIserver\-name\fR. If unspecified,
this name comes from the \fB$JACK_DEFAULT_SERVER\fR environment
variable. It will be "default" if that is not defined.
.TP
\fB\-p, \-\-port\-max \fI n\fR
Set the maximum number of ports the JACK server can manage.
The default value is 256.
.TP
\fB\-\-replace-registry\fR
.br
Remove the shared memory registry used by all JACK server instances
before startup. This should rarely be used, and is intended only
for occasions when the structure of this registry changes in ways
that are incompatible across JACK versions (which is rare).
.TP
\fB\-R, \-\-realtime\fR
.br
Use realtime scheduling (default = true). This is needed for reliable low\-latency
performance. On many systems, it requires \fBjackd\fR to run with
special scheduler and memory allocation privileges, which may be
obtained in several ways.
.TP
\fB\-r, \-\-no-realtime\fR
.br
Do not use realtime scheduling.
.TP
\fB\-P, \-\-realtime\-priority \fIint\fR
When running \fB\-\-realtime\fR, set the scheduler priority to
\fIint\fR.
.TP
\fB\-\-silent\fR
Silence any output during operation.
.TP
\fB\-T, \-\-temporary\fR
Exit once all clients have closed their connections.
.TP
\fB\-t, \-\-timeout \fIint\fR
.br
Set client timeout limit in milliseconds. The default is 500 msec.
In realtime mode the client timeout must be smaller than the watchdog timeout (5000 msec).
.TP
\fB\-Z, \-\-nozombies\fR
.br
Prevent JACK from ever kicking out clients because they were too slow.
This cancels the effect any specified timeout value, but JACK and its clients are
still subject to the supervision of the watchdog thread or its equivalent.
.TP
\fB\-u, \-\-unlock\fR
.br
Unlock libraries GTK+, QT, FLTK, Wine.
.TP
\fB\-v, \-\-verbose\fR
Give verbose output.
.TP
\fB\-c, \-\-clocksource\fR (\fI c(ycle)\fR | \fI h(pet) \fR | \fI s(ystem) \fR)
Select a specific wall clock (Cycle Counter, HPET timer, System timer).
.TP
\fB\-V, \-\-version\fR
Print the current JACK version number and exit.
.SS ALSA BACKEND OPTIONS
.TP
\fB\-C, \-\-capture\fR [ \fIname\fR ]
Provide only capture ports, unless combined with \-D or \-P. Parameterally set
capture device name.
.TP
\fB\-d, \-\-device \fIname\fR
.br
The ALSA pcm device \fIname\fR to use. If none is specified, JACK will
use "hw:0", the first hardware card defined in \fB/etc/modules.conf\fR.
.TP
\fB\-z, \-\-dither [rectangular,triangular,shaped,none]
Set dithering mode. If \fBnone\fR or unspecified, dithering is off.
Only the first letter of the mode name is required.
.TP
\fB\-D, \-\-duplex\fR
Provide both capture and playback ports. Defaults to on unless only one
of \-P or \-C is specified.
.TP
\fB\-h, \-\-help\fR Print a brief usage message describing only the
\fBalsa\fR backend parameters.
.TP
\fB\-M, \-\-hwmeter\fR
.br
Enable hardware metering for devices that support it. Otherwise, use
software metering.
.TP
\fB\-H, \-\-hwmon\fR
.br
Enable hardware monitoring of capture ports. This is a method for
obtaining "zero latency" monitoring of audio input. It requires
support in hardware and from the underlying ALSA device driver.

When enabled, requests to monitor capture ports will be satisfied by
creating a direct signal path between audio interface input and output
connectors, with no processing by the host computer at all. This
offers the lowest possible latency for the monitored signal.

Presently (March 2003), only the RME Hammerfall series and cards based
on the ICE1712 chipset (M\-Audio Delta series, Terratec, and others)
support \fB\-\-hwmon\fR. In the future, some consumer cards may also
be supported by modifying their mixer settings.

Without \fB\-\-hwmon\fR, port monitoring requires JACK to read audio
into system memory, then copy it back out to the hardware again,
imposing the basic JACK system latency determined by the
\fB\-\-period\fR and \fB\-\-nperiods\fR parameters.
.TP
\fB\-i, \-\-inchannels \fIint\fR
.br
Number of capture channels. Default is maximum supported by hardware.
.TP
\fB\-n, \-\-nperiods \fIint\fR
.br
Specify the number of periods of playback latency. In seconds, this
corresponds to \fB\-\-nperiods\fR times \fB\-\-period\fR divided by
\fB\-\-rate\fR. The default is 2, the minimum allowable. For most
devices, there is no need for any other value with the
\fB\-\-realtime\fR option. Without realtime privileges or with boards
providing unreliable interrupts (like ymfpci), a larger value may
yield fewer xruns. This can also help if the system is not tuned for
reliable realtime scheduling.

For most ALSA devices, the hardware buffer has exactly
\fB\-\-period\fR times \fB\-\-nperiods\fR frames. Some devices demand
a larger buffer. If so, JACK will use the smallest possible buffer
containing at least \fB\-\-nperiods\fR, but the playback latency does
not increase.

For USB audio devices it is recommended to use \fB\-n 3\fR. Firewire
devices supported by FFADO (formerly Freebob) are configured with
\fB\-n 3\fR by default.
.TP
\fB\-o, \-\-outchannels \fIint\fR
.br
Number of playback channels. Default is maximum supported by hardware.
.TP
\fB\-P, \-\-playback\fR [ \fIname\fR ]
Provide only playback ports, unless combined with \-D or \-C. Optionally set
playback device name.
.TP
\fB\-p, \-\-period \fIint\fR
.br
Specify the number of frames between JACK \fBprocess()\fR calls. This
value must be a power of 2, and the default is 1024. If you need low
latency, set \fB\-p\fR as low as you can go without seeing xruns. A larger
period size yields higher latency, but makes xruns less likely. The JACK
capture latency in seconds is \fB\-\-period\fR divided by \fB\-\-rate\fR.
.TP
\fB\-r, \-\-rate \fIint\fR
Specify the sample rate. The default is 48000.
.TP
\fB\-S, \-\-shorts
.br
Try to configure card for 16\-bit samples first, only trying 32\-bits if
unsuccessful. Default is to prefer 32\-bit samples.
.TP
\fB\-s, \-\-softmode\fR
.br
Ignore xruns reported by the ALSA driver. This makes JACK less likely
to disconnect unresponsive ports when running without \fB\-\-realtime\fR.
.TP
\fB\-X, \-\-midi \fR[\fIseq\fR|\fIraw\fR]
.br
Specify which ALSA MIDI system to provide access to. Using \fBraw\fR
will provide a set of JACK MIDI ports that correspond to each raw ALSA
device on the machine. Using \fBseq\fR will provide a set of JACK MIDI
ports that correspond to each ALSA "sequencer" client (which includes
each hardware MIDI port on the machine). \fBraw\fR provides slightly
better performance but does not permit JACK MIDI communication with
software written to use the ALSA "sequencer" API.
.SS COREAUDIO BACKEND PARAMETERS
.TP
\fB\-c \-\-channel\fR
Maximum number of channels (default: 2)
.TP
\fB\-i \-\-channelin\fR
Maximum number of input channels (default: 2)
.TP
\fB\-o \-\-channelout\fR
Maximum number of output channels (default: 2)
.TP
\fB\-C \-\-capture\fR
Whether or not to capture (default: true)
.TP
\fB\-P \-\-playback\fR
Whether or not to playback (default: true)
.TP
\fB\-D \-\-duplex\fR
Capture and playback (default: true)
.TP
\fB\-r \-\-rate\fR
Sample rate (default: 44100)
.TP
\fB\-p \-\-period\fR
Frames per period (default: 128). Must be a power of 2.
.TP
\fB\-n \-\-name\fR
Driver name (default: none)
.TP
\fB\-I \-\-id\fR
Audio Device ID (default: 0)
.SS DUMMY BACKEND PARAMETERS
.TP
\fB\-C, \-\-capture \fIint\fR
Specify number of capture ports. The default value is 2.
.TP
\fB\-P, \-\-playback \fIint\fR
Specify number of playback ports. The default value is 2.
.TP
\fB\-r, \-\-rate \fIint\fR
Specify sample rate. The default value is 48000.
.TP
\fB\-p, \-\-period \fIint\fR
Specify the number of frames between JACK \fBprocess()\fR calls. This
value must be a power of 2, and the default is 1024. If you need low
latency, set \fB\-p\fR as low as you can go without seeing xruns. A larger
period size yields higher latency, but makes xruns less likely. The JACK
capture latency in seconds is \fB\-\-period\fR divided by \fB\-\-rate\fR.
.TP
\fB\-w, \-\-wait \fIint\fR
Specify number of usecs to wait between engine processes.
The default value is 21333.


.SS NET BACKEND PARAMETERS

.TP
\fB\-i, \-\-audio\-ins \fIint\fR
Number of capture channels (default: 2)
.TP
\fB\-o, \-\-audio\-outs \fIint\fR
Number of playback channels (default: 2)
.TP
\fB\-I, \-\-midi\-ins \fIint\fR
Number of midi capture channels (default: 1)
.TP
\fB\-O, \-\-midi\-outs \fIint\fR
Number of midi playback channels (default: 1)
.TP
\fB\-r, \-\-rate \fIint\fR
Sample rate (default: 48000)
.TP
\fB\-p, \-\-period \fIint\fR
Frames per period (default: 1024)
.TP
\fB\-n, \-\-num\-periods \fIint\fR
Network latency setting in no. of periods (default: 5)
.TP
\fB\-l, \-\-listen\-port \fIint\fR
The socket port we are listening on for sync packets (default: 3000)
.TP
\fB\-f, \-\-factor \fIint\fR
Factor for sample rate reduction (default: 1)
.TP
\fB\-u, \-\-upstream\-factor \fIint\fR
Factor for sample rate reduction on the upstream (default: 0)
.TP
\fB\-c, \-\-celt \fIint\fR
sets celt encoding and number of kbits per channel (default: 0)
.TP
\fB\-b, \-\-bit\-depth \fIint\fR
Sample bit\-depth (0 for float, 8 for 8bit and 16 for 16bit) (default: 0)
.TP
\fB\-t, \-\-transport\-sync \fIint\fR
Whether to slave the transport to the master transport (default: true)
.TP
\fB\-a, \-\-autoconf \fIint\fR
Whether to use Autoconfig, or just start. (default: true)
.TP
\fB\-R, \-\-redundancy \fIint\fR
Send packets N times (default: 1)
.TP
\fB\-e, \-\-native\-endian \fIint\fR
Dont convert samples to network byte order. (default: false)
.TP
\fB\-J, \-\-jitterval \fIint\fR
attempted jitterbuffer microseconds on master (default: 0)
.TP
\fB\-D, \-\-always\-deadline \fIint\fR
always use deadline (default: false)


.SS OSS BACKEND PARAMETERS
.TP
\fB\-r, \-\-rate \fIint\fR
Specify the sample rate. The default is 48000.
.TP
\fB\-p, \-\-period \fIint\fR
Specify the number of frames between JACK \fBprocess()\fR calls. This
value must be a power of 2, and the default is 1024. If you need low
latency, set \fB\-p\fR as low as you can go without seeing xruns. A larger
period size yields higher latency, but makes xruns less likely. The JACK
capture latency in seconds is \fB\-\-period\fR divided by \fB\-\-rate\fR.
.TP
\fB\-n, \-\-nperiods \fIint\fR
Specify the number of periods in the hardware buffer. The default is
2. The period size (\fB\-p\fR) times \fB\-\-nperiods\fR times four is
the JACK buffer size in bytes. The JACK output latency in seconds is
\fB\-\-nperiods\fR times \fB\-\-period\fR divided by \fB\-\-rate\fR.
.TP
\fB\-w, \-\-wordlength \fIint\fR
Specify the sample size in bits. The default is 16.
.TP
\fB\-i, \-\-inchannels \fIint\fR
Specify how many channels to capture (default: 2)
.TP
\fB\-o, \-\-outchannels \fIint\fR
Specify number of playback channels (default: 2)
.TP
\fB\-C, \-\-capture \fIdevice_file\fR
Specify input device for capture (default: /dev/dsp)
.TP
\fB\-P, \-\-playback \fIdevice_file\fR
Specify output device for playback (default: /dev/dsp)
.TP
\fB\-b, \-\-ignorehwbuf \fIboolean\fR
Specify, whether to ignore hardware period size (default: false)
.SS SUN BACKEND PARAMETERS
.TP
\fB\-r, \-\-rate \fIint\fR
Specify the sample rate. The default is 48000.
.TP
\fB\-p, \-\-period \fIint\fR
Specify the number of frames between JACK \fBprocess()\fR calls. This
value must be a power of 2, and the default is 1024. If you need low
latency, set \fB\-p\fR as low as you can go without seeing xruns. A larger
period size yields higher latency, but makes xruns less likely. The JACK
capture latency in seconds is \fB\-\-period\fR divided by \fB\-\-rate\fR.
.TP
\fB\-n, \-\-nperiods \fIint\fR
Specify the number of periods in the hardware buffer. The default is
2. The period size (\fB\-p\fR) times \fB\-\-nperiods\fR times four
(assuming 2 channels 16-bit samples) is the JACK buffer size in bytes.
The JACK output latency in seconds is \fB\-\-nperiods\fR times
\fB\-\-period\fR divided by \fB\-\-rate\fR.
.TP
\fB\-w, \-\-wordlength \fIint\fR
Specify the sample size in bits. The default is 16.
.TP
\fB\-i, \-\-inchannels \fIint\fR
Specify how many channels to capture (default: 2)
.TP
\fB\-o, \-\-outchannels \fIint\fR
Specify number of playback channels (default: 2)
.TP
\fB\-C, \-\-capture \fIdevice_file\fR
Specify input device for capture (default: /dev/audio)
.TP
\fB\-P, \-\-playback \fIdevice_file\fR
Specify output device for playback (default: /dev/audio)
.TP
\fB\-b, \-\-ignorehwbuf \fIboolean\fR
Specify, whether to ignore hardware period size (default: false)
.SS PORTAUDIO BACKEND PARAMETERS
.TP
\fB\-c \-\-channel\fR
Maximum number of channels (default: all available hardware channels)
.TP
\fB\-i \-\-channelin\fR
Maximum number of input channels (default: all available hardware channels)
.TP
\fB\-o \-\-channelout\fR
Maximum number of output channels (default: all available hardware channels)
.TP
\fB\-C \-\-capture\fR
Whether or not to capture (default: true)
.TP
\fB\-P \-\-playback\fR
Whether or not to playback (default: true)
.TP
\fB\-D \-\-duplex\fR
Capture and playback (default: true)
.TP
\fB\-r \-\-rate\fR
Sample rate (default: 48000)
.TP
\fB\-p \-\-period\fR
Frames per period (default: 1024). Must be a power of 2.
.TP
\fB\-n \-\-name\fR
Driver name (default: none)
.TP
\fB\-z \-\-dither\fR
Dithering mode (default: none)
.SH "EXAMPLES"
.PP
Print usage message for the parameters specific to each backend.
.IP
\fBjackd \-d alsa \-\-help\fR
.br
\fBjackd \-d coreaudio \-\-help\fR
.br
\fBjackd \-d net \-\-help\fR
.br
\fBjackd \-d dummy \-\-help\fR
.br
\fBjackd \-d firewire \-\-help\fR
.br
\fBjackd \-d freebob \-\-help\fR
.br
\fBjackd \-d oss \-\-help\fR
.br
\fBjackd \-d sun \-\-help\fR
.br
\fBjackd \-d portaudio \-\-help\fR
.PP
Run the JACK daemon with realtime priority using the first ALSA
hardware card defined in \fB/etc/modules.conf\fR.
.IP
\fBjackstart \-\-realtime \-\-driver=alsa\fR
.PP
Run the JACK daemon with low latency giving verbose output, which can
be helpful for trouble\-shooting system latency problems. A
reasonably well\-tuned system with a good sound card and a
low\-latency kernel can handle these values reliably. Some can do
better. If you get xrun messages, try a larger buffer. Tuning a
system for low latency can be challenging. The JACK FAQ,
.I http://jackit.sourceforge.net/docs/faq.php\fR
has some useful suggestions.
.IP
\fBjackstart \-Rv \-d alsa \-p 128 \-n 2 \-r 44100\fR
.PP
Run \fBjackd\fR with realtime priority using the "sblive" ALSA device
defined in ~/.asoundrc. Apply shaped dithering to playback audio.
.IP
\fBjackd \-R \-d alsa \-d sblive \-\-dither=shaped\fR
.PP
Run \fBjackd\fR with no special privileges using the second ALSA
hardware card defined in \fB/etc/modules.conf\fR. Any xruns reported
by the ALSA backend will be ignored. The larger buffer helps reduce
data loss. Rectangular dithering will be used for playback.
.IP
\fBjackd \-d alsa \-d hw:1 \-p2048 \-n3 \-\-softmode \-zr\fR
.PP
Run \fBjackd\fR in full\-duplex mode using the ALSA hw:0,0 device for
playback and the hw:0,2 device for capture.
.IP
\fBjackd \-d alsa \-P hw:0,0 \-C hw:0,2\fR
.PP
Run \fBjackd\fR in playback\-only mode using the ALSA hw:0,0 device.
.IP
\fBjackd \-d alsa \-P hw:0,0\fR
.SH "ENVIRONMENT"
.br
JACK is evolving a mechanism for automatically starting the server
when needed. Any client started without a running JACK server will
attempt to start one itself using the command line found in the first
line of \fB$HOME/.jackdrc\fR if it exists, or \fB/etc/jackdrc\fR if it
does not. If neither file exists, a built\-in default command will be
used, including the \fB\-T\fR flag, which causes the server to shut
down when all clients have exited.

As a transition, this only happens when \fB$JACK_START_SERVER\fR is
defined in the environment of the calling process. In the future this
will become normal behavior. In either case, defining
\fB$JACK_NO_START_SERVER\fR disables this feature.

To change where JACK looks for the backend drivers, set
\fB$JACK_DRIVER_DIR\fR.

\fB$JACK_DEFAULT_SERVER\fR specifies the default server name. If not
defined, the string "default" is used. If set in their respective
environments, this affects \fBjackd\fR unless its \fB\-\-name\fR
parameter is set, and all JACK clients unless they pass an explicit
name to \fBjack_client_open()\fR.

.SH "SEE ALSO:"
.PP
.I http://www.jackaudio.org
.br
The official JACK website with news, docs and a list of JACK clients.
.PP
.I http://jackaudio.org/email
.br
The JACK developers' mailing list. Subscribe, to take part in
development of JACK or JACK clients. User questions are also welcome,
there is no user-specific mailing list.
.PP
.I http://www.jackosx.com/
.br
Tools specific to the Mac OS X version of JACK.
.PP
.I http://www.alsa\-project.org
.br
The Advanced Linux Sound Architecture.
.SH "BUGS"
Please report bugs to
.br
.I http://trac.jackaudio.org/
.SH "AUTHORS"
Architect and original implementor: Paul Davis
.PP
Original design Group: Paul Davis, David Olofson, Kai Vehmanen, Benno Sennoner,
Richard Guenther, and other members of the Linux Audio Developers group.
.PP
Programming: Paul Davis, Jack O'Quin, Taybin Rutkin, Stephane Letz, Fernando
Pablo Lopez-Lezcano, Steve Harris, Jeremy Hall, Andy Wingo, Kai
Vehmanen, Melanie Thielker, Jussi Laako, Tilman Linneweh, Johnny
Petrantoni, Torben Hohn.
.PP
Manpage written by Stefan Schwandter, Jack O'Quin and Alexandre
Prokoudine.

+ 23
- 0
man/jackrec.0 View File

@@ -0,0 +1,23 @@
.TH JACKREC "1" "!DATE!" "!VERSION!"
.SH NAME
jackrec \- JACK toolkit client for recording audio
.SH SYNOPSIS
.B jackrec
\-f filename \-d seconds [ \-b bitdepth ] port1 [ port2 ... ]
.SH DESCRIPTION
.B jackrec is a basic, but useful, audio recorder that will record
audio from 1 or more JACK ports to a file on disk. The file format is
always RIFF/WAV, with samples stored as signed integers. The sample
bit depth can be selected using the \fI-b\fR option. The file will
have as many channels as there are ports specified on the command line
- each channel will contain the data recorded from one port. The user
should generally specify the duration (in seconds) using the \fI-d\fR
option. If not specified, jackrec will record until terminated by a
signal (eg. from Ctrl-c).
.PP
This application is not intended to be a heavy duty audio recorder,
and originated as an example client to show how to handle threading
and disk I/O in a JACK client. However, it is a useful, simple
recorder and is included in the JACK toolkit as a result.



+ 13
- 0
man/wscript View File

@@ -0,0 +1,13 @@
#! /usr/bin/env python
# encoding: utf-8

import Build
import re
import os
import misc


def build(bld):
bld.exec_command("cd man ; sh fill_template %s" % bld.env['JACK_VERSION'])
bld.install_files(bld.env['MANDIR'], '*.1')


+ 4
- 3
posix/JackPosixSemaphore.cpp View File

@@ -118,10 +118,12 @@ bool JackPosixSemaphore::TimedWait(long usec)
time.tv_sec += tv_usec / 1000000;
time.tv_nsec = (tv_usec % 1000000) * 1000;

if ((res = sem_timedwait(fSemaphore, &time)) != 0) {
while ((res = sem_timedwait(fSemaphore, &time)) < 0) {
jack_error("JackPosixSemaphore::TimedWait err = %s", strerror(errno));
jack_log("now %ld %ld ", now.tv_sec, now.tv_usec);
jack_log("next %ld %ld ", time.tv_sec, time.tv_nsec/1000);
if (errno != EINTR)
break;
}
return (res == 0);
}
@@ -184,9 +186,8 @@ bool JackPosixSemaphore::ConnectOutput(const char* name, const char* server_name

bool JackPosixSemaphore::Disconnect()
{
jack_log("JackPosixSemaphore::Disconnect %s", fName);

if (fSemaphore) {
jack_log("JackPosixSemaphore::Disconnect %s", fName);
if (sem_close(fSemaphore) != 0) {
jack_error("Disconnect: can't disconnect named semaphore name = %s err = %s", fName, strerror(errno));
return false;


+ 52
- 1
tests/test.cpp View File

@@ -35,6 +35,7 @@
#include <assert.h>
#include <stdarg.h>
#include <jack/jack.h>
#include <jack/intclient.h>
#include <jack/transport.h>


@@ -632,7 +633,57 @@ int main (int argc, char *argv[])
if (status & JackServerStarted) {
fprintf(stderr, "JACK server started\n");
}

/**
* Internal client tests...
*
*/
jack_intclient_t intclient;
Log("trying to load the \"inprocess\" server internal client \n");
intclient = jack_internal_client_load (client1, "inprocess",
(jack_options_t)(JackLoadName|JackLoadInit),
&status, "inprocess", "");
if (intclient == 0 || status & JackFailure) {
printf("!!! ERROR !!! cannot load internal client \"inprocess\" intclient %d status 0x%2.0x !\n", intclient, status);
} else {
Log("\"inprocess\" server internal client loaded\n");
char* internal_name = jack_get_internal_client_name(client1, intclient);
if (strcmp(internal_name, "inprocess") == 0) {
Log("jack_get_internal_client_name returns %s\n", internal_name);
} else {
printf("!!! ERROR !!! jack_get_internal_client_name returns incorrect name %s\n", internal_name);
}
jack_intclient_t intclient1 = jack_internal_client_handle(client1, "inprocess", &status);
if (intclient1 == intclient) {
Log("jack_internal_client_handle returns correct handle\n");
} else {
printf("!!! ERROR !!! jack_internal_client_handle returns incorrect handle %d\n", intclient1);
}
// Unload internal client
status = jack_internal_client_unload (client1, intclient);
if (status == 0) {
Log("jack_internal_client_unload done first time returns correct value\n");
} else {
printf("!!! ERROR !!! jack_internal_client_unload returns incorrect value 0x%2.0x\n", status);
}
// Unload internal client second time
status = jack_internal_client_unload (client1, intclient);
if (status & JackFailure && status & JackNoSuchClient) {
Log("jack_internal_client_unload done second time returns correct value\n");
} else {
printf("!!! ERROR !!! jack_internal_client_unload returns incorrect value 0x%2.0x\n", status);
}
}
/**
* try to register another one with the same name...
*


+ 10
- 1
wscript View File

@@ -62,6 +62,7 @@ def set_options(opt):

opt.add_option('--libdir', type='string', help="Library directory [Default: <prefix>/lib]")
opt.add_option('--libdir32', type='string', help="32bit Library directory [Default: <prefix>/lib32]")
opt.add_option('--mandir', type='string', help="Manpage directory [Default: <prefix>/share/man/man1]")
opt.add_option('--dbus', action='store_true', default=False, help='Enable D-Bus JACK (jackdbus)')
opt.add_option('--classic', action='store_true', default=False, help='Force enable standard JACK (jackd) even if D-Bus JACK (jackdbus) is enabled too')
opt.add_option('--doxygen', action='store_true', default=False, help='Enable build of doxygen documentation')
@@ -78,7 +79,7 @@ def set_options(opt):
def configure(conf):
platform = Utils.detect_platform()
conf.env['IS_MACOSX'] = platform == 'darwin'
conf.env['IS_LINUX'] = platform == 'linux'
conf.env['IS_LINUX'] = platform == 'linux' or platform == 'posix'
conf.env['