Browse Source

Fix merge conflicts and ClientCheck.

tags/1.9.7
Stéphane Letz 15 years ago
parent
commit
8d1f85894e
78 changed files with 2063 additions and 726 deletions
  1. +60
    -7
      ChangeLog
  2. +2
    -1
      README
  3. +1
    -2
      common/JackClient.cpp
  4. +1
    -1
      common/JackConstants.h
  5. +1
    -1
      common/JackEngine.cpp
  6. +5
    -7
      common/JackError.cpp
  7. +1
    -2
      common/JackError.h
  8. +2
    -2
      common/JackInternalClientChannel.h
  9. +1
    -1
      common/JackPhysicalMidiInput.h
  10. +1
    -1
      common/JackPhysicalMidiOutput.h
  11. +1
    -1
      common/Jackdmp.cpp
  12. +14
    -0
      common/jack/midiport.h
  13. +1
    -1
      common/jack/systemdeps.h
  14. +1
    -1
      common/netjack.c
  15. +0
    -1
      common/netjack.h
  16. +1
    -1
      common/shm.c
  17. +1
    -1
      dbus/audio_reserve.c
  18. +7
    -16
      dbus/controller.c
  19. +29
    -12
      dbus/controller_iface_control.c
  20. +1
    -1
      dbus/controller_iface_patchbay.c
  21. +73
    -25
      dbus/jackdbus.c
  22. +4
    -0
      dbus/sigsegv.c
  23. +1
    -1
      doxyfile
  24. +21
    -21
      example-clients/ipload.c
  25. +5
    -0
      linux/JackPlatformPlug_os.h
  26. +324
    -336
      linux/alsa/JackAlsaDriver.cpp
  27. +32
    -7
      linux/cycles.h
  28. +13
    -4
      linux/firewire/JackFFADODriver.cpp
  29. +1
    -1
      linux/freebob/JackFreebobDriver.cpp
  30. +2
    -2
      macosx/Jack-Info.plist
  31. +19
    -61
      macosx/coreaudio/JackCoreAudioDriver.cpp
  32. +0
    -16
      macosx/coreaudio/JackCoreAudioDriver.h
  33. BIN
      macosx/libcelt.a
  34. +97
    -0
      man/alsa_in.0
  35. +1
    -0
      man/alsa_out.0
  36. +5
    -0
      man/fill_template
  37. +14
    -0
      man/jack_bufsize.0
  38. +11
    -0
      man/jack_connect.0
  39. +1
    -0
      man/jack_disconnect.0
  40. +16
    -0
      man/jack_freewheel.0
  41. +11
    -0
      man/jack_impulse_grabber.0
  42. +28
    -0
      man/jack_load.0
  43. +47
    -0
      man/jack_lsp.0
  44. +40
    -0
      man/jack_metro.0
  45. +18
    -0
      man/jack_monitor_client.0
  46. +109
    -0
      man/jack_netsource.0
  47. +9
    -0
      man/jack_samplerate.0
  48. +13
    -0
      man/jack_showtime.0
  49. +20
    -0
      man/jack_simple_client.0
  50. +13
    -0
      man/jack_transport.0
  51. +19
    -0
      man/jack_unload.0
  52. +41
    -0
      man/jack_wait.0
  53. +547
    -0
      man/jackd.0
  54. +23
    -0
      man/jackrec.0
  55. +13
    -0
      man/wscript
  56. +4
    -3
      posix/JackPosixSemaphore.cpp
  57. +52
    -1
      tests/test.cpp
  58. +4
    -4
      windows/JackWinNamedPipeClientChannel.cpp
  59. +2
    -2
      windows/JackWinNamedPipeClientChannel.h
  60. +1
    -1
      windows/JackWinNamedPipeServerChannel.cpp
  61. BIN
      windows/Setup/JackRouter.dll
  62. +2
    -2
      windows/Setup/jack.ci
  63. +98
    -95
      windows/jack_dummy.cbp
  64. +3
    -0
      windows/jack_loopback.cbp
  65. +4
    -4
      windows/jackaudioadapter.rc
  66. +4
    -4
      windows/jackd.rc
  67. +41
    -0
      windows/jackdummydriver.rc
  68. +41
    -0
      windows/jackloopbackdriver.rc
  69. +4
    -4
      windows/jacknetadapter.rc
  70. +4
    -4
      windows/jacknetdriver.rc
  71. +4
    -4
      windows/jacknetmanager.rc
  72. +41
    -41
      windows/jacknetonedriver.rc
  73. +4
    -4
      windows/jackportaudio.rc
  74. +5
    -5
      windows/jackwinmme.rc
  75. +4
    -4
      windows/libjack.rc
  76. +4
    -4
      windows/libjackserver.rc
  77. +4
    -4
      windows/resource.rc
  78. +11
    -2
      wscript

+ 60
- 7
ChangeLog View File

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

2010-09-08 Stephane Letz <letz@grame.fr>

2010-04-016 Stephane Letz <letz@grame.fr>
* Sync JackAlsaDriver::alsa_driver_check_card_type with JACK1 backend.

2010-08-30 Stephane Letz <letz@grame.fr>
* Make jack_connect/jack_disconnect wait for effective port connection/disconnection.
* Version 1.9.7 started.

2010-08-25 Stephane Letz <letz@grame.fr>
* In JackCoreAudioDriver, fix an issue when no value is given for input.

2010-08-23 Stephane Letz <letz@grame.fr>
* 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 +98,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 +287,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>


+ 2
- 1
README View File

@@ -214,7 +214,8 @@ Note : To experiment with the -S option, jackdmp must be launched in a console.
1.9.2 : Solaris version. New "profiling" tools. Rework the mutex/signal classes. Support for BIG_ENDIAN machines in NetJack2. D-BUS based device reservation to better coexist with PulseAudio on Linux. Add auto_connect parameter in netmanager and netadapter. Use Torben Hohn PI controler code for adapters. Client incorrect re-naming fixed : now done at socket and fifo level. Virtualize and allow overriding of thread creation function, to allow Wine support (from JACK1).
1.9.3 : New JackBoomerDriver class for Boomer driver on Solaris. Add mixed 32/64 bits mode (off by default). Native MIDI backend (JackCoreMidiDriver, JackWinMMEDriver). In ALSA audio card reservation code, tries to open the card even if reservation fails. Clock source setting on Linux. Add jackctl_server_switch_master API. 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. Cleanup "loopback" stuff in server. Torben Hohn fix for InitTime and GetMicroSeconds in JackWinTime.c. New jack_free function added in jack.h. Reworked Torben Hohn fix for server restart issue on Windows. Correct jack_set_error_function, jack_set_info_function and jack_set_thread_creator functions. Correct JackFifo::TimedWait for EINTR handling. Move DBus based audio device reservation code in ALSA backend compilation. Correct JackTransportEngine::MakeAllLocating, sync callback has to be called in this case also. NetJack2 code : better error checkout, method renaming. Tim Bechmann patch : hammerfall, only release monitor thread, if it has been created. Tim Bechmann memops.c optimization patches. In combined --dbus and --classic compilation code, use PulseAudio acquire/release code. Big rewrite of Solaris boomer driver, seems to work in duplex mode at least. Loopback backend reborn as a dynamically loadable separated backend.
1.9.4 : Solaris boomer backend now working in capture or playback only mode. Add a -G parameter in CoreAudio backend (the computation value in RT thread expressed as percent of period). Use SNDCTL_DSP_SYNCGROUP/SNDCTL_DSP_SYNCSTART API to synchronize input and output in Solaris boomer backend. Big endian bug fix in memops.c. Fix issues in JackNetDriver::DecodeTransportData and JackNetDriver::Initialize. Correct CPU timing in JackNetDriver, now take cycle begin time after Read. Simplify transport in NetJack2: master only can control transport. Change CoreAudio notification thread setup for OSX Snow Leopard. Correct server temporary mode : now set a global and quit after server/client message handling is finished. 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É). Correct jackdmp.cpp (failures case were not correct..). Improve JackCoreAudioDriver code. Raise default port number to 2048. Correct JackProcessSync::LockedTimedWait. Correct JACK_MESSAGE_SIZE value, particularly in OSX RPC code. Now start server channel thread only when backend has been started (so in JackServer::Start). Should solve race conditions at start time. jack_verbose moved to JackGlobals class. Improve aggregate device management in JackCoreAudioDriver : now a "private" device only and cleanup properly. Aggregate device code added to JackCoreAudioAdapter. Implement "hog mode" (exclusive access of the audio device) in JackCoreAudioDriver. Fix jack_set_sample_rate_callback to have he same behavior as in JACK1. Dynamic system version detection in JackCoreAudioDriver to either create public or private aggregate device. In JackCoreAudioDriver, force the SR value to the wanted one *before* creating aggregate device (otherwise creation will fail). In JackCoreAudioDriver, better cleanup of AD when intermediate open failure. In JackCoreAudioDriver::Start, wait for the audio driver to effectively start (use the MeasureCallback). In JackCoreAudioDriver, improve management of input/output channels: -1 is now used internally to indicate a wanted max value. In JackCoreAudioDriver::OpenAUHAL, correct stream format setup and cleanup. Correct crash bug in JackAudioAdapterInterface when not input is used in adapter (temporary fixÉ). Sync JackCoreAudioAdapter code on JackCoreAudioDriver one. JACK_SCHED_POLICY switched to SCHED_FIFO. Now can aggregate device that are themselves AD. No reason to make jack_on_shutdown deprecated, so revert the incorrect change. Thread AcquireRealTime and DropRealTime were (incorrectly) using fThread field. Use pthread_self()) (or GetCurrentThread() on Windows) to get the calling thread. Correctly save and restore RT mode state in freewheel mode. Correct freewheel code on client side. Fix AcquireRealTime and DropRealTime: now distinguish when called from another thread (AcquireRealTime/DropRealTime) and from the thread itself (AcquireSelfRealTime/DropSelfRealTime). Correct JackPosixThread::StartImp : thread priority setting now done in the RT case only. Correct JackGraphManager::GetBuffer for the "client loop with one connection" case : buffer must be copied. Correct JackInfoShutdownCallback prototype, two new JackClientProcessFailure and JackClientZombie JackStatus code. Correct JackCoreAudio driver when empty strings are given as -C, -P or -d parameter. Better memory allocation error checking on client (library) side. Better memory allocation error checking in ringbuffer.c, weak import improvements. Memory allocation error checking for jack_client_new and jack_client_open (server and client side). Memory allocation error checking in server for RPC. Simplify server temporary mode : now use a JackTemporaryException. Lock/Unlock shared memory segments (to test...). Sync with JACK1 : -r parameter now used for no-realtime, realtime (-R) is now default, usable backend given vie platform. In JackCoreAudio driver, (possibly) clock drift compensation when needed in aggregated devices. In JackCoreAudio driver, clock drift compensation in aggregated devices working. In JackCoreAudio driver, clock drift compensation semantic changed a bit : when on, does not activate if not needed (same clock domain). Sync JackCoreAudioAdapter code with JackCoreAudioDriver.
1.9.5 : Dynamic choice of maximum port number. More robust sample rate change handling code in JackCoreAudioDriver. Devin Anderson patch for Jack FFADO driver issues with lost MIDI bytes between periods (and more). Fix port_rename callback : now both old name and new name are given as parameters. Special code in JackCoreAudio driver to handle completely buggy Digidesign CoreAudio user-land driver. Ensure that client-side message buffer thread calls thread_init callback if/when it is set by the client (backport of JACK1 rev 3838). Check dynamic port-max value. Fix JackCoreMidiDriver::ReadProcAux when ring buffer is full (thanks Devin Anderson). Josh Green ALSA driver capture only patch. When threads are cancelled, the exception has to be rethrown. Use a QUIT notification to properly quit the server channel, the server channel thread can then be 'stopped' instead of 'canceled'. Mario Lang alsa_io time calculation overflow patch. Shared memory manager was calling abort in case of fatal error, now return an error in caller. Change JackEngineProfiling and JackAudioAdapterInterface gnuplot scripts to output SVG instead of PDF.
1.9.5 : Dynamic choice of maximum port number. More robust sample rate change handling code in JackCoreAudioDriver. Devin Anderson patch for Jack FFADO driver issues with lost MIDI bytes between periods (and more). Fix port_rename callback : now both old name and new name are given as parameters. Special code in JackCoreAudio driver to handle completely buggy Digidesign CoreAudio user-land driver. Ensure that client-side message buffer thread calls thread_init callback if/when it is set by the client (backport of JACK1 rev 3838). Check dynamic port-max value. Fix JackCoreMidiDriver::ReadProcAux when ring buffer is full (thanks Devin Anderson). Josh Green ALSA driver capture only patch. When threads are cancelled, the exception has to be rethrown. Use a QUIT notification to properly quit the server channel, the server channel thread can then be 'stopped' instead of 'canceled'. Mario Lang alsa_io time calculation overflow patch. Shared memory manager was calling abort in case of fatal error, now return an error in caller. Change JackEngineProfiling and JackAudioAdapterInterface gnuplot scripts to output SVG instead of PDF.
1.9.6 : Improve JackCoreAudioDriver and JackCoreAudioAdapter : when no devices are described, takes default input and output and aggregate them.Correct JackGraphManager::DeactivatePort. Correct JackMachServerChannel::Execute : keep running even in error cases. Raise JACK_PROTOCOL_VERSION number. Arnold Krille firewire patch. Raise JACK_DRIVER_PARAM_STRING_MAX and JACK_PARAM_STRING_MAX to 127 otherwise some audio drivers cannot be loaded on OSX. Fix some file header to have library side code use LGPL. On Windows, now use TRE library for regexp (BSD license instead of GPL license). ffado-portname-sync.patch from ticket #163 applied. Remove call to exit in library code. Make jack_connect/jack_disconnect wait for effective port connection/disconnection. Add tests to validate intclient.h API. On Linux, inter-process synchronization primitive switched to POSIX semaphore. In JackCoreAudioDriver, move code called in MeasureCallback to be called once in IO thread. David Garcia Garzon netone patch. Fix from Fernando Lopez-Lezcano for compilation on fc13. Fix JackPosixSemaphore::TimedWait : same behavior as JackPosixSemaphore::Wait regarding EINTR. David Garcia Garzon unused_pkt_buf_field_jack2 netone patch. Arnold Krille firewire snooping patch. Jan Engelhardt patch for get_cycles on SPARC. Adrian Knoth hurd.patch, kfreebsd-fix.patch and alpha_ia64-sigsegv.patch from ticket 177. Adrian Knoth fix for linux cycle.h (ticket 188). In JackCoreAudioDriver, fix an issue when no value is given for input.
This is a work in progress but the implementation is now stable enough to be tested. jackdmp has been used successfully with the following applications : Ardour, Hydrogen, Jamin, Qjackctl, Jack-Rack, SooperLooper, AlsaPlayer...


+ 1
- 2
common/JackClient.cpp View File

@@ -1042,7 +1042,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;
@@ -1058,7 +1058,6 @@ int JackClient::InternalClientLoad(const char* client_name, jack_options_t optio
}

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


+ 1
- 1
common/JackConstants.h View File

@@ -24,7 +24,7 @@
#include "config.h"
#endif

#define VERSION "1.9.6"
#define VERSION "1.9.7"

#define BUFFER_SIZE_MAX 8192



+ 1
- 1
common/JackEngine.cpp View File

@@ -406,7 +406,7 @@ int JackEngine::ClientCheck(const char* name, int uuid, char* name_res, int prot
std::map<int,std::string>::iterator res = fReservationMap.find(uuid);

if (res != fReservationMap.end()) {
strncpy( name_res, res->second.c_str(), JACK_CLIENT_NAME_SIZE );
strncpy( name_res, res->second.c_str(), JACK_CLIENT_NAME_SIZE );
} else if (ClientCheckName(name)) {

*status |= JackNameNotUnique;


+ 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
}


+ 2
- 2
common/JackInternalClientChannel.h View File

@@ -50,9 +50,9 @@ class JackInternalClientChannel : public detail::JackClientChannelInterface
return 0;
}

void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result)
void ClientCheck(const char* name, int uuid, char* name_res, int protocol, int options, int* status, int* result)
{
*result = fEngine->ClientCheck(name, -1, name_res, protocol, options, status);
*result = fEngine->ClientCheck(name, uuid, name_res, protocol, options, status);
}
void ClientOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, int* result)
{


+ 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");


+ 14
- 0
common/jack/midiport.h View File

@@ -105,6 +105,10 @@ jack_midi_max_event_size(void* port_buffer) JACK_OPTIONAL_WEAK_EXPORT;
* messages interspersed with other messages (realtime messages are fine
* when they occur on their own, like other messages).
*
* Events must be written in order, sorted by their sample offsets.
* JACK will not sort the events for you, and will refuse to store
* out-of-order events.
*
* @param port_buffer Buffer to write event to.
* @param time Sample offset of event.
* @param data_size Length of event's raw data in bytes.
@@ -122,6 +126,16 @@ jack_midi_event_reserve(void *port_buffer,
* This function is simply a wrapper for @ref jack_midi_event_reserve
* which writes the event data into the space reserved in the buffer.
* The same restrictions on the MIDI data apply.
*
* Clients must not write more than
* @a data_size bytes into this buffer. Clients must write normalised
* MIDI data to the port - no running status and no (1-byte) realtime
* messages interspersed with other messages (realtime messages are fine
* when they occur on their own, like other messages).
*
* Events must be written in order, sorted by their sample offsets.
* JACK will not sort the events for you, and will refuse to store
* out-of-order events.
*
* @param port_buffer Buffer to write event to.
* @param time Sample offset of event.


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



+ 1
- 1
dbus/controller_iface_patchbay.c View File

@@ -323,7 +323,7 @@ jack_controller_patchbay_find_client(
list_for_each(node_ptr, &patchbay_ptr->graph.clients)
{
client_ptr = list_entry(node_ptr, struct jack_graph_client, siblings);
if (strncmp(client_ptr->name, client_name, client_name_len) == 0)
if (strlen(client_ptr->name) == client_name_len && strncmp(client_ptr->name, client_name, client_name_len) == 0)
{
return client_ptr;
}


+ 73
- 25
dbus/jackdbus.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
Copyright (C) 2008 Marc-Olivier Barre

@@ -44,6 +44,8 @@
#include "sigsegv.h"
#include "svnversion.h"

static char * g_log_filename;
static ino_t g_log_file_ino;
FILE *g_logfile;
char *g_jackdbus_config_dir;
size_t g_jackdbus_config_dir_len; /* without terminating '\0' char */
@@ -550,6 +552,49 @@ fail:
jack_error ("Ran out of memory trying to construct method return");
}

static bool jack_dbus_log_open(void)
{
struct stat st;
int ret;
int retry;

if (g_logfile != NULL)
{
ret = stat(g_log_filename, &st);
if (ret != 0 || g_log_file_ino != st.st_ino)
{
fclose(g_logfile);
}
else
{
return true;
}
}

for (retry = 0; retry < 10; retry++)
{
g_logfile = fopen(g_log_filename, "a");
if (g_logfile == NULL)
{
fprintf(stderr, "Cannot open jackdbus log file \"%s\": %d (%s)\n", g_log_filename, errno, strerror(errno));
return false;
}

ret = stat(g_log_filename, &st);
if (ret == 0)
{
g_log_file_ino = st.st_ino;
return true;
}

fclose(g_logfile);
g_logfile = NULL;
}

fprintf(stderr, "Cannot stat just opened jackdbus log file \"%s\": %d (%s). %d retries\n", g_log_filename, errno, strerror(errno), retry);
return false;
}

void
jack_dbus_info_callback(const char *msg)
{
@@ -560,8 +605,11 @@ jack_dbus_info_callback(const char *msg)
ctime_r(&timestamp, timestamp_str);
timestamp_str[24] = 0;

fprintf(g_logfile, "%s: %s\n", timestamp_str, msg);
fflush(g_logfile);
if (jack_dbus_log_open())
{
fprintf(g_logfile, "%s: %s\n", timestamp_str, msg);
fflush(g_logfile);
}
}

#define ANSI_BOLD_ON "\033[1m"
@@ -579,8 +627,11 @@ jack_dbus_error_callback(const char *msg)
ctime_r(&timestamp, timestamp_str);
timestamp_str[24] = 0;

fprintf(g_logfile, "%s: " ANSI_BOLD_ON ANSI_COLOR_RED "ERROR: %s" ANSI_RESET "\n", timestamp_str, msg);
fflush(g_logfile);
if (jack_dbus_log_open())
{
fprintf(g_logfile, "%s: " ANSI_BOLD_ON ANSI_COLOR_RED "ERROR: %s" ANSI_RESET "\n", timestamp_str, msg);
fflush(g_logfile);
}
}

bool
@@ -695,42 +746,39 @@ paths_uninit()
free(g_jackdbus_log_dir);
}

int
log_init()
static bool log_init(void)
{
char *log_filename;
size_t log_len;

log_len = strlen(JACKDBUS_LOG);

log_filename = malloc(g_jackdbus_log_dir_len + log_len + 1);
if (log_filename == NULL)
g_log_filename = malloc(g_jackdbus_log_dir_len + log_len + 1);
if (g_log_filename == NULL)
{
fprintf(stderr, "Out of memory\n");
return FALSE;
return false;
}

memcpy(log_filename, g_jackdbus_log_dir, g_jackdbus_log_dir_len);
memcpy(log_filename + g_jackdbus_log_dir_len, JACKDBUS_LOG, log_len);
log_filename[g_jackdbus_log_dir_len + log_len] = 0;
memcpy(g_log_filename, g_jackdbus_log_dir, g_jackdbus_log_dir_len);
memcpy(g_log_filename + g_jackdbus_log_dir_len, JACKDBUS_LOG, log_len);
g_log_filename[g_jackdbus_log_dir_len + log_len] = 0;

g_logfile = fopen(log_filename, "a");
if (g_logfile == NULL)
if (!jack_dbus_log_open())
{
fprintf(stderr, "Cannot open jackdbus log file \"%s\": %d (%s)\n", log_filename, errno, strerror(errno));
free(log_filename);
return FALSE;
return false;
}

free(log_filename);

return TRUE;
return true;
}

void
log_uninit()
static void log_uninit(void)
{
fclose(g_logfile);
if (g_logfile != NULL)
{
fclose(g_logfile);
}

free(g_log_filename);
}

void


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


+ 1
- 1
doxyfile View File

@@ -23,7 +23,7 @@ PROJECT_NAME = "Jack2"
# This could be handy for archiving the generated documentation or
# if some version control system is used.

PROJECT_NUMBER = 1.9.6
PROJECT_NUMBER = 1.9.7

# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.


+ 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"


+ 324
- 336
linux/alsa/JackAlsaDriver.cpp View File

@@ -120,7 +120,7 @@ get_control_device_name (const char * device_name)
char tmp[5];
strncpy(tmp, strstr(device_name, "hw"), 4);
tmp[4] = '\0';
//jack_log("control device %s", tmp);
jack_info("control device %s",tmp);
ctl_name = strdup(tmp);
} else {
ctl_name = strdup(device_name);
@@ -151,21 +151,16 @@ JackAlsaDriver::alsa_driver_check_card_type (alsa_driver_t *driver)
if ((err = snd_ctl_open (&driver->ctl_handle, ctl_name, 0)) < 0) {
jack_error ("control open \"%s\" (%s)", ctl_name,
snd_strerror(err));
return -1;
}

if ((err = snd_ctl_card_info(driver->ctl_handle, card_info)) < 0) {
} else if ((err = snd_ctl_card_info(driver->ctl_handle, card_info)) < 0) {
jack_error ("control hardware info \"%s\" (%s)",
driver->alsa_name_playback, snd_strerror (err));
snd_ctl_close (driver->ctl_handle);
return -1;
}

driver->alsa_driver = strdup(snd_ctl_card_info_get_driver (card_info));
jack_info("Using ALSA driver %s running on card %i - %s", driver->alsa_driver, snd_ctl_card_info_get_card(card_info), snd_ctl_card_info_get_longname(card_info));

free(ctl_name);

return alsa_driver_check_capabilities (driver);
}

@@ -1371,7 +1366,7 @@ JackAlsaDriver::alsa_driver_wait (alsa_driver_t *driver, int extra_fd, int *stat
/* if POLLIN was the only bit set, we're OK */

*status = 0;
if (driver->pfd[nfds-1].revents == POLLIN) {
if (driver->pfd[nfds-1].revents != POLLIN) {
jack_error("driver->pfd[nfds-1].revents == POLLIN");
}
return (driver->pfd[nfds-1].revents == POLLIN) ? 0 : -1;
@@ -1585,7 +1580,6 @@ JackAlsaDriver::alsa_driver_read (alsa_driver_t *driver, jack_nframes_t nframes)
jack_error ("ALSA: could not complete read of %"
PRIu32 " frames: error = %d\n", contiguous, err);
jack_error ("ALSA: could not complete read of %d frames: error = %d", contiguous, err);
return -1;
}

@@ -1725,7 +1719,6 @@ JackAlsaDriver::alsa_driver_write (alsa_driver_t* driver, jack_nframes_t nframes
offset, contiguous)) < 0) {
jack_error ("ALSA: could not complete playback of %"
PRIu32 " frames: error = %d", contiguous, err);
jack_error ("ALSA: could not complete playback of %d frames: error = %d", contiguous, err);
if (err != EPIPE && err != ESTRPIPE)
return -1;
}
@@ -1750,11 +1743,6 @@ JackAlsaDriver::alsa_driver_delete (alsa_driver_t *driver)
}
jack_slist_free (driver->clock_sync_listeners);
if (driver->ctl_handle) {
snd_ctl_close (driver->ctl_handle);
driver->ctl_handle = 0;
}

if (driver->ctl_handle) {
snd_ctl_close (driver->ctl_handle);
driver->ctl_handle = 0;
@@ -2343,7 +2331,7 @@ int JackAlsaDriver::Read()
}

if (nframes != fEngineControl->fBufferSize)
jack_log("JackAlsaDriver::Read error nframes = %ld", nframes);
jack_log("JackAlsaDriver::Read warning nframes = %ld", nframes);
// Has to be done before read
JackDriver::CycleIncTime();
@@ -2631,352 +2619,352 @@ get_dither_constraint()
return constraint_ptr;
}

static int
dither_opt (char c, DitherAlgorithm* dither)
{
switch (c) {
case '-':
case 'n':
*dither = None;
break;

case 'r':
*dither = Rectangular;
break;

case 's':
*dither = Shaped;
break;

case 't':
*dither = Triangular;
break;

default:
fprintf (stderr, "ALSA driver: illegal dithering mode %c\n", c);
return -1;
}
return 0;
static int
dither_opt (char c, DitherAlgorithm* dither)
{
switch (c) {
case '-':
case 'n':
*dither = None;
break;

case 'r':
*dither = Rectangular;
break;

case 's':
*dither = Shaped;
break;

case 't':
*dither = Triangular;
break;

default:
fprintf (stderr, "ALSA driver: illegal dithering mode %c\n", c);
return -1;
}
return 0;
}

SERVER_EXPORT const jack_driver_desc_t* driver_get_descriptor ()
{
jack_driver_desc_t * desc;
jack_driver_param_desc_t * params;
unsigned int i;

desc = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t));
strcpy(desc->name, "alsa"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1
strcpy(desc->desc, "Linux ALSA API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1
desc->nparams = 18;
params = (jack_driver_param_desc_t*)calloc (desc->nparams, sizeof (jack_driver_param_desc_t));

i = 0;
strcpy (params[i].name, "capture");
params[i].character = 'C';
params[i].type = JackDriverParamString;
strcpy (params[i].value.str, "none");
strcpy (params[i].short_desc,
"Provide capture ports. Optionally set device");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "playback");
params[i].character = 'P';
params[i].type = JackDriverParamString;
strcpy (params[i].value.str, "none");
strcpy (params[i].short_desc,
"Provide playback ports. Optionally set device");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "device");
params[i].character = 'd';
params[i].type = JackDriverParamString;
strcpy (params[i].value.str, "hw:0");
strcpy (params[i].short_desc, "ALSA device name");
strcpy (params[i].long_desc, params[i].short_desc);
params[i].constraint = enum_alsa_devices();

i++;
strcpy (params[i].name, "rate");
params[i].character = 'r';
params[i].type = JackDriverParamUInt;
params[i].value.ui = 48000U;
strcpy (params[i].short_desc, "Sample rate");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "period");
params[i].character = 'p';
params[i].type = JackDriverParamUInt;
params[i].value.ui = 1024U;
strcpy (params[i].short_desc, "Frames per period");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "nperiods");
params[i].character = 'n';
params[i].type = JackDriverParamUInt;
params[i].value.ui = 2U;
strcpy (params[i].short_desc, "Number of periods of playback latency");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "hwmon");
params[i].character = 'H';
params[i].type = JackDriverParamBool;
params[i].value.i = 0;
strcpy (params[i].short_desc, "Hardware monitoring, if available");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "hwmeter");
params[i].character = 'M';
params[i].type = JackDriverParamBool;
params[i].value.i = 0;
strcpy (params[i].short_desc, "Hardware metering, if available");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "duplex");
params[i].character = 'D';
params[i].type = JackDriverParamBool;
params[i].value.i = 1;
strcpy (params[i].short_desc,
"Provide both capture and playback ports");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "softmode");
params[i].character = 's';
params[i].type = JackDriverParamBool;
params[i].value.i = 0;
strcpy (params[i].short_desc, "Soft-mode, no xrun handling");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "monitor");
params[i].character = 'm';
params[i].type = JackDriverParamBool;
params[i].value.i = 0;
strcpy (params[i].short_desc, "Provide monitor ports for the output");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "dither");
params[i].character = 'z';
params[i].type = JackDriverParamChar;
params[i].value.c = 'n';
strcpy (params[i].short_desc, "Dithering mode");
strcpy (params[i].long_desc,
"Dithering mode:\n"
" n - none\n"
" r - rectangular\n"
" s - shaped\n"
" t - triangular");
params[i].constraint = get_dither_constraint();

i++;
strcpy (params[i].name, "inchannels");
params[i].character = 'i';
params[i].type = JackDriverParamUInt;
params[i].value.i = 0;
strcpy (params[i].short_desc,
"Number of capture channels (defaults to hardware max)");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "outchannels");
params[i].character = 'o';
params[i].type = JackDriverParamUInt;
params[i].value.i = 0;
strcpy (params[i].short_desc,
"Number of playback channels (defaults to hardware max)");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "shorts");
params[i].character = 'S';
params[i].type = JackDriverParamBool;
params[i].value.i = FALSE;
strcpy (params[i].short_desc, "Try 16-bit samples before 32-bit");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "input-latency");
params[i].character = 'I';
params[i].type = JackDriverParamUInt;
params[i].value.i = 0;
strcpy (params[i].short_desc, "Extra input latency (frames)");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "output-latency");
params[i].character = 'O';
params[i].type = JackDriverParamUInt;
params[i].value.i = 0;
strcpy (params[i].short_desc, "Extra output latency (frames)");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "midi-driver");
params[i].character = 'X';
params[i].type = JackDriverParamString;
strcpy (params[i].value.str, "none");
strcpy (params[i].short_desc, "ALSA MIDI driver name (seq|raw)");
strcpy (params[i].long_desc,
"ALSA MIDI driver:\n"
" none - no MIDI driver\n"
" seq - ALSA Sequencer driver\n"
" raw - ALSA RawMIDI driver\n");
params[i].constraint = get_midi_driver_constraint();

desc->params = params;
return desc;
}

SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params)
{
jack_nframes_t srate = 48000;
jack_nframes_t frames_per_interrupt = 1024;
unsigned long user_nperiods = 2;
const char *playback_pcm_name = "hw:0";
const char *capture_pcm_name = "hw:0";
int hw_monitoring = FALSE;
int hw_metering = FALSE;
int capture = FALSE;
int playback = FALSE;
int soft_mode = FALSE;
int monitor = FALSE;
DitherAlgorithm dither = None;
int user_capture_nchnls = 0;
int user_playback_nchnls = 0;
int shorts_first = FALSE;
jack_nframes_t systemic_input_latency = 0;
jack_nframes_t systemic_output_latency = 0;
const JSList * node;
const jack_driver_param_t * param;
const char *midi_driver = "none";

for (node = params; node; node = jack_slist_next (node)) {
param = (const jack_driver_param_t *) node->data;

switch (param->character) {

case 'C':
capture = TRUE;
if (strcmp (param->value.str, "none") != 0) {
capture_pcm_name = strdup (param->value.str);
jack_log("capture device %s", capture_pcm_name);
}
break;
SERVER_EXPORT const jack_driver_desc_t* driver_get_descriptor ()
{
jack_driver_desc_t * desc;
jack_driver_param_desc_t * params;
unsigned int i;

case 'P':
playback = TRUE;
if (strcmp (param->value.str, "none") != 0) {
playback_pcm_name = strdup (param->value.str);
jack_log("playback device %s", playback_pcm_name);
}
break;
desc = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t));
strcpy(desc->name, "alsa"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1
strcpy(desc->desc, "Linux ALSA API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1
desc->nparams = 18;
params = (jack_driver_param_desc_t*)calloc (desc->nparams, sizeof (jack_driver_param_desc_t));

i = 0;
strcpy (params[i].name, "capture");
params[i].character = 'C';
params[i].type = JackDriverParamString;
strcpy (params[i].value.str, "none");
strcpy (params[i].short_desc,
"Provide capture ports. Optionally set device");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "playback");
params[i].character = 'P';
params[i].type = JackDriverParamString;
strcpy (params[i].value.str, "none");
strcpy (params[i].short_desc,
"Provide playback ports. Optionally set device");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "device");
params[i].character = 'd';
params[i].type = JackDriverParamString;
strcpy (params[i].value.str, "hw:0");
strcpy (params[i].short_desc, "ALSA device name");
strcpy (params[i].long_desc, params[i].short_desc);
params[i].constraint = enum_alsa_devices();

i++;
strcpy (params[i].name, "rate");
params[i].character = 'r';
params[i].type = JackDriverParamUInt;
params[i].value.ui = 48000U;
strcpy (params[i].short_desc, "Sample rate");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "period");
params[i].character = 'p';
params[i].type = JackDriverParamUInt;
params[i].value.ui = 1024U;
strcpy (params[i].short_desc, "Frames per period");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "nperiods");
params[i].character = 'n';
params[i].type = JackDriverParamUInt;
params[i].value.ui = 2U;
strcpy (params[i].short_desc, "Number of periods of playback latency");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "hwmon");
params[i].character = 'H';
params[i].type = JackDriverParamBool;
params[i].value.i = 0;
strcpy (params[i].short_desc, "Hardware monitoring, if available");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "hwmeter");
params[i].character = 'M';
params[i].type = JackDriverParamBool;
params[i].value.i = 0;
strcpy (params[i].short_desc, "Hardware metering, if available");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "duplex");
params[i].character = 'D';
params[i].type = JackDriverParamBool;
params[i].value.i = 1;
strcpy (params[i].short_desc,
"Provide both capture and playback ports");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "softmode");
params[i].character = 's';
params[i].type = JackDriverParamBool;
params[i].value.i = 0;
strcpy (params[i].short_desc, "Soft-mode, no xrun handling");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "monitor");
params[i].character = 'm';
params[i].type = JackDriverParamBool;
params[i].value.i = 0;
strcpy (params[i].short_desc, "Provide monitor ports for the output");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "dither");
params[i].character = 'z';
params[i].type = JackDriverParamChar;
params[i].value.c = 'n';
strcpy (params[i].short_desc, "Dithering mode");
strcpy (params[i].long_desc,
"Dithering mode:\n"
" n - none\n"
" r - rectangular\n"
" s - shaped\n"
" t - triangular");
params[i].constraint = get_dither_constraint();

i++;
strcpy (params[i].name, "inchannels");
params[i].character = 'i';
params[i].type = JackDriverParamUInt;
params[i].value.i = 0;
strcpy (params[i].short_desc,
"Number of capture channels (defaults to hardware max)");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "outchannels");
params[i].character = 'o';
params[i].type = JackDriverParamUInt;
params[i].value.i = 0;
strcpy (params[i].short_desc,
"Number of playback channels (defaults to hardware max)");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "shorts");
params[i].character = 'S';
params[i].type = JackDriverParamBool;
params[i].value.i = FALSE;
strcpy (params[i].short_desc, "Try 16-bit samples before 32-bit");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "input-latency");
params[i].character = 'I';
params[i].type = JackDriverParamUInt;
params[i].value.i = 0;
strcpy (params[i].short_desc, "Extra input latency (frames)");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "output-latency");
params[i].character = 'O';
params[i].type = JackDriverParamUInt;
params[i].value.i = 0;
strcpy (params[i].short_desc, "Extra output latency (frames)");
strcpy (params[i].long_desc, params[i].short_desc);

i++;
strcpy (params[i].name, "midi-driver");
params[i].character = 'X';
params[i].type = JackDriverParamString;
strcpy (params[i].value.str, "none");
strcpy (params[i].short_desc, "ALSA MIDI driver name (seq|raw)");
strcpy (params[i].long_desc,
"ALSA MIDI driver:\n"
" none - no MIDI driver\n"
" seq - ALSA Sequencer driver\n"
" raw - ALSA RawMIDI driver\n");
params[i].constraint = get_midi_driver_constraint();

desc->params = params;
return desc;
}

case 'D':
playback = TRUE;
capture = TRUE;
break;
SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params)
{
jack_nframes_t srate = 48000;
jack_nframes_t frames_per_interrupt = 1024;
unsigned long user_nperiods = 2;
const char *playback_pcm_name = "hw:0";
const char *capture_pcm_name = "hw:0";
int hw_monitoring = FALSE;
int hw_metering = FALSE;
int capture = FALSE;
int playback = FALSE;
int soft_mode = FALSE;
int monitor = FALSE;
DitherAlgorithm dither = None;
int user_capture_nchnls = 0;
int user_playback_nchnls = 0;
int shorts_first = FALSE;
jack_nframes_t systemic_input_latency = 0;
jack_nframes_t systemic_output_latency = 0;
const JSList * node;
const jack_driver_param_t * param;
const char *midi_driver = "none";

for (node = params; node; node = jack_slist_next (node)) {
param = (const jack_driver_param_t *) node->data;

switch (param->character) {

case 'C':
capture = TRUE;
if (strcmp (param->value.str, "none") != 0) {
capture_pcm_name = strdup (param->value.str);
jack_log("capture device %s", capture_pcm_name);
}
break;

case 'd':
case 'P':
playback = TRUE;
if (strcmp (param->value.str, "none") != 0) {
playback_pcm_name = strdup (param->value.str);
capture_pcm_name = strdup (param->value.str);
jack_log("playback device %s", playback_pcm_name);
jack_log("capture device %s", capture_pcm_name);
break;
}
break;

case 'H':
hw_monitoring = param->value.i;
break;
case 'D':
playback = TRUE;
capture = TRUE;
break;

case 'm':
monitor = param->value.i;
break;
case 'd':
playback_pcm_name = strdup (param->value.str);
capture_pcm_name = strdup (param->value.str);
jack_log("playback device %s", playback_pcm_name);
jack_log("capture device %s", capture_pcm_name);
break;

case 'M':
hw_metering = param->value.i;
break;
case 'H':
hw_monitoring = param->value.i;
break;

case 'r':
srate = param->value.ui;
jack_log("apparent rate = %d", srate);
break;
case 'm':
monitor = param->value.i;
break;

case 'p':
frames_per_interrupt = param->value.ui;
jack_log("frames per period = %d", frames_per_interrupt);
break;
case 'M':
hw_metering = param->value.i;
break;

case 'n':
user_nperiods = param->value.ui;
if (user_nperiods < 2) /* enforce minimum value */
user_nperiods = 2;
break;
case 'r':
srate = param->value.ui;
jack_log("apparent rate = %d", srate);
break;

case 's':
soft_mode = param->value.i;
break;
case 'p':
frames_per_interrupt = param->value.ui;
jack_log("frames per period = %d", frames_per_interrupt);
break;

case 'z':
if (dither_opt (param->value.c, &dither)) {
return NULL;
}
break;
case 'n':
user_nperiods = param->value.ui;
if (user_nperiods < 2) /* enforce minimum value */
user_nperiods = 2;
break;

case 'i':
user_capture_nchnls = param->value.ui;
break;
case 's':
soft_mode = param->value.i;
break;

case 'o':
user_playback_nchnls = param->value.ui;
break;
case 'z':
if (dither_opt (param->value.c, &dither)) {
return NULL;
}
break;

case 'S':
shorts_first = param->value.i;
break;
case 'i':
user_capture_nchnls = param->value.ui;
break;

case 'I':
systemic_input_latency = param->value.ui;
break;
case 'o':
user_playback_nchnls = param->value.ui;
break;

case 'O':
systemic_output_latency = param->value.ui;
break;
case 'S':
shorts_first = param->value.i;
break;

case 'X':
midi_driver = strdup(param->value.str);
break;
}
}
case 'I':
systemic_input_latency = param->value.ui;
break;

/* duplex is the default */
if (!capture && !playback) {
capture = TRUE;
playback = TRUE;
}
case 'O':
systemic_output_latency = param->value.ui;
break;

Jack::JackAlsaDriver* alsa_driver = new Jack::JackAlsaDriver("system", "alsa_pcm", engine, table);
Jack::JackDriverClientInterface* threaded_driver = new Jack::JackThreadedDriver(alsa_driver);
// Special open for ALSA driver...
if (alsa_driver->Open(frames_per_interrupt, user_nperiods, srate, hw_monitoring, hw_metering, capture, playback, dither, soft_mode, monitor,
user_capture_nchnls, user_playback_nchnls, shorts_first, capture_pcm_name, playback_pcm_name,
systemic_input_latency, systemic_output_latency, midi_driver) == 0) {
return threaded_driver;
} else {
delete threaded_driver; // Delete the decorated driver
return NULL;
case 'X':
midi_driver = strdup(param->value.str);
break;
}
}

/* duplex is the default */
if (!capture && !playback) {
capture = TRUE;
playback = TRUE;
}

Jack::JackAlsaDriver* alsa_driver = new Jack::JackAlsaDriver("system", "alsa_pcm", engine, table);
Jack::JackDriverClientInterface* threaded_driver = new Jack::JackThreadedDriver(alsa_driver);
// Special open for ALSA driver...
if (alsa_driver->Open(frames_per_interrupt, user_nperiods, srate, hw_monitoring, hw_metering, capture, playback, dither, soft_mode, monitor,
user_capture_nchnls, user_playback_nchnls, shorts_first, capture_pcm_name, playback_pcm_name,
systemic_input_latency, systemic_output_latency, midi_driver) == 0) {
return threaded_driver;
} else {
delete threaded_driver; // Delete the decorated driver
return NULL;
}
}

#ifdef __cplusplus
}
#endif


+ 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__ */

+ 13
- 4
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);
@@ -681,7 +682,7 @@ int JackFFADODriver::Read()
}

if (nframes != fEngineControl->fBufferSize)
jack_log("JackFFADODriver::Read nframes = %ld", nframes);
jack_log("JackFFADODriver::Read warning nframes = %ld", nframes);
// Has to be done before read
JackDriver::CycleIncTime();
@@ -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;


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

@@ -872,7 +872,7 @@ int JackFreebobDriver::Read()
}

if (nframes != fEngineControl->fBufferSize)
jack_log("JackFreebobDriver::Read nframes = %ld", nframes);
jack_log("JackFreebobDriver::Read warning nframes = %ld", nframes);

// Has to be done before read
JackDriver::CycleIncTime();


+ 2
- 2
macosx/Jack-Info.plist View File

@@ -7,7 +7,7 @@
<key>CFBundleExecutable</key>
<string>Jackservermp</string>
<key>CFBundleGetInfoString</key>
<string>Jackdmp 1.9.6, @03-10 Paul Davis, Grame</string>
<string>Jackdmp 1.9.7, @03-10 Paul Davis, Grame</string>
<key>CFBundleIdentifier</key>
<string>com.grame.Jackmp</string>
<key>CFBundleInfoDictionaryVersion</key>
@@ -19,6 +19,6 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.9.6</string>
<string>1.9.7</string>
</dict>
</plist>

+ 19
- 61
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,
@@ -1377,7 +1366,7 @@ int JackCoreAudioDriver::SetupBuffers(int inchannels)
// Prepare buffers
fJackInputData = (AudioBufferList*)malloc(sizeof(UInt32) + inchannels * sizeof(AudioBuffer));
fJackInputData->mNumberBuffers = inchannels;
for (int i = 0; i < fCaptureChannels; i++) {
for (int i = 0; i < inchannels; i++) {
fJackInputData->mBuffers[i].mNumberChannels = 1;
fJackInputData->mBuffers[i].mDataByteSize = fEngineControl->fBufferSize * sizeof(float);
}
@@ -1489,11 +1478,6 @@ int JackCoreAudioDriver::Open(jack_nframes_t buffer_size,
char playback_driver_name[256];

// Keep initial state
fCapturing = capturing;
fPlaying = playing;
fInChannels = inchannels;
fOutChannels = outchannels;
fMonitor = monitor;
strcpy(fCaptureUID, capture_driver_uid);
strcpy(fPlaybackUID, playback_driver_uid);
fCaptureLatency = capture_latency;
@@ -1682,27 +1666,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 +1691,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;
}

@@ -1983,7 +1941,7 @@ extern "C"
bool capture = false;
bool playback = false;
int chan_in = -1; // Default: if not explicitely set, then max possible will be used...
int chan_out = -1; // Default: ifà not explicitely set, then max possible will be used...
int chan_out = -1; // Default: if not explicitely set, then max possible will be used...
bool monitor = false;
const char* capture_driver_uid = "";
const char* playback_driver_uid = "";


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

@@ -68,17 +68,9 @@ class JackCoreAudioDriver : public JackAudioDriver
bool fState;
bool fHogged;

// Initial state
bool fCapturing;
bool fPlaying;

int fInChannels;
int fOutChannels;

char fCaptureUID[256];
char fPlaybackUID[256];

bool fMonitor;
float fIOUsage;
float fComputationGrain;
bool fClockDriftCompensate;
@@ -96,14 +88,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...
*


+ 4
- 4
windows/JackWinNamedPipeClientChannel.cpp View File

@@ -48,7 +48,7 @@ int JackWinNamedPipeClientChannel::ServerCheck(const char* server_name)
}
}

int JackWinNamedPipeClientChannel::Open(const char* server_name, const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status)
int JackWinNamedPipeClientChannel::Open(const char* server_name, const char* name, int uuid, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status)
{
int result = 0;
jack_log("JackWinNamedPipeClientChannel::Open name = %s", name);
@@ -67,7 +67,7 @@ int JackWinNamedPipeClientChannel::Open(const char* server_name, const char* nam
}

// Check name in server
ClientCheck(name, name_res, JACK_PROTOCOL_VERSION, (int)options, (int*)status, &result);
ClientCheck(name, uuid, name_res, JACK_PROTOCOL_VERSION, (int)options, (int*)status, &result);
if (result < 0) {
jack_error("Client name = %s conflits with another running client", name);
goto error;
@@ -142,9 +142,9 @@ void JackWinNamedPipeClientChannel::ServerAsyncCall(JackRequest* req, JackResult
}
}

void JackWinNamedPipeClientChannel::ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result)
void JackWinNamedPipeClientChannel::ClientCheck(const char* name, int uuid, char* name_res, int protocol, int options, int* status, int* result)
{
JackClientCheckRequest req(name, protocol, options);
JackClientCheckRequest req(name, protocol, options, uuid);
JackClientCheckResult res;
ServerSyncCall(&req, &res, result);
*status = res.fStatus;


+ 2
- 2
windows/JackWinNamedPipeClientChannel.h View File

@@ -51,7 +51,7 @@ class JackWinNamedPipeClientChannel : public detail::JackClientChannelInterface,
JackWinNamedPipeClientChannel();
virtual ~JackWinNamedPipeClientChannel();

int Open(const char* server_name, const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status);
int Open(const char* server_name, const char* name, int uuid, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status);
void Close();

int Start();
@@ -59,7 +59,7 @@ class JackWinNamedPipeClientChannel : public detail::JackClientChannelInterface,

int ServerCheck(const char* server_name);

void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result);
void ClientCheck(const char* name, int uuid, char* name_res, int protocol, int options, int* status, int* result);
void ClientOpen(const char* name, int pid, int uuid, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, int* result)
{}


+ 1
- 1
windows/JackWinNamedPipeServerChannel.cpp View File

@@ -115,7 +115,7 @@ bool JackClientPipeThread::HandleRequest()
JackClientCheckRequest req;
JackClientCheckResult res;
if (req.Read(fPipe) == 0)
res.fResult = fServer->GetEngine()->ClientCheck(req.fName, res.fName, req.fProtocol, req.fOptions, &res.fStatus);
res.fResult = fServer->GetEngine()->ClientCheck(req.fName, req.fUUID, res.fName, req.fProtocol, req.fOptions, &res.fStatus);
res.Write(fPipe);
break;
}


BIN
windows/Setup/JackRouter.dll View File


+ 2
- 2
windows/Setup/jack.ci View File

@@ -1,9 +1,9 @@
<*project
version = 4 civer = "Free v4.14.5" winver = "2.6/5.1.2600" >
<output> .</>
<exename> Jack_v1.9.6_setup.exe</>
<exename> Jack_v1.9.7_setup.exe</>
<digitsign> </>
<appname> Jack v1.9.6</>
<appname> Jack v1.9.7</>
<password> </>
<addlang> </>
<icon> Default - 2</>


+ 98
- 95
windows/jack_dummy.cbp View File

@@ -1,95 +1,98 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="jack_dummy" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\jack\jack_dummy" prefix_auto="1" extension_auto="1" />
<Option object_output="Release\" />
<Option type="3" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add option="-DBUILD_DLL" />
<Add option="-DSERVER_SIDE" />
<Add directory="..\windows" />
<Add directory="..\common\jack" />
<Add directory="..\common" />
</Compiler>
<Linker>
<Add directory="Release\bin" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\jack\jack_dummy" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug\" />
<Option type="3" />
<Option compiler="gcc" />
<Compiler>
<Add option="-Wall" />
<Add option="-g" />
<Add option="-DBUILD_DLL" />
<Add option="-DSERVER_SIDE" />
<Add directory="..\windows" />
<Add directory="..\common\jack" />
<Add directory="..\common" />
</Compiler>
<Linker>
<Add directory="Debug\bin" />
</Linker>
</Target>
<Target title="Win32 Profiling">
<Option output="Release\bin\jack\jack_dummy" prefix_auto="1" extension_auto="1" />
<Option object_output="Release\" />
<Option type="3" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add option="-DBUILD_DLL" />
<Add option="-DJACK_MONITOR" />
<Add option="-DSERVER_SIDE" />
<Add directory="..\windows" />
<Add directory="..\common\jack" />
<Add directory="..\common" />
</Compiler>
<Linker>
<Add directory="Release\bin" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackserver" />
</Linker>
<Unit filename="..\common\JackDummyDriver.cpp" />
<Extensions>
<AutoVersioning>
<Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" />
<Settings autoincrement="1" date_declarations="1" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" />
<Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" />
</AutoVersioning>
<code_completion />
<envvars />
<debugger />
</Extensions>
</Project>
</CodeBlocks_project_file>
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="jack_dummy" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\jack\jack_dummy" prefix_auto="1" extension_auto="1" />
<Option object_output="Release\" />
<Option type="3" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add option="-DBUILD_DLL" />
<Add option="-DSERVER_SIDE" />
<Add directory="..\windows" />
<Add directory="..\common\jack" />
<Add directory="..\common" />
</Compiler>
<Linker>
<Add directory="Release\bin" />
</Linker>
</Target>
<Target title="Win32 Debug">
<Option output="Debug\bin\jack\jack_dummy" prefix_auto="1" extension_auto="1" />
<Option object_output="Debug\" />
<Option type="3" />
<Option compiler="gcc" />
<Compiler>
<Add option="-Wall" />
<Add option="-g" />
<Add option="-DBUILD_DLL" />
<Add option="-DSERVER_SIDE" />
<Add directory="..\windows" />
<Add directory="..\common\jack" />
<Add directory="..\common" />
</Compiler>
<Linker>
<Add directory="Debug\bin" />
</Linker>
</Target>
<Target title="Win32 Profiling">
<Option output="Release\bin\jack\jack_dummy" prefix_auto="1" extension_auto="1" />
<Option object_output="Release\" />
<Option type="3" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-Wall" />
<Add option="-DBUILD_DLL" />
<Add option="-DJACK_MONITOR" />
<Add option="-DSERVER_SIDE" />
<Add directory="..\windows" />
<Add directory="..\common\jack" />
<Add directory="..\common" />
</Compiler>
<Linker>
<Add directory="Release\bin" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
</Compiler>
<Linker>
<Add library="kernel32" />
<Add library="user32" />
<Add library="gdi32" />
<Add library="winspool" />
<Add library="comdlg32" />
<Add library="advapi32" />
<Add library="shell32" />
<Add library="ole32" />
<Add library="oleaut32" />
<Add library="uuid" />
<Add library="odbc32" />
<Add library="odbccp32" />
<Add library="libjackserver" />
</Linker>
<Unit filename="jackdummydriver.rc">
<Option compilerVar="WINDRES" />
</Unit>
<Unit filename="..\common\JackDummyDriver.cpp" />
<Extensions>
<AutoVersioning>
<Scheme minor_max="10" build_max="0" rev_max="0" rev_rand_max="10" build_times_to_increment_minor="100" />
<Settings autoincrement="1" date_declarations="1" do_auto_increment="0" ask_to_increment="0" language="C++" svn="0" svn_directory="" header_path="version.h" />
<Changes_Log show_changes_editor="0" app_title="released version %M.%m.%b of %p" changeslog_path="ChangesLog.txt" />
</AutoVersioning>
<code_completion />
<envvars />
<debugger />
</Extensions>
</Project>
</CodeBlocks_project_file>

+ 3
- 0
windows/jack_loopback.cbp View File

@@ -80,6 +80,9 @@
<Add library="odbccp32" />
<Add library="libjackserver" />
</Linker>
<Unit filename="jackloopbackdriver.rc">
<Option compilerVar="WINDRES" />
</Unit>
<Unit filename="..\common\JackLoopbackDriver.cpp" />
<Extensions>
<AutoVersioning>


+ 4
- 4
windows/jackaudioadapter.rc View File

@@ -11,8 +11,8 @@
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,6,0
PRODUCTVERSION 1,9,6,0
FILEVERSION 1,9,7,0
PRODUCTVERSION 1,9,7,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
@@ -23,14 +23,14 @@ BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp Audio Adapter for Windows\0"
VALUE "FileVersion", "1, 9, 6, 0\0"
VALUE "FileVersion", "1, 9, 7, 0\0"
VALUE "InternalName", "audioadapter\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "audioadapter.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "audioadapter\0"
VALUE "ProductVersion", "1, 9, 6, 0\0"
VALUE "ProductVersion", "1, 9, 7, 0\0"
VALUE "SpecialBuild", "\0"
END
END


+ 4
- 4
windows/jackd.rc View File

@@ -11,8 +11,8 @@
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,6,0
PRODUCTVERSION 1,9,6,0
FILEVERSION 1,9,7,0
PRODUCTVERSION 1,9,7,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_APP
BEGIN
@@ -23,14 +23,14 @@ BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jack server for Windows\0"
VALUE "FileVersion", "1, 9, 6, 0\0"
VALUE "FileVersion", "1, 9, 7, 0\0"
VALUE "InternalName", "jackd\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "jackd.exe\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "jackd\0"
VALUE "ProductVersion", "1, 9, 6, 0\0"
VALUE "ProductVersion", "1, 9, 7, 0\0"
VALUE "SpecialBuild", "\0"
END
END


+ 41
- 0
windows/jackdummydriver.rc View File

@@ -0,0 +1,41 @@
// Generated by ResEdit 1.4.3
// Copyright (C) 2006-2008
// http://www.resedit.net
#include "resource.h"
#include "afxres.h"
//
// Version Information resources
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,7,0
PRODUCTVERSION 1,9,7,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040c04b0"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp Dummy Driver for Windows\0"
VALUE "FileVersion", "1, 9, 7, 0\0"
VALUE "InternalName", "jack_dummy\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "jack_dummy.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "jack_dummy\0"
VALUE "ProductVersion", "1, 9, 7, 0\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1036, 1200
END
END

+ 41
- 0
windows/jackloopbackdriver.rc View File

@@ -0,0 +1,41 @@
// Generated by ResEdit 1.4.3
// Copyright (C) 2006-2008
// http://www.resedit.net
#include "resource.h"
#include "afxres.h"
//
// Version Information resources
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,7,0
PRODUCTVERSION 1,9,7,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040c04b0"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp Loopback Driver for Windows\0"
VALUE "FileVersion", "1, 9, 7, 0\0"
VALUE "InternalName", "jack_loopback\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "jack_loopback.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "jack_loopback\0"
VALUE "ProductVersion", "1, 9, 7, 0\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1036, 1200
END
END

+ 4
- 4
windows/jacknetadapter.rc View File

@@ -11,8 +11,8 @@
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,6,0
PRODUCTVERSION 1,9,6,0
FILEVERSION 1,9,7,0
PRODUCTVERSION 1,9,7,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
@@ -23,14 +23,14 @@ BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp Net Adapter for Windows\0"
VALUE "FileVersion", "1, 9, 6, 0\0"
VALUE "FileVersion", "1, 9, 7, 0\0"
VALUE "InternalName", "netadapter\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "netadapter.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "netadapter\0"
VALUE "ProductVersion", "1, 9, 6, 0\0"
VALUE "ProductVersion", "1, 9, 7, 0\0"
VALUE "SpecialBuild", "\0"
END
END


+ 4
- 4
windows/jacknetdriver.rc View File

@@ -11,8 +11,8 @@
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,6,0
PRODUCTVERSION 1,9,6,0
FILEVERSION 1,9,7,0
PRODUCTVERSION 1,9,7,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
@@ -23,14 +23,14 @@ BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp Net Driver for Windows\0"
VALUE "FileVersion", "1, 9, 6, 0\0"
VALUE "FileVersion", "1, 9, 7, 0\0"
VALUE "InternalName", "jack_netdriver\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "jack_netdriver.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "jack_netdriver\0"
VALUE "ProductVersion", "1, 9, 6, 0\0"
VALUE "ProductVersion", "1, 9, 7, 0\0"
VALUE "SpecialBuild", "\0"
END
END


+ 4
- 4
windows/jacknetmanager.rc View File

@@ -11,8 +11,8 @@
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,6,0
PRODUCTVERSION 1,9,6,0
FILEVERSION 1,9,7,0
PRODUCTVERSION 1,9,7,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
@@ -23,14 +23,14 @@ BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp Net Manager for Windows\0"
VALUE "FileVersion", "1, 9, 6, 0\0"
VALUE "FileVersion", "1, 9, 7, 0\0"
VALUE "InternalName", "netmanager\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "netmanager.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "netmanager\0"
VALUE "ProductVersion", "1, 9, 6, 0\0"
VALUE "ProductVersion", "1, 9, 7, 0\0"
VALUE "SpecialBuild", "\0"
END
END


+ 41
- 41
windows/jacknetonedriver.rc View File

@@ -1,41 +1,41 @@
// Generated by ResEdit 1.4.3
// Copyright (C) 2006-2008
// http://www.resedit.net
#include "resource.h"
#include "afxres.h"
//
// Version Information resources
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,5,0
PRODUCTVERSION 1,9,5,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040c04b0"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp NetOne Driver for Windows\0"
VALUE "FileVersion", "1, 9, 5, 0\0"
VALUE "InternalName", "jack_netonedriver\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "jack_netonedriver.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "jack_netonedriver\0"
VALUE "ProductVersion", "1, 9, 5, 0\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1036, 1200
END
END
// Generated by ResEdit 1.4.3
// Copyright (C) 2006-2008
// http://www.resedit.net
#include "resource.h"
#include "afxres.h"
//
// Version Information resources
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,7,0
PRODUCTVERSION 1,9,7,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040c04b0"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp NetOne Driver for Windows\0"
VALUE "FileVersion", "1, 9, 7, 0\0"
VALUE "InternalName", "jack_netonedriver\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "jack_netonedriver.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "jack_netonedriver\0"
VALUE "ProductVersion", "1, 9, 7, 0\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1036, 1200
END
END

+ 4
- 4
windows/jackportaudio.rc View File

@@ -11,8 +11,8 @@
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,6,0
PRODUCTVERSION 1,9,6,0
FILEVERSION 1,9,7,0
PRODUCTVERSION 1,9,7,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
@@ -23,14 +23,14 @@ BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp PortAudio Driver for Windows\0"
VALUE "FileVersion", "1, 9, 6, 0\0"
VALUE "FileVersion", "1, 9, 7, 0\0"
VALUE "InternalName", "jack_portaudio\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "jack_portaudio.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "jack_portaudio\0"
VALUE "ProductVersion", "1, 9, 6, 0\0"
VALUE "ProductVersion", "1, 9, 7, 0\0"
VALUE "SpecialBuild", "\0"
END
END


+ 5
- 5
windows/jackwinmme.rc View File

@@ -11,8 +11,8 @@
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,6,0
PRODUCTVERSION 1,9,6,0
FILEVERSION 1,9,7,0
PRODUCTVERSION 1,9,7,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
@@ -22,15 +22,15 @@ BEGIN
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp WinMMEo Driver for Windows\0"
VALUE "FileVersion", "1, 9, 6, 0\0"
VALUE "FileDescription", "Jackmp WinMME Driver for Windows\0"
VALUE "FileVersion", "1, 9, 7, 0\0"
VALUE "InternalName", "jack_portaudio\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "jack_winmme.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "jack_winmme\0"
VALUE "ProductVersion", "1, 9, 6, 0\0"
VALUE "ProductVersion", "1, 9, 7, 0\0"
VALUE "SpecialBuild", "\0"
END
END


+ 4
- 4
windows/libjack.rc View File

@@ -11,8 +11,8 @@
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,6,0
PRODUCTVERSION 1,9,6,0
FILEVERSION 1,9,7,0
PRODUCTVERSION 1,9,7,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
@@ -23,14 +23,14 @@ BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jack client library for Windows\0"
VALUE "FileVersion", "1, 9, 6, 0\0"
VALUE "FileVersion", "1, 9, 7, 0\0"
VALUE "InternalName", "libjack\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "libjack.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "libjack\0"
VALUE "ProductVersion", "1, 9, 6, 0\0"
VALUE "ProductVersion", "1, 9, 7, 0\0"
VALUE "SpecialBuild", "\0"
END
END


+ 4
- 4
windows/libjackserver.rc View File

@@ -11,8 +11,8 @@
//
LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT
1 VERSIONINFO
FILEVERSION 1,9,6,0
PRODUCTVERSION 1,9,6,0
FILEVERSION 1,9,7,0
PRODUCTVERSION 1,9,7,0
FILEOS VOS_UNKNOWN
FILETYPE VFT_DLL
BEGIN
@@ -23,14 +23,14 @@ BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jack server library for Windows\0"
VALUE "FileVersion", "1, 9, 56, 0\0"
VALUE "FileVersion", "1, 9, 7, 0\0"
VALUE "InternalName", "libjackserver\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "libjackserver.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "libjackserver\0"
VALUE "ProductVersion", "1, 9, 6, 0\0"
VALUE "ProductVersion", "1, 9, 7, 0\0"
VALUE "SpecialBuild", "\0"
END
END


+ 4
- 4
windows/resource.rc View File

@@ -14,8 +14,8 @@ LANGUAGE LANG_FRENCH, SUBLANG_FRENCH

#ifndef _MAC
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,9,6,0
PRODUCTVERSION 1,9,6,0
FILEVERSION 1,9,7,0
PRODUCTVERSION 1,9,7,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -33,14 +33,14 @@ BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", "Grame\0"
VALUE "FileDescription", "Jackmp for Windows\0"
VALUE "FileVersion", "1, 9, 6, 0\0"
VALUE "FileVersion", "1, 9, 7, 0\0"
VALUE "InternalName", "libjackmp\0"
VALUE "LegalCopyright", "Copyright Grame © 2006-2010\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "libjackmp.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "libjackmp\0"
VALUE "ProductVersion", "1, 9, 6, 0\0"
VALUE "ProductVersion", "1, 9, 7, 0\0"
VALUE "SpecialBuild", "\0"
END
END


+ 11
- 2
wscript View File

@@ -11,7 +11,7 @@ import Task
import re
import Logs

VERSION='1.9.6'
VERSION='1.9.7'
APPNAME='jack'
JACK_API_VERSION = '0.1.0'

@@ -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['IS_SUN'] = platform == 'sunos'

if conf.env['IS_LINUX']:
@@ -163,6 +164,11 @@ def configure(conf):
else:
conf.env['LIBDIR'] = conf.env['PREFIX'] + '/lib'

if Options.options.libdir:
conf.env['MANDIR'] = conf.env['PREFIX'] + Options.options.mandir
else:
conf.env['MANDIR'] = conf.env['PREFIX'] + '/share/man/man1'

if conf.env['BUILD_DEBUG']:
conf.env.append_unique('CXXFLAGS', '-g')
conf.env.append_unique('CCFLAGS', '-g')
@@ -242,6 +248,8 @@ def configure(conf):
print Logs.colors.NORMAL,
print

conf.env.append_unique('LINKFLAGS', '-lm -lstdc++')

if Options.options.mixed == True:
env_variant2 = conf.env.copy()
conf.set_env_name('lib32', env_variant2)
@@ -267,6 +275,7 @@ def build(bld):
bld.add_subdirs('linux')
bld.add_subdirs('example-clients')
bld.add_subdirs('tests')
bld.add_subdirs('man')
if bld.env['BUILD_JACKDBUS'] == True:
bld.add_subdirs('dbus')


Loading…
Cancel
Save