git-svn-id: http://subversion.jackaudio.org/jack/jack2/branches/libjacknet@3639 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.9.8
@@ -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> | ||||
@@ -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 | ||||
---------------- | ---------------- | ||||
@@ -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; | ||||
} | } | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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. | ||||
@@ -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> |
@@ -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; | ||||
} | } | ||||
@@ -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); | ||||
@@ -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 = ""; | ||||
@@ -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 | ||||
{ | { | ||||
@@ -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; | ||||
@@ -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(); | ||||
@@ -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 | ||||
@@ -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() | ||||
{ | { | ||||
@@ -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); | ||||
@@ -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; | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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 | ||||
@@ -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' | ||||