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