Browse Source

Merge branch 'master' into no-self-connect

Duplicate 'L:' in getopt string removed.

Conflicts:
	common/Jackdmp.cpp
tags/v1.9.10
Nedko Arnaudov 16 years ago
parent
commit
0c27942a04
68 changed files with 1280 additions and 636 deletions
  1. +43
    -8
      ChangeLog
  2. +1
    -13
      README
  3. +1
    -7
      common/JackAPI.cpp
  4. +1
    -1
      common/JackActivationCount.h
  5. +3
    -2
      common/JackAtomicArrayState.h
  6. +4
    -4
      common/JackAtomicState.h
  7. +17
    -1
      common/JackAudioDriver.cpp
  8. +10
    -0
      common/JackAudioDriver.h
  9. +7
    -5
      common/JackConnectionManager.h
  10. +8
    -3
      common/JackConstants.h
  11. +1
    -1
      common/JackDriver.cpp
  12. +1
    -1
      common/JackDriver.h
  13. +4
    -4
      common/JackFilters.h
  14. +1
    -1
      common/JackFreewheelDriver.cpp
  15. +60
    -3
      common/JackLoopbackDriver.cpp
  16. +3
    -3
      common/JackNetDriver.cpp
  17. +1
    -1
      common/JackNetDriver.h
  18. +1
    -1
      common/JackThreadedDriver.cpp
  19. +0
    -1
      common/JackTransportEngine.h
  20. +1
    -1
      common/JackWaitThreadedDriver.h
  21. +85
    -11
      common/JackWeakAPI.cpp
  22. +33
    -11
      common/Jackdmp.cpp
  23. +2
    -0
      common/jack/control.h
  24. +31
    -21
      common/jack/jack.h
  25. +1
    -1
      common/jack/midiport.h
  26. +2
    -2
      common/jack/types.h
  27. +4
    -1
      common/wscript
  28. +65
    -32
      dbus/audio_reserve.c
  29. +3
    -2
      dbus/audio_reserve.h
  30. +29
    -19
      dbus/controller.c
  31. +9
    -9
      dbus/reserve.c
  32. +15
    -0
      dbus/reserve.h
  33. +4
    -2
      dbus/wscript
  34. +2
    -2
      doxyfile
  35. +7
    -2
      linux/wscript
  36. +2
    -2
      macosx/Jack-Info.plist
  37. +1
    -1
      macosx/JackMachSemaphore.h
  38. +1
    -3
      macosx/JackPlatformPlug_os.h
  39. +422
    -186
      macosx/Jackdmp.xcodeproj/project.pbxproj
  40. +2
    -0
      macosx/install_jackdmp
  41. +2
    -0
      macosx/wscript
  42. +1
    -2
      posix/JackCompilerDeps_os.h
  43. +1
    -1
      posix/JackFifo.h
  44. +1
    -1
      posix/JackPosixSemaphore.h
  45. +147
    -173
      solaris/oss/JackBoomerDriver.cpp
  46. +53
    -27
      solaris/oss/JackBoomerDriver.h
  47. +0
    -7
      solaris/oss/JackOSSAdapter.cpp
  48. +1
    -1
      solaris/oss/JackOSSDriver.cpp
  49. +1
    -0
      solaris/wscript
  50. +1
    -1
      windows/JackWinSemaphore.h
  51. BIN
      windows/Setup/JackRouter.dll
  52. +5
    -1
      windows/Setup/README
  53. +7
    -3
      windows/Setup/jack.ci
  54. +11
    -6
      windows/Setup/src/README
  55. +95
    -0
      windows/jack_loopback.cbp
  56. +4
    -4
      windows/jackaudioadapter.rc
  57. +4
    -4
      windows/jackd.rc
  58. +2
    -1
      windows/jackd.workspace
  59. +4
    -4
      windows/jacknetadapter.rc
  60. +4
    -4
      windows/jacknetdriver.rc
  61. +4
    -4
      windows/jacknetmanager.rc
  62. +4
    -4
      windows/jackportaudio.rc
  63. +4
    -4
      windows/jackwinmme.rc
  64. +4
    -4
      windows/libjack.rc
  65. +4
    -4
      windows/libjackserver.rc
  66. +4
    -4
      windows/resource.rc
  67. +1
    -0
      windows/winmme/JackWinMMEDriver.cpp
  68. +23
    -4
      wscript

+ 43
- 8
ChangeLog View File

@@ -25,25 +25,60 @@ Paul Davis
Jackdmp changes log Jackdmp changes log
--------------------------- ---------------------------


2009-07-07 Stephane Letz <letz@grame.fr>
2009-07-22 Stephane Letz <letz@grame.fr>
* Use __attribute__((__aligned__(32))) instead of __attribute__((__packed__)) for 64/32 mixed mode.
* Version 1.9.4 started.
* Solaris boomer backend now working in capture or playback only mode.
* Fix control.h for proper compilation on Solaris.


2009-07-03 Stephane Letz <letz@grame.fr>
2009-07-17 Stephane Letz <letz@grame.fr>
* Another Tim Bechmann memops.c optimization patch.
* Loopback backend reborn as a dynamically loadable separated backend.
* -L parameter for loopback backend activated again in jackd.


2009-07-17 Stephane Letz <letz@grame.fr>
* Big rewrite of Solaris boomer driver, seems to work in duplex mode at least.
2009-07-16 Stephane Letz <letz@grame.fr>
* In combined --dbus and --classic compilation code, use PulseAudio acquire/release code.
2009-07-15 Stephane Letz <letz@grame.fr>
* Rename JackDriver::Init method to JackDriver::Initialize (to avoid confusion with JackThread::Init method).
* Update Solaris boomer driver.
* Report some cleanup and documentation improvements done on JACK1 timing functions.
2009-07-11 Stephane Letz <letz@grame.fr>
* Raise drivers time out used in synchronous mode.
2009-07-09 Stephane Letz <letz@grame.fr>
* Use __attribute__((__packed__)) again, more fixes for 64/32 mixed mode.
* Torben Hohn changes for 64/32 mixed mode in wscripts.
* Add compile time option for maximum ports per application.
2009-07-07 Stephane Letz <letz@grame.fr>
* Use __attribute__((__aligned__(32))) instead of __attribute__((__packed__)) for 64/32 mixed mode.
2009-07-03 Stephane Letz <letz@grame.fr>
* Another Tim Bechmann memops.c optimization patch.
2009-07-01 Stephane Letz <letz@grame.fr> 2009-07-01 Stephane Letz <letz@grame.fr>
* Tim Bechmann memops.c optimization patch.

* Tim Bechmann memops.c optimization patch.
2009-06-30 Stephane Letz <letz@grame.fr> 2009-06-30 Stephane Letz <letz@grame.fr>
* Tim Bechmann patch : hammerfall, only release monitor thread, if it has been created.
* Tim Bechmann patch : hammerfall, only release monitor thread, if it has been created.
2009-06-19 Stephane Letz <letz@grame.fr> 2009-06-19 Stephane Letz <letz@grame.fr>
* Correct JackTransportEngine::MakeAllLocating, sync callback has to be called in this case also.
* Correct JackTransportEngine::MakeAllLocating, sync callback has to be called in this case also.
* NetJack2 code : better error checkout, method renaming. * NetJack2 code : better error checkout, method renaming.
2009-06-17 Stephane Letz <letz@grame.fr> 2009-06-17 Stephane Letz <letz@grame.fr>


+ 1
- 13
README View File

@@ -42,7 +42,6 @@ Known problems, limitations
- use of POSIX named semaphore is currently unstable and not recommended yet. - use of POSIX named semaphore is currently unstable and not recommended yet.



---------------- ----------------
Solaris version Solaris version
---------------- ----------------
@@ -137,8 +136,6 @@ The binary elements are :
- JackRouter.dll : an ASIO/JACK driver that allows ASIO compatible applications to become JACK clients and access the JACK server. ASIO "jackified" applications appear with their names. Ableton Live, Samplitude, Reason, Arturia applications have been successfully tested. To install it, use "regsvr32 JackRouter.dll" in a terminal (use regsvr32 /u JackRouter.dll to uninstall). [VISTA special note: regsvr32 has to be used with "administrator" priviledges to properly register JackRouter.dll (Start Menu -> All Programs -> Accessories -> Right Click on Command Prompt -> Run As Administrator)]. A JackRouter.ini file is used by the driver to read parameters : an [IO] section allows to setup the number of input/output jack ports for the application and a [AUTO_CONNECT] section allows to setup jack ports autoconnection mode to machine input/output. - JackRouter.dll : an ASIO/JACK driver that allows ASIO compatible applications to become JACK clients and access the JACK server. ASIO "jackified" applications appear with their names. Ableton Live, Samplitude, Reason, Arturia applications have been successfully tested. To install it, use "regsvr32 JackRouter.dll" in a terminal (use regsvr32 /u JackRouter.dll to uninstall). [VISTA special note: regsvr32 has to be used with "administrator" priviledges to properly register JackRouter.dll (Start Menu -> All Programs -> Accessories -> Right Click on Command Prompt -> Run As Administrator)]. A JackRouter.ini file is used by the driver to read parameters : an [IO] section allows to setup the number of input/output jack ports for the application and a [AUTO_CONNECT] section allows to setup jack ports autoconnection mode to machine input/output.
All dll are compiled in "release" mode. The "Debug" folder contains debug version of all dlls and libraries. MSVCRTD.dll and MSVCP60D.dll debug dll are also included.
WARNING !! WARNING !! WARNING !! WARNING !!
Depending of the used interface and driver settings, the PortAudio layer may add additionnal buffering between the real card interrupt and the jack server callback. This usually result in *unregular* calls of the jack server callback (for example if jack server used a 256 frames buffer and the card used a 512 frames, the jack server callback will be called twice every card interrupt). For proper functionning of jack server and clients in this case, the jack server has to be started in "synchronous" mode, using the "-S" parameter. Depending of the used interface and driver settings, the PortAudio layer may add additionnal buffering between the real card interrupt and the jack server callback. This usually result in *unregular* calls of the jack server callback (for example if jack server used a 256 frames buffer and the card used a 512 frames, the jack server callback will be called twice every card interrupt). For proper functionning of jack server and clients in this case, the jack server has to be started in "synchronous" mode, using the "-S" parameter.
@@ -156,16 +153,6 @@ Automatic server launch
Starting from the 0.64 version, automatic server launch from client is implemented : when the server is not yet running, and if the client uses the "jack_client_open" API, the server will be started automatically. The server configuration is saved in a ".jackdrc" file located in the user home folder. The Qjackctl tool allows to save its configuration in this . jackdrc (setting can be done in Qjackctl Setup/Misc). If no configuration file is found, a default setup will be used. Starting from the 0.64 version, automatic server launch from client is implemented : when the server is not yet running, and if the client uses the "jack_client_open" API, the server will be started automatically. The server configuration is saved in a ".jackdrc" file located in the user home folder. The Qjackctl tool allows to save its configuration in this . jackdrc (setting can be done in Qjackctl Setup/Misc). If no configuration file is found, a default setup will be used.


WARNING : automatic server launch is not implemented on Windows WARNING : automatic server launch is not implemented on Windows

----------------
Loopback driver
----------------

An experimental loopback driver allows to manually "pipeline" applications connected in sequence, and thus parallelize sequential sub-graph. Lets say we have A ==> B graph, by using the loopback driver, it can be rewritten as : A ==> loopback driver ==> B. At each cycle, the loopback driver copy buffers received on its input ports (at the previous cycle) to its output ports. The resulting graph become parallel and thus can take profit of multi-processors machines, at each cycle A and B can be activated in parallel. Note that the loopback driver add a one buffer delay in the connection, which may be relevant in more complex graphs when having global synchronicity between clients is a desirable property.

To activate loopback driver, use :

- jackd (jackdmp) ... -L n ... where n is the number of input/output ports.
------------------ ------------------
Validations tools Validations tools
@@ -225,6 +212,7 @@ Note : To experiment with the -S option, jackdmp must be launched in a console.
1.9.0 : Waf based build system : Nedko Arnaudov, Grame for preliminary OSX support. Control API, dbus based server control access : Nedko Arnaudov, Grame. NetJack2 components (in progress) : jack_net backend, netmanager, audioadapter, netadapter : Romain Moret, Grame. Code restructuring to help port on other architectures : Michael Voigt. Code cleanup/optimization : Tim Blechmann. Improve handling of server internal clients that can now be loaded/unloaded using the new server control API : Grame. A lot of bug fix and improvements. 1.9.0 : Waf based build system : Nedko Arnaudov, Grame for preliminary OSX support. Control API, dbus based server control access : Nedko Arnaudov, Grame. NetJack2 components (in progress) : jack_net backend, netmanager, audioadapter, netadapter : Romain Moret, Grame. Code restructuring to help port on other architectures : Michael Voigt. Code cleanup/optimization : Tim Blechmann. Improve handling of server internal clients that can now be loaded/unloaded using the new server control API : Grame. A lot of bug fix and improvements.
1.9.1 : Fix jackctl_server_unload_internal. Filter SIGPIPE to avoid having client get a SIGPIPE when trying to access a died server. Libjack shutdown handler does not "deactivate" (fActive = false) the client anymore, so that jack_deactivate correctly does the job later on. Better isolation of server and clients system resources to allow starting the server in several user account at the same time. Report ringbuffer.c fixes from jack1. Client and library global context cleanup in case of incorrect shutdown handling (that is applications not correctly closing client after server has shutdown). Use JACK_DRIVER_DIR variable in internal clients loader. For ALSA driver, synchronize with latest jack1 memops functions. Synchronize jack2 public headers with jack1 ones. Implement jack_client_real_time_priority and jack_client_max_real_time_priority API. Use up to BUFFER_SIZE_MAX frames in midi ports, fix for ticket #117. Cleanup server starting code for clients directly linked with libjackserver.so. JackMessageBuffer was using thread "Stop" scheme in destructor, now use the safer thread "Kill" way. Synchronize ALSA backend code with JACK1 one. Set default mode to 'slow' in JackNetDriver and JackNetAdapter. Simplify audio packet order verification. Fix JackNetInterface::SetNetBufferSize for socket buffer size computation and JackNetMasterInterface::DataRecv if synch packet is received, various cleanup. Better recovery of network overload situations, now "resynchronize" by skipping cycles.". Support for BIG_ENDIAN machines in NetJack2. Support for BIG_ENDIAN machines in NetJack2 for MIDI ports. Support for "-h" option in internal clients to print the parameters. In NetJack2, fix a bug when capture or playback only channels are used. Add a JACK_INTERNAL_DIR environment variable to be used for internal clients. Add a resample quality parameter in audioadapter. Now correctly return an error if JackServer::SetBufferSize could not change the buffer size (and was just restoring the current one). Use PRIu32 kind of macro in JackAlsaDriver again. Add a resample quality parameter in netadapter. 1.9.1 : Fix jackctl_server_unload_internal. Filter SIGPIPE to avoid having client get a SIGPIPE when trying to access a died server. Libjack shutdown handler does not "deactivate" (fActive = false) the client anymore, so that jack_deactivate correctly does the job later on. Better isolation of server and clients system resources to allow starting the server in several user account at the same time. Report ringbuffer.c fixes from jack1. Client and library global context cleanup in case of incorrect shutdown handling (that is applications not correctly closing client after server has shutdown). Use JACK_DRIVER_DIR variable in internal clients loader. For ALSA driver, synchronize with latest jack1 memops functions. Synchronize jack2 public headers with jack1 ones. Implement jack_client_real_time_priority and jack_client_max_real_time_priority API. Use up to BUFFER_SIZE_MAX frames in midi ports, fix for ticket #117. Cleanup server starting code for clients directly linked with libjackserver.so. JackMessageBuffer was using thread "Stop" scheme in destructor, now use the safer thread "Kill" way. Synchronize ALSA backend code with JACK1 one. Set default mode to 'slow' in JackNetDriver and JackNetAdapter. Simplify audio packet order verification. Fix JackNetInterface::SetNetBufferSize for socket buffer size computation and JackNetMasterInterface::DataRecv if synch packet is received, various cleanup. Better recovery of network overload situations, now "resynchronize" by skipping cycles.". Support for BIG_ENDIAN machines in NetJack2. Support for BIG_ENDIAN machines in NetJack2 for MIDI ports. Support for "-h" option in internal clients to print the parameters. In NetJack2, fix a bug when capture or playback only channels are used. Add a JACK_INTERNAL_DIR environment variable to be used for internal clients. Add a resample quality parameter in audioadapter. Now correctly return an error if JackServer::SetBufferSize could not change the buffer size (and was just restoring the current one). Use PRIu32 kind of macro in JackAlsaDriver again. Add a resample quality parameter in netadapter.
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.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.
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... 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
- 7
common/JackAPI.cpp View File

@@ -1465,14 +1465,8 @@ EXPORT jack_nframes_t jack_last_frame_time(const jack_client_t* ext_client)
#ifdef __CLIENTDEBUG__ #ifdef __CLIENTDEBUG__
JackLibGlobals::CheckContext(); JackLibGlobals::CheckContext();
#endif #endif
JackTimer timer;
JackEngineControl* control = GetEngineControl(); JackEngineControl* control = GetEngineControl();
if (control) {
control->ReadFrameTime(&timer);
return timer.CurFrame();
} else {
return 0;
}
return (control) ? control->fFrameTimer.ReadCurrentState()->CurFrame() : 0;
} }


EXPORT float jack_cpu_load(jack_client_t* ext_client) EXPORT float jack_cpu_load(jack_client_t* ext_client)


+ 1
- 1
common/JackActivationCount.h View File

@@ -73,7 +73,7 @@ class JackActivationCount
return fValue; return fValue;
} }


};
} POST_PACKED_STRUCTURE;


} // end of namespace } // end of namespace




+ 3
- 2
common/JackAtomicArrayState.h View File

@@ -21,6 +21,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#define __JackAtomicArrayState__ #define __JackAtomicArrayState__


#include "JackAtomic.h" #include "JackAtomic.h"
#include "JackCompilerDeps.h"
#include <string.h> // for memcpy #include <string.h> // for memcpy


namespace Jack namespace Jack
@@ -67,7 +68,7 @@ struct AtomicArrayCounter
return *this; return *this;
} }
};
} POST_PACKED_STRUCTURE;


#define Counter1(e) (e).info.fLongVal #define Counter1(e) (e).info.fLongVal
#define GetIndex1(e, state) ((e).info.scounter.fByteVal[state]) #define GetIndex1(e, state) ((e).info.scounter.fByteVal[state])
@@ -247,7 +248,7 @@ class JackAtomicArrayState
WriteNextStateStopAux(state); WriteNextStateStopAux(state);
} }


};
} POST_PACKED_STRUCTURE;


} // end of namespace } // end of namespace




+ 4
- 4
common/JackAtomicState.h View File

@@ -21,6 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define __JackAtomicState__ #define __JackAtomicState__


#include "JackAtomic.h" #include "JackAtomic.h"
#include "JackCompilerDeps.h"
#include <string.h> // for memcpy #include <string.h> // for memcpy


namespace Jack namespace Jack
@@ -68,7 +69,7 @@ struct AtomicCounter
return *this; return *this;
} }


};
} POST_PACKED_STRUCTURE;


#define Counter(e) (e).info.fLongVal #define Counter(e) (e).info.fLongVal
#define CurIndex(e) (e).info.scounter.fShortVal1 #define CurIndex(e) (e).info.scounter.fShortVal1
@@ -250,11 +251,10 @@ class JackAtomicState
} while (cur_index != next_index); } while (cur_index != next_index);
} }
*/ */
};
} POST_PACKED_STRUCTURE;


} // end of namespace } // end of namespace



#endif #endif



+ 17
- 1
common/JackAudioDriver.cpp View File

@@ -79,6 +79,22 @@ int JackAudioDriver::Open(jack_nframes_t buffer_size,
return JackDriver::Open(buffer_size, samplerate, capturing, playing, inchannels, outchannels, monitor, capture_driver_name, playback_driver_name, capture_latency, playback_latency); return JackDriver::Open(buffer_size, samplerate, capturing, playing, inchannels, outchannels, monitor, capture_driver_name, playback_driver_name, capture_latency, playback_latency);
} }


int JackAudioDriver::Open(bool capturing,
bool playing,
int inchannels,
int outchannels,
bool monitor,
const char* capture_driver_name,
const char* playback_driver_name,
jack_nframes_t capture_latency,
jack_nframes_t playback_latency)
{
fCaptureChannels = inchannels;
fPlaybackChannels = outchannels;
fWithMonitorPorts = monitor;
return JackDriver::Open(capturing, playing, inchannels, outchannels, monitor, capture_driver_name, playback_driver_name, capture_latency, playback_latency);
}

int JackAudioDriver::Attach() int JackAudioDriver::Attach()
{ {
JackPort* port; JackPort* port;
@@ -269,7 +285,7 @@ void JackAudioDriver::ProcessGraphSync()
fGraphManager->ResumeRefNum(&fClientControl, fSynchroTable); fGraphManager->ResumeRefNum(&fClientControl, fSynchroTable);
if (ProcessSlaves() < 0) if (ProcessSlaves() < 0)
jack_error("JackAudioDriver::ProcessSync ProcessSlaves error, engine may now behave abnormally!!"); jack_error("JackAudioDriver::ProcessSync ProcessSlaves error, engine may now behave abnormally!!");
if (fGraphManager->SuspendRefNum(&fClientControl, fSynchroTable, fEngineControl->fTimeOutUsecs) < 0)
if (fGraphManager->SuspendRefNum(&fClientControl, fSynchroTable, DRIVER_TIMEOUT_FACTOR * fEngineControl->fTimeOutUsecs) < 0)
jack_error("JackAudioDriver::ProcessSync SuspendRefNum error, engine may now behave abnormally!!"); jack_error("JackAudioDriver::ProcessSync SuspendRefNum error, engine may now behave abnormally!!");
} else { // Graph not finished: do not activate it } else { // Graph not finished: do not activate it
jack_error("JackAudioDriver::ProcessSync: error"); jack_error("JackAudioDriver::ProcessSync: error");


+ 10
- 0
common/JackAudioDriver.h View File

@@ -74,6 +74,16 @@ class SERVER_EXPORT JackAudioDriver : public JackDriver
jack_nframes_t capture_latency, jack_nframes_t capture_latency,
jack_nframes_t playback_latency); jack_nframes_t playback_latency);
virtual int Open(bool capturing,
bool playing,
int inchannels,
int outchannels,
bool monitor,
const char* capture_driver_name,
const char* playback_driver_name,
jack_nframes_t capture_latency,
jack_nframes_t playback_latency);
virtual int Process(); virtual int Process();
virtual int ProcessNull(); virtual int ProcessNull();




+ 7
- 5
common/JackConnectionManager.h View File

@@ -116,7 +116,7 @@ class JackFixedArray
return fCounter; return fCounter;
} }


};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief Utility class. \brief Utility class.
@@ -151,7 +151,8 @@ class JackFixedArray1 : public JackFixedArray<SIZE>
return true; return true;
} }
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief Utility class. \brief Utility class.
@@ -226,7 +227,7 @@ class JackFixedMatrix
return false; return false;
} }


};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief Utility class. \brief Utility class.
@@ -339,7 +340,7 @@ class JackLoopFeedback
return -1; return -1;
} }


};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief For client timing measurements. \brief For client timing measurements.
@@ -356,6 +357,7 @@ struct JackClientTiming
{} {}
~JackClientTiming() ~JackClientTiming()
{} {}
} POST_PACKED_STRUCTURE; } POST_PACKED_STRUCTURE;


/*! /*!
@@ -450,7 +452,7 @@ class SERVER_EXPORT JackConnectionManager
int ResumeRefNum(JackClientControl* control, JackSynchro* table, JackClientTiming* timing); int ResumeRefNum(JackClientControl* control, JackSynchro* table, JackClientTiming* timing);
int SuspendRefNum(JackClientControl* control, JackSynchro* table, JackClientTiming* timing, long time_out_usec); int SuspendRefNum(JackClientControl* control, JackSynchro* table, JackClientTiming* timing, long time_out_usec);
};
} POST_PACKED_STRUCTURE;


} // end of namespace } // end of namespace




+ 8
- 3
common/JackConstants.h View File

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


#define VERSION "1.9.3"
#define VERSION "1.9.4"


#define BUFFER_SIZE_MAX 8192 #define BUFFER_SIZE_MAX 8192


@@ -38,10 +38,14 @@
#endif #endif


#define DRIVER_PORT_NUM 256 #define DRIVER_PORT_NUM 256
#define PORT_NUM_FOR_CLIENT 256

#ifndef PORT_NUM_FOR_CLIENT
#define PORT_NUM_FOR_CLIENT 512
#endif

#define FIRST_AVAILABLE_PORT 1 #define FIRST_AVAILABLE_PORT 1


#define CONNECTION_NUM_FOR_PORT 256
#define CONNECTION_NUM_FOR_PORT PORT_NUM_FOR_CLIENT


#ifndef CLIENT_NUM #ifndef CLIENT_NUM
#define CLIENT_NUM 64 #define CLIENT_NUM 64
@@ -86,6 +90,7 @@
#define SOCKET_TIME_OUT 5 // in sec #define SOCKET_TIME_OUT 5 // in sec
#define DRIVER_OPEN_TIMEOUT 5 // in sec #define DRIVER_OPEN_TIMEOUT 5 // in sec
#define FREEWHEEL_DRIVER_TIMEOUT 10 // in sec #define FREEWHEEL_DRIVER_TIMEOUT 10 // in sec
#define DRIVER_TIMEOUT_FACTOR 10


#define NO_PORT 0xFFFE #define NO_PORT 0xFFFE




+ 1
- 1
common/JackDriver.cpp View File

@@ -339,7 +339,7 @@ int JackDriver::SetSampleRate(jack_nframes_t sample_rate)
return 0; return 0;
} }


bool JackDriver::Init()
bool JackDriver::Initialize()
{ {
return true; return true;
} }


+ 1
- 1
common/JackDriver.h View File

@@ -203,7 +203,7 @@ class SERVER_EXPORT JackDriver : public JackDriverClientInterface
virtual JackClientControl* GetClientControl() const; virtual JackClientControl* GetClientControl() const;
virtual bool IsRealTime() const; virtual bool IsRealTime() const;
virtual bool Init(); // To be called by the wrapping thread Init method when the driver is a "blocking" one
virtual bool Initialize(); // To be called by the wrapping thread Init method when the driver is a "blocking" one
}; };


+ 4
- 4
common/JackFilters.h View File

@@ -54,7 +54,8 @@ namespace Jack
mean += fTable[i]; mean += fTable[i];
return mean / MAX_SIZE; return mean / MAX_SIZE;
} }
};
} POST_PACKED_STRUCTURE;
class JackDelayLockedLoop class JackDelayLockedLoop
{ {
@@ -136,7 +137,7 @@ namespace Jack
return fCurrentWakeup; return fCurrentWakeup;
} }
};
} POST_PACKED_STRUCTURE;
class JackAtomicDelayLockedLoop : public JackAtomicState<JackDelayLockedLoop> class JackAtomicDelayLockedLoop : public JackAtomicState<JackDelayLockedLoop>
{ {
@@ -201,7 +202,7 @@ namespace Jack
return res; return res;
} }
};
} POST_PACKED_STRUCTURE;
/* /*
Torben Hohn PI controler from JACK1 Torben Hohn PI controler from JACK1
@@ -301,7 +302,6 @@ namespace Jack
} }
*/ */


double GetRatio(int error) double GetRatio(int error)
{ {
double smooth_offset = error; double smooth_offset = error;


+ 1
- 1
common/JackFreewheelDriver.cpp View File

@@ -41,7 +41,7 @@ int JackFreewheelDriver::Process()
} else { } else {
fGraphManager->ResumeRefNum(&fClientControl, fSynchroTable); // Signal all clients fGraphManager->ResumeRefNum(&fClientControl, fSynchroTable); // Signal all clients
if (fEngineControl->fSyncMode) { if (fEngineControl->fSyncMode) {
if (fGraphManager->SuspendRefNum(&fClientControl, fSynchroTable, fEngineControl->fTimeOutUsecs) < 0) {
if (fGraphManager->SuspendRefNum(&fClientControl, fSynchroTable, DRIVER_TIMEOUT_FACTOR * fEngineControl->fTimeOutUsecs) < 0) {
jack_error("JackFreewheelDriver::ProcessSync SuspendRefNum error"); jack_error("JackFreewheelDriver::ProcessSync SuspendRefNum error");
return -1; return -1;
} }


+ 60
- 3
common/JackLoopbackDriver.cpp View File

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


#include "JackSystemDeps.h" #include "JackSystemDeps.h"
#include "JackLoopbackDriver.h" #include "JackLoopbackDriver.h"
#include "JackDriverLoader.h"
#include "JackEngineControl.h" #include "JackEngineControl.h"
#include "JackGraphManager.h" #include "JackGraphManager.h"
#include "JackError.h" #include "JackError.h"
@@ -31,8 +32,6 @@ namespace Jack


int JackLoopbackDriver::Process() int JackLoopbackDriver::Process()
{ {
assert(fCaptureChannels == fPlaybackChannels);

// Loopback copy // Loopback copy
for (int i = 0; i < fCaptureChannels; i++) { for (int i = 0; i < fCaptureChannels; i++) {
memcpy(GetInputBuffer(i), GetOutputBuffer(i), sizeof(float) * fEngineControl->fBufferSize); memcpy(GetInputBuffer(i), GetOutputBuffer(i), sizeof(float) * fEngineControl->fBufferSize);
@@ -40,7 +39,7 @@ int JackLoopbackDriver::Process()


fGraphManager->ResumeRefNum(&fClientControl, fSynchroTable); // Signal all clients fGraphManager->ResumeRefNum(&fClientControl, fSynchroTable); // Signal all clients
if (fEngineControl->fSyncMode) { if (fEngineControl->fSyncMode) {
if (fGraphManager->SuspendRefNum(&fClientControl, fSynchroTable, fEngineControl->fTimeOutUsecs) < 0) {
if (fGraphManager->SuspendRefNum(&fClientControl, fSynchroTable, DRIVER_TIMEOUT_FACTOR * fEngineControl->fTimeOutUsecs) < 0) {
jack_error("JackLoopbackDriver::ProcessSync SuspendRefNum error"); jack_error("JackLoopbackDriver::ProcessSync SuspendRefNum error");
return -1; return -1;
} }
@@ -49,3 +48,61 @@ int JackLoopbackDriver::Process()
} }


} // end of namespace } // end of namespace

#ifdef __cplusplus
extern "C"
{
#endif

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

desc = (jack_driver_desc_t*)calloc (1, sizeof (jack_driver_desc_t));
strcpy(desc->name, "loopback"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1
strcpy(desc->desc, "Loopback backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1

desc->nparams = 1;
desc->params = (jack_driver_param_desc_t*)calloc (desc->nparams, sizeof (jack_driver_param_desc_t));
i = 0;
strcpy(desc->params[i].name, "channels");
desc->params[i].character = 'c';
desc->params[i].type = JackDriverParamInt;
desc->params[i].value.ui = 0;
strcpy(desc->params[i].short_desc, "Maximum number of loopback ports");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc);

return desc;
}

SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine* engine, Jack::JackSynchro* table, const JSList* params)
{
const JSList * node;
const jack_driver_param_t * param;
int channels = 2;
for (node = params; node; node = jack_slist_next (node)) {
param = (const jack_driver_param_t *) node->data;

switch (param->character) {

case 'c':
channels = param->value.ui;
break;
}
}
Jack::JackDriverClientInterface* driver = new Jack::JackLoopbackDriver(engine, table);
if (driver->Open(1, 1, channels, channels, false, "loopback", "loopback", 0, 0) == 0) {
return driver;
} else {
delete driver;
return NULL;
}
}

#ifdef __cplusplus
}
#endif

+ 3
- 3
common/JackNetDriver.cpp View File

@@ -121,13 +121,13 @@ namespace Jack
as a "dummy driver, until Init method returns. as a "dummy driver, until Init method returns.
*/ */
bool JackNetDriver::Init()
bool JackNetDriver::Initialize()
{ {
jack_log ( "JackNetDriver::Init()" );
jack_log("JackNetDriver::Initialize()");


//new loading, but existing socket, restart the driver //new loading, but existing socket, restart the driver
if (fSocket.IsSocket()) { if (fSocket.IsSocket()) {
jack_info( "Restarting driver..." );
jack_info("Restarting driver...");
FreeAll(); FreeAll();
} }




+ 1
- 1
common/JackNetDriver.h View File

@@ -50,7 +50,7 @@ namespace Jack
JackGnuPlotMonitor<float>* fNetTimeMon; JackGnuPlotMonitor<float>* fNetTimeMon;
#endif #endif


bool Init();
bool Initialize();
void FreeAll(); void FreeAll();
int AllocPorts(); int AllocPorts();


+ 1
- 1
common/JackThreadedDriver.cpp View File

@@ -209,7 +209,7 @@ bool JackThreadedDriver::Execute()


bool JackThreadedDriver::Init() bool JackThreadedDriver::Init()
{ {
if (fDriver->Init()) {
if (fDriver->Initialize()) {
if (fDriver->IsRealTime()) { if (fDriver->IsRealTime()) {
jack_log("JackThreadedDriver::Init IsRealTime"); jack_log("JackThreadedDriver::Init IsRealTime");
// Will do "something" on OSX only... // Will do "something" on OSX only...


+ 0
- 1
common/JackTransportEngine.h View File

@@ -195,7 +195,6 @@ class SERVER_EXPORT JackTransportEngine : public JackAtomicArrayState<jack_posit


} POST_PACKED_STRUCTURE; } POST_PACKED_STRUCTURE;



} // end of namespace } // end of namespace


#endif #endif

+ 1
- 1
common/JackWaitThreadedDriver.h View File

@@ -65,7 +65,7 @@ class SERVER_EXPORT JackWaitThreadedDriver : public JackThreadedDriver
bool Execute() bool Execute()
{ {
// Blocks until decorated driver is started (that is when it's Init method returns). // Blocks until decorated driver is started (that is when it's Init method returns).
fDriver->Init();
fDriver->Initialize();
fRunning = true; fRunning = true;
return false; return false;
} }


+ 85
- 11
common/JackWeakAPI.cpp View File

@@ -152,17 +152,91 @@ DECL_FUNCTION(const char**, jack_port_get_connections, (const jack_port_t *port)
DECL_FUNCTION(const char**, jack_port_get_all_connections, (const jack_port_t *port), (port)); DECL_FUNCTION(const char**, jack_port_get_all_connections, (const jack_port_t *port), (port));
DECL_FUNCTION(int, jack_port_tie, (jack_port_t *src, jack_port_t *dst), (src, dst)); DECL_FUNCTION(int, jack_port_tie, (jack_port_t *src, jack_port_t *dst), (src, dst));
DECL_FUNCTION(int, jack_port_untie, (jack_port_t *port), (port)); DECL_FUNCTION(int, jack_port_untie, (jack_port_t *port), (port));


DECL_FUNCTION(jack_nframes_t, jack_get_buffer_size, (jack_client_t *client), (client));
DECL_FUNCTION(jack_nframes_t, jack_port_get_latency, (jack_port_t *port));
DECL_FUNCTION(jack_nframes_t, jack_port_get_total_latency ,(jack_client_t *), (jack_port_t *port));
DECL_VOID_FUNCTION(jack_port_set_latency, (jack_port_t *), (jack_nframes_t));
DECL_FUNCTION(int, jack_recompute_total_latency, (jack_client_t*), (jack_port_t* port));
DECL_FUNCTION(int, jack_recompute_total_latencies, (jack_client_t*));

DECL_FUNCTION(int, jack_port_set_name, (jack_port_t *port), (const char *port_name));
DECL_FUNCTION(int, jack_port_set_alias, (jack_port_t *port), (const char *alias));
DECL_FUNCTION(int, jack_port_unset_alias, (jack_port_t *port), (const char *alias));
DECL_FUNCTION(int, jack_port_get_aliases, (const jack_port_t *port), (char* const aliases[2]));
DECL_FUNCTION(int, jack_port_request_monitor, (jack_port_t *port), (int onoff));
DECL_FUNCTION(int, jack_port_request_monitor_by_name, (jack_client_t *client), (const char *port_name), (int onoff));
DECL_FUNCTION(int, jack_port_ensure_monitor, (jack_port_t *port), (int onoff));
DECL_FUNCTION(int, jack_port_monitoring_input, (jack_port_t *port));
DECL_FUNCTION(int, jack_connect, (jack_client_t *), (const char *source_port), (const char *destination_port));
DECL_FUNCTION(int, jack_disconnect, (jack_client_t *), (const char *source_port), (const char *destination_port));
DECL_FUNCTION(int, jack_port_disconnect, (jack_client_t *), (jack_port_t *));
DECL_FUNCTION(int, jack_port_name_size,(void));
DECL_FUNCTION(int, jack_port_type_size,(void));
DECL_FUNCTION(jack_nframes_t, jack_get_sample_rate, (jack_client_t *client), (client)); DECL_FUNCTION(jack_nframes_t, jack_get_sample_rate, (jack_client_t *client), (client));
DECL_FUNCTION(jack_nframes_t, jack_port_get_total_latency, (jack_client_t *client, jack_port_t *port), (client, port));
DECL_VOID_FUNCTION(jack_set_error_function, (void (*func)(const char *)), (func));


DECL_FUNCTION(jack_nframes_t, jack_get_buffer_size, (jack_client_t *client), (client));
DECL_FUNCTION(const char**, jack_get_ports, (jack_client_t *client, const char *port_name_pattern, const char * type_name_pattern, DECL_FUNCTION(const char**, jack_get_ports, (jack_client_t *client, const char *port_name_pattern, const char * type_name_pattern,
unsigned long flags), (client, port_name_pattern, type_name_pattern, flags)); unsigned long flags), (client, port_name_pattern, type_name_pattern, flags));
DECL_FUNCTION(int, jack_connect, (jack_client_t *client, const char *source_port, const char *destination_port), (client, source_port, destination_port));
DECL_FUNCTION(int, jack_set_port_connect_callback, (jack_client_t *client, JackPortConnectCallback connect_callback, void *arg),
(client, connect_callback, arg));
DECL_FUNCTION(jack_port_t *, jack_port_by_id, (jack_client_t *client, jack_port_id_t port_id), (client, port_id));
DECL_FUNCTION(jack_port_t *, jack_port_by_name, (jack_client_t *), (const char *port_name));
DECL_FUNCTION(jack_port_t *, jack_port_by_id, (jack_client_t *client), (jack_port_id_t port_id));

DECL_FUNCTION(int, jack_engine_takeover_timebase, (jack_client_t *));
DECL_FUNCTION(jack_nframes_t, jack_frames_since_cycle_start, (const jack_client_t *));
DECL_FUNCTION(jack_time_t, jack_get_time());
DECL_FUNCTION(jack_nframes_t, jack_time_to_frames, (const jack_client_t *client), (jack_time_t time));
DECL_FUNCTION(jack_time_t, jack_frames_to_time, (const jack_client_t *client), (jack_nframes_t frames));
DECL_FUNCTION(jack_nframes_t, jack_frame_time, (const jack_client_t *));
DECL_FUNCTION(jack_nframes_t, jack_last_frame_time, (const jack_client_t *client));
DECL_FUNCTION(float, jack_cpu_load, (jack_client_t *client));
DECL_FUNCTION(pthread_t, jack_client_thread_id, (jack_client_t *));
DECL_VOID_FUNCTION(jack_set_error_function, (print_function));
DECL_VOID_FUNCTION(jack_set_info_function, (print_function));

DECL_FUNCTION(float, jack_get_max_delayed_usecs, (jack_client_t *client));
DECL_FUNCTION(float, jack_get_xrun_delayed_usecs, (jack_client_t *client));
DECL_VOID_FUNCTION(jack_reset_max_delayed_usecs, (jack_client_t *client));

DECL_FUNCTION(int, jack_release_timebase, (jack_client_t *client));
DECL_FUNCTION(int, jack_set_sync_callback, (jack_client_t *client, (JackSyncCallback sync_callback), (void *arg));
DECL_FUNCTION(int, jack_set_sync_timeout, (jack_client_t *client), (jack_time_t timeout));
DECL_FUNCTION(int, jack_set_timebase_callback, (jack_client_t *client), (int conditional), (JackTimebaseCallback timebase_callback), (void *arg));
DECL_FUNCTION(int, jack_transport_locate, (jack_client_t *client), (jack_nframes_t frame));
DECL_FUNCTION(jack_transport_state_t, jack_transport_query, (const jack_client_t *client), (jack_position_t *pos));
DECL_FUNCTION(jack_nframes_t, jack_get_current_transport_frame, (const jack_client_t *client));
DECL_FUNCTION(int, jack_transport_reposition, (jack_client_t *client), (jack_position_t *pos));
DECL_VOID_FUNCTION(jack_transport_start, (jack_client_t *client));
DECL_VOID_FUNCTION(jack_transport_stop, (jack_client_t *client));
DECL_VOID_FUNCTION(jack_get_transport_info, (jack_client_t *client), (jack_transport_info_t *tinfo));
DECL_VOID_FUNCTION(jack_set_transport_info, (jack_client_t *client), (jack_transport_info_t *tinfo));

DECL_FUNCTION(int, jack_client_real_time_priority, (jack_client_t*));
DECL_FUNCTION(int, jack_client_max_real_time_priority, (jack_client_t*));
DECL_FUNCTION(int, jack_acquire_real_time_scheduling, (pthread_t thread), (int priority));
DECL_FUNCTION(int, jack_client_create_thread, (jack_client_t* client),
(pthread_t *thread),
(int priority),
(int realtime), // boolean
(thread_routine routine),
(void *arg));
DECL_FUNCTION(int, jack_drop_real_time_scheduling, (pthread_t thread));

DECL_FUNCTION(int, jack_client_stop_thread, (jack_client_t* client), (pthread_t thread));
DECL_FUNCTION(int, jack_client_kill_thread, (jack_client_t* client), (pthread_t thread));
#ifndef WIN32
DECL_VOID_FUNCTION(jack_set_thread_creator, (jack_thread_creator_t jtc));
#endif
DECL_FUNCTION(char *, jack_get_internal_client_name, (jack_client_t *client, (jack_intclient_t intclient));
DECL_FUNCTION(jack_intclient_t, jack_internal_client_handle, (jack_client_t *client), (const char *client_name), (jack_status_t *status));
DECL_FUNCTION(jack_intclient_t, jack_internal_client_load, (jack_client_t *client), (const char *client_name), (jack_options_t options), (jack_status_t *status), ...));

DECL_FUNCTION(jack_status_t, jack_internal_client_unload, (jack_client_t *client), jack_intclient_t intclient));
DECL_VOID_FUNCTION(jack_free, (void* ptr));

// MIDI

DECL_FUNCTION(jack_nframes_t, jack_midi_get_event_count, (void* port_buffer));
DECL_FUNCTION(int jack_midi_event_get(jack_midi_event_t* event, void* port_buffer, jack_nframes_t event_index);
DECL_VOID_FUNCTION(jack_midi_clear_buffer, (void* port_buffer));
DECL_FUNCTION(size_t, jack_midi_max_event_size, (void* port_buffer));
DECL_FUNCTION(jack_midi_data_t*, jack_midi_event_reserve, (void* port_buffer), (jack_nframes_t time), (size_t data_size));
DECL_FUNCTIO(int jack_midi_event_write, (void* port_buffer), (jack_nframes_t time), (const jack_midi_data_t* data), (size_t data_size));
DECL_FUNCTION(jack_nframes_t, jack_midi_get_lost_event_count, (void* port_buffer));

+ 33
- 11
common/Jackdmp.cpp View File

@@ -32,6 +32,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackConstants.h" #include "JackConstants.h"
#include "JackDriverLoader.h" #include "JackDriverLoader.h"


#if defined(JACK_DBUS) && defined(__linux__)
#include <dbus/dbus.h>
#include "audio_reserve.h"
#endif

/* /*
This is a simple port of the old jackdmp.cpp file to use the new Jack 2.0 control API. Available options for the server This is a simple port of the old jackdmp.cpp file to use the new Jack 2.0 control API. Available options for the server
are "hard-coded" in the source. A much better approach would be to use the control API to: are "hard-coded" in the source. A much better approach would be to use the control API to:
@@ -92,6 +97,7 @@ static void usage(FILE* file)
"usage: jackdmp [ --realtime OR -R [ --realtime-priority OR -P priority ] ]\n" "usage: jackdmp [ --realtime OR -R [ --realtime-priority OR -P priority ] ]\n"
" [ --name OR -n server-name ]\n" " [ --name OR -n server-name ]\n"
" [ --timeout OR -t client-timeout-in-msecs ]\n" " [ --timeout OR -t client-timeout-in-msecs ]\n"
" [ --loopback OR -L loopback-port-number ]\n"
" [ --midi OR -X midi-driver ]\n" " [ --midi OR -X midi-driver ]\n"
" [ --verbose OR -v ]\n" " [ --verbose OR -v ]\n"
#ifdef __linux__ #ifdef __linux__
@@ -156,17 +162,19 @@ int main(int argc, char* argv[])
const char* server_name = "default"; const char* server_name = "default";
jackctl_driver_t * audio_driver_ctl; jackctl_driver_t * audio_driver_ctl;
jackctl_driver_t * midi_driver_ctl; jackctl_driver_t * midi_driver_ctl;
jackctl_driver_t * loopback_driver_ctl;
#ifdef __linux__ #ifdef __linux__
const char *options = "-d:X:P:uvrshVRL:STFl:t:mn:p:c:a:";
const char *options = "-d:X:P:uvrshVRSTFl:t:mn:p:c:a:L:";
#else #else
const char *options = "-d:X:P:uvrshVRL:STFl:t:mn:p:a:";
const char *options = "-d:X:P:uvrshVRSTFl:t:mn:p:a:L:";
#endif #endif
struct option long_options[] = { struct option long_options[] = {
#ifdef __linux__ #ifdef __linux__
{ "clock-source", 1, 0, 'c' }, { "clock-source", 1, 0, 'c' },
#endif #endif
{ "loopback-driver", 1, 0, 'L' },
{ "audio-driver", 1, 0, 'd' }, { "audio-driver", 1, 0, 'd' },
{ "midi-driver", 1, 0, 'X' }, { "midi-driver", 1, 0, 'X' },
{ "verbose", 0, 0, 'v' }, { "verbose", 0, 0, 'v' },
@@ -201,14 +209,18 @@ int main(int argc, char* argv[])
int port_max = 512; int port_max = 512;
int do_mlock = 1; int do_mlock = 1;
int do_unlock = 0; int do_unlock = 0;
int loopback = 0;
bool show_version = false; bool show_version = false;
sigset_t signals; sigset_t signals;
jackctl_parameter_t* param; jackctl_parameter_t* param;
union jackctl_parameter_value value; union jackctl_parameter_value value;


copyright(stdout); copyright(stdout);

#if defined(JACK_DBUS) && defined(__linux__)
server_ctl = jackctl_server_create(audio_acquire, audio_release);
#else
server_ctl = jackctl_server_create(NULL, NULL); server_ctl = jackctl_server_create(NULL, NULL);
#endif
if (server_ctl == NULL) { if (server_ctl == NULL) {
fprintf(stderr, "Failed to create server object\n"); fprintf(stderr, "Failed to create server object\n");
return -1; return -1;
@@ -266,6 +278,10 @@ int main(int argc, char* argv[])
seen_audio_driver = true; seen_audio_driver = true;
audio_driver_name = optarg; audio_driver_name = optarg;
break; break;
case 'L':
loopback = atoi(optarg);
break;


case 'X': case 'X':
seen_midi_driver = true; seen_midi_driver = true;
@@ -337,14 +353,6 @@ int main(int argc, char* argv[])
} }
break; break;


case 'L':
param = jackctl_get_parameter(server_parameters, "loopback-ports");
if (param != NULL) {
value.ui = atoi(optarg);
jackctl_parameter_set_value(param, &value);
}
break;

case 'T': case 'T':
param = jackctl_get_parameter(server_parameters, "temporary"); param = jackctl_get_parameter(server_parameters, "temporary");
if (param != NULL) { if (param != NULL) {
@@ -435,6 +443,20 @@ int main(int argc, char* argv[])


jackctl_server_add_slave(server_ctl, midi_driver_ctl); jackctl_server_add_slave(server_ctl, midi_driver_ctl);
} }
// Loopback driver
if (loopback > 0) {
loopback_driver_ctl = jackctl_server_get_driver(server_ctl, "loopback");
if (loopback_driver_ctl != NULL) {
const JSList * loopback_parameters = jackctl_driver_get_parameters(loopback_driver_ctl);
param = jackctl_get_parameter(loopback_parameters, "channels");
if (param != NULL) {
value.ui = loopback;
jackctl_parameter_set_value(param, &value);
}
jackctl_server_add_slave(server_ctl, loopback_driver_ctl);
}
}


notify_server_start(server_name); notify_server_start(server_name);




+ 2
- 0
common/jack/control.h View File

@@ -31,7 +31,9 @@


#include <jack/jslist.h> #include <jack/jslist.h>
#include <jack/systemdeps.h> #include <jack/systemdeps.h>
#if !defined (__sun__)
#include <stdbool.h> #include <stdbool.h>
#endif


/** Parameter types, intentionally similar to jack_driver_param_type_t */ /** Parameter types, intentionally similar to jack_driver_param_type_t */
typedef enum typedef enum


+ 31
- 21
common/jack/jack.h View File

@@ -108,6 +108,7 @@ jack_client_t * jack_client_open (const char *client_name,
* \bold THIS FUNCTION IS DEPRECATED AND SHOULD NOT BE USED IN * \bold THIS FUNCTION IS DEPRECATED AND SHOULD NOT BE USED IN
* NEW JACK CLIENTS * NEW JACK CLIENTS
* *
* @deprecated Please use jack_client_open().
*/ */
jack_client_t * jack_client_new (const char *client_name); jack_client_t * jack_client_new (const char *client_name);


@@ -212,8 +213,7 @@ int jack_is_realtime (jack_client_t *client);
* \bold THIS FUNCTION IS DEPRECATED AND SHOULD NOT BE USED IN * \bold THIS FUNCTION IS DEPRECATED AND SHOULD NOT BE USED IN
* NEW JACK CLIENTS. * NEW JACK CLIENTS.
* *
* It should be replace by use of @ jack_cycle_wait and @ jack_cycle_signal functions.
*
* @deprecated Please use jack_cycle_wait() and jack_cycle_signal() functions.
*/ */
jack_nframes_t jack_thread_wait (jack_client_t*, int status); jack_nframes_t jack_thread_wait (jack_client_t*, int status);


@@ -236,7 +236,7 @@ void jack_cycle_signal (jack_client_t* client, int status);


/** /**
* Tell the Jack server to call @a thread_callback in the RT thread. * Tell the Jack server to call @a thread_callback in the RT thread.
* Typical use are in conjunction with @a jack_cycle_wait and @ jack_cycle_signal functions.
* Typical use are in conjunction with @a jack_cycle_wait and @a jack_cycle_signal functions.
* The code in the supplied function must be suitable for real-time * The code in the supplied function must be suitable for real-time
* execution. That means that it cannot call functions that might * execution. That means that it cannot call functions that might
* block for a long time. This includes malloc, free, printf, * block for a long time. This includes malloc, free, printf,
@@ -483,7 +483,7 @@ int jack_set_xrun_callback (jack_client_t *,
/*@}*/ /*@}*/


/** /**
* @defgroup ServerControl Controlling & querying JACK server operation
* @defgroup ServerClientControl Controlling & querying JACK server operation
* @{ * @{
*/ */
@@ -835,7 +835,7 @@ int jack_port_set_alias (jack_port_t *port, const char *alias);
*/ */
int jack_port_unset_alias (jack_port_t *port, const char *alias); int jack_port_unset_alias (jack_port_t *port, const char *alias);


/*
/**
* Get any aliases known for @port. * Get any aliases known for @port.
* *
* @return the number of aliases discovered for the port * @return the number of aliases discovered for the port
@@ -984,47 +984,57 @@ jack_port_t * jack_port_by_id (jack_client_t *client,
/** /**
* @defgroup TimeFunctions Handling time * @defgroup TimeFunctions Handling time
* @{ * @{
*/
*
* JACK time is in units of 'frames', according to the current sample rate.
* The absolute value of frame times is meaningless, frame times have meaning
* only relative to each other.
*/


/** /**
* @return the time in frames that has passed since the JACK server
* began the current process cycle.
* @return the estimated time in frames that has passed since the JACK
* server began the current process cycle.
*/ */
jack_nframes_t jack_frames_since_cycle_start (const jack_client_t *); jack_nframes_t jack_frames_since_cycle_start (const jack_client_t *);


/** /**
* @return an estimate of the current time in frames. This is a
* running counter, no significance should be attached to its value,
* but it can be compared to a previously returned value.
* @return the estimated current time in frames.
* This function is intended for use in other threads (not the process
* callback). The return value can be compared with the value of
* jack_last_frame_time to relate time in other threads to JACK time.
*/ */
jack_nframes_t jack_frame_time (const jack_client_t *); jack_nframes_t jack_frame_time (const jack_client_t *);


/** /**
* @return the frame_time after the last processing of the graph
* this is only to be used from the process callback.
*
* This function can be used to put timestamps generated by
* jack_frame_time() in correlation to the current process cycle.
* @return the precise time at the start of the current process cycle.
* This function may only be used from the process callback, and can
* be used to interpret timestamps generated by jack_frame_time() in
* other threads with respect to the current process cycle.
*
* This is the only jack time function that returns exact time:
* when used during the process callback it always returns the same
* value (until the next process callback, where it will return
* that value + nframes, etc). The return value is guaranteed to be
* monotonic and linear in this fashion unless an xrun occurs.
* If an xrun occurs, clients must check this value again, as time
* may have advanced in a non-linear way (e.g. cycles may have been skipped).
*/ */
jack_nframes_t jack_last_frame_time (const jack_client_t *client); jack_nframes_t jack_last_frame_time (const jack_client_t *client);


/** /**
* @return estimated time in microseconds of the specified frame time
* @return the estimated time in microseconds of the specified frame time
*/ */
jack_time_t jack_frames_to_time(const jack_client_t *client, jack_nframes_t); jack_time_t jack_frames_to_time(const jack_client_t *client, jack_nframes_t);


/** /**
* @return estimated time in frames for the specified system time.
* @return the estimated time in frames for the specified system time.
*/ */
jack_nframes_t jack_time_to_frames(const jack_client_t *client, jack_time_t); jack_nframes_t jack_time_to_frames(const jack_client_t *client, jack_time_t);


/** /**
* @return return JACK's current system time in microseconds, * @return return JACK's current system time in microseconds,
* using JACK clock source.
* using the JACK clock source.
* *
* The value returned is guaranteed to be monotonic, but not linear. * The value returned is guaranteed to be monotonic, but not linear.
*
* This function is a client version of @function jack_get_microseconds().
*/ */
jack_time_t jack_get_time(); jack_time_t jack_get_time();




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

@@ -47,7 +47,7 @@ typedef struct _jack_midi_event
* @{ * @{
*/ */


/* Get number of events in a port buffer.
/** Get number of events in a port buffer.
* *
* @param port_buffer Port buffer from which to retrieve event. * @param port_buffer Port buffer from which to retrieve event.
* @return number of events inside @a port_buffer * @return number of events inside @a port_buffer


+ 2
- 2
common/jack/types.h View File

@@ -454,6 +454,7 @@ typedef enum {
JackBBTFrameOffset = 0x40, /**< Frame offset of BBT information */ JackBBTFrameOffset = 0x40, /**< Frame offset of BBT information */
JackAudioVideoRatio = 0x80, /**< audio frames per video frame */ JackAudioVideoRatio = 0x80, /**< audio frames per video frame */
JackVideoFrameOffset = 0x100 /**< frame offset of first video frame */ JackVideoFrameOffset = 0x100 /**< frame offset of first video frame */
} jack_position_bits_t; } jack_position_bits_t;


/** all valid position bits */ /** all valid position bits */
@@ -641,7 +642,6 @@ typedef struct {
double ticks_per_beat; double ticks_per_beat;
double beats_per_minute; double beats_per_minute;


}
jack_transport_info_t;
} jack_transport_info_t;


#endif /* __jack_types_h__ */ #endif /* __jack_types_h__ */

+ 4
- 1
common/wscript View File

@@ -119,7 +119,6 @@ def build(bld):
'JackExternalClient.cpp', 'JackExternalClient.cpp',
'JackFreewheelDriver.cpp', 'JackFreewheelDriver.cpp',
'JackInternalClient.cpp', 'JackInternalClient.cpp',
'JackLoopbackDriver.cpp',
'JackServer.cpp', 'JackServer.cpp',
'JackThreadedDriver.cpp', 'JackThreadedDriver.cpp',
'JackRestartThreadedDriver.cpp', 'JackRestartThreadedDriver.cpp',
@@ -226,6 +225,10 @@ def build(bld):
if bld.env['IS_SUN']: if bld.env['IS_SUN']:
clientlib.env.append_value("LINKFLAGS", "-lnsl -lsocket") clientlib.env.append_value("LINKFLAGS", "-lnsl -lsocket")


if bld.env['BUILD_WITH_32_64']:
print "create 32bit lib..."
clientlib32bit = clientlib.clone('lib32')
create_jack_process_obj(bld, 'netmanager', 'JackNetManager.cpp', serverlib) create_jack_process_obj(bld, 'netmanager', 'JackNetManager.cpp', serverlib)


create_jack_process_obj(bld, 'profiler', 'JackProfiler.cpp', serverlib) create_jack_process_obj(bld, 'profiler', 'JackProfiler.cpp', serverlib)


+ 65
- 32
dbus/audio_reserve.c View File

@@ -22,74 +22,107 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <assert.h> #include <assert.h>
#include <stdint.h>


#include "reserve.h" #include "reserve.h"
#include "audio_reserve.h" #include "audio_reserve.h"
#include "JackError.h" #include "JackError.h"


static DBusConnection* connection = NULL;
#define DEVICE_MAX 2

typedef struct reserved_audio_device {

char device_name[64];
rd_device * reserved_device;

} reserved_audio_device;

static DBusConnection* gConnection = NULL;
static reserved_audio_device gReservedDevice[DEVICE_MAX];
static int gReserveCount = 0;


SERVER_EXPORT int audio_reservation_init() SERVER_EXPORT int audio_reservation_init()
{ {
DBusError error; DBusError error;
dbus_error_init(&error); dbus_error_init(&error);


if (!(connection = dbus_bus_get(DBUS_BUS_SESSION, &error))) {
if (!(gConnection = dbus_bus_get(DBUS_BUS_SESSION, &error))) {
jack_error("Failed to connect to session bus for device reservation %s\n", error.message); jack_error("Failed to connect to session bus for device reservation %s\n", error.message);
return -1; return -1;
} }


jack_info("audio_reservation_init");
return 0; return 0;
} }


SERVER_EXPORT int audio_reservation_finish() SERVER_EXPORT int audio_reservation_finish()
{ {
if (connection)
dbus_connection_unref(connection);
if (gConnection) {
dbus_connection_unref(gConnection);
gConnection = NULL;
jack_info("audio_reservation_finish");
}
return 0; return 0;
} }


SERVER_EXPORT void* audio_acquire(int num)
SERVER_EXPORT bool audio_acquire(const char * device_name)
{ {
DBusError error;
rd_device* device;
char audio_name[32];
int e;

snprintf(audio_name, sizeof(audio_name) - 1, "Audio%d", num);
if ((e = rd_acquire(
&device,
connection,
audio_name,
DBusError error;
int ret;

// Open DBus connection first time
if (gReserveCount == 0)
audio_reservation_init();

assert(gReserveCount < DEVICE_MAX);

if ((ret= rd_acquire(
&gReservedDevice[gReserveCount].reserved_device,
gConnection,
device_name,
"Jack audio server", "Jack audio server",
INT32_MAX, INT32_MAX,
NULL, NULL,
&error)) < 0) { &error)) < 0) {


jack_error("Failed to acquire device name : %s error : %s", audio_name, (error.message ? error.message : strerror(-e)));
return NULL;
jack_error("Failed to acquire device name : %s error : %s", device_name, (error.message ? error.message : strerror(-ret)));
return false;
} }


jack_info("Acquire audio card %s", audio_name);
return (void*)device;
strcpy(gReservedDevice[gReserveCount].device_name, device_name);
gReserveCount++;
jack_info("Acquire audio card %s", device_name);
return true;
} }


SERVER_EXPORT void audio_reserve_loop()
SERVER_EXPORT void audio_release(const char * device_name)
{ {
if (connection) {
while (dbus_connection_read_write_dispatch (connection, -1))
; // empty loop body
int i;

// Look for corresponding reserved device
for (i = 0; i < DEVICE_MAX; i++) {
if (strcmp(gReservedDevice[i].device_name, device_name) == 0)
break;
}
if (i < DEVICE_MAX) {
jack_info("Released audio card %s", device_name);
rd_release(gReservedDevice[i].reserved_device);
} else {
jack_error("Audio card %s not found!!", device_name);
} }

// Close DBus connection last time
gReserveCount--;
if (gReserveCount == 0)
audio_reservation_finish();
} }


SERVER_EXPORT void audio_release(void* dev)
SERVER_EXPORT void audio_reserve_loop()
{ {
rd_device* device = (rd_device*)dev;
if (device) {
jack_info("Release audio card");
rd_release(device);
} else {
jack_info("No audio card to release...");
}
if (gConnection != NULL) {
while (dbus_connection_read_write_dispatch (gConnection, -1))
; // empty loop body
}
} }


+ 3
- 2
dbus/audio_reserve.h View File

@@ -20,6 +20,7 @@
#define __audio_reserve__ #define __audio_reserve__


#include "JackCompilerDeps.h" #include "JackCompilerDeps.h"
#include <stdbool.h>


#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@@ -28,8 +29,8 @@ extern "C" {
SERVER_EXPORT int audio_reservation_init(); SERVER_EXPORT int audio_reservation_init();
SERVER_EXPORT int audio_reservation_finish(); SERVER_EXPORT int audio_reservation_finish();


SERVER_EXPORT void* audio_acquire(int num);
SERVER_EXPORT void audio_release(void* dev);
SERVER_EXPORT bool audio_acquire(const char * device_name);
SERVER_EXPORT void audio_release(const char * device_name);
SERVER_EXPORT void audio_reserve_loop(); SERVER_EXPORT void audio_reserve_loop();


#ifdef __cplusplus #ifdef __cplusplus


+ 29
- 19
dbus/controller.c View File

@@ -280,9 +280,18 @@ jack_controller_switch_master(
return TRUE; return TRUE;
} }


/* TODO: use contianer with unique entries (dict) */
bool g_reserved_device_valid = false;
static rd_device * g_reserved_device;
#define DEVICE_MAX 2

typedef struct reserved_audio_device {

char device_name[64];
rd_device * reserved_device;

} reserved_audio_device;


int g_device_count = 0;
static reserved_audio_device g_reserved_device[DEVICE_MAX];


static static
bool bool
@@ -291,13 +300,8 @@ on_device_acquire(const char * device_name)
int ret; int ret;
DBusError error; DBusError error;


if (g_reserved_device_valid) {
jack_error("Ignoring reservation for more than one device (acquire)");
return false;
}

ret = rd_acquire( ret = rd_acquire(
&g_reserved_device,
&g_reserved_device[g_device_count].reserved_device,
g_connection, g_connection,
device_name, device_name,
"Jack audio server", "Jack audio server",
@@ -310,10 +314,9 @@ on_device_acquire(const char * device_name)
return false; return false;
} }


g_reserved_device_valid = true;
strcpy(g_reserved_device[g_device_count].device_name, device_name);
g_device_count++;
jack_info("Acquired audio card %s", device_name); jack_info("Acquired audio card %s", device_name);

return true; return true;
} }


@@ -321,15 +324,22 @@ static
void void
on_device_release(const char * device_name) on_device_release(const char * device_name)
{ {
if (!g_reserved_device_valid) {
jack_error("Ignoring reservation for more than one device(release)");
}
int i;


rd_release(g_reserved_device);

g_reserved_device_valid = false;
// Look for corresponding reserved device
for (i = 0; i < DEVICE_MAX; i++) {
if (strcmp(g_reserved_device[i].device_name, device_name) == 0)
break;
}
if (i < DEVICE_MAX) {
jack_info("Released audio card %s", device_name);
rd_release(g_reserved_device[i].reserved_device);
} else {
jack_error("Audio card %s not found!!", device_name);
}


jack_info("Released audio card %s", device_name);
g_device_count--;
} }


void * void *


+ 9
- 9
dbus/reserve.c View File

@@ -28,6 +28,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <assert.h> #include <assert.h>
#include <stdint.h>


#include "reserve.h" #include "reserve.h"


@@ -120,7 +121,7 @@ static DBusHandlerResult object_handler(


dbus_error_init(&error); dbus_error_init(&error);


d = userdata;
d = (rd_device*)userdata;
assert(d->ref >= 1); assert(d->ref >= 1);


if (dbus_message_is_method_call( if (dbus_message_is_method_call(
@@ -296,7 +297,7 @@ static DBusHandlerResult filter_handler(


dbus_error_init(&error); dbus_error_init(&error);


d = userdata;
d = (rd_device*)userdata;


if (dbus_message_is_signal(m, "org.freedesktop.DBus", "NameLost")) { if (dbus_message_is_signal(m, "org.freedesktop.DBus", "NameLost")) {
const char *name; const char *name;
@@ -352,10 +353,7 @@ oom:
return DBUS_HANDLER_RESULT_NEED_MEMORY; return DBUS_HANDLER_RESULT_NEED_MEMORY;
} }



static const struct DBusObjectPathVTable vtable ={
.message_function = object_handler
};
static DBusObjectPathVTable vtable;


int rd_acquire( int rd_acquire(
rd_device **_d, rd_device **_d,
@@ -372,6 +370,8 @@ int rd_acquire(
DBusMessage *m = NULL, *reply = NULL; DBusMessage *m = NULL, *reply = NULL;
dbus_bool_t good; dbus_bool_t good;


vtable.message_function = object_handler;

if (!error) if (!error)
error = &_error; error = &_error;


@@ -389,7 +389,7 @@ int rd_acquire(
if (!request_cb && priority != INT32_MAX) if (!request_cb && priority != INT32_MAX)
return -EINVAL; return -EINVAL;


if (!(d = calloc(sizeof(rd_device), 1)))
if (!(d = (rd_device *)calloc(sizeof(rd_device), 1)))
return -ENOMEM; return -ENOMEM;


d->ref = 1; d->ref = 1;
@@ -408,13 +408,13 @@ int rd_acquire(
d->connection = dbus_connection_ref(connection); d->connection = dbus_connection_ref(connection);
d->request_cb = request_cb; d->request_cb = request_cb;


if (!(d->service_name = malloc(sizeof(SERVICE_PREFIX) + strlen(device_name)))) {
if (!(d->service_name = (char*)malloc(sizeof(SERVICE_PREFIX) + strlen(device_name)))) {
r = -ENOMEM; r = -ENOMEM;
goto fail; goto fail;
} }
sprintf(d->service_name, SERVICE_PREFIX "%s", d->device_name); sprintf(d->service_name, SERVICE_PREFIX "%s", d->device_name);


if (!(d->object_path = malloc(sizeof(OBJECT_PREFIX) + strlen(device_name)))) {
if (!(d->object_path = (char*)malloc(sizeof(OBJECT_PREFIX) + strlen(device_name)))) {
r = -ENOMEM; r = -ENOMEM;
goto fail; goto fail;
} }


+ 15
- 0
dbus/reserve.h View File

@@ -28,6 +28,13 @@
#include <dbus/dbus.h> #include <dbus/dbus.h>
#include <inttypes.h> #include <inttypes.h>


# ifndef INT32_MIN
# define INT32_MIN (-2147483647-1)
# endif
# ifndef INT32_MAX
# define INT32_MAX (2147483647)
# endif

typedef struct rd_device rd_device; typedef struct rd_device rd_device;


/* Prototype for a function that is called whenever someone else wants /* Prototype for a function that is called whenever someone else wants
@@ -40,6 +47,10 @@ typedef int (*rd_request_cb_t)(
rd_device *d, rd_device *d,
int forced); /* Non-zero if an application forcibly took the lock away without asking. If this is the case then the return value of this call is ignored. */ int forced); /* Non-zero if an application forcibly took the lock away without asking. If this is the case then the return value of this call is ignored. */


#ifdef __cplusplus
extern "C" {
#endif

/* Try to lock the device. Returns 0 on success, a negative errno /* Try to lock the device. Returns 0 on success, a negative errno
* style return value on error. The DBus error might be set as well if * style return value on error. The DBus error might be set as well if
* the error was caused D-Bus. */ * the error was caused D-Bus. */
@@ -66,4 +77,8 @@ void rd_set_userdata(rd_device *d, void *userdata);
* userdata was set. */ * userdata was set. */
void* rd_get_userdata(rd_device *d); void* rd_get_userdata(rd_device *d);


#ifdef __cplusplus
} /* extern "C" */
#endif

#endif #endif

+ 4
- 2
dbus/wscript View File

@@ -32,10 +32,12 @@ def configure(conf):
if conf.is_defined('HAVE_EXPAT'): if conf.is_defined('HAVE_EXPAT'):
conf.env['LIB_EXPAT'] = ['expat'] conf.env['LIB_EXPAT'] = ['expat']


conf.env['BUILD_JACKDBUS'] = conf.is_defined('HAVE_EXPAT') and conf.is_defined('HAVE_DBUS_1')
conf.env['BUILD_JACKDBUS1'] = conf.is_defined('HAVE_EXPAT') and conf.is_defined('HAVE_DBUS_1')



def build(bld): def build(bld):
if bld.env["BUILD_JACKDBUS"] != True:

if bld.env['BUILD_JACKDBUS1'] != True:
return return


obj = bld.new_task_gen('cc', 'program') obj = bld.new_task_gen('cc', 'program')


+ 2
- 2
doxyfile View File

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


PROJECT_NUMBER = 1.9.3
PROJECT_NUMBER = 1.9.4


# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put. # base path where the generated documentation will be put.
@@ -304,7 +304,7 @@ WARN_LOGFILE =
# directories like "/usr/src/myproject". Separate the files or directories # directories like "/usr/src/myproject". Separate the files or directories
# with spaces. # with spaces.


INPUT = common posix macosx macosx/coreaudio/ linux linux/alsa windows windows/portaudio common/jack/control.h
INPUT = common posix macosx macosx/coreaudio/ linux linux/alsa windows windows/portaudio common/jack/


# If the value of the INPUT tag contains directories, you can use the # If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp


+ 7
- 2
linux/wscript View File

@@ -31,10 +31,14 @@ def build(bld):
jackd.includes = ['../linux', '../posix', '../common/jack', '../common', '../dbus'] jackd.includes = ['../linux', '../posix', '../common/jack', '../common', '../dbus']
jackd.defines = 'HAVE_CONFIG_H' jackd.defines = 'HAVE_CONFIG_H'
jackd.source = ['../common/Jackdmp.cpp'] jackd.source = ['../common/Jackdmp.cpp']
jackd.uselib = 'PTHREAD DL RT'
if bld.env['IS_LINUX'] and bld.env['BUILD_JACKDBUS']:
jackd.source += ['../dbus/reserve.c', '../dbus/audio_reserve.c']
jackd.uselib = 'PTHREAD DL RT DBUS-1'
else:
jackd.uselib = 'PTHREAD DL RT'
jackd.uselib_local = 'serverlib' jackd.uselib_local = 'serverlib'
jackd.target = 'jackd' jackd.target = 'jackd'

create_jack_driver_obj(bld, 'dummy', '../common/JackDummyDriver.cpp') create_jack_driver_obj(bld, 'dummy', '../common/JackDummyDriver.cpp')
alsa_driver_src = ['alsa/JackAlsaDriver.cpp', alsa_driver_src = ['alsa/JackAlsaDriver.cpp',
@@ -59,3 +63,4 @@ def build(bld):


create_jack_driver_obj(bld, 'net', '../common/JackNetDriver.cpp') create_jack_driver_obj(bld, 'net', '../common/JackNetDriver.cpp')


create_jack_driver_obj(bld, 'loopback', '../common/JackLoopbackDriver.cpp')

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

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

+ 1
- 1
macosx/JackMachSemaphore.h View File

@@ -47,7 +47,7 @@ class SERVER_EXPORT JackMachSemaphore : public detail::JackSynchro


public: public:


JackMachSemaphore(): fSemaphore(0)
JackMachSemaphore():JackSynchro(), fSemaphore(0)
{} {}


bool Signal(); bool Signal();


+ 1
- 3
macosx/JackPlatformPlug_os.h View File

@@ -35,7 +35,7 @@ namespace Jack


/* __JackPlatformMutex__ */ /* __JackPlatformMutex__ */
#include "JackPosixMutex.h" #include "JackPosixMutex.h"
namespace Jack {typedef JackPosixMutex JackMutex; }
namespace Jack { typedef JackPosixMutex JackMutex; }


/* __JackPlatformThread__ */ /* __JackPlatformThread__ */
#include "JackMachThread.h" #include "JackMachThread.h"
@@ -47,8 +47,6 @@ namespace Jack { typedef JackMachSemaphore JackSynchro; }


/* __JackPlatformProcessSync__ */ /* __JackPlatformProcessSync__ */
#include "JackProcessSync.h" #include "JackProcessSync.h"
//#include "JackMachProcessSync.h"
//namespace Jack { typedef JackMachProcessSync JackProcessSync; }
/* Only on windows a special JackProcessSync is used. It is directly defined by including JackProcessSync.h here */ /* Only on windows a special JackProcessSync is used. It is directly defined by including JackProcessSync.h here */


/* __JackPlatformServerChannel__ */ /* __JackPlatformServerChannel__ */


+ 422
- 186
macosx/Jackdmp.xcodeproj/project.pbxproj View File

@@ -34,8 +34,6 @@
4B35C6940D4733B9000DE7AE /* PBXTargetDependency */, 4B35C6940D4733B9000DE7AE /* PBXTargetDependency */,
4B35C6960D4733B9000DE7AE /* PBXTargetDependency */, 4B35C6960D4733B9000DE7AE /* PBXTargetDependency */,
4B0A29300D5210C4002EFF74 /* PBXTargetDependency */, 4B0A29300D5210C4002EFF74 /* PBXTargetDependency */,
4B35C6980D4733B9000DE7AE /* PBXTargetDependency */,
4B35C69A0D4733B9000DE7AE /* PBXTargetDependency */,
4B35C69C0D4733B9000DE7AE /* PBXTargetDependency */, 4B35C69C0D4733B9000DE7AE /* PBXTargetDependency */,
4B35C69E0D4733B9000DE7AE /* PBXTargetDependency */, 4B35C69E0D4733B9000DE7AE /* PBXTargetDependency */,
4B35C6A00D4733B9000DE7AE /* PBXTargetDependency */, 4B35C6A00D4733B9000DE7AE /* PBXTargetDependency */,
@@ -46,9 +44,7 @@
4BFA83380DF6AB540087B4E1 /* PBXTargetDependency */, 4BFA83380DF6AB540087B4E1 /* PBXTargetDependency */,
4BFA833A0DF6AB540087B4E1 /* PBXTargetDependency */, 4BFA833A0DF6AB540087B4E1 /* PBXTargetDependency */,
4BFA833C0DF6AB540087B4E1 /* PBXTargetDependency */, 4BFA833C0DF6AB540087B4E1 /* PBXTargetDependency */,
4B35C6A60D4733B9000DE7AE /* PBXTargetDependency */,
4B35C6A80D4733B9000DE7AE /* PBXTargetDependency */,
4B35C6AA0D4733B9000DE7AE /* PBXTargetDependency */,
4B43A8E91014618D00E52943 /* PBXTargetDependency */,
); );
name = "All Universal 32/64 bits"; name = "All Universal 32/64 bits";
productName = All; productName = All;
@@ -66,6 +62,7 @@
4BF339280F8B87800080FB5B /* PBXTargetDependency */, 4BF339280F8B87800080FB5B /* PBXTargetDependency */,
4B699DBC097D421700A18468 /* PBXTargetDependency */, 4B699DBC097D421700A18468 /* PBXTargetDependency */,
BA222AF20DC883F3001A17F4 /* PBXTargetDependency */, BA222AF20DC883F3001A17F4 /* PBXTargetDependency */,
4B43A8CD1014607100E52943 /* PBXTargetDependency */,
4BD624D30CBCF55700DE782F /* PBXTargetDependency */, 4BD624D30CBCF55700DE782F /* PBXTargetDependency */,
BA222AF00DC883EF001A17F4 /* PBXTargetDependency */, BA222AF00DC883EF001A17F4 /* PBXTargetDependency */,
4B19B32C0E23636E00DD4A82 /* PBXTargetDependency */, 4B19B32C0E23636E00DD4A82 /* PBXTargetDependency */,
@@ -86,13 +83,7 @@
4B0A28F40D520D11002EFF74 /* PBXTargetDependency */, 4B0A28F40D520D11002EFF74 /* PBXTargetDependency */,
4B363DE50DEB037F001F72D9 /* PBXTargetDependency */, 4B363DE50DEB037F001F72D9 /* PBXTargetDependency */,
4BFA99AC0AAAF41D009E916C /* PBXTargetDependency */, 4BFA99AC0AAAF41D009E916C /* PBXTargetDependency */,
4BFA99500AAAED90009E916C /* PBXTargetDependency */,
4BFA99520AAAED90009E916C /* PBXTargetDependency */,
4B5F25B30DEEA2430041E486 /* PBXTargetDependency */,
4BFA99540AAAED90009E916C /* PBXTargetDependency */, 4BFA99540AAAED90009E916C /* PBXTargetDependency */,
4BFA99580AAAED90009E916C /* PBXTargetDependency */,
4BFA995A0AAAED90009E916C /* PBXTargetDependency */,
4BFA995C0AAAED90009E916C /* PBXTargetDependency */,
4B363E750DEB0838001F72D9 /* PBXTargetDependency */, 4B363E750DEB0838001F72D9 /* PBXTargetDependency */,
4B363E770DEB0838001F72D9 /* PBXTargetDependency */, 4B363E770DEB0838001F72D9 /* PBXTargetDependency */,
4B363EF20DEB0965001F72D9 /* PBXTargetDependency */, 4B363EF20DEB0965001F72D9 /* PBXTargetDependency */,
@@ -215,7 +206,6 @@
4B35C4AE0D4731D1000DE7AE /* JackMachNotifyChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB298908AF450200D450D4 /* JackMachNotifyChannel.h */; }; 4B35C4AE0D4731D1000DE7AE /* JackMachNotifyChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB298908AF450200D450D4 /* JackMachNotifyChannel.h */; };
4B35C4AF0D4731D1000DE7AE /* JackMachServerChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB297808AF44ED00D450D4 /* JackMachServerChannel.h */; }; 4B35C4AF0D4731D1000DE7AE /* JackMachServerChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB297808AF44ED00D450D4 /* JackMachServerChannel.h */; };
4B35C4B00D4731D1000DE7AE /* JackMachServerNotifyChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB297A08AF44ED00D450D4 /* JackMachServerNotifyChannel.h */; }; 4B35C4B00D4731D1000DE7AE /* JackMachServerNotifyChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB297A08AF44ED00D450D4 /* JackMachServerNotifyChannel.h */; };
4B35C4B10D4731D1000DE7AE /* JackLoopbackDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF70ACB0908EE95008B75AD /* JackLoopbackDriver.h */; };
4B35C4B20D4731D1000DE7AE /* JackConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B66A8580934964500A89560 /* JackConstants.h */; }; 4B35C4B20D4731D1000DE7AE /* JackConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B66A8580934964500A89560 /* JackConstants.h */; };
4B35C4B30D4731D1000DE7AE /* JackTransportEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD4B4D409BACD9600750C0F /* JackTransportEngine.h */; }; 4B35C4B30D4731D1000DE7AE /* JackTransportEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD4B4D409BACD9600750C0F /* JackTransportEngine.h */; };
4B35C4B40D4731D1000DE7AE /* JackServerGlobals.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC2168D0A444BED00BDA09F /* JackServerGlobals.h */; }; 4B35C4B40D4731D1000DE7AE /* JackServerGlobals.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC2168D0A444BED00BDA09F /* JackServerGlobals.h */; };
@@ -260,7 +250,6 @@
4B35C4E70D4731D1000DE7AE /* JackMachNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB298808AF450200D450D4 /* JackMachNotifyChannel.cpp */; }; 4B35C4E70D4731D1000DE7AE /* JackMachNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB298808AF450200D450D4 /* JackMachNotifyChannel.cpp */; };
4B35C4E80D4731D1000DE7AE /* JackMachServerChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB297908AF44ED00D450D4 /* JackMachServerChannel.cpp */; }; 4B35C4E80D4731D1000DE7AE /* JackMachServerChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB297908AF44ED00D450D4 /* JackMachServerChannel.cpp */; };
4B35C4E90D4731D1000DE7AE /* JackMachServerNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB297708AF44ED00D450D4 /* JackMachServerNotifyChannel.cpp */; }; 4B35C4E90D4731D1000DE7AE /* JackMachServerNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB297708AF44ED00D450D4 /* JackMachServerNotifyChannel.cpp */; };
4B35C4EA0D4731D1000DE7AE /* JackLoopbackDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF70ACA0908EE95008B75AD /* JackLoopbackDriver.cpp */; };
4B35C4EB0D4731D1000DE7AE /* JackTransportEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */; }; 4B35C4EB0D4731D1000DE7AE /* JackTransportEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */; };
4B35C4EC0D4731D1000DE7AE /* JackServerAPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1F50834EFB000C94B91 /* JackServerAPI.cpp */; }; 4B35C4EC0D4731D1000DE7AE /* JackServerAPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1F50834EFB000C94B91 /* JackServerAPI.cpp */; };
4B35C4ED0D4731D1000DE7AE /* JackServerGlobals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC216880A444BDE00BDA09F /* JackServerGlobals.cpp */; }; 4B35C4ED0D4731D1000DE7AE /* JackServerGlobals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC216880A444BDE00BDA09F /* JackServerGlobals.cpp */; };
@@ -305,6 +294,10 @@
4B363F3E0DEB0C31001F72D9 /* showtime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363F3D0DEB0C31001F72D9 /* showtime.c */; }; 4B363F3E0DEB0C31001F72D9 /* showtime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363F3D0DEB0C31001F72D9 /* showtime.c */; };
4B363F760DEB0D7D001F72D9 /* impulse_grabber.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363F750DEB0D7D001F72D9 /* impulse_grabber.c */; }; 4B363F760DEB0D7D001F72D9 /* impulse_grabber.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363F750DEB0D7D001F72D9 /* impulse_grabber.c */; };
4B3F49080AD8503300491C6E /* cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B3F49070AD8503300491C6E /* cpu.c */; }; 4B3F49080AD8503300491C6E /* cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B3F49070AD8503300491C6E /* cpu.c */; };
4B43A8CA1014605000E52943 /* JackLoopbackDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B43A8C81014605000E52943 /* JackLoopbackDriver.cpp */; };
4B43A8CB1014605000E52943 /* JackLoopbackDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B43A8C91014605000E52943 /* JackLoopbackDriver.h */; };
4B43A8DF1014615800E52943 /* JackLoopbackDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B43A8C91014605000E52943 /* JackLoopbackDriver.h */; };
4B43A8E11014615800E52943 /* JackLoopbackDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B43A8C81014605000E52943 /* JackLoopbackDriver.cpp */; };
4B4CA9750E02CF9600F4BFDA /* JackRestartThreadedDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */; }; 4B4CA9750E02CF9600F4BFDA /* JackRestartThreadedDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */; };
4B4CA9760E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4CA9740E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp */; }; 4B4CA9760E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4CA9740E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp */; };
4B4CA9770E02CF9600F4BFDA /* JackRestartThreadedDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */; }; 4B4CA9770E02CF9600F4BFDA /* JackRestartThreadedDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */; };
@@ -420,7 +413,6 @@
4B699C77097D421600A18468 /* JackMachNotifyChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB298908AF450200D450D4 /* JackMachNotifyChannel.h */; }; 4B699C77097D421600A18468 /* JackMachNotifyChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB298908AF450200D450D4 /* JackMachNotifyChannel.h */; };
4B699C78097D421600A18468 /* JackMachServerChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB297808AF44ED00D450D4 /* JackMachServerChannel.h */; }; 4B699C78097D421600A18468 /* JackMachServerChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB297808AF44ED00D450D4 /* JackMachServerChannel.h */; };
4B699C79097D421600A18468 /* JackMachServerNotifyChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB297A08AF44ED00D450D4 /* JackMachServerNotifyChannel.h */; }; 4B699C79097D421600A18468 /* JackMachServerNotifyChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BFB297A08AF44ED00D450D4 /* JackMachServerNotifyChannel.h */; };
4B699C7A097D421600A18468 /* JackLoopbackDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF70ACB0908EE95008B75AD /* JackLoopbackDriver.h */; };
4B699C7B097D421600A18468 /* JackConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B66A8580934964500A89560 /* JackConstants.h */; }; 4B699C7B097D421600A18468 /* JackConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B66A8580934964500A89560 /* JackConstants.h */; };
4B699C7E097D421600A18468 /* JackMachPort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B799AD607899652003F3F15 /* JackMachPort.cpp */; }; 4B699C7E097D421600A18468 /* JackMachPort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B799AD607899652003F3F15 /* JackMachPort.cpp */; };
4B699C7F097D421600A18468 /* JackShmMem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1880834EE7900C94B91 /* JackShmMem.cpp */; }; 4B699C7F097D421600A18468 /* JackShmMem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1880834EE7900C94B91 /* JackShmMem.cpp */; };
@@ -450,7 +442,6 @@
4B699CA2097D421600A18468 /* JackMachNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB298808AF450200D450D4 /* JackMachNotifyChannel.cpp */; }; 4B699CA2097D421600A18468 /* JackMachNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB298808AF450200D450D4 /* JackMachNotifyChannel.cpp */; };
4B699CA3097D421600A18468 /* JackMachServerChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB297908AF44ED00D450D4 /* JackMachServerChannel.cpp */; }; 4B699CA3097D421600A18468 /* JackMachServerChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB297908AF44ED00D450D4 /* JackMachServerChannel.cpp */; };
4B699CA4097D421600A18468 /* JackMachServerNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB297708AF44ED00D450D4 /* JackMachServerNotifyChannel.cpp */; }; 4B699CA4097D421600A18468 /* JackMachServerNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB297708AF44ED00D450D4 /* JackMachServerNotifyChannel.cpp */; };
4B699CA5097D421600A18468 /* JackLoopbackDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF70ACA0908EE95008B75AD /* JackLoopbackDriver.cpp */; };
4B699CB4097D421600A18468 /* metro.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D16B0834EDF000C94B91 /* metro.c */; }; 4B699CB4097D421600A18468 /* metro.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D16B0834EDF000C94B91 /* metro.c */; };
4B699CC4097D421600A18468 /* lsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1690834EDE600C94B91 /* lsp.c */; }; 4B699CC4097D421600A18468 /* lsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1690834EDE600C94B91 /* lsp.c */; };
4B699CF6097D421600A18468 /* freewheel.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1710834EE0F00C94B91 /* freewheel.c */; }; 4B699CF6097D421600A18468 /* freewheel.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1710834EE0F00C94B91 /* freewheel.c */; };
@@ -509,11 +500,6 @@
4BA4ADB50E87AB2600F26C85 /* JackCoreAudioDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BE5FECC0E725C090020B576 /* JackCoreAudioDriver.h */; }; 4BA4ADB50E87AB2600F26C85 /* JackCoreAudioDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BE5FECC0E725C090020B576 /* JackCoreAudioDriver.h */; };
4BA692B30CBE4C2D00EAD520 /* ipload.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BA692B20CBE4C2D00EAD520 /* ipload.c */; }; 4BA692B30CBE4C2D00EAD520 /* ipload.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BA692B20CBE4C2D00EAD520 /* ipload.c */; };
4BA692D70CBE4CC600EAD520 /* ipunload.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BA692D60CBE4CC600EAD520 /* ipunload.c */; }; 4BA692D70CBE4CC600EAD520 /* ipunload.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BA692D60CBE4CC600EAD520 /* ipunload.c */; };
4BA7BDCE0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; };
4BA7BDCF0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; };
4BA7BDD00DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; };
4BA7BDD10DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; };
4BA7BDD20DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; };
4BA7BE0F0DC232A400AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; }; 4BA7BE0F0DC232A400AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; };
4BA7BE1A0DC2347500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; }; 4BA7BE1A0DC2347500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; };
4BA7BE200DC234FB00AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; }; 4BA7BE200DC234FB00AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; };
@@ -643,7 +629,6 @@
4BF5FBC90E878D24003D2374 /* JackMachTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF5FBC80E878D24003D2374 /* JackMachTime.c */; }; 4BF5FBC90E878D24003D2374 /* JackMachTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF5FBC80E878D24003D2374 /* JackMachTime.c */; };
4BF5FBCA0E878D24003D2374 /* JackMachTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF5FBC80E878D24003D2374 /* JackMachTime.c */; }; 4BF5FBCA0E878D24003D2374 /* JackMachTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF5FBC80E878D24003D2374 /* JackMachTime.c */; };
4BF5FBCB0E878D24003D2374 /* JackMachTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF5FBC80E878D24003D2374 /* JackMachTime.c */; }; 4BF5FBCB0E878D24003D2374 /* JackMachTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF5FBC80E878D24003D2374 /* JackMachTime.c */; };
4BFA5E920DEC4D9C00FA4CDB /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; };
4BFA5E9F0DEC4DD900FA4CDB /* testMutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFA5E9E0DEC4DD900FA4CDB /* testMutex.cpp */; }; 4BFA5E9F0DEC4DD900FA4CDB /* testMutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFA5E9E0DEC4DD900FA4CDB /* testMutex.cpp */; };
4BFA82850DF6A9E40087B4E1 /* evmon.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363E200DEB0401001F72D9 /* evmon.c */; }; 4BFA82850DF6A9E40087B4E1 /* evmon.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363E200DEB0401001F72D9 /* evmon.c */; };
4BFA82980DF6A9E40087B4E1 /* bufsize.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363E710DEB0808001F72D9 /* bufsize.c */; }; 4BFA82980DF6A9E40087B4E1 /* bufsize.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363E710DEB0808001F72D9 /* bufsize.c */; };
@@ -783,20 +768,6 @@
remoteGlobalIDString = 4B35C56C0D4731D2000DE7AE; remoteGlobalIDString = 4B35C56C0D4731D2000DE7AE;
remoteInfo = "jack_external_metro 64 bits"; remoteInfo = "jack_external_metro 64 bits";
}; };
4B35C6970D4733B9000DE7AE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B35C5780D4731D2000DE7AE;
remoteInfo = "testAtomic 64 bits";
};
4B35C6990D4733B9000DE7AE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B35C5880D4731D2000DE7AE;
remoteInfo = "testSem 64 bits";
};
4B35C69B0D4733B9000DE7AE /* PBXContainerItemProxy */ = { 4B35C69B0D4733B9000DE7AE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
@@ -832,27 +803,6 @@
remoteGlobalIDString = 4B35C5CC0D4731D2000DE7AE; remoteGlobalIDString = 4B35C5CC0D4731D2000DE7AE;
remoteInfo = "jack_unload 64 bits"; remoteInfo = "jack_unload 64 bits";
}; };
4B35C6A50D4733B9000DE7AE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B35C5D80D4731D2000DE7AE;
remoteInfo = "synchroServer 64 bits";
};
4B35C6A70D4733B9000DE7AE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B35C5EC0D4731D2000DE7AE;
remoteInfo = "synchroClient 64 bits";
};
4B35C6A90D4733B9000DE7AE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B35C6000D4731D2000DE7AE;
remoteInfo = "synchroServerClient 64 bits";
};
4B35C6AB0D4733B9000DE7AE /* PBXContainerItemProxy */ = { 4B35C6AB0D4733B9000DE7AE /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
@@ -923,6 +873,20 @@
remoteGlobalIDString = 4B363F680DEB0D4E001F72D9; remoteGlobalIDString = 4B363F680DEB0D4E001F72D9;
remoteInfo = "jack_impulse_grabber Universal"; remoteInfo = "jack_impulse_grabber Universal";
}; };
4B43A8CC1014607100E52943 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B43A8B010145F6F00E52943;
remoteInfo = "jack_loopback Universal";
};
4B43A8E81014618D00E52943 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B43A8DD1014615800E52943;
remoteInfo = "jack_loopback 64 bits";
};
4B5A1BCE0CD1CCC80005BF74 /* PBXContainerItemProxy */ = { 4B5A1BCE0CD1CCC80005BF74 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
@@ -937,13 +901,6 @@
remoteGlobalIDString = 4B5A1BD00CD1CCE10005BF74; remoteGlobalIDString = 4B5A1BD00CD1CCE10005BF74;
remoteInfo = jack_midisine; remoteInfo = jack_midisine;
}; };
4B5F25B20DEEA2430041E486 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4BFA5E8B0DEC4D9C00FA4CDB;
remoteInfo = "testMutex Universal";
};
4B699DB3097D421700A18468 /* PBXContainerItemProxy */ = { 4B699DB3097D421700A18468 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
@@ -1140,20 +1097,6 @@
remoteGlobalIDString = 4B699D03097D421600A18468; remoteGlobalIDString = 4B699D03097D421600A18468;
remoteInfo = "jack_external_metro Universal"; remoteInfo = "jack_external_metro Universal";
}; };
4BFA994F0AAAED90009E916C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B699D13097D421600A18468;
remoteInfo = "testAtomic Universal";
};
4BFA99510AAAED90009E916C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B699D27097D421600A18468;
remoteInfo = "testSem Universal";
};
4BFA99530AAAED90009E916C /* PBXContainerItemProxy */ = { 4BFA99530AAAED90009E916C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
@@ -1168,27 +1111,6 @@
remoteGlobalIDString = 4BE6C6910A3E096F005A203A; remoteGlobalIDString = 4BE6C6910A3E096F005A203A;
remoteInfo = "jack_test Universal"; remoteInfo = "jack_test Universal";
}; };
4BFA99570AAAED90009E916C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B699D4F097D421600A18468;
remoteInfo = "synchroServer Universal";
};
4BFA99590AAAED90009E916C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B699D67097D421600A18468;
remoteInfo = "synchroClient Universal";
};
4BFA995B0AAAED90009E916C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B699D7F097D421700A18468;
remoteInfo = "synchroServerClient Universal";
};
4BFA99AB0AAAF41D009E916C /* PBXContainerItemProxy */ = { 4BFA99AB0AAAF41D009E916C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
@@ -1320,6 +1242,10 @@
4B37C20906DF1FE20016E567 /* latency.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = latency.c; path = /Developer/Examples/CoreAudio/PublicUtility/latency.c; sourceTree = "<absolute>"; }; 4B37C20906DF1FE20016E567 /* latency.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = latency.c; path = /Developer/Examples/CoreAudio/PublicUtility/latency.c; sourceTree = "<absolute>"; };
4B3F49070AD8503300491C6E /* cpu.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = cpu.c; path = ../tests/cpu.c; sourceTree = SOURCE_ROOT; }; 4B3F49070AD8503300491C6E /* cpu.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = cpu.c; path = ../tests/cpu.c; sourceTree = SOURCE_ROOT; };
4B4259E5076B635E00C1ECE1 /* JackMacEngineRPC.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMacEngineRPC.cpp; sourceTree = SOURCE_ROOT; }; 4B4259E5076B635E00C1ECE1 /* JackMacEngineRPC.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMacEngineRPC.cpp; sourceTree = SOURCE_ROOT; };
4B43A8BA10145F6F00E52943 /* jack_loopback.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = jack_loopback.so; sourceTree = BUILT_PRODUCTS_DIR; };
4B43A8C81014605000E52943 /* JackLoopbackDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackLoopbackDriver.cpp; path = ../common/JackLoopbackDriver.cpp; sourceTree = SOURCE_ROOT; };
4B43A8C91014605000E52943 /* JackLoopbackDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackLoopbackDriver.h; path = ../common/JackLoopbackDriver.h; sourceTree = SOURCE_ROOT; };
4B43A8E71014615800E52943 /* jack_loopback.so */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = jack_loopback.so; sourceTree = BUILT_PRODUCTS_DIR; };
4B464301076CAC7700E5077C /* Jack-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "Jack-Info.plist"; sourceTree = SOURCE_ROOT; }; 4B464301076CAC7700E5077C /* Jack-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "Jack-Info.plist"; sourceTree = SOURCE_ROOT; };
4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackRestartThreadedDriver.h; path = ../common/JackRestartThreadedDriver.h; sourceTree = SOURCE_ROOT; }; 4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackRestartThreadedDriver.h; path = ../common/JackRestartThreadedDriver.h; sourceTree = SOURCE_ROOT; };
4B4CA9740E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackRestartThreadedDriver.cpp; path = ../common/JackRestartThreadedDriver.cpp; sourceTree = SOURCE_ROOT; }; 4B4CA9740E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackRestartThreadedDriver.cpp; path = ../common/JackRestartThreadedDriver.cpp; sourceTree = SOURCE_ROOT; };
@@ -1389,7 +1315,6 @@
4BA692B20CBE4C2D00EAD520 /* ipload.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ipload.c; path = "../example-clients/ipload.c"; sourceTree = SOURCE_ROOT; }; 4BA692B20CBE4C2D00EAD520 /* ipload.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ipload.c; path = "../example-clients/ipload.c"; sourceTree = SOURCE_ROOT; };
4BA692D40CBE4C9000EAD520 /* jack_unload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_unload; sourceTree = BUILT_PRODUCTS_DIR; }; 4BA692D40CBE4C9000EAD520 /* jack_unload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_unload; sourceTree = BUILT_PRODUCTS_DIR; };
4BA692D60CBE4CC600EAD520 /* ipunload.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ipunload.c; path = "../example-clients/ipunload.c"; sourceTree = SOURCE_ROOT; }; 4BA692D60CBE4CC600EAD520 /* ipunload.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ipunload.c; path = "../example-clients/ipunload.c"; sourceTree = SOURCE_ROOT; };
4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Jackservermp.framework; path = build/Development/Jackservermp.framework; sourceTree = SOURCE_ROOT; };
4BA7FEC30D8E76270017FF73 /* jack_server_control */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_server_control; sourceTree = BUILT_PRODUCTS_DIR; }; 4BA7FEC30D8E76270017FF73 /* jack_server_control */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_server_control; sourceTree = BUILT_PRODUCTS_DIR; };
4BA7FEC80D8E76650017FF73 /* control.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = control.c; path = "../example-clients/control.c"; sourceTree = SOURCE_ROOT; }; 4BA7FEC80D8E76650017FF73 /* control.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = control.c; path = "../example-clients/control.c"; sourceTree = SOURCE_ROOT; };
4BAB95B60B9E20B800A0C723 /* JackPortType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackPortType.cpp; path = ../common/JackPortType.cpp; sourceTree = SOURCE_ROOT; }; 4BAB95B60B9E20B800A0C723 /* JackPortType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackPortType.cpp; path = ../common/JackPortType.cpp; sourceTree = SOURCE_ROOT; };
@@ -1463,8 +1388,6 @@
4BF5FBC80E878D24003D2374 /* JackMachTime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = JackMachTime.c; sourceTree = SOURCE_ROOT; }; 4BF5FBC80E878D24003D2374 /* JackMachTime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = JackMachTime.c; sourceTree = SOURCE_ROOT; };
4BF6C1D508ACE64C001E2013 /* JackMachSemaphore.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMachSemaphore.cpp; sourceTree = SOURCE_ROOT; }; 4BF6C1D508ACE64C001E2013 /* JackMachSemaphore.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMachSemaphore.cpp; sourceTree = SOURCE_ROOT; };
4BF6C1D608ACE64C001E2013 /* JackMachSemaphore.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JackMachSemaphore.h; sourceTree = SOURCE_ROOT; }; 4BF6C1D608ACE64C001E2013 /* JackMachSemaphore.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JackMachSemaphore.h; sourceTree = SOURCE_ROOT; };
4BF70ACA0908EE95008B75AD /* JackLoopbackDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackLoopbackDriver.cpp; path = ../common/JackLoopbackDriver.cpp; sourceTree = SOURCE_ROOT; };
4BF70ACB0908EE95008B75AD /* JackLoopbackDriver.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackLoopbackDriver.h; path = ../common/JackLoopbackDriver.h; sourceTree = SOURCE_ROOT; };
4BF772FD08B3330F00149912 /* JackAtomic.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackAtomic.h; path = ../common/JackAtomic.h; sourceTree = SOURCE_ROOT; }; 4BF772FD08B3330F00149912 /* JackAtomic.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackAtomic.h; path = ../common/JackAtomic.h; sourceTree = SOURCE_ROOT; };
4BF8D1670834EDD900C94B91 /* zombie.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = zombie.c; path = "../example-clients/zombie.c"; sourceTree = SOURCE_ROOT; }; 4BF8D1670834EDD900C94B91 /* zombie.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = zombie.c; path = "../example-clients/zombie.c"; sourceTree = SOURCE_ROOT; };
4BF8D1690834EDE600C94B91 /* lsp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lsp.c; path = "..//example-clients/lsp.c"; sourceTree = SOURCE_ROOT; }; 4BF8D1690834EDE600C94B91 /* lsp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lsp.c; path = "..//example-clients/lsp.c"; sourceTree = SOURCE_ROOT; };
@@ -1813,6 +1736,20 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
4B43A8B510145F6F00E52943 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
4B43A8E21014615800E52943 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
4B5A1BB50CD1CB9E0005BF74 /* Frameworks */ = { 4B5A1BB50CD1CB9E0005BF74 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@@ -1903,7 +1840,6 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
4BA7BDCE0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -1911,7 +1847,6 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
4BA7BDCF0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -1926,7 +1861,6 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
4BA7BDD00DC22F4500AA3457 /* Jackservermp.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -1934,7 +1868,6 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
4BA7BDD10DC22F4500AA3457 /* Jackservermp.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -1942,7 +1875,6 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
4BA7BDD20DC22F4500AA3457 /* Jackservermp.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -2055,7 +1987,6 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
4BFA5E920DEC4D9C00FA4CDB /* Jackservermp.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -2128,7 +2059,6 @@
0249A662FF388D9811CA2CEA /* External Frameworks and Libraries */ = { 0249A662FF388D9811CA2CEA /* External Frameworks and Libraries */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */,
4BCC87950D57168300A7FEB1 /* Accelerate.framework */, 4BCC87950D57168300A7FEB1 /* Accelerate.framework */,
); );
name = "External Frameworks and Libraries"; name = "External Frameworks and Libraries";
@@ -2252,6 +2182,8 @@
4BDCDBE81001FD2D00B15929 /* netmanager.so */, 4BDCDBE81001FD2D00B15929 /* netmanager.so */,
4BDCDBFF1001FD7300B15929 /* audioadapter.so */, 4BDCDBFF1001FD7300B15929 /* audioadapter.so */,
4BDCDC251001FDE300B15929 /* netadapter.so */, 4BDCDC251001FDE300B15929 /* netadapter.so */,
4B43A8BA10145F6F00E52943 /* jack_loopback.so */,
4B43A8E71014615800E52943 /* jack_loopback.so */,
); );
name = Products; name = Products;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -2548,12 +2480,12 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
4B869B3D08C8D21C001CF041 /* driver_interface.h */, 4B869B3D08C8D21C001CF041 /* driver_interface.h */,
4B43A8C91014605000E52943 /* JackLoopbackDriver.h */,
4B43A8C81014605000E52943 /* JackLoopbackDriver.cpp */,
4B869B4208C8D22F001CF041 /* JackDriverLoader.h */, 4B869B4208C8D22F001CF041 /* JackDriverLoader.h */,
4B869D7F08C9CB00001CF041 /* JackDriverLoader.cpp */, 4B869D7F08C9CB00001CF041 /* JackDriverLoader.cpp */,
4BF8D1B50834EEE400C94B91 /* JackDriver.h */, 4BF8D1B50834EEE400C94B91 /* JackDriver.h */,
4BF8D1B60834EEE400C94B91 /* JackDriver.cpp */, 4BF8D1B60834EEE400C94B91 /* JackDriver.cpp */,
4BF70ACB0908EE95008B75AD /* JackLoopbackDriver.h */,
4BF70ACA0908EE95008B75AD /* JackLoopbackDriver.cpp */,
4BC3988A08B3CF6C00B6F371 /* JackDummyDriver.h */, 4BC3988A08B3CF6C00B6F371 /* JackDummyDriver.h */,
4BC3988908B3CF6C00B6F371 /* JackDummyDriver.cpp */, 4BC3988908B3CF6C00B6F371 /* JackDummyDriver.cpp */,
4BF3390D0F8B86AF0080FB5B /* MIDI */, 4BF3390D0F8B86AF0080FB5B /* MIDI */,
@@ -2893,7 +2825,6 @@
4B35C4AE0D4731D1000DE7AE /* JackMachNotifyChannel.h in Headers */, 4B35C4AE0D4731D1000DE7AE /* JackMachNotifyChannel.h in Headers */,
4B35C4AF0D4731D1000DE7AE /* JackMachServerChannel.h in Headers */, 4B35C4AF0D4731D1000DE7AE /* JackMachServerChannel.h in Headers */,
4B35C4B00D4731D1000DE7AE /* JackMachServerNotifyChannel.h in Headers */, 4B35C4B00D4731D1000DE7AE /* JackMachServerNotifyChannel.h in Headers */,
4B35C4B10D4731D1000DE7AE /* JackLoopbackDriver.h in Headers */,
4B35C4B20D4731D1000DE7AE /* JackConstants.h in Headers */, 4B35C4B20D4731D1000DE7AE /* JackConstants.h in Headers */,
4B35C4B30D4731D1000DE7AE /* JackTransportEngine.h in Headers */, 4B35C4B30D4731D1000DE7AE /* JackTransportEngine.h in Headers */,
4B35C4B40D4731D1000DE7AE /* JackServerGlobals.h in Headers */, 4B35C4B40D4731D1000DE7AE /* JackServerGlobals.h in Headers */,
@@ -3139,6 +3070,22 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
4B43A8B110145F6F00E52943 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
4B43A8CB1014605000E52943 /* JackLoopbackDriver.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
4B43A8DE1014615800E52943 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
4B43A8DF1014615800E52943 /* JackLoopbackDriver.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
4B5A1BB20CD1CB9E0005BF74 /* Headers */ = { 4B5A1BB20CD1CB9E0005BF74 /* Headers */ = {
isa = PBXHeadersBuildPhase; isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@@ -3259,7 +3206,6 @@
4B699C77097D421600A18468 /* JackMachNotifyChannel.h in Headers */, 4B699C77097D421600A18468 /* JackMachNotifyChannel.h in Headers */,
4B699C78097D421600A18468 /* JackMachServerChannel.h in Headers */, 4B699C78097D421600A18468 /* JackMachServerChannel.h in Headers */,
4B699C79097D421600A18468 /* JackMachServerNotifyChannel.h in Headers */, 4B699C79097D421600A18468 /* JackMachServerNotifyChannel.h in Headers */,
4B699C7A097D421600A18468 /* JackLoopbackDriver.h in Headers */,
4B699C7B097D421600A18468 /* JackConstants.h in Headers */, 4B699C7B097D421600A18468 /* JackConstants.h in Headers */,
4BD4B4D809BACD9600750C0F /* JackTransportEngine.h in Headers */, 4BD4B4D809BACD9600750C0F /* JackTransportEngine.h in Headers */,
4BC2168E0A444BED00BDA09F /* JackServerGlobals.h in Headers */, 4BC2168E0A444BED00BDA09F /* JackServerGlobals.h in Headers */,
@@ -4262,6 +4208,40 @@
productReference = 4B363F720DEB0D4E001F72D9 /* jack_impulse_grabber */; productReference = 4B363F720DEB0D4E001F72D9 /* jack_impulse_grabber */;
productType = "com.apple.product-type.tool"; productType = "com.apple.product-type.tool";
}; };
4B43A8B010145F6F00E52943 /* jack_loopback Universal */ = {
isa = PBXNativeTarget;
buildConfigurationList = 4B43A8B610145F6F00E52943 /* Build configuration list for PBXNativeTarget "jack_loopback Universal" */;
buildPhases = (
4B43A8B110145F6F00E52943 /* Headers */,
4B43A8B310145F6F00E52943 /* Sources */,
4B43A8B510145F6F00E52943 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = "jack_loopback Universal";
productName = jack_coreaudio;
productReference = 4B43A8BA10145F6F00E52943 /* jack_loopback.so */;
productType = "com.apple.product-type.library.dynamic";
};
4B43A8DD1014615800E52943 /* jack_loopback 64 bits */ = {
isa = PBXNativeTarget;
buildConfigurationList = 4B43A8E31014615800E52943 /* Build configuration list for PBXNativeTarget "jack_loopback 64 bits" */;
buildPhases = (
4B43A8DE1014615800E52943 /* Headers */,
4B43A8E01014615800E52943 /* Sources */,
4B43A8E21014615800E52943 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = "jack_loopback 64 bits";
productName = jack_coreaudio;
productReference = 4B43A8E71014615800E52943 /* jack_loopback.so */;
productType = "com.apple.product-type.library.dynamic";
};
4B5A1BB10CD1CB9E0005BF74 /* jack_midiseq Universal */ = { 4B5A1BB10CD1CB9E0005BF74 /* jack_midiseq Universal */ = {
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 4B5A1BB70CD1CB9E0005BF74 /* Build configuration list for PBXNativeTarget "jack_midiseq Universal" */; buildConfigurationList = 4B5A1BB70CD1CB9E0005BF74 /* Build configuration list for PBXNativeTarget "jack_midiseq Universal" */;
@@ -5103,6 +5083,7 @@
4B699D97097D421700A18468 /* jack_coreaudio Universal */, 4B699D97097D421700A18468 /* jack_coreaudio Universal */,
4B978DB10A31CF4A009E2DD1 /* jack_portaudio Universal */, 4B978DB10A31CF4A009E2DD1 /* jack_portaudio Universal */,
4BF339020F8B864B0080FB5B /* jack_coremidi Universal */, 4BF339020F8B864B0080FB5B /* jack_coremidi Universal */,
4B43A8B010145F6F00E52943 /* jack_loopback Universal */,
4B699DA6097D421700A18468 /* jack_dummy Universal */, 4B699DA6097D421700A18468 /* jack_dummy Universal */,
BA222AC50DC88132001A17F4 /* jack_net Universal */, BA222AC50DC88132001A17F4 /* jack_net Universal */,
4BD623ED0CBCF0F000DE782F /* inprocess Universal */, 4BD623ED0CBCF0F000DE782F /* inprocess Universal */,
@@ -5141,12 +5122,13 @@
4B35C6140D4731D2000DE7AE /* jack_coreaudio 64 bits */, 4B35C6140D4731D2000DE7AE /* jack_coreaudio 64 bits */,
4B35C61F0D4731D2000DE7AE /* jack_portaudio 64 bits */, 4B35C61F0D4731D2000DE7AE /* jack_portaudio 64 bits */,
4B35C62A0D4731D2000DE7AE /* jack_dummy 64 bits */, 4B35C62A0D4731D2000DE7AE /* jack_dummy 64 bits */,
4B35C6350D4731D3000DE7AE /* inprocess 64 bits */,
4B43A8DD1014615800E52943 /* jack_loopback 64 bits */,
4BDCDB931001FB9C00B15929 /* jack_coremidi 64 bits */, 4BDCDB931001FB9C00B15929 /* jack_coremidi 64 bits */,
4BDCDBB71001FCC000B15929 /* jack_net 64 bits */, 4BDCDBB71001FCC000B15929 /* jack_net 64 bits */,
4BDCDBD71001FD2D00B15929 /* netmanager 64 bits */, 4BDCDBD71001FD2D00B15929 /* netmanager 64 bits */,
4BDCDBEC1001FD7300B15929 /* audioadapter 64 bits */, 4BDCDBEC1001FD7300B15929 /* audioadapter 64 bits */,
4BDCDC0F1001FDE300B15929 /* netadapter 64 bits */, 4BDCDC0F1001FDE300B15929 /* netadapter 64 bits */,
4B35C6350D4731D3000DE7AE /* inprocess 64 bits */,
); );
}; };
/* End PBXProject section */ /* End PBXProject section */
@@ -5723,7 +5705,6 @@
4B35C4E70D4731D1000DE7AE /* JackMachNotifyChannel.cpp in Sources */, 4B35C4E70D4731D1000DE7AE /* JackMachNotifyChannel.cpp in Sources */,
4B35C4E80D4731D1000DE7AE /* JackMachServerChannel.cpp in Sources */, 4B35C4E80D4731D1000DE7AE /* JackMachServerChannel.cpp in Sources */,
4B35C4E90D4731D1000DE7AE /* JackMachServerNotifyChannel.cpp in Sources */, 4B35C4E90D4731D1000DE7AE /* JackMachServerNotifyChannel.cpp in Sources */,
4B35C4EA0D4731D1000DE7AE /* JackLoopbackDriver.cpp in Sources */,
4B35C4EB0D4731D1000DE7AE /* JackTransportEngine.cpp in Sources */, 4B35C4EB0D4731D1000DE7AE /* JackTransportEngine.cpp in Sources */,
4B35C4EC0D4731D1000DE7AE /* JackServerAPI.cpp in Sources */, 4B35C4EC0D4731D1000DE7AE /* JackServerAPI.cpp in Sources */,
4B35C4ED0D4731D1000DE7AE /* JackServerGlobals.cpp in Sources */, 4B35C4ED0D4731D1000DE7AE /* JackServerGlobals.cpp in Sources */,
@@ -5992,6 +5973,22 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
4B43A8B310145F6F00E52943 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
4B43A8CA1014605000E52943 /* JackLoopbackDriver.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
4B43A8E01014615800E52943 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
4B43A8E11014615800E52943 /* JackLoopbackDriver.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
4B5A1BB30CD1CB9E0005BF74 /* Sources */ = { 4B5A1BB30CD1CB9E0005BF74 /* Sources */ = {
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@@ -6103,7 +6100,6 @@
4B699CA2097D421600A18468 /* JackMachNotifyChannel.cpp in Sources */, 4B699CA2097D421600A18468 /* JackMachNotifyChannel.cpp in Sources */,
4B699CA3097D421600A18468 /* JackMachServerChannel.cpp in Sources */, 4B699CA3097D421600A18468 /* JackMachServerChannel.cpp in Sources */,
4B699CA4097D421600A18468 /* JackMachServerNotifyChannel.cpp in Sources */, 4B699CA4097D421600A18468 /* JackMachServerNotifyChannel.cpp in Sources */,
4B699CA5097D421600A18468 /* JackLoopbackDriver.cpp in Sources */,
4BD4B4D909BACD9600750C0F /* JackTransportEngine.cpp in Sources */, 4BD4B4D909BACD9600750C0F /* JackTransportEngine.cpp in Sources */,
4BC216850A444BAD00BDA09F /* JackServerAPI.cpp in Sources */, 4BC216850A444BAD00BDA09F /* JackServerAPI.cpp in Sources */,
4BC216890A444BDE00BDA09F /* JackServerGlobals.cpp in Sources */, 4BC216890A444BDE00BDA09F /* JackServerGlobals.cpp in Sources */,
@@ -6537,16 +6533,6 @@
target = 4B35C56C0D4731D2000DE7AE /* jack_external_metro 64 bits */; target = 4B35C56C0D4731D2000DE7AE /* jack_external_metro 64 bits */;
targetProxy = 4B35C6950D4733B9000DE7AE /* PBXContainerItemProxy */; targetProxy = 4B35C6950D4733B9000DE7AE /* PBXContainerItemProxy */;
}; };
4B35C6980D4733B9000DE7AE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4B35C5780D4731D2000DE7AE /* testAtomic 64 bits */;
targetProxy = 4B35C6970D4733B9000DE7AE /* PBXContainerItemProxy */;
};
4B35C69A0D4733B9000DE7AE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4B35C5880D4731D2000DE7AE /* testSem 64 bits */;
targetProxy = 4B35C6990D4733B9000DE7AE /* PBXContainerItemProxy */;
};
4B35C69C0D4733B9000DE7AE /* PBXTargetDependency */ = { 4B35C69C0D4733B9000DE7AE /* PBXTargetDependency */ = {
isa = PBXTargetDependency; isa = PBXTargetDependency;
target = 4B35C59C0D4731D2000DE7AE /* zombie 64 bits */; target = 4B35C59C0D4731D2000DE7AE /* zombie 64 bits */;
@@ -6572,21 +6558,6 @@
target = 4B35C5CC0D4731D2000DE7AE /* jack_unload 64 bits */; target = 4B35C5CC0D4731D2000DE7AE /* jack_unload 64 bits */;
targetProxy = 4B35C6A30D4733B9000DE7AE /* PBXContainerItemProxy */; targetProxy = 4B35C6A30D4733B9000DE7AE /* PBXContainerItemProxy */;
}; };
4B35C6A60D4733B9000DE7AE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4B35C5D80D4731D2000DE7AE /* synchroServer 64 bits */;
targetProxy = 4B35C6A50D4733B9000DE7AE /* PBXContainerItemProxy */;
};
4B35C6A80D4733B9000DE7AE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4B35C5EC0D4731D2000DE7AE /* synchroClient 64 bits */;
targetProxy = 4B35C6A70D4733B9000DE7AE /* PBXContainerItemProxy */;
};
4B35C6AA0D4733B9000DE7AE /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4B35C6000D4731D2000DE7AE /* synchroServerClient 64 bits */;
targetProxy = 4B35C6A90D4733B9000DE7AE /* PBXContainerItemProxy */;
};
4B35C6AC0D4733B9000DE7AE /* PBXTargetDependency */ = { 4B35C6AC0D4733B9000DE7AE /* PBXTargetDependency */ = {
isa = PBXTargetDependency; isa = PBXTargetDependency;
target = 4B35C6140D4731D2000DE7AE /* jack_coreaudio 64 bits */; target = 4B35C6140D4731D2000DE7AE /* jack_coreaudio 64 bits */;
@@ -6637,6 +6608,16 @@
target = 4B363F680DEB0D4E001F72D9 /* jack_impulse_grabber Universal */; target = 4B363F680DEB0D4E001F72D9 /* jack_impulse_grabber Universal */;
targetProxy = 4B363F770DEB0D85001F72D9 /* PBXContainerItemProxy */; targetProxy = 4B363F770DEB0D85001F72D9 /* PBXContainerItemProxy */;
}; };
4B43A8CD1014607100E52943 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4B43A8B010145F6F00E52943 /* jack_loopback Universal */;
targetProxy = 4B43A8CC1014607100E52943 /* PBXContainerItemProxy */;
};
4B43A8E91014618D00E52943 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4B43A8DD1014615800E52943 /* jack_loopback 64 bits */;
targetProxy = 4B43A8E81014618D00E52943 /* PBXContainerItemProxy */;
};
4B5A1BCF0CD1CCC80005BF74 /* PBXTargetDependency */ = { 4B5A1BCF0CD1CCC80005BF74 /* PBXTargetDependency */ = {
isa = PBXTargetDependency; isa = PBXTargetDependency;
target = 4B5A1BB10CD1CB9E0005BF74 /* jack_midiseq Universal */; target = 4B5A1BB10CD1CB9E0005BF74 /* jack_midiseq Universal */;
@@ -6647,11 +6628,6 @@
target = 4B5A1BD00CD1CCE10005BF74 /* jack_midisine Universal */; target = 4B5A1BD00CD1CCE10005BF74 /* jack_midisine Universal */;
targetProxy = 4B5A1BE10CD1CD730005BF74 /* PBXContainerItemProxy */; targetProxy = 4B5A1BE10CD1CD730005BF74 /* PBXContainerItemProxy */;
}; };
4B5F25B30DEEA2430041E486 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4BFA5E8B0DEC4D9C00FA4CDB /* testMutex Universal */;
targetProxy = 4B5F25B20DEEA2430041E486 /* PBXContainerItemProxy */;
};
4B699DB4097D421700A18468 /* PBXTargetDependency */ = { 4B699DB4097D421700A18468 /* PBXTargetDependency */ = {
isa = PBXTargetDependency; isa = PBXTargetDependency;
target = 4B699C4C097D421600A18468 /* Jackservermp.framework Universal */; target = 4B699C4C097D421600A18468 /* Jackservermp.framework Universal */;
@@ -6792,16 +6768,6 @@
target = 4B699D03097D421600A18468 /* jack_external_metro Universal */; target = 4B699D03097D421600A18468 /* jack_external_metro Universal */;
targetProxy = 4BFA994D0AAAED90009E916C /* PBXContainerItemProxy */; targetProxy = 4BFA994D0AAAED90009E916C /* PBXContainerItemProxy */;
}; };
4BFA99500AAAED90009E916C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4B699D13097D421600A18468 /* testAtomic Universal */;
targetProxy = 4BFA994F0AAAED90009E916C /* PBXContainerItemProxy */;
};
4BFA99520AAAED90009E916C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4B699D27097D421600A18468 /* testSem Universal */;
targetProxy = 4BFA99510AAAED90009E916C /* PBXContainerItemProxy */;
};
4BFA99540AAAED90009E916C /* PBXTargetDependency */ = { 4BFA99540AAAED90009E916C /* PBXTargetDependency */ = {
isa = PBXTargetDependency; isa = PBXTargetDependency;
target = 4B699D3F097D421600A18468 /* zombie Universal */; target = 4B699D3F097D421600A18468 /* zombie Universal */;
@@ -6812,21 +6778,6 @@
target = 4BE6C6910A3E096F005A203A /* jack_test Universal */; target = 4BE6C6910A3E096F005A203A /* jack_test Universal */;
targetProxy = 4BFA99550AAAED90009E916C /* PBXContainerItemProxy */; targetProxy = 4BFA99550AAAED90009E916C /* PBXContainerItemProxy */;
}; };
4BFA99580AAAED90009E916C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4B699D4F097D421600A18468 /* synchroServer Universal */;
targetProxy = 4BFA99570AAAED90009E916C /* PBXContainerItemProxy */;
};
4BFA995A0AAAED90009E916C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4B699D67097D421600A18468 /* synchroClient Universal */;
targetProxy = 4BFA99590AAAED90009E916C /* PBXContainerItemProxy */;
};
4BFA995C0AAAED90009E916C /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 4B699D7F097D421700A18468 /* synchroServerClient Universal */;
targetProxy = 4BFA995B0AAAED90009E916C /* PBXContainerItemProxy */;
};
4BFA99AC0AAAF41D009E916C /* PBXTargetDependency */ = { 4BFA99AC0AAAF41D009E916C /* PBXTargetDependency */ = {
isa = PBXTargetDependency; isa = PBXTargetDependency;
target = 4BFA99980AAAF3B0009E916C /* jdelay Universal */; target = 4BFA99980AAAF3B0009E916C /* jdelay Universal */;
@@ -10115,11 +10066,7 @@
"-framework", "-framework",
Jackservermp, Jackservermp,
"-framework", "-framework",
CoreAudio,
"-framework",
CoreServices, CoreServices,
"-framework",
AudioUnit,
); );
OTHER_REZFLAGS = ""; OTHER_REZFLAGS = "";
PREBINDING = NO; PREBINDING = NO;
@@ -11073,6 +11020,287 @@
}; };
name = Default; name = Default;
}; };
4B43A8B710145F6F00E52943 /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
i386,
ppc,
);
COPY_PHASE_STRIP = NO;
DEBUGGING_SYMBOLS = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
EXECUTABLE_EXTENSION = so;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_MODEL_TUNING = G4;
GCC_OPTIMIZATION_LEVEL = 0;
HEADER_SEARCH_PATHS = (
../common,
../common/jack,
.,
../posix,
);
INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib;
OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = (
"-framework",
Jackservermp,
"-framework",
CoreAudio,
"-framework",
CoreServices,
"-framework",
AudioUnit,
);
OTHER_REZFLAGS = "";
PREBINDING = NO;
PRODUCT_NAME = jack_dummy;
SDKROOT = "";
SECTORDER_FLAGS = "";
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
ZERO_LINK = YES;
};
name = Development;
};
4B43A8B810145F6F00E52943 /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
i386,
ppc,
);
COPY_PHASE_STRIP = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
EXECUTABLE_EXTENSION = so;
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G4;
HEADER_SEARCH_PATHS = (
../common,
../common/jack,
.,
../posix,
);
INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib;
MACOSX_DEPLOYMENT_TARGET = 10.4;
OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = (
"-framework",
Jackservermp,
"-framework",
CoreServices,
);
OTHER_REZFLAGS = "";
PREBINDING = NO;
PRODUCT_NAME = jack_loopback;
SDKROOT = "";
SECTORDER_FLAGS = "";
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
ZERO_LINK = NO;
};
name = Deployment;
};
4B43A8B910145F6F00E52943 /* Default */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
i386,
ppc,
);
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
EXECUTABLE_EXTENSION = so;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G4;
INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib;
OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = (
"-framework",
Jackdmp,
"-framework",
AudioToolBox,
"-framework",
CoreAudio,
"-framework",
CoreServices,
"-framework",
AudioUnit,
);
OTHER_REZFLAGS = "";
PREBINDING = NO;
PRODUCT_NAME = jack_dummy;
SDKROOT = "";
SECTORDER_FLAGS = "";
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
};
name = Default;
};
4B43A8E41014615800E52943 /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
i386,
ppc,
);
COPY_PHASE_STRIP = NO;
DEBUGGING_SYMBOLS = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
EXECUTABLE_EXTENSION = so;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_MODEL_TUNING = G4;
GCC_OPTIMIZATION_LEVEL = 0;
HEADER_SEARCH_PATHS = (
../common,
../common/jack,
.,
../posix,
);
INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib;
OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = (
"-framework",
Jackservermp,
"-framework",
CoreAudio,
"-framework",
CoreServices,
"-framework",
AudioUnit,
);
OTHER_REZFLAGS = "";
PREBINDING = NO;
PRODUCT_NAME = jack_dummy;
SDKROOT = "";
SECTORDER_FLAGS = "";
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
ZERO_LINK = YES;
};
name = Development;
};
4B43A8E51014615800E52943 /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)";
ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "ppc i386 ppc64 x86_64";
COPY_PHASE_STRIP = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
EXECUTABLE_EXTENSION = so;
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G4;
HEADER_SEARCH_PATHS = (
../common,
../common/jack,
.,
../posix,
);
INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib;
MACOSX_DEPLOYMENT_TARGET = 10.4;
OTHER_CFLAGS = "-DJACK_32_64";
OTHER_CPLUSPLUSFLAGS = (
"-DMACH_RPC_MACH_SEMA",
"-DJACK_32_64",
);
OTHER_LDFLAGS = (
"-framework",
Jackservermp,
"-framework",
CoreServices,
);
OTHER_REZFLAGS = "";
PREBINDING = NO;
PRODUCT_NAME = jack_loopback;
SDKROOT = "";
SECTORDER_FLAGS = "";
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
ZERO_LINK = NO;
};
name = Deployment;
};
4B43A8E61014615800E52943 /* Default */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = (
i386,
ppc,
);
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
EXECUTABLE_EXTENSION = so;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = G4;
INSTALL_PATH = /usr/local/lib;
LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib;
OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = (
"-framework",
Jackdmp,
"-framework",
AudioToolBox,
"-framework",
CoreAudio,
"-framework",
CoreServices,
"-framework",
AudioUnit,
);
OTHER_REZFLAGS = "";
PREBINDING = NO;
PRODUCT_NAME = jack_dummy;
SDKROOT = "";
SECTORDER_FLAGS = "";
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
};
name = Default;
};
4B5A1BB80CD1CB9E0005BF74 /* Development */ = { 4B5A1BB80CD1CB9E0005BF74 /* Development */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
@@ -13504,11 +13732,7 @@
"-framework", "-framework",
Jackservermp, Jackservermp,
"-framework", "-framework",
CoreAudio,
"-framework",
CoreServices, CoreServices,
"-framework",
AudioUnit,
); );
OTHER_REZFLAGS = ""; OTHER_REZFLAGS = "";
PREBINDING = NO; PREBINDING = NO;
@@ -14370,11 +14594,7 @@
"-framework", "-framework",
Jackservermp, Jackservermp,
"-framework", "-framework",
CoreAudio,
"-framework",
CoreServices, CoreServices,
"-framework",
AudioUnit,
); );
OTHER_REZFLAGS = ""; OTHER_REZFLAGS = "";
PREBINDING = NO; PREBINDING = NO;
@@ -16108,11 +16328,7 @@
"-framework", "-framework",
Jackservermp, Jackservermp,
"-framework", "-framework",
CoreAudio,
"-framework",
CoreServices, CoreServices,
"-framework",
AudioUnit,
); );
OTHER_REZFLAGS = ""; OTHER_REZFLAGS = "";
PREBINDING = NO; PREBINDING = NO;
@@ -16691,6 +16907,26 @@
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Default; defaultConfigurationName = Default;
}; };
4B43A8B610145F6F00E52943 /* Build configuration list for PBXNativeTarget "jack_loopback Universal" */ = {
isa = XCConfigurationList;
buildConfigurations = (
4B43A8B710145F6F00E52943 /* Development */,
4B43A8B810145F6F00E52943 /* Deployment */,
4B43A8B910145F6F00E52943 /* Default */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Default;
};
4B43A8E31014615800E52943 /* Build configuration list for PBXNativeTarget "jack_loopback 64 bits" */ = {
isa = XCConfigurationList;
buildConfigurations = (
4B43A8E41014615800E52943 /* Development */,
4B43A8E51014615800E52943 /* Deployment */,
4B43A8E61014615800E52943 /* Default */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Default;
};
4B5A1BB70CD1CB9E0005BF74 /* Build configuration list for PBXNativeTarget "jack_midiseq Universal" */ = { 4B5A1BB70CD1CB9E0005BF74 /* Build configuration list for PBXNativeTarget "jack_midiseq Universal" */ = {
isa = XCConfigurationList; isa = XCConfigurationList;
buildConfigurations = ( buildConfigurations = (


+ 2
- 0
macosx/install_jackdmp View File

@@ -15,7 +15,9 @@ sudo cp jackdmp /usr/local/bin
# Copy drivers # Copy drivers
sudo install -d /usr/local/lib/jackmp sudo install -d /usr/local/lib/jackmp
sudo cp jack_coreaudio.so /usr/local/lib/jackmp sudo cp jack_coreaudio.so /usr/local/lib/jackmp
sudo cp jack_coremidi.so /usr/local/lib/jackmp
sudo cp jack_dummy.so /usr/local/lib/jackmp sudo cp jack_dummy.so /usr/local/lib/jackmp
sudo cp jack_loopback.so /usr/local/lib/jackmp
[ -f jack_net.so ] && sudo cp jack_net.so /usr/local/lib/jackmp [ -f jack_net.so ] && sudo cp jack_net.so /usr/local/lib/jackmp


# Copy tools # Copy tools


+ 2
- 0
macosx/wscript View File

@@ -58,6 +58,8 @@ def build(bld):


create_jack_driver_obj(bld, 'dummy', '../common/JackDummyDriver.cpp') create_jack_driver_obj(bld, 'dummy', '../common/JackDummyDriver.cpp')


create_jack_driver_obj(bld, 'loopback', '../common/JackLoopbackDriver.cpp')

create_jack_audio_driver_obj(bld, 'coreaudio', 'coreaudio/JackCoreAudioDriver.cpp') create_jack_audio_driver_obj(bld, 'coreaudio', 'coreaudio/JackCoreAudioDriver.cpp')


create_jack_midi_driver_obj(bld, 'coremidi', 'coremidi/JackCoreMidiDriver.cpp') create_jack_midi_driver_obj(bld, 'coremidi', 'coremidi/JackCoreMidiDriver.cpp')


+ 1
- 2
posix/JackCompilerDeps_os.h View File

@@ -34,8 +34,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#if (__GNUC__< 4) /* Does not seem to work with GCC 3.XX serie */ #if (__GNUC__< 4) /* Does not seem to work with GCC 3.XX serie */
#define POST_PACKED_STRUCTURE #define POST_PACKED_STRUCTURE
#elif defined(JACK_32_64) #elif defined(JACK_32_64)
//#define POST_PACKED_STRUCTURE __attribute__((__packed__))
#define POST_PACKED_STRUCTURE __attribute__((__aligned__(32)))
#define POST_PACKED_STRUCTURE __attribute__((__packed__))
#else #else
#define POST_PACKED_STRUCTURE #define POST_PACKED_STRUCTURE
#endif #endif


+ 1
- 1
posix/JackFifo.h View File

@@ -48,7 +48,7 @@ class SERVER_EXPORT JackFifo : public detail::JackSynchro


public: public:


JackFifo(): fFifo( -1)
JackFifo():JackSynchro(), fFifo(-1)
{} {}


bool Signal(); bool Signal();


+ 1
- 1
posix/JackPosixSemaphore.h View File

@@ -46,7 +46,7 @@ class SERVER_EXPORT JackPosixSemaphore : public detail::JackSynchro


public: public:


JackPosixSemaphore(): fSemaphore(NULL)
JackPosixSemaphore():JackSynchro(), fSemaphore(NULL)
{} {}


bool Signal(); bool Signal();


+ 147
- 173
solaris/oss/JackBoomerDriver.cpp View File

@@ -61,7 +61,8 @@ struct OSSCycleTable {
}; };


OSSCycleTable gCycleTable; OSSCycleTable gCycleTable;
int gCycleCount = 0;
int gCycleReadCount = 0;
int gCycleWriteCount = 0;


#endif #endif


@@ -229,6 +230,26 @@ void JackBoomerDriver::DisplayDeviceInfo()
} }
} }


JackBoomerDriver::JackBoomerDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table)
: JackAudioDriver(name, alias, engine, table),
fInFD(-1), fOutFD(-1), fBits(0),
fSampleFormat(0), fNperiods(0), fRWMode(0), fExcl(false),
fInputBufferSize(0), fOutputBufferSize(0),
fInputBuffer(NULL), fOutputBuffer(NULL),
fInputThread(&fInputHandler), fOutputThread(&fOutputHandler),
fInputHandler(this), fOutputHandler(this)
{
sem_init(&fReadSema, 0, 0);
sem_init(&fWriteSema, 0, 0);
}

JackBoomerDriver::~JackBoomerDriver()
{
sem_destroy(&fReadSema);
sem_destroy(&fWriteSema);
}

int JackBoomerDriver::OpenInput() int JackBoomerDriver::OpenInput()
{ {
int flags = 0; int flags = 0;
@@ -380,33 +401,25 @@ int JackBoomerDriver::Open(jack_nframes_t nframes,
const char* playback_driver_uid, const char* playback_driver_uid,
jack_nframes_t capture_latency, jack_nframes_t capture_latency,
jack_nframes_t playback_latency, jack_nframes_t playback_latency,
int bits,
bool ignorehwbuf)
int bits)
{ {

if (playing && !capturing) {
jack_error("Playback only mode is not yet supported, use duplex instead");
return -1;
}

// Generic JackAudioDriver Open // Generic JackAudioDriver Open
if (JackAudioDriver::Open(nframes, samplerate, capturing, playing, inchannels, outchannels, monitor, if (JackAudioDriver::Open(nframes, samplerate, capturing, playing, inchannels, outchannels, monitor,
capture_driver_uid, playback_driver_uid, capture_latency, playback_latency) != 0) { capture_driver_uid, playback_driver_uid, capture_latency, playback_latency) != 0) {
return -1; return -1;
} else { } else {


if (fEngineControl->fSyncMode) {
jack_error("Cannot run in synchronous mode, remove the -S parameter for jackd");
if (!fEngineControl->fSyncMode) {
jack_error("Cannot run in asynchronous mode, use the -S parameter for jackd");
return -1; return -1;
} }
fRWMode |= ((capturing) ? kRead : 0); fRWMode |= ((capturing) ? kRead : 0);
fRWMode |= ((playing) ? kWrite : 0); fRWMode |= ((playing) ? kWrite : 0);
fBits = bits; fBits = bits;
fIgnoreHW = ignorehwbuf;
fNperiods = user_nperiods;
fExcl = excl; fExcl = excl;

fNperiods = user_nperiods;
#ifdef JACK_MONITOR #ifdef JACK_MONITOR
// Force memory page in // Force memory page in
memset(&gCycleTable, 0, sizeof(gCycleTable)); memset(&gCycleTable, 0, sizeof(gCycleTable));
@@ -428,7 +441,7 @@ int JackBoomerDriver::Close()
if (file) { if (file) {
jack_info("Writing OSS driver timing data...."); jack_info("Writing OSS driver timing data....");
for (int i = 1; i < gCycleCount; i++) {
for (int i = 1; i < std::min(gCycleReadCount, gCycleWriteCount); i++) {
int d1 = gCycleTable.fTable[i].fAfterRead - gCycleTable.fTable[i].fBeforeRead; int d1 = gCycleTable.fTable[i].fAfterRead - gCycleTable.fTable[i].fBeforeRead;
int d2 = gCycleTable.fTable[i].fAfterReadConvert - gCycleTable.fTable[i].fAfterRead; int d2 = gCycleTable.fTable[i].fAfterReadConvert - gCycleTable.fTable[i].fAfterRead;
int d3 = gCycleTable.fTable[i].fAfterWrite - gCycleTable.fTable[i].fBeforeWrite; int d3 = gCycleTable.fTable[i].fAfterWrite - gCycleTable.fTable[i].fBeforeWrite;
@@ -487,15 +500,6 @@ int JackBoomerDriver::OpenAux()
return -1; return -1;
} }
// Prepare ringbuffers used for output
if (fPlaybackChannels > 0) {
fRingBuffer = new jack_ringbuffer_t*[fPlaybackChannels];
for (int i = 0; i < fPlaybackChannels; i++) {
fRingBuffer[i] = jack_ringbuffer_create(fOutputBufferSize * 2);
jack_ringbuffer_read_advance(fRingBuffer[i], fOutputBufferSize);
}
}

DisplayDeviceInfo(); DisplayDeviceInfo();
return 0; return 0;
} }
@@ -519,15 +523,6 @@ void JackBoomerDriver::CloseAux()
if (fOutputBuffer) if (fOutputBuffer)
free(fOutputBuffer); free(fOutputBuffer);
fOutputBuffer = NULL; fOutputBuffer = NULL;
for (int i = 0; i < fPlaybackChannels; i++) {
if (fRingBuffer[i])
jack_ringbuffer_free(fRingBuffer[i]);
fRingBuffer[i] = NULL;
}
delete [] fRingBuffer;
fRingBuffer = NULL;
} }


int JackBoomerDriver::Start() int JackBoomerDriver::Start()
@@ -535,10 +530,18 @@ int JackBoomerDriver::Start()
jack_log("JackBoomerDriver::Start"); jack_log("JackBoomerDriver::Start");
JackAudioDriver::Start(); JackAudioDriver::Start();


// Start input thread only when needed
if (fInFD > 0) {
if (fInputThread.StartSync() < 0) {
jack_error("Cannot start input thread");
return -1;
}
}

// Start output thread only when needed // Start output thread only when needed
if (fOutFD > 0) { if (fOutFD > 0) {
if (fThread.StartSync() < 0) {
jack_error("Cannot start thread");
if (fOutputThread.StartSync() < 0) {
jack_error("Cannot start output thread");
return -1; return -1;
} }
} }
@@ -548,42 +551,56 @@ int JackBoomerDriver::Start()


int JackBoomerDriver::Stop() int JackBoomerDriver::Stop()
{ {
// Stop input thread only when needed
if (fInFD > 0) {
fInputThread.Kill();
}

// Stop output thread only when needed // Stop output thread only when needed
if (fOutFD > 0) { if (fOutFD > 0) {
return fThread.Kill();
} else {
return 0;
fOutputThread.Kill();
} }

return 0;
} }


int JackBoomerDriver::Read()
bool JackBoomerDriver::JackBoomerDriverInput::Init()
{ {
if (fInFD < 0) {
// Keep begin cycle time
JackDriver::CycleTakeBeginTime();
return 0;
if (fDriver->IsRealTime()) {
jack_log("JackBoomerDriverInput::Init IsRealTime");
if (fDriver->fInputThread.AcquireRealTime(GetEngineControl()->fServerPriority) < 0) {
jack_error("AcquireRealTime error");
} else {
set_threaded_log_function();
}
} }
return true;
}

bool JackBoomerDriver::JackBoomerDriverInput::Execute()
{
#ifdef JACK_MONITOR #ifdef JACK_MONITOR
gCycleTable.fTable[gCycleCount].fBeforeRead = GetMicroSeconds();
gCycleTable.fTable[gCycleReadCount].fBeforeRead = GetMicroSeconds();
#endif #endif


audio_errinfo ei_in; audio_errinfo ei_in;
ssize_t count = ::read(fInFD, fInputBuffer, fInputBufferSize);
ssize_t count = ::read(fDriver->fInFD, fDriver->fInputBuffer, fDriver->fInputBufferSize);
#ifdef JACK_MONITOR #ifdef JACK_MONITOR
if (count > 0 && count != (int)fInputBufferSize)
jack_log("JackBoomerDriver::Read count = %ld", count / (fSampleSize * fCaptureChannels));
gCycleTable.fTable[gCycleCount].fAfterRead = GetMicroSeconds();
if (count > 0 && count != (int)fDriver->fInputBufferSize)
jack_log("JackBoomerDriverInput::Execute count = %ld", count / (fDriver->fSampleSize * fDriver->fCaptureChannels));
gCycleTable.fTable[gCycleReadCount].fAfterRead = GetMicroSeconds();
#endif #endif
// XRun detection // XRun detection
if (ioctl(fInFD, SNDCTL_DSP_GETERROR, &ei_in) == 0) {
if (ioctl(fDriver->fInFD, SNDCTL_DSP_GETERROR, &ei_in) == 0) {


if (ei_in.rec_overruns > 0 ) { if (ei_in.rec_overruns > 0 ) {
jack_error("JackBoomerDriver::Read overruns");
jack_error("JackBoomerDriverInput::Execute overruns");
jack_time_t cur_time = GetMicroSeconds(); jack_time_t cur_time = GetMicroSeconds();
NotifyXRun(cur_time, float(cur_time - fBeginDateUst)); // Better this value than nothing...
fDriver->NotifyXRun(cur_time, float(cur_time - fDriver->fBeginDateUst)); // Better this value than nothing...
} }


if (ei_in.rec_errorcount > 0 && ei_in.rec_lasterror != 0) { if (ei_in.rec_errorcount > 0 && ei_in.rec_lasterror != 0) {
@@ -592,47 +609,40 @@ int JackBoomerDriver::Read()
} }
if (count < 0) { if (count < 0) {
jack_log("JackBoomerDriver::Read error = %s", strerror(errno));
return -1;
} else if (count < (int)fInputBufferSize) {
jack_error("JackBoomerDriver::Read error bytes read = %ld", count);
return -1;
jack_log("JackBoomerDriverInput::Execute error = %s", strerror(errno));
} else if (count < (int)fDriver->fInputBufferSize) {
jack_error("JackBoomerDriverInput::Execute error bytes read = %ld", count);
} else { } else {


// Keep begin cycle time // Keep begin cycle time
JackDriver::CycleTakeBeginTime();
for (int i = 0; i < fCaptureChannels; i++) {
if (fGraphManager->GetConnectionsNum(fCapturePortList[i]) > 0) {
CopyAndConvertIn(GetInputBuffer(i), fInputBuffer, fEngineControl->fBufferSize, i, fCaptureChannels, fBits);
fDriver->CycleTakeBeginTime();
for (int i = 0; i < fDriver->fCaptureChannels; i++) {
if (fDriver->fGraphManager->GetConnectionsNum(fDriver->fCapturePortList[i]) > 0) {
CopyAndConvertIn(fDriver->GetInputBuffer(i), fDriver->fInputBuffer, fDriver->fEngineControl->fBufferSize, i, fDriver->fCaptureChannels, fDriver->fBits);
} }
} }


#ifdef JACK_MONITOR #ifdef JACK_MONITOR
gCycleTable.fTable[gCycleCount].fAfterReadConvert = GetMicroSeconds();
gCycleTable.fTable[gCycleReadCount].fAfterReadConvert = GetMicroSeconds();
gCycleReadCount = (gCycleReadCount == CYCLE_POINTS - 1) ? gCycleReadCount: gCycleReadCount + 1;
#endif #endif
return 0;
} }
}


int JackBoomerDriver::Write()
{
for (int i = 0; i < fPlaybackChannels; i++) {
if (fGraphManager->GetConnectionsNum(fPlaybackPortList[i]) > 0) {
if (jack_ringbuffer_write(fRingBuffer[i], (char*)GetOutputBuffer(i), fOutputBufferSize) < fOutputBufferSize) {
jack_log("JackBoomerDriver::Write ringbuffer full");
}
}
// Duplex : sync with write thread
if (fDriver->fInFD > 0 && fDriver->fOutFD > 0) {
fDriver->SynchronizeRead();
} else {
// Otherwise direct process
fDriver->Process();
} }

return 0;
return true;
} }


bool JackBoomerDriver::Init()
bool JackBoomerDriver::JackBoomerDriverOutput::Init()
{ {
if (IsRealTime()) {
jack_log("JackBoomerDriver::Init IsRealTime");
if (fThread.AcquireRealTime(GetEngineControl()->fServerPriority) < 0) {
if (fDriver->IsRealTime()) {
jack_log("JackBoomerDriverOutput::Init IsRealTime");
if (fDriver->fOutputThread.AcquireRealTime(GetEngineControl()->fServerPriority) < 0) {
jack_error("AcquireRealTime error"); jack_error("AcquireRealTime error");
} else { } else {
set_threaded_log_function(); set_threaded_log_function();
@@ -640,83 +650,64 @@ bool JackBoomerDriver::Init()
} }


// Maybe necessary to write an empty output buffer first time : see http://manuals.opensound.com/developer/fulldup.c.html // Maybe necessary to write an empty output buffer first time : see http://manuals.opensound.com/developer/fulldup.c.html
memset(fOutputBuffer, 0, fOutputBufferSize);
memset(fDriver->fOutputBuffer, 0, fDriver->fOutputBufferSize);


// Prefill ouput buffer // Prefill ouput buffer
if (fOutFD > 0) {
for (int i = 0; i < fNperiods; i++) {
ssize_t count = ::write(fOutFD, fOutputBuffer, fOutputBufferSize);
if (count < (int)fOutputBufferSize) {
if (fDriver->fOutFD > 0) {
for (int i = 0; i < fDriver->fNperiods; i++) {
ssize_t count = ::write(fDriver->fOutFD, fDriver->fOutputBuffer, fDriver->fOutputBufferSize);
if (count < (int)fDriver->fOutputBufferSize) {
jack_error("JackBoomerDriver::Write error bytes written = %ld", count); jack_error("JackBoomerDriver::Write error bytes written = %ld", count);
} }
} }
int delay; int delay;
if (ioctl(fOutFD, SNDCTL_DSP_GETODELAY, &delay) == -1) {
if (ioctl(fDriver->fOutFD, SNDCTL_DSP_GETODELAY, &delay) == -1) {
jack_error("JackBoomerDriver::Write error get out delay : %s@%i, errno = %d", __FILE__, __LINE__, errno); jack_error("JackBoomerDriver::Write error get out delay : %s@%i, errno = %d", __FILE__, __LINE__, errno);
} }
delay /= fSampleSize * fPlaybackChannels;
delay /= fDriver->fSampleSize * fDriver->fPlaybackChannels;
jack_info("JackBoomerDriver::Write output latency frames = %ld", delay); jack_info("JackBoomerDriver::Write output latency frames = %ld", delay);
} }
return true; return true;
} }


bool JackBoomerDriver::Execute()
bool JackBoomerDriver::JackBoomerDriverOutput::Execute()
{ {
memset(fOutputBuffer, 0, fOutputBufferSize);
for (int i = 0; i < fPlaybackChannels; i++) {
if (fGraphManager->GetConnectionsNum(fPlaybackPortList[i]) > 0) {

jack_ringbuffer_data_t ring_buffer_data[2];
jack_ringbuffer_get_read_vector(fRingBuffer[i], ring_buffer_data);

unsigned int available_frames = (ring_buffer_data[0].len + ring_buffer_data[1].len) / sizeof(float);
jack_log("Output available = %ld", available_frames);

unsigned int needed_bytes = fOutputBufferSize;
float* output = (float*)fOutputBuffer;
for (int j = 0; j < 2; j++) {
unsigned int consumed_bytes = std::min(needed_bytes, ring_buffer_data[j].len);
CopyAndConvertOut(output, (float*)ring_buffer_data[j].buf, consumed_bytes / sizeof(float), i, fPlaybackChannels, fBits);
output += consumed_bytes / sizeof(float);
needed_bytes -= consumed_bytes;
}
memset(fDriver->fOutputBuffer, 0, fDriver->fOutputBufferSize);


if (needed_bytes > 0) {
jack_error("JackBoomerDriver::Execute missing frames = %ld", needed_bytes / sizeof(float));
}

jack_ringbuffer_read_advance(fRingBuffer[i], fOutputBufferSize - needed_bytes);
#ifdef JACK_MONITOR
gCycleTable.fTable[gCycleWriteCount].fBeforeWriteConvert = GetMicroSeconds();
#endif
for (int i = 0; i < fDriver->fPlaybackChannels; i++) {
if (fDriver->fGraphManager->GetConnectionsNum(fDriver->fPlaybackPortList[i]) > 0) {
CopyAndConvertOut(fDriver->fOutputBuffer, fDriver->GetOutputBuffer(i), fDriver->fEngineControl->fBufferSize, i, fDriver->fPlaybackChannels, fDriver->fBits);
} }
} }
#ifdef JACK_MONITOR #ifdef JACK_MONITOR
gCycleTable.fTable[gCycleCount].fBeforeWrite = GetMicroSeconds();
gCycleTable.fTable[gCycleWriteCount].fBeforeWrite = GetMicroSeconds();
#endif #endif


// Keep end cycle time
JackDriver::CycleTakeEndTime();
ssize_t count = ::write(fOutFD, fOutputBuffer, fOutputBufferSize);
ssize_t count = ::write(fDriver->fOutFD, fDriver->fOutputBuffer, fDriver->fOutputBufferSize);


#ifdef JACK_MONITOR #ifdef JACK_MONITOR
if (count > 0 && count != (int)fOutputBufferSize)
jack_log("JackBoomerDriver::Execute count = %ld", count / (fSampleSize * fPlaybackChannels));
gCycleTable.fTable[gCycleCount].fAfterWrite = GetMicroSeconds();
gCycleCount = (gCycleCount == CYCLE_POINTS - 1) ? gCycleCount: gCycleCount + 1;
if (count > 0 && count != (int)fDriver->fOutputBufferSize)
jack_log("JackBoomerDriverOutput::Execute count = %ld", count / (fDriver->fSampleSize * fDriver->fPlaybackChannels));
gCycleTable.fTable[gCycleWriteCount].fAfterWrite = GetMicroSeconds();
gCycleWriteCount = (gCycleWriteCount == CYCLE_POINTS - 1) ? gCycleWriteCount: gCycleWriteCount + 1;
#endif #endif


// XRun detection // XRun detection
audio_errinfo ei_out; audio_errinfo ei_out;
if (ioctl(fOutFD, SNDCTL_DSP_GETERROR, &ei_out) == 0) {
if (ioctl(fDriver->fOutFD, SNDCTL_DSP_GETERROR, &ei_out) == 0) {


if (ei_out.play_underruns > 0) { if (ei_out.play_underruns > 0) {
jack_error("JackBoomerDriver::Execute underruns");
jack_error("JackBoomerDriverOutput::Execute underruns");
jack_time_t cur_time = GetMicroSeconds(); jack_time_t cur_time = GetMicroSeconds();
NotifyXRun(cur_time, float(cur_time - fBeginDateUst)); // Better this value than nothing...
fDriver->NotifyXRun(cur_time, float(cur_time - fDriver->fBeginDateUst)); // Better this value than nothing...
} }


if (ei_out.play_errorcount > 0 && ei_out.play_lasterror != 0) { if (ei_out.play_errorcount > 0 && ei_out.play_lasterror != 0) {
@@ -725,14 +716,35 @@ bool JackBoomerDriver::Execute()
} }
if (count < 0) { if (count < 0) {
jack_log("JackBoomerDriver::Execute error = %s", strerror(errno));
} else if (count < (int)fOutputBufferSize) {
jack_error("JackBoomerDriver::Execute error bytes written = %ld", count);
jack_log("JackBoomerDriverOutput::Execute error = %s", strerror(errno));
} else if (count < (int)fDriver->fOutputBufferSize) {
jack_error("JackBoomerDriverOutput::Execute error bytes written = %ld", count);
} }
// Duplex : sync with read thread
if (fDriver->fInFD > 0 && fDriver->fOutFD > 0) {
fDriver->SynchronizeWrite();
} else {
// Otherwise direct process
fDriver->CycleTakeBeginTime();
fDriver->Process();
}
return true; return true;
} }


void JackBoomerDriver::SynchronizeRead()
{
sem_wait(&fWriteSema);
Process();
sem_post(&fReadSema);
}

void JackBoomerDriver::SynchronizeWrite()
{
sem_post(&fWriteSema);
sem_wait(&fReadSema);
}

int JackBoomerDriver::SetBufferSize(jack_nframes_t buffer_size) int JackBoomerDriver::SetBufferSize(jack_nframes_t buffer_size)
{ {
CloseAux(); CloseAux();
@@ -740,30 +752,6 @@ int JackBoomerDriver::SetBufferSize(jack_nframes_t buffer_size)
return OpenAux(); return OpenAux();
} }


int JackBoomerDriver::ProcessAsync()
{
// Read input buffers for the current cycle
if (Read() < 0) {
jack_error("JackBoomerDriver::ProcessAsync: read error, skip cycle");
return 0; // Skip cycle, but continue processing...
}

// Write output buffers from the previous cycle
if (Write() < 0) {
jack_error("JackBoomerDriver::ProcessAsync: write error, skip cycle");
return 0; // Skip cycle, but continue processing...
}

if (fIsMaster) {
ProcessGraphAsync();
} else {
fGraphManager->ResumeRefNum(&fClientControl, fSynchroTable);
}
// Keep end cycle time
JackDriver::CycleTakeEndTime();
return 0;
}


} // end of namespace } // end of namespace


@@ -831,7 +819,7 @@ SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor()
desc->params[i].value.ui = OSS_DRIVER_DEF_OUTS; desc->params[i].value.ui = OSS_DRIVER_DEF_OUTS;
strcpy(desc->params[i].short_desc, "Playback channels"); strcpy(desc->params[i].short_desc, "Playback channels");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); strcpy(desc->params[i].long_desc, desc->params[i].short_desc);
i++; i++;
strcpy(desc->params[i].name, "excl"); strcpy(desc->params[i].name, "excl");
desc->params[i].character = 'e'; desc->params[i].character = 'e';
@@ -863,15 +851,7 @@ SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor()
strcpy(desc->params[i].value.str, OSS_DRIVER_DEF_DEV); strcpy(desc->params[i].value.str, OSS_DRIVER_DEF_DEV);
strcpy(desc->params[i].short_desc, "OSS device name"); strcpy(desc->params[i].short_desc, "OSS device name");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc); strcpy(desc->params[i].long_desc, desc->params[i].short_desc);
i++;
strcpy(desc->params[i].name, "ignorehwbuf");
desc->params[i].character = 'b';
desc->params[i].type = JackDriverParamBool;
desc->params[i].value.i = false;
strcpy(desc->params[i].short_desc, "Ignore hardware period size");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc);
i++; i++;
strcpy(desc->params[i].name, "input-latency"); strcpy(desc->params[i].name, "input-latency");
desc->params[i].character = 'I'; desc->params[i].character = 'I';
@@ -907,7 +887,6 @@ EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine
unsigned int nperiods = OSS_DRIVER_DEF_NPERIODS; unsigned int nperiods = OSS_DRIVER_DEF_NPERIODS;
const JSList *node; const JSList *node;
const jack_driver_param_t *param; const jack_driver_param_t *param;
bool ignorehwbuf = false;
jack_nframes_t systemic_input_latency = 0; jack_nframes_t systemic_input_latency = 0;
jack_nframes_t systemic_output_latency = 0; jack_nframes_t systemic_output_latency = 0;
@@ -959,11 +938,7 @@ EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine
playback_pcm_name = strdup (param->value.str); playback_pcm_name = strdup (param->value.str);
capture_pcm_name = strdup (param->value.str); capture_pcm_name = strdup (param->value.str);
break; break;
case 'b':
ignorehwbuf = true;
break;

case 'e': case 'e':
excl = true; excl = true;
break; break;
@@ -985,14 +960,13 @@ EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine
} }


Jack::JackBoomerDriver* boomer_driver = new Jack::JackBoomerDriver("system", "boomer", engine, table); Jack::JackBoomerDriver* boomer_driver = new Jack::JackBoomerDriver("system", "boomer", engine, table);
Jack::JackDriverClientInterface* threaded_driver = new Jack::JackThreadedDriver(boomer_driver);
// Special open for OSS driver...
if (boomer_driver->Open(frames_per_interrupt, nperiods, srate, capture, playback, chan_in, chan_out,
excl, monitor, capture_pcm_name, playback_pcm_name, systemic_input_latency, systemic_output_latency, bits, ignorehwbuf) == 0) {
return threaded_driver;
// Special open for Boomer driver...
if (boomer_driver->Open(frames_per_interrupt, nperiods, srate, capture, playback, chan_in, chan_out, excl,
monitor, capture_pcm_name, playback_pcm_name, systemic_input_latency, systemic_output_latency, bits) == 0) {
return boomer_driver;
} else { } else {
delete threaded_driver; // Delete the decorated driver
delete boomer_driver; // Delete the driver
return NULL; return NULL;
} }
} }


+ 53
- 27
solaris/oss/JackBoomerDriver.h View File

@@ -23,14 +23,14 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackAudioDriver.h" #include "JackAudioDriver.h"
#include "JackPlatformPlug.h" #include "JackPlatformPlug.h"
#include "ringbuffer.h" #include "ringbuffer.h"
//#include "JackThread.h"
#include <semaphore.h>


namespace Jack namespace Jack
{ {


typedef jack_default_audio_sample_t jack_sample_t; typedef jack_default_audio_sample_t jack_sample_t;


#define OSS_DRIVER_N_PARAMS 13
#define OSS_DRIVER_N_PARAMS 12
#define OSS_DRIVER_DEF_DEV "/dev/dsp" #define OSS_DRIVER_DEF_DEV "/dev/dsp"
#define OSS_DRIVER_DEF_FS 48000 #define OSS_DRIVER_DEF_FS 48000
#define OSS_DRIVER_DEF_BLKSIZE 1024 #define OSS_DRIVER_DEF_BLKSIZE 1024
@@ -43,13 +43,47 @@ typedef jack_default_audio_sample_t jack_sample_t;
\brief The Boomer driver. \brief The Boomer driver.
*/ */


class JackBoomerDriver : public JackAudioDriver, public JackRunnableInterface
class JackBoomerDriver : public JackAudioDriver
{ {


enum { kRead = 1, kWrite = 2, kReadWrite = 3 }; enum { kRead = 1, kWrite = 2, kReadWrite = 3 };


private: private:

class JackBoomerDriverInput : public JackRunnableInterface {

private:
JackBoomerDriver* fDriver;

public:

JackBoomerDriverInput(JackBoomerDriver* driver): fDriver(driver)
{}
~JackBoomerDriverInput()
{}

bool Init();
bool Execute();
};

class JackBoomerDriverOutput : public JackRunnableInterface {

private:
JackBoomerDriver* fDriver;

public:

JackBoomerDriverOutput(JackBoomerDriver* driver): fDriver(driver)
{}
~JackBoomerDriverOutput()
{}

bool Init();
bool Execute();
};

int fInFD; int fInFD;
int fOutFD; int fOutFD;
@@ -59,15 +93,21 @@ class JackBoomerDriver : public JackAudioDriver, public JackRunnableInterface
unsigned int fSampleSize; unsigned int fSampleSize;
int fRWMode; int fRWMode;
bool fExcl; bool fExcl;
bool fIgnoreHW;
unsigned int fInputBufferSize; unsigned int fInputBufferSize;
unsigned int fOutputBufferSize; unsigned int fOutputBufferSize;
void* fInputBuffer; void* fInputBuffer;
void* fOutputBuffer; void* fOutputBuffer;
jack_ringbuffer_t** fRingBuffer;
JackThread fThread;
sem_t fReadSema;
sem_t fWriteSema;

JackThread fInputThread;
JackThread fOutputThread;
JackBoomerDriverInput fInputHandler;
JackBoomerDriverOutput fOutputHandler;
int OpenInput(); int OpenInput();
int OpenOutput(); int OpenOutput();
@@ -75,24 +115,14 @@ class JackBoomerDriver : public JackAudioDriver, public JackRunnableInterface
void CloseAux(); void CloseAux();
void SetSampleFormat(); void SetSampleFormat();
void DisplayDeviceInfo(); void DisplayDeviceInfo();

// Redefining since timing for CPU load is specific
int ProcessAsync();
void SynchronizeRead();
void SynchronizeWrite();


public: public:


JackBoomerDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table)
: JackAudioDriver(name, alias, engine, table),
fInFD(-1), fOutFD(-1), fBits(0),
fSampleFormat(0), fNperiods(0), fRWMode(0), fExcl(false), fIgnoreHW(true),
fInputBufferSize(0), fOutputBufferSize(0),
fInputBuffer(NULL), fOutputBuffer(NULL),
fRingBuffer(NULL), fThread(this)
{}

virtual ~JackBoomerDriver()
{}

JackBoomerDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table);
virtual ~JackBoomerDriver();
int Open(jack_nframes_t frames_per_cycle, int Open(jack_nframes_t frames_per_cycle,
int user_nperiods, int user_nperiods,
jack_nframes_t rate, jack_nframes_t rate,
@@ -100,23 +130,19 @@ class JackBoomerDriver : public JackAudioDriver, public JackRunnableInterface
bool playing, bool playing,
int chan_in, int chan_in,
int chan_out, int chan_out,
bool vmix,
bool excl,
bool monitor, bool monitor,
const char* capture_driver_name, const char* capture_driver_name,
const char* playback_driver_name, const char* playback_driver_name,
jack_nframes_t capture_latency, jack_nframes_t capture_latency,
jack_nframes_t playback_latency, jack_nframes_t playback_latency,
int bits,
bool ignorehwbuf);
int bits);


int Close(); int Close();


int Start(); int Start();
int Stop(); int Stop();


int Read();
int Write();

// BufferSize can be changed // BufferSize can be changed
bool IsFixedBufferSize() bool IsFixedBufferSize()
{ {


+ 0
- 7
solaris/oss/JackOSSAdapter.cpp View File

@@ -309,8 +309,6 @@ int JackOSSAdapter::OpenInput()
return -1; return -1;
} }


jack_log("JackOSSAdapter::OpenInput input fInFD = %d", fInFD);

if (fExcl) { if (fExcl) {
if (ioctl(fInFD, SNDCTL_DSP_COOKEDMODE, &flags) == -1) { if (ioctl(fInFD, SNDCTL_DSP_COOKEDMODE, &flags) == -1) {
jack_error("JackOSSAdapter::OpenInput failed to set cooked mode : %s@%i, errno = %d", __FILE__, __LINE__, errno); jack_error("JackOSSAdapter::OpenInput failed to set cooked mode : %s@%i, errno = %d", __FILE__, __LINE__, errno);
@@ -318,8 +316,6 @@ jack_log("JackOSSAdapter::OpenInput input fInFD = %d", fInFD);
} }
} }


printf("fAdaptedBufferSize %d %d %d %d %s\n", fExcl, fAdaptedBufferSize, fSampleSize, fCaptureChannels, fCaptureDriverName);

gFragFormat = (2 << 16) + int2pow2(fAdaptedBufferSize * fSampleSize * fCaptureChannels); gFragFormat = (2 << 16) + int2pow2(fAdaptedBufferSize * fSampleSize * fCaptureChannels);
if (ioctl(fInFD, SNDCTL_DSP_SETFRAGMENT, &gFragFormat) == -1) { if (ioctl(fInFD, SNDCTL_DSP_SETFRAGMENT, &gFragFormat) == -1) {
jack_error("JackOSSAdapter::OpenInput failed to set fragments : %s@%i, errno = %d", __FILE__, __LINE__, errno); jack_error("JackOSSAdapter::OpenInput failed to set fragments : %s@%i, errno = %d", __FILE__, __LINE__, errno);
@@ -406,9 +402,6 @@ int JackOSSAdapter::OpenOutput()
} }
} }


printf("fAdaptedBufferSize %d %d %d %d %s\n", fExcl, fAdaptedBufferSize, fSampleSize, fPlaybackChannels, fPlaybackDriverName);


gFragFormat = (2 << 16) + int2pow2(fAdaptedBufferSize * fSampleSize * fPlaybackChannels); gFragFormat = (2 << 16) + int2pow2(fAdaptedBufferSize * fSampleSize * fPlaybackChannels);
if (ioctl(fOutFD, SNDCTL_DSP_SETFRAGMENT, &gFragFormat) == -1) { if (ioctl(fOutFD, SNDCTL_DSP_SETFRAGMENT, &gFragFormat) == -1) {
jack_error("JackOSSAdapter::OpenOutput failed to set fragments : %s@%i, errno = %d", __FILE__, __LINE__, errno); jack_error("JackOSSAdapter::OpenOutput failed to set fragments : %s@%i, errno = %d", __FILE__, __LINE__, errno);


+ 1
- 1
solaris/oss/JackOSSDriver.cpp View File

@@ -558,7 +558,7 @@ int JackOSSDriver::Read()
ssize_t count; ssize_t count;


#ifdef JACK_MONITOR #ifdef JACK_MONITOR
gCycleTable.fTable[gCycleCount].fBeforeRead = GetMicroSeconds();
gCycleTable.fTable[gCycleCount].fBeforeRead = GetMicroSeconds();
#endif #endif


audio_errinfo ei_in; audio_errinfo ei_in;


+ 1
- 0
solaris/wscript View File

@@ -34,3 +34,4 @@ def build(bld):


create_jack_driver_obj(bld, 'net', '../common/JackNetDriver.cpp') create_jack_driver_obj(bld, 'net', '../common/JackNetDriver.cpp')


create_jack_driver_obj(bld, 'loopback', '../common/JackLoopbackDriver.cpp')

+ 1
- 1
windows/JackWinSemaphore.h View File

@@ -44,7 +44,7 @@ class JackWinSemaphore : public detail::JackSynchro


public: public:


JackWinSemaphore(): fSemaphore(NULL)
JackWinSemaphore():JackSynchro(), fSemaphore(NULL)
{} {}


bool Signal(); bool Signal();


BIN
windows/Setup/JackRouter.dll View File


+ 5
- 1
windows/Setup/README View File

@@ -1,7 +1,11 @@
This folder contains a script to create an installer for windows. This folder contains a script to create an installer for windows.
It uses 'CreateInstall Free'(http://www.createinstall.com), a little software allowing to make simple installers. It uses 'CreateInstall Free'(http://www.createinstall.com), a little software allowing to make simple installers.
You can use the 'jack.ci' script to make the installer. For that, you need to build the Code::Blocks workspace in order to have '.exe' and libraries. You also need 'qjackctl' binaries and libraries ('qjackctl.exe', 'mingwm10.dll', 'QtCore4.dll', 'QtGui.dll' and 'QtXml4.dll'). You can recompile qjackctl with qt4 or directly get the binaries. The five files are expected in the 'qjackctl' folder.
You can use the 'jack.ci' script to make the installer. For that, you need to build the Code::Blocks workspace in order to have '.exe' and libraries.
You also need 'qjackctl' binaries and libraries ('qjackctl.exe', 'mingwm10.dll', 'QtCore4.dll', 'QtGui.dll' and 'QtXml4.dll').
You can recompile qjackctl with qt4 or directly get the binaries. The five files are expected in the 'qjackctl' folder.
You also need the Microsoft Visual C++ 2008 Redistributable Package (x86) (the vcrdist_x86.exe file) to be in src folder.
If you need libjack.lib and libjackserver.lib to link with in MS Visual Studio, you can use the MS Tool lib.exe to create the .lib file from de .def. If you need libjack.lib and libjackserver.lib to link with in MS Visual Studio, you can use the MS Tool lib.exe to create the .lib file from de .def.
Just use : 'lib /DEF:libjackserver.def /OUT:libjackserver.lib' and 'lib /DEF:libjack.def /OUT:libjack.lib' to create the lib file. Just use : 'lib /DEF:libjackserver.def /OUT:libjackserver.lib' and 'lib /DEF:libjack.def /OUT:libjack.lib' to create the lib file.


+ 7
- 3
windows/Setup/jack.ci View File

@@ -1,5 +1,5 @@
<*project <*project
version = 4 civer = "Free v4.14.3" winver = "2.6/5.1.2600" >
version = 4 civer = "Free v4.14.5" winver = "2.6/5.1.2600" >
<output> .</> <output> .</>
<exename> Jack_v1.9.3_setup.exe</> <exename> Jack_v1.9.3_setup.exe</>
<digitsign> </> <digitsign> </>
@@ -38,7 +38,7 @@
<srcfolder> </> <srcfolder> </>
<ifexist> over</> <ifexist> over</>
<runafter> </> <runafter> </>
<runconfirm> 0</>
<runconfirm> 1</>
<uninclude> 1</> <uninclude> 1</>
<unicon> Uninstall - 2</> <unicon> Uninstall - 2</>
<unshortcut> 1</> <unshortcut> 1</>
@@ -54,6 +54,7 @@
<bgback> </> <bgback> </>
<files listview > <files listview >
<_><src>..\Release\bin\libjack.a</><dest>inst</><custom>lib</><ifexist>overnewer</><recurs>0</></> <_><src>..\Release\bin\libjack.a</><dest>inst</><custom>lib</><ifexist>overnewer</><recurs>0</></>
<_><src>.\src\vcredist_x86.exe</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\libjack.lib</><dest>inst</><custom>lib</><ifexist>overnewer</><recurs>0</></> <_><src>..\Release\bin\libjack.lib</><dest>inst</><custom>lib</><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\libjack.def</><dest>inst</><custom>lib</><ifexist>overnewer</><recurs>0</></> <_><src>..\Release\bin\libjack.def</><dest>inst</><custom>lib</><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\libjackserver.a</><dest>inst</><custom>lib</><ifexist>overnewer</><recurs>0</></> <_><src>..\Release\bin\libjackserver.a</><dest>inst</><custom>lib</><ifexist>overnewer</><recurs>0</></>
@@ -72,6 +73,8 @@
<_><src>..\Release\bin\portaudio_x86.dll</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></> <_><src>..\Release\bin\portaudio_x86.dll</><dest>inst</><custom></><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jack\jack_net.dll</><dest>inst</><custom>jack</><ifexist>overnewer</><recurs>0</></> <_><src>..\Release\bin\jack\jack_net.dll</><dest>inst</><custom>jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jack\jack_dummy.dll</><dest>inst</><custom>jack</><ifexist>overnewer</><recurs>0</></> <_><src>..\Release\bin\jack\jack_dummy.dll</><dest>inst</><custom>jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jack\jack_loopback.dll</><dest>inst</><custom>jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jack\jack_winmme.dll</><dest>inst</><custom>jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jack\jack_portaudio.dll</><dest>inst</><custom>jack</><ifexist>overnewer</><recurs>0</></> <_><src>..\Release\bin\jack\jack_portaudio.dll</><dest>inst</><custom>jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jack\netmanager.dll</><dest>inst</><custom>jack</><ifexist>overnewer</><recurs>0</></> <_><src>..\Release\bin\jack\netmanager.dll</><dest>inst</><custom>jack</><ifexist>overnewer</><recurs>0</></>
<_><src>..\Release\bin\jack\audioadapter.dll</><dest>inst</><custom>jack</><ifexist>overnewer</><recurs>0</></> <_><src>..\Release\bin\jack\audioadapter.dll</><dest>inst</><custom>jack</><ifexist>overnewer</><recurs>0</></>
@@ -99,7 +102,8 @@
</files> </files>
<runx listview > <runx listview >
<_><type>app</><path>inst</><file>vcredist_x86.exe</><cmdline></><wait>1</><workdir>inst</><custdir></><when>end</></>
</runx> </runx>
<registry listview > <registry listview >


+ 11
- 6
windows/Setup/src/README View File

@@ -4,11 +4,6 @@ JACK on Windows
This installer will install everything to use Jack Audio Connection Kit (JACK) (www.jackaudio.org) on Windows. This installer will install everything to use Jack Audio Connection Kit (JACK) (www.jackaudio.org) on Windows.
=============================================
Microsoft Runtime Libraries
=============================================
In order to use this software, you will need the Microsoft Visual C++ 2008 redistributable package. This package is freely available on the Microsoft download center. Please be sure you install the correct version (2008). This package is required by portaudio to run windows specific audio drivers (MME, DSound and ASIO).
============================================= =============================================
QJACKCTL on Windows QJACKCTL on Windows
@@ -38,6 +33,16 @@ Then start jackd with the device you want, by using its name, for example:
- jackd -R -S -d portaudio -d "ASIO::MOTU Audio ASIO", then start qjackctl. qjackctl will see the jackd server already running and then can be used normally. - jackd -R -S -d portaudio -d "ASIO::MOTU Audio ASIO", then start qjackctl. qjackctl will see the jackd server already running and then can be used normally.
=============================================
Jack MIDI
=============================================
A first version of a JACK MIDI <==> Windows MIDI bridge (using Windows MME API) is available.
If can be activated using the -X parameter in jackd command line. So add "-X winmme" in QJACKCTL settings (something like "jackd -S -X winmme").
The WinMME driver will scan MIDI input/output ports, open corresponding JACK MIDI ports and convert MIDI in/out into JACK MIDI messages.
QJACKCTL MIDI connection windows can then be used.
============================================= =============================================
JackRouter JACK/ASIO driver JackRouter JACK/ASIO driver
============================================= =============================================
@@ -53,7 +58,7 @@ JackRouter is an ASIO driver that allows any ASIO compatible application to beco
Known problems Known problems
============================================= =============================================
- starting/stopping the server several times in QJACKCTL does not work correctly. You'll have to quit qjackctl and launch it again.
- starting/stopping the server several times in QJACKCTL may not work correctly. You may have to quit QJACKCTL and launch it again.
============================================= =============================================


+ 95
- 0
windows/jack_loopback.cbp View File

@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="jack_loopback" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Win32 Release">
<Option output="Release\bin\jack\jack_loopback" 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_loopback" 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_loopback" 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\JackLoopbackDriver.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>

+ 4
- 4
windows/jackaudioadapter.rc View File

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


+ 4
- 4
windows/jackd.rc View File

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


+ 2
- 1
windows/jackd.workspace View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_workspace_file> <CodeBlocks_workspace_file>
<Workspace title="jack"> <Workspace title="jack">
<Project filename="libjackserver.cbp" active="1" />
<Project filename="libjackserver.cbp" />
<Project filename="jackd.cbp"> <Project filename="jackd.cbp">
<Depends filename="libjackserver.cbp" /> <Depends filename="libjackserver.cbp" />
</Project> </Project>
@@ -47,5 +47,6 @@
<Depends filename="libjack.cbp" /> <Depends filename="libjack.cbp" />
</Project> </Project>
<Project filename="jack_winmme.cbp" /> <Project filename="jack_winmme.cbp" />
<Project filename="jack_loopback.cbp" active="1" />
</Workspace> </Workspace>
</CodeBlocks_workspace_file> </CodeBlocks_workspace_file>

+ 4
- 4
windows/jacknetadapter.rc View File

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


+ 4
- 4
windows/jacknetdriver.rc View File

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


+ 4
- 4
windows/jacknetmanager.rc View File

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


+ 4
- 4
windows/jackportaudio.rc View File

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


+ 4
- 4
windows/jackwinmme.rc View File

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


+ 4
- 4
windows/libjack.rc View File

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


+ 4
- 4
windows/libjackserver.rc View File

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


+ 4
- 4
windows/resource.rc View File

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


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


+ 1
- 0
windows/winmme/JackWinMMEDriver.cpp View File

@@ -392,6 +392,7 @@ int JackWinMMEDriver::Write()
for (unsigned int j = 0; j < midi_buffer->event_count; j++) { for (unsigned int j = 0; j < midi_buffer->event_count; j++) {
JackMidiEvent* ev = &midi_buffer->events[j]; JackMidiEvent* ev = &midi_buffer->events[j];
if (ev->size <= 3) { if (ev->size <= 3) {
jack_midi_data_t *d = ev->GetData(midi_buffer);
DWORD winev = 0; DWORD winev = 0;
if (ev->size > 0) winev |= d[0]; if (ev->size > 0) winev |= d[0];
if (ev->size > 1) winev |= (d[1] << 8); if (ev->size > 1) winev |= (d[1] << 8);


+ 23
- 4
wscript View File

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


VERSION='1.9.3'
VERSION='1.9.4'
APPNAME='jack' APPNAME='jack'
JACK_API_VERSION = '0.1.0' JACK_API_VERSION = '0.1.0'


@@ -61,6 +61,7 @@ def set_options(opt):
opt.tool_options('compiler_cc') opt.tool_options('compiler_cc')


opt.add_option('--libdir', type='string', help="Library directory [Default: <prefix>/lib]") 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('--dbus', action='store_true', default=False, help='Enable D-Bus JACK (jackdbus)') 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('--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') opt.add_option('--doxygen', action='store_true', default=False, help='Enable build of doxygen documentation')
@@ -68,6 +69,7 @@ def set_options(opt):
opt.add_option('--mixed', action='store_true', default=False, help='Build with 32/64 bits mixed mode') opt.add_option('--mixed', action='store_true', default=False, help='Build with 32/64 bits mixed mode')
opt.add_option('--clients', default=64, type="int", dest="clients", help='Maximum number of JACK clients') opt.add_option('--clients', default=64, type="int", dest="clients", help='Maximum number of JACK clients')
opt.add_option('--ports', default=1024, type="int", dest="ports", help='Maximum number of ports') opt.add_option('--ports', default=1024, type="int", dest="ports", help='Maximum number of ports')
opt.add_option('--ports-per-application', default=512, type="int", dest="application_ports", help='Maximum number of ports per application')
opt.sub_options('dbus') opt.sub_options('dbus')


def configure(conf): def configure(conf):
@@ -130,12 +132,13 @@ def configure(conf):
conf.env['BUILD_JACKD'] = True conf.env['BUILD_JACKD'] = True


if Options.options.libdir: if Options.options.libdir:
conf.env['LIBDIR'] = Options.options.libdir
conf.env['LIBDIR'] = conf.env['PREFIX'] + Options.options.libdir
else: else:
conf.env['LIBDIR'] = conf.env['PREFIX'] + '/lib/'
conf.env['LIBDIR'] = conf.env['PREFIX'] + '/lib'


conf.define('CLIENT_NUM', Options.options.clients) conf.define('CLIENT_NUM', Options.options.clients)
conf.define('PORT_NUM', Options.options. ports)
conf.define('PORT_NUM', Options.options.ports)
conf.define('PORT_NUM_FOR_CLIENT', Options.options.application_ports)


conf.define('ADDON_DIR', os.path.normpath(os.path.join(conf.env['LIBDIR'], 'jack'))) conf.define('ADDON_DIR', os.path.normpath(os.path.join(conf.env['LIBDIR'], 'jack')))
conf.define('JACK_LOCATION', os.path.normpath(os.path.join(conf.env['PREFIX'], 'bin'))) conf.define('JACK_LOCATION', os.path.normpath(os.path.join(conf.env['PREFIX'], 'bin')))
@@ -169,6 +172,7 @@ def configure(conf):


print "Build with a maximum of %d JACK clients" % conf.env['CLIENT_NUM'] print "Build with a maximum of %d JACK clients" % conf.env['CLIENT_NUM']
print "Build with a maximum of %d ports" % conf.env['PORT_NUM'] print "Build with a maximum of %d ports" % conf.env['PORT_NUM']
print "Build with a maximum of %d ports per application" % conf.env['PORT_NUM_FOR_CLIENT']
display_msg("Install prefix", conf.env['PREFIX'], 'CYAN') display_msg("Install prefix", conf.env['PREFIX'], 'CYAN')
display_msg("Library directory", conf.env['LIBDIR'], 'CYAN') display_msg("Library directory", conf.env['LIBDIR'], 'CYAN')
@@ -206,7 +210,22 @@ def configure(conf):
print Logs.colors.NORMAL, print Logs.colors.NORMAL,
print print


if Options.options.mixed == True:
env_variant2 = conf.env.copy()
conf.set_env_name('lib32', env_variant2)
env_variant2.set_variant('lib32')
conf.setenv('lib32')
conf.env.append_unique('CXXFLAGS', '-m32')
conf.env.append_unique('CCFLAGS', '-m32')
conf.env.append_unique('LINKFLAGS', '-m32')
conf.write_config_header('config.h')
if Options.options.libdir32:
conf.env['LIBDIR'] = conf.env['PREFIX'] + Options.options.libdir32
else:
conf.env['LIBDIR'] = conf.env['PREFIX'] + '/lib32'

def build(bld): def build(bld):
print ("make[1]: Entering directory `" + os.getcwd() + "/" + blddir + "'" )
if not os.access('svnversion.h', os.R_OK): if not os.access('svnversion.h', os.R_OK):
create_svnversion_task(bld) create_svnversion_task(bld)




Loading…
Cancel
Save