Browse Source

rebase from trunk 3613:3638

git-svn-id: http://subversion.jackaudio.org/jack/jack2/branches/libjacknet@3639 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.8
sletz 15 years ago
parent
commit
5d29fcff36
31 changed files with 259 additions and 184 deletions
  1. +25
    -1
      ChangeLog
  2. +0
    -1
      README
  3. +2
    -1
      common/JackAudioDriver.cpp
  4. +1
    -1
      common/JackConstants.h
  5. +2
    -0
      common/jack/control.h
  6. +1
    -1
      common/memops.c
  7. +2
    -2
      dbus/audio_reserve.c
  8. +2
    -1
      dbus/controller_iface_patchbay.c
  9. +1
    -1
      doxyfile
  10. +2
    -2
      macosx/Jack-Info.plist
  11. +3
    -3
      macosx/JackMachThread.cpp
  12. +1
    -1
      macosx/JackMachThread.h
  13. +1
    -1
      macosx/Jackdmp.xcodeproj/project.pbxproj
  14. +2
    -0
      macosx/coreaudio/JackCoreAudioAdapter.cpp
  15. +28
    -7
      macosx/coreaudio/JackCoreAudioDriver.cpp
  16. +3
    -1
      macosx/coreaudio/JackCoreAudioDriver.h
  17. +133
    -100
      solaris/oss/JackBoomerDriver.cpp
  18. +5
    -8
      solaris/oss/JackBoomerDriver.h
  19. +2
    -9
      solaris/oss/JackOSSAdapter.cpp
  20. +2
    -2
      solaris/oss/JackOSSDriver.cpp
  21. +4
    -4
      windows/jackaudioadapter.rc
  22. +4
    -4
      windows/jackd.rc
  23. +4
    -4
      windows/jacknetadapter.rc
  24. +4
    -4
      windows/jacknetdriver.rc
  25. +4
    -4
      windows/jacknetmanager.rc
  26. +4
    -4
      windows/jackportaudio.rc
  27. +4
    -4
      windows/jackwinmme.rc
  28. +4
    -4
      windows/libjack.rc
  29. +4
    -4
      windows/libjackserver.rc
  30. +4
    -4
      windows/resource.rc
  31. +1
    -1
      wscript

+ 25
- 1
ChangeLog View File

@@ -23,7 +23,31 @@ Paul Davis
--------------------------- ---------------------------
Jackdmp changes log Jackdmp changes log
---------------------------
---------------------------

2009-08-28 Stephane Letz <letz@grame.fr>
* Correct monitor port naming in JackAudioDriver and JackCoreAudioDriver.
* Big endian bug fix in memops.c (http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=11_be24bit.patch;att=1;bug=486308)

2009-07-31 Stephane Letz <letz@grame.fr>
* Use SNDCTL_DSP_SYNCGROUP/SNDCTL_DSP_SYNCSTART API to synchronize input and output in Solaris boomer backend.


2009-07-29 Stephane Letz <letz@grame.fr>
* Add a -G parameter in CoreAudio backend (the computation value in RT thread expressed as percent of period).

2009-07-28 Stephane Letz <letz@grame.fr>
* Fix CopyAndConvertIn for Solaris backends.

2009-07-22 Stephane Letz <letz@grame.fr>
* 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-17 Stephane Letz <letz@grame.fr> 2009-07-17 Stephane Letz <letz@grame.fr>


+ 0
- 1
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
---------------- ----------------


+ 2
- 1
common/JackAudioDriver.cpp View File

@@ -139,12 +139,13 @@ int JackAudioDriver::Attach()
// Monitor ports // Monitor ports
if (fWithMonitorPorts) { if (fWithMonitorPorts) {
jack_log("Create monitor port "); jack_log("Create monitor port ");
snprintf(name, sizeof(name) - 1, "%s:%s:monitor_%u", fAliasName, fPlaybackDriverName, i + 1);
snprintf(name, sizeof(name) - 1, "%s:monitor_%u", fClientControl.fName, i + 1);
if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) { if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) {
jack_error("Cannot register monitor port for %s", name); jack_error("Cannot register monitor port for %s", name);
return -1; return -1;
} else { } else {
port = fGraphManager->GetPort(port_index); port = fGraphManager->GetPort(port_index);
port->SetAlias(alias);
port->SetLatency(fEngineControl->fBufferSize); port->SetLatency(fEngineControl->fBufferSize);
fMonitorPortList[i] = port_index; fMonitorPortList[i] = port_index;
} }


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




+ 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


+ 1
- 1
common/memops.c View File

@@ -481,7 +481,7 @@ void sample_move_dS_s24s (jack_default_audio_sample_t *dst, char *src, unsigned
x <<= 8; x <<= 8;
x |= (unsigned char)(src[0]); x |= (unsigned char)(src[0]);
/* correct sign bit and the rest of the top byte */ /* correct sign bit and the rest of the top byte */
if (src[0] & 0x80) {
if (src[2] & 0x80) {
x |= 0xff << 24; x |= 0xff << 24;
} }
#endif #endif


+ 2
- 2
dbus/audio_reserve.c View File

@@ -106,10 +106,10 @@ SERVER_EXPORT void audio_release(const char * device_name)
} }
if (i < DEVICE_MAX) { if (i < DEVICE_MAX) {
jack_info("Released audio card %s", device_name);
jack_info("Released audio card %s", device_name);
rd_release(gReservedDevice[i].reserved_device); rd_release(gReservedDevice[i].reserved_device);
} else { } else {
jack_error("Audio card %s not found!!", device_name);
jack_error("Audio card %s not found!!", device_name);
} }


// Close DBus connection last time // Close DBus connection last time


+ 2
- 1
dbus/controller_iface_patchbay.c View File

@@ -1763,7 +1763,8 @@ JACK_DBUS_METHOD_ARGUMENTS_BEGIN(DisconnectPortsByConnectionID)
JACK_DBUS_METHOD_ARGUMENTS_END JACK_DBUS_METHOD_ARGUMENTS_END


JACK_DBUS_METHOD_ARGUMENTS_BEGIN(GetClientPID) JACK_DBUS_METHOD_ARGUMENTS_BEGIN(GetClientPID)
JACK_DBUS_METHOD_ARGUMENT("client_id", DBUS_TYPE_INT64_AS_STRING, false)
JACK_DBUS_METHOD_ARGUMENT("client_id", DBUS_TYPE_UINT64_AS_STRING, false)
JACK_DBUS_METHOD_ARGUMENT("process_id", DBUS_TYPE_INT64_AS_STRING, true)
JACK_DBUS_METHOD_ARGUMENTS_END JACK_DBUS_METHOD_ARGUMENTS_END


JACK_DBUS_METHODS_BEGIN JACK_DBUS_METHODS_BEGIN


+ 1
- 1
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.


+ 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.3</string>
<string>1.9.4</string>
</dict> </dict>
</plist> </plist>

+ 3
- 3
macosx/JackMachThread.cpp View File

@@ -126,13 +126,13 @@ UInt32 JackMachThread::GetThreadPriority(pthread_t thread, int inWhichPriority)
return 0; return 0;
} }


int JackMachThread::GetParams(UInt64* period, UInt64* computation, UInt64* constraint)
int JackMachThread::GetParams(pthread_t thread, UInt64* period, UInt64* computation, UInt64* constraint)
{ {
thread_time_constraint_policy_data_t theTCPolicy; thread_time_constraint_policy_data_t theTCPolicy;
mach_msg_type_number_t count = THREAD_TIME_CONSTRAINT_POLICY_COUNT; mach_msg_type_number_t count = THREAD_TIME_CONSTRAINT_POLICY_COUNT;
boolean_t get_default = false; boolean_t get_default = false;


kern_return_t res = thread_policy_get(pthread_mach_thread_np(pthread_self()),
kern_return_t res = thread_policy_get(pthread_mach_thread_np(thread),
THREAD_TIME_CONSTRAINT_POLICY, THREAD_TIME_CONSTRAINT_POLICY,
(thread_policy_t) & theTCPolicy, (thread_policy_t) & theTCPolicy,
&count, &count,
@@ -187,7 +187,7 @@ int JackMachThread::AcquireRealTimeImp(pthread_t thread, UInt64 period, UInt64 c
UInt64 int_period; UInt64 int_period;
UInt64 int_computation; UInt64 int_computation;
UInt64 int_constraint; UInt64 int_constraint;
GetParams(&int_period, &int_computation, &int_constraint);
GetParams(thread, &int_period, &int_computation, &int_constraint);
return 0; return 0;
} }




+ 1
- 1
macosx/JackMachThread.h View File

@@ -109,7 +109,7 @@ class SERVER_EXPORT JackMachThread : public JackPosixThread
int AcquireRealTime(int priority); int AcquireRealTime(int priority);
int DropRealTime(); int DropRealTime();
void SetParams(UInt64 period, UInt64 computation, UInt64 constraint); void SetParams(UInt64 period, UInt64 computation, UInt64 constraint);
static int GetParams(UInt64* period, UInt64* computation, UInt64* constraint);
static int GetParams(pthread_t thread, UInt64* period, UInt64* computation, UInt64* constraint);
static int SetThreadToPriority(pthread_t thread, UInt32 inPriority, Boolean inIsFixed, UInt64 period, UInt64 computation, UInt64 constraint); static int SetThreadToPriority(pthread_t thread, UInt32 inPriority, Boolean inIsFixed, UInt64 period, UInt64 computation, UInt64 constraint);


static int AcquireRealTimeImp(pthread_t thread, UInt64 period, UInt64 computation, UInt64 constraint); static int AcquireRealTimeImp(pthread_t thread, UInt64 period, UInt64 computation, UInt64 constraint);


+ 1
- 1
macosx/Jackdmp.xcodeproj/project.pbxproj View File

@@ -10846,7 +10846,7 @@
CoreFoundation, CoreFoundation,
); );
OTHER_REZFLAGS = ""; OTHER_REZFLAGS = "";
PRODUCT_NAME = jack_midiseq;
PRODUCT_NAME = jack_showtime;
REZ_EXECUTABLE = YES; REZ_EXECUTABLE = YES;
SDKROOT = ""; SDKROOT = "";
SECTORDER_FLAGS = ""; SECTORDER_FLAGS = "";


+ 2
- 0
macosx/coreaudio/JackCoreAudioAdapter.cpp View File

@@ -21,6 +21,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackError.h" #include "JackError.h"
#include <unistd.h> #include <unistd.h>


#include <CoreServices/CoreServices.h>

namespace Jack namespace Jack
{ {




+ 28
- 7
macosx/coreaudio/JackCoreAudioDriver.cpp View File

@@ -218,7 +218,12 @@ OSStatus JackCoreAudioDriver::MeasureCallback(AudioDeviceID inDevice,
AudioDeviceStop(driver->fDeviceID, MeasureCallback); AudioDeviceStop(driver->fDeviceID, MeasureCallback);
jack_log("JackCoreAudioDriver::MeasureCallback called"); jack_log("JackCoreAudioDriver::MeasureCallback called");
JackMachThread::GetParams(&driver->fEngineControl->fPeriod, &driver->fEngineControl->fComputation, &driver->fEngineControl->fConstraint);
JackMachThread::GetParams(pthread_self(), &driver->fEngineControl->fPeriod, &driver->fEngineControl->fComputation, &driver->fEngineControl->fConstraint);
if (driver->fComputationGrain > 0) {
jack_log("JackCoreAudioDriver::MeasureCallback : RT thread computation setup to %ld percent of period", int(driver->fComputationGrain * 100));
driver->fEngineControl->fComputation = driver->fEngineControl->fPeriod * driver->fComputationGrain;
}
// Setup threadded based log function // Setup threadded based log function
set_threaded_log_function(); set_threaded_log_function();
@@ -441,7 +446,7 @@ OSStatus JackCoreAudioDriver::GetTotalChannels(AudioDeviceID device, int& channe
} }


JackCoreAudioDriver::JackCoreAudioDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table) JackCoreAudioDriver::JackCoreAudioDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table)
: JackAudioDriver(name, alias, engine, table), fJackInputData(NULL), fDriverOutputData(NULL), fState(false), fIOUsage(1.f)
: JackAudioDriver(name, alias, engine, table), fJackInputData(NULL), fDriverOutputData(NULL), fState(false), fIOUsage(1.f),fComputationGrain(-1.f)
{} {}


JackCoreAudioDriver::~JackCoreAudioDriver() JackCoreAudioDriver::~JackCoreAudioDriver()
@@ -1103,7 +1108,8 @@ int JackCoreAudioDriver::Open(jack_nframes_t buffer_size,
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 async_output_latency)
int async_output_latency,
int computation_grain)
{ {
int in_nChannels = 0; int in_nChannels = 0;
int out_nChannels = 0; int out_nChannels = 0;
@@ -1120,7 +1126,8 @@ int JackCoreAudioDriver::Open(jack_nframes_t buffer_size,
strcpy(fPlaybackUID, playback_driver_uid); strcpy(fPlaybackUID, playback_driver_uid);
fCaptureLatency = capture_latency; fCaptureLatency = capture_latency;
fPlaybackLatency = playback_latency; fPlaybackLatency = playback_latency;
fIOUsage = float(async_output_latency)/ 100.f;
fIOUsage = float(async_output_latency) / 100.f;
fComputationGrain = float(computation_grain) / 100.f;


if (SetupDevices(capture_driver_uid, playback_driver_uid, capture_driver_name, playback_driver_name) < 0) if (SetupDevices(capture_driver_uid, playback_driver_uid, capture_driver_name, playback_driver_name) < 0)
return -1; return -1;
@@ -1259,12 +1266,13 @@ int JackCoreAudioDriver::Attach()
// Monitor ports // Monitor ports
if (fWithMonitorPorts) { if (fWithMonitorPorts) {
jack_log("Create monitor port "); jack_log("Create monitor port ");
snprintf(name, sizeof(name) - 1, "%s:%s:monitor_%u", fAliasName, fPlaybackDriverName, i + 1);
snprintf(name, sizeof(name) - 1, "%s:monitor_%u", fClientControl.fName, i + 1);
if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) { if ((port_index = fGraphManager->AllocatePort(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) {
jack_error("Cannot register monitor port for %s", name); jack_error("Cannot register monitor port for %s", name);
return -1; return -1;
} else { } else {
port = fGraphManager->GetPort(port_index); port = fGraphManager->GetPort(port_index);
port->SetAlias(alias);
port->SetLatency(fEngineControl->fBufferSize); port->SetLatency(fEngineControl->fBufferSize);
fMonitorPortList[i] = port_index; fMonitorPortList[i] = port_index;
} }
@@ -1364,7 +1372,7 @@ extern "C"
strcpy(desc->name, "coreaudio"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1 strcpy(desc->name, "coreaudio"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1
strcpy(desc->desc, "Apple CoreAudio API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1 strcpy(desc->desc, "Apple CoreAudio API based audio backend"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1
desc->nparams = 14;
desc->nparams = 15;
desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t));


i = 0; i = 0;
@@ -1478,6 +1486,14 @@ extern "C"
desc->params[i].value.i = 100; desc->params[i].value.i = 100;
strcpy(desc->params[i].short_desc, "Extra output latency in aynchronous mode (percent)"); strcpy(desc->params[i].short_desc, "Extra output latency in aynchronous mode (percent)");
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, "grain");
desc->params[i].character = 'G';
desc->params[i].type = JackDriverParamUInt;
desc->params[i].value.i = 100;
strcpy(desc->params[i].short_desc, "Computation grain in RT thread (percent)");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc);


return desc; return desc;
} }
@@ -1498,6 +1514,7 @@ extern "C"
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;
int async_output_latency = 100; int async_output_latency = 100;
int computation_grain = -1;
for (node = params; node; node = jack_slist_next(node)) { for (node = params; node; node = jack_slist_next(node)) {
param = (const jack_driver_param_t *) node->data; param = (const jack_driver_param_t *) node->data;
@@ -1567,6 +1584,10 @@ extern "C"
case 'L': case 'L':
async_output_latency = param->value.ui; async_output_latency = param->value.ui;
break; break;
case 'G':
computation_grain = param->value.ui;
break;
} }
} }


@@ -1578,7 +1599,7 @@ extern "C"


Jack::JackCoreAudioDriver* driver = new Jack::JackCoreAudioDriver("system", "coreaudio", engine, table); Jack::JackCoreAudioDriver* driver = new Jack::JackCoreAudioDriver("system", "coreaudio", engine, table);
if (driver->Open(frames_per_interrupt, srate, capture, playback, chan_in, chan_out, monitor, capture_driver_uid, if (driver->Open(frames_per_interrupt, srate, capture, playback, chan_in, chan_out, monitor, capture_driver_uid,
playback_driver_uid, systemic_input_latency, systemic_output_latency, async_output_latency) == 0) {
playback_driver_uid, systemic_input_latency, systemic_output_latency, async_output_latency, computation_grain) == 0) {
return driver; return driver;
} else { } else {
delete driver; delete driver;


+ 3
- 1
macosx/coreaudio/JackCoreAudioDriver.h View File

@@ -72,6 +72,7 @@ class JackCoreAudioDriver : public JackAudioDriver


bool fMonitor; bool fMonitor;
float fIOUsage; float fIOUsage;
float fComputationGrain;
/* /*
#ifdef MAC_OS_X_VERSION_10_5 #ifdef MAC_OS_X_VERSION_10_5
@@ -164,7 +165,8 @@ class JackCoreAudioDriver : public JackAudioDriver
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 async_output_latency);
int async_output_latency,
int computation_grain);
int Close(); int Close();


int Attach(); int Attach();


+ 133
- 100
solaris/oss/JackBoomerDriver.cpp View File

@@ -68,51 +68,51 @@ int gCycleWriteCount = 0;


inline int int2pow2(int x) { int r = 0; while ((1 << r) < x) r++; return r; } inline int int2pow2(int x) { int r = 0; while ((1 << r) < x) r++; return r; }


static inline void CopyAndConvertIn(jack_sample_t *dst, void *src, size_t nframes, int channel, int chcount, int bits)
static inline void CopyAndConvertIn(jack_sample_t *dst, void *src, size_t nframes, int channel, int byte_skip, int bits)
{ {
switch (bits) { switch (bits) {


case 16: { case 16: {
signed short *s16src = (signed short*)src; signed short *s16src = (signed short*)src;
s16src += channel; s16src += channel;
sample_move_dS_s16(dst, (char*)s16src, nframes, chcount<<1);
sample_move_dS_s16(dst, (char*)s16src, nframes, byte_skip);
break; break;
} }
case 24: { case 24: {
signed short *s32src = (signed short*)src;
signed int *s32src = (signed int*)src;
s32src += channel; s32src += channel;
sample_move_dS_s24(dst, (char*)s32src, nframes, chcount<<2);
sample_move_dS_s24(dst, (char*)s32src, nframes, byte_skip);
break; break;
} }
case 32: { case 32: {
signed short *s32src = (signed short*)src;
signed int *s32src = (signed int*)src;
s32src += channel; s32src += channel;
sample_move_dS_s32u24(dst, (char*)s32src, nframes, chcount<<2);
sample_move_dS_s32u24(dst, (char*)s32src, nframes, byte_skip);
break; break;
} }
} }
} }


static inline void CopyAndConvertOut(void *dst, jack_sample_t *src, size_t nframes, int channel, int chcount, int bits)
static inline void CopyAndConvertOut(void *dst, jack_sample_t *src, size_t nframes, int channel, int byte_skip, int bits)
{ {
switch (bits) { switch (bits) {


case 16: { case 16: {
signed short *s16dst = (signed short*)dst; signed short *s16dst = (signed short*)dst;
s16dst += channel; s16dst += channel;
sample_move_d16_sS((char*)s16dst, src, nframes, chcount<<1, NULL); // No dithering for now...
sample_move_d16_sS((char*)s16dst, src, nframes, byte_skip, NULL); // No dithering for now...
break; break;
} }
case 24: { case 24: {
signed int *s32dst = (signed int*)dst; signed int *s32dst = (signed int*)dst;
s32dst += channel; s32dst += channel;
sample_move_d24_sS((char*)s32dst, src, nframes, chcount<<2, NULL); // No dithering for now...
sample_move_d24_sS((char*)s32dst, src, nframes, byte_skip, NULL);
break; break;
} }
case 32: { case 32: {
signed int *s32dst = (signed int*)dst; signed int *s32dst = (signed int*)dst;
s32dst += channel; s32dst += channel;
sample_move_d32u24_sS((char*)s32dst, src, nframes, chcount<<2, NULL);
sample_move_d32u24_sS((char*)s32dst, src, nframes, byte_skip, NULL);
break; break;
} }
} }
@@ -124,16 +124,16 @@ void JackBoomerDriver::SetSampleFormat()


case 24: /* native-endian LSB aligned 24-bits in 32-bits integer */ case 24: /* native-endian LSB aligned 24-bits in 32-bits integer */
fSampleFormat = AFMT_S24_NE; fSampleFormat = AFMT_S24_NE;
fSampleSize = sizeof(int);
fSampleSize = 4;
break; break;
case 32: /* native-endian 32-bit integer */ case 32: /* native-endian 32-bit integer */
fSampleFormat = AFMT_S32_NE; fSampleFormat = AFMT_S32_NE;
fSampleSize = sizeof(int);
fSampleSize = 4;
break; break;
case 16: /* native-endian 16-bit integer */ case 16: /* native-endian 16-bit integer */
default: default:
fSampleFormat = AFMT_S16_NE; fSampleFormat = AFMT_S16_NE;
fSampleSize = sizeof(short);
fSampleSize = 2;
break; break;
} }
} }
@@ -171,6 +171,7 @@ void JackBoomerDriver::DisplayDeviceInfo()
} else { } else {
jack_info("output space info: fragments = %d, fragstotal = %d, fragsize = %d, bytes = %d", jack_info("output space info: fragments = %d, fragstotal = %d, fragsize = %d, bytes = %d",
info.fragments, info.fragstotal, info.fragsize, info.bytes); info.fragments, info.fragstotal, info.fragsize, info.bytes);
fFragmentSize = info.fragsize;
} }
if (ioctl(fOutFD, SNDCTL_DSP_GETCAPS, &cap) == -1) { if (ioctl(fOutFD, SNDCTL_DSP_GETCAPS, &cap) == -1) {
@@ -233,7 +234,8 @@ void JackBoomerDriver::DisplayDeviceInfo()
JackBoomerDriver::JackBoomerDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table) JackBoomerDriver::JackBoomerDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table)
: JackAudioDriver(name, alias, engine, table), : JackAudioDriver(name, alias, engine, table),
fInFD(-1), fOutFD(-1), fBits(0), fInFD(-1), fOutFD(-1), fBits(0),
fSampleFormat(0), fNperiods(0), fRWMode(0), fExcl(false), fIgnoreHW(true),
fSampleFormat(0), fNperiods(0), fSampleSize(0), fFragmentSize(0),
fRWMode(0), fExcl(false), fSyncIO(false),
fInputBufferSize(0), fOutputBufferSize(0), fInputBufferSize(0), fOutputBufferSize(0),
fInputBuffer(NULL), fOutputBuffer(NULL), fInputBuffer(NULL), fOutputBuffer(NULL),
fInputThread(&fInputHandler), fOutputThread(&fOutputHandler), fInputThread(&fInputHandler), fOutputThread(&fOutputHandler),
@@ -401,15 +403,8 @@ 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, bool syncio)
{ {

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) {
@@ -424,10 +419,10 @@ int JackBoomerDriver::Open(jack_nframes_t nframes,
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 == 0) ? 1 : user_nperiods ;
fSyncIO = syncio;
#ifdef JACK_MONITOR #ifdef JACK_MONITOR
// Force memory page in // Force memory page in
memset(&gCycleTable, 0, sizeof(gCycleTable)); memset(&gCycleTable, 0, sizeof(gCycleTable));
@@ -514,12 +509,12 @@ int JackBoomerDriver::OpenAux()


void JackBoomerDriver::CloseAux() void JackBoomerDriver::CloseAux()
{ {
if (fRWMode & kRead && fInFD > 0) {
if (fRWMode & kRead && fInFD >= 0) {
close(fInFD); close(fInFD);
fInFD = -1; fInFD = -1;
} }
if (fRWMode & kWrite && fOutFD > 0) {
if (fRWMode & kWrite && fOutFD >= 0) {
close(fOutFD); close(fOutFD);
fOutFD = -1; fOutFD = -1;
} }
@@ -538,8 +533,61 @@ int JackBoomerDriver::Start()
jack_log("JackBoomerDriver::Start"); jack_log("JackBoomerDriver::Start");
JackAudioDriver::Start(); JackAudioDriver::Start();


// Input/output synchronisation
if (fInFD >= 0 && fOutFD >= 0 && fSyncIO) {

jack_log("JackBoomerDriver::Start sync input/output");

// Create and fill synch group
int id;
oss_syncgroup group;
group.id = 0;
group.mode = PCM_ENABLE_INPUT;
if (ioctl(fInFD, SNDCTL_DSP_SYNCGROUP, &group) == -1)
jack_error("JackBoomerDriver::Start failed to use SNDCTL_DSP_SYNCGROUP : %s@%i, errno = %d", __FILE__, __LINE__, errno);
group.mode = PCM_ENABLE_OUTPUT;
if (ioctl(fOutFD, SNDCTL_DSP_SYNCGROUP, &group) == -1)
jack_error("JackBoomerDriver::Start failed to use SNDCTL_DSP_SYNCGROUP : %s@%i, errno = %d", __FILE__, __LINE__, errno);

// Prefill output buffer : 2 fragments of silence as described in http://manuals.opensound.com/developer/synctest.c.html#LOC6
char* silence_buf = (char*)malloc(fFragmentSize);
memset(silence_buf, 0, fFragmentSize);

jack_log ("JackBoomerDriver::Start prefill size = %d", fFragmentSize);

for (int i = 0; i < 2; i++) {
ssize_t count = ::write(fOutFD, silence_buf, fFragmentSize);
if (count < (int)fFragmentSize) {
jack_error("JackBoomerDriver::Start error bytes written = %ld", count);
}
}

free(silence_buf);

// Start input/output in sync
id = group.id;

if (ioctl(fInFD, SNDCTL_DSP_SYNCSTART, &id) == -1)
jack_error("JackBoomerDriver::Start failed to use SNDCTL_DSP_SYNCSTART : %s@%i, errno = %d", __FILE__, __LINE__, errno);

} else if (fOutFD >= 0) {
// Maybe necessary to write an empty output buffer first time : see http://manuals.opensound.com/developer/fulldup.c.html
memset(fOutputBuffer, 0, fOutputBufferSize);

// Prefill ouput buffer
for (int i = 0; i < fNperiods; i++) {
ssize_t count = ::write(fOutFD, fOutputBuffer, fOutputBufferSize);
if (count < (int)fOutputBufferSize) {
jack_error("JackBoomerDriver::Start error bytes written = %ld", count);
}
}
}
// Start input thread only when needed // Start input thread only when needed
if (fInFD > 0) {
if (fInFD >= 0) {
if (fInputThread.StartSync() < 0) { if (fInputThread.StartSync() < 0) {
jack_error("Cannot start input thread"); jack_error("Cannot start input thread");
return -1; return -1;
@@ -547,7 +595,7 @@ int JackBoomerDriver::Start()
} }


// Start output thread only when needed // Start output thread only when needed
if (fOutFD > 0) {
if (fOutFD >= 0) {
if (fOutputThread.StartSync() < 0) { if (fOutputThread.StartSync() < 0) {
jack_error("Cannot start output thread"); jack_error("Cannot start output thread");
return -1; return -1;
@@ -560,38 +608,18 @@ int JackBoomerDriver::Start()
int JackBoomerDriver::Stop() int JackBoomerDriver::Stop()
{ {
// Stop input thread only when needed // Stop input thread only when needed
if (fInFD > 0) {
if (fInFD >= 0) {
fInputThread.Kill(); fInputThread.Kill();
} }


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


return 0; return 0;
} }


int JackBoomerDriver::Read()
{
/*
// Keep begin cycle time
JackDriver::CycleTakeBeginTime();
*/

return 0;
}

int JackBoomerDriver::Write()
{
/*
// Keep begin cycle time
JackDriver::CycleTakeEndTime();
*/

return 0;
}

bool JackBoomerDriver::JackBoomerDriverInput::Init() bool JackBoomerDriver::JackBoomerDriverInput::Init()
{ {
if (fDriver->IsRealTime()) { if (fDriver->IsRealTime()) {
@@ -602,18 +630,13 @@ bool JackBoomerDriver::JackBoomerDriverInput::Init()
set_threaded_log_function(); set_threaded_log_function();
} }
} }
return true; return true;
} }


bool JackBoomerDriver::JackBoomerDriverInput::Execute() bool JackBoomerDriver::JackBoomerDriverInput::Execute()
{ {
if (fDriver->fInFD < 0) {
// Keep begin cycle time
fDriver->CycleTakeBeginTime();
return true;
}
#ifdef JACK_MONITOR #ifdef JACK_MONITOR
gCycleTable.fTable[gCycleReadCount].fBeforeRead = GetMicroSeconds(); gCycleTable.fTable[gCycleReadCount].fBeforeRead = GetMicroSeconds();
#endif #endif
@@ -651,7 +674,12 @@ bool JackBoomerDriver::JackBoomerDriverInput::Execute()
fDriver->CycleTakeBeginTime(); fDriver->CycleTakeBeginTime();
for (int i = 0; i < fDriver->fCaptureChannels; i++) { for (int i = 0; i < fDriver->fCaptureChannels; i++) {
if (fDriver->fGraphManager->GetConnectionsNum(fDriver->fCapturePortList[i]) > 0) { if (fDriver->fGraphManager->GetConnectionsNum(fDriver->fCapturePortList[i]) > 0) {
CopyAndConvertIn(fDriver->GetInputBuffer(i), fDriver->fInputBuffer, fDriver->fEngineControl->fBufferSize, i, fDriver->fCaptureChannels, fDriver->fBits);
CopyAndConvertIn(fDriver->GetInputBuffer(i),
fDriver->fInputBuffer,
fDriver->fEngineControl->fBufferSize,
i,
fDriver->fCaptureChannels * fDriver->fSampleSize,
fDriver->fBits);
} }
} }


@@ -661,7 +689,13 @@ bool JackBoomerDriver::JackBoomerDriverInput::Execute()
#endif #endif
} }


fDriver->SynchronizeRead();
// Duplex : sync with write thread
if (fDriver->fInFD >= 0 && fDriver->fOutFD >= 0) {
fDriver->SynchronizeRead();
} else {
// Otherwise direct process
fDriver->Process();
}
return true; return true;
} }


@@ -675,27 +709,14 @@ bool JackBoomerDriver::JackBoomerDriverOutput::Init()
set_threaded_log_function(); set_threaded_log_function();
} }
} }

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

// Prefill ouput buffer
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);
}
}
int delay;
if (ioctl(fDriver->fOutFD, SNDCTL_DSP_GETODELAY, &delay) == -1) {
jack_error("JackBoomerDriver::Write error get out delay : %s@%i, errno = %d", __FILE__, __LINE__, errno);
}
delay /= fDriver->fSampleSize * fDriver->fPlaybackChannels;
jack_info("JackBoomerDriver::Write output latency frames = %ld", delay);
int delay;
if (ioctl(fDriver->fOutFD, SNDCTL_DSP_GETODELAY, &delay) == -1) {
jack_error("JackBoomerDriverOutput::Init error get out delay : %s@%i, errno = %d", __FILE__, __LINE__, errno);
} }
delay /= fDriver->fSampleSize * fDriver->fPlaybackChannels;
jack_info("JackBoomerDriverOutput::Init output latency frames = %ld", delay);
return true; return true;
} }
@@ -710,7 +731,12 @@ bool JackBoomerDriver::JackBoomerDriverOutput::Execute()
for (int i = 0; i < fDriver->fPlaybackChannels; i++) { for (int i = 0; i < fDriver->fPlaybackChannels; i++) {
if (fDriver->fGraphManager->GetConnectionsNum(fDriver->fPlaybackPortList[i]) > 0) { if (fDriver->fGraphManager->GetConnectionsNum(fDriver->fPlaybackPortList[i]) > 0) {
CopyAndConvertOut(fDriver->fOutputBuffer, fDriver->GetOutputBuffer(i), fDriver->fEngineControl->fBufferSize, i, fDriver->fPlaybackChannels, fDriver->fBits);
CopyAndConvertOut(fDriver->fOutputBuffer,
fDriver->GetOutputBuffer(i),
fDriver->fEngineControl->fBufferSize,
i,
fDriver->fPlaybackChannels * fDriver->fSampleSize,
fDriver->fBits);
} }
} }
@@ -748,7 +774,14 @@ bool JackBoomerDriver::JackBoomerDriverOutput::Execute()
jack_error("JackBoomerDriverOutput::Execute error bytes written = %ld", count); jack_error("JackBoomerDriverOutput::Execute error bytes written = %ld", count);
} }
fDriver->SynchronizeWrite();
// 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;
} }


@@ -839,7 +872,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';
@@ -871,15 +904,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';
@@ -896,6 +921,14 @@ SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor()
strcpy(desc->params[i].short_desc, "Extra output latency"); strcpy(desc->params[i].short_desc, "Extra output latency");
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, "sync-io");
desc->params[i].character = 'S';
desc->params[i].type = JackDriverParamBool;
desc->params[i].value.i = false;
strcpy(desc->params[i].short_desc, "In duplex mode, synchronize input and output");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc);

return desc; return desc;
} }


@@ -912,10 +945,10 @@ EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine
int chan_out = 0; int chan_out = 0;
bool monitor = false; bool monitor = false;
bool excl = false; bool excl = false;
bool syncio = false;
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;
@@ -967,11 +1000,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;
@@ -983,6 +1012,10 @@ EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine
case 'O': case 'O':
systemic_output_latency = param->value.ui; systemic_output_latency = param->value.ui;
break; break;

case 'S':
syncio = true;
break;
} }
} }


@@ -995,8 +1028,8 @@ 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);
// Special open for Boomer 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, ignorehwbuf) == 0) {
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, syncio) == 0) {
return boomer_driver; return boomer_driver;
} else { } else {
delete boomer_driver; // Delete the driver delete boomer_driver; // Delete the driver


+ 5
- 8
solaris/oss/JackBoomerDriver.h View File

@@ -91,10 +91,11 @@ class JackBoomerDriver : public JackAudioDriver
int fSampleFormat; int fSampleFormat;
int fNperiods; int fNperiods;
unsigned int fSampleSize; unsigned int fSampleSize;
unsigned int fFragmentSize;
int fRWMode; int fRWMode;
bool fExcl; bool fExcl;
bool fIgnoreHW;
bool fSyncIO;
unsigned int fInputBufferSize; unsigned int fInputBufferSize;
unsigned int fOutputBufferSize; unsigned int fOutputBufferSize;
@@ -131,23 +132,19 @@ class JackBoomerDriver : public JackAudioDriver
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, bool syncio);


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


+ 2
- 9
solaris/oss/JackOSSAdapter.cpp View File

@@ -44,13 +44,13 @@ static inline void CopyAndConvertIn(jack_sample_t *dst, void *src, size_t nframe
break; break;
} }
case 24: { case 24: {
signed short *s32src = (signed short*)src;
signed int *s32src = (signed int*)src;
s32src += channel; s32src += channel;
sample_move_dS_s24(dst, (char*)s32src, nframes, chcount<<2); sample_move_dS_s24(dst, (char*)s32src, nframes, chcount<<2);
break; break;
} }
case 32: { case 32: {
signed short *s32src = (signed short*)src;
signed int *s32src = (signed int*)src;
s32src += channel; s32src += channel;
sample_move_dS_s32u24(dst, (char*)s32src, nframes, chcount<<2); sample_move_dS_s32u24(dst, (char*)s32src, nframes, chcount<<2);
break; break;
@@ -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);


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

@@ -78,13 +78,13 @@ static inline void CopyAndConvertIn(jack_sample_t *dst, void *src, size_t nframe
break; break;
} }
case 24: { case 24: {
signed short *s32src = (signed short*)src;
signed int *s32src = (signed int*)src;
s32src += channel; s32src += channel;
sample_move_dS_s24(dst, (char*)s32src, nframes, chcount<<2); sample_move_dS_s24(dst, (char*)s32src, nframes, chcount<<2);
break; break;
} }
case 32: { case 32: {
signed short *s32src = (signed short*)src;
signed int *s32src = (signed int*)src;
s32src += channel; s32src += channel;
sample_move_dS_s32u24(dst, (char*)s32src, nframes, chcount<<2); sample_move_dS_s32u24(dst, (char*)s32src, nframes, chcount<<2);
break; break;


+ 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


+ 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
- 1
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'




Loading…
Cancel
Save