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 | |||
| --------------------------- | |||
| --------------------------- | |||
| 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> | |||
| @@ -42,7 +42,6 @@ Known problems, limitations | |||
| - use of POSIX named semaphore is currently unstable and not recommended yet. | |||
| ---------------- | |||
| Solaris version | |||
| ---------------- | |||
| @@ -139,12 +139,13 @@ int JackAudioDriver::Attach() | |||
| // Monitor ports | |||
| if (fWithMonitorPorts) { | |||
| 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) { | |||
| jack_error("Cannot register monitor port for %s", name); | |||
| return -1; | |||
| } else { | |||
| port = fGraphManager->GetPort(port_index); | |||
| port->SetAlias(alias); | |||
| port->SetLatency(fEngineControl->fBufferSize); | |||
| fMonitorPortList[i] = port_index; | |||
| } | |||
| @@ -24,7 +24,7 @@ | |||
| #include "config.h" | |||
| #endif | |||
| #define VERSION "1.9.3" | |||
| #define VERSION "1.9.4" | |||
| #define BUFFER_SIZE_MAX 8192 | |||
| @@ -31,7 +31,9 @@ | |||
| #include <jack/jslist.h> | |||
| #include <jack/systemdeps.h> | |||
| #if !defined (__sun__) | |||
| #include <stdbool.h> | |||
| #endif | |||
| /** Parameter types, intentionally similar to jack_driver_param_type_t */ | |||
| typedef enum | |||
| @@ -481,7 +481,7 @@ void sample_move_dS_s24s (jack_default_audio_sample_t *dst, char *src, unsigned | |||
| x <<= 8; | |||
| x |= (unsigned char)(src[0]); | |||
| /* correct sign bit and the rest of the top byte */ | |||
| if (src[0] & 0x80) { | |||
| if (src[2] & 0x80) { | |||
| x |= 0xff << 24; | |||
| } | |||
| #endif | |||
| @@ -106,10 +106,10 @@ SERVER_EXPORT void audio_release(const char * device_name) | |||
| } | |||
| 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); | |||
| } else { | |||
| jack_error("Audio card %s not found!!", device_name); | |||
| jack_error("Audio card %s not found!!", device_name); | |||
| } | |||
| // Close DBus connection last time | |||
| @@ -1763,7 +1763,8 @@ JACK_DBUS_METHOD_ARGUMENTS_BEGIN(DisconnectPortsByConnectionID) | |||
| JACK_DBUS_METHOD_ARGUMENTS_END | |||
| 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_METHODS_BEGIN | |||
| @@ -23,7 +23,7 @@ PROJECT_NAME = "Jack2" | |||
| # This could be handy for archiving the generated documentation or | |||
| # if some version control system is used. | |||
| PROJECT_NUMBER = 1.9.3 | |||
| PROJECT_NUMBER = 1.9.4 | |||
| # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) | |||
| # base path where the generated documentation will be put. | |||
| @@ -7,7 +7,7 @@ | |||
| <key>CFBundleExecutable</key> | |||
| <string>Jackservermp</string> | |||
| <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> | |||
| <string>com.grame.Jackmp</string> | |||
| <key>CFBundleInfoDictionaryVersion</key> | |||
| @@ -19,6 +19,6 @@ | |||
| <key>CFBundleSignature</key> | |||
| <string>????</string> | |||
| <key>CFBundleVersion</key> | |||
| <string>1.9.3</string> | |||
| <string>1.9.4</string> | |||
| </dict> | |||
| </plist> | |||
| @@ -126,13 +126,13 @@ UInt32 JackMachThread::GetThreadPriority(pthread_t thread, int inWhichPriority) | |||
| 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; | |||
| mach_msg_type_number_t count = THREAD_TIME_CONSTRAINT_POLICY_COUNT; | |||
| 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_policy_t) & theTCPolicy, | |||
| &count, | |||
| @@ -187,7 +187,7 @@ int JackMachThread::AcquireRealTimeImp(pthread_t thread, UInt64 period, UInt64 c | |||
| UInt64 int_period; | |||
| UInt64 int_computation; | |||
| UInt64 int_constraint; | |||
| GetParams(&int_period, &int_computation, &int_constraint); | |||
| GetParams(thread, &int_period, &int_computation, &int_constraint); | |||
| return 0; | |||
| } | |||
| @@ -109,7 +109,7 @@ class SERVER_EXPORT JackMachThread : public JackPosixThread | |||
| int AcquireRealTime(int priority); | |||
| int DropRealTime(); | |||
| 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 AcquireRealTimeImp(pthread_t thread, UInt64 period, UInt64 computation, UInt64 constraint); | |||
| @@ -10846,7 +10846,7 @@ | |||
| CoreFoundation, | |||
| ); | |||
| OTHER_REZFLAGS = ""; | |||
| PRODUCT_NAME = jack_midiseq; | |||
| PRODUCT_NAME = jack_showtime; | |||
| REZ_EXECUTABLE = YES; | |||
| SDKROOT = ""; | |||
| SECTORDER_FLAGS = ""; | |||
| @@ -21,6 +21,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| #include "JackError.h" | |||
| #include <unistd.h> | |||
| #include <CoreServices/CoreServices.h> | |||
| namespace Jack | |||
| { | |||
| @@ -218,7 +218,12 @@ OSStatus JackCoreAudioDriver::MeasureCallback(AudioDeviceID inDevice, | |||
| AudioDeviceStop(driver->fDeviceID, MeasureCallback); | |||
| 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 | |||
| 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) | |||
| : 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() | |||
| @@ -1103,7 +1108,8 @@ int JackCoreAudioDriver::Open(jack_nframes_t buffer_size, | |||
| const char* playback_driver_uid, | |||
| jack_nframes_t capture_latency, | |||
| jack_nframes_t playback_latency, | |||
| int async_output_latency) | |||
| int async_output_latency, | |||
| int computation_grain) | |||
| { | |||
| int in_nChannels = 0; | |||
| int out_nChannels = 0; | |||
| @@ -1120,7 +1126,8 @@ int JackCoreAudioDriver::Open(jack_nframes_t buffer_size, | |||
| strcpy(fPlaybackUID, playback_driver_uid); | |||
| fCaptureLatency = capture_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) | |||
| return -1; | |||
| @@ -1259,12 +1266,13 @@ int JackCoreAudioDriver::Attach() | |||
| // Monitor ports | |||
| if (fWithMonitorPorts) { | |||
| 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) { | |||
| jack_error("Cannot register monitor port for %s", name); | |||
| return -1; | |||
| } else { | |||
| port = fGraphManager->GetPort(port_index); | |||
| port->SetAlias(alias); | |||
| port->SetLatency(fEngineControl->fBufferSize); | |||
| 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->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)); | |||
| i = 0; | |||
| @@ -1478,6 +1486,14 @@ extern "C" | |||
| desc->params[i].value.i = 100; | |||
| strcpy(desc->params[i].short_desc, "Extra output latency in aynchronous mode (percent)"); | |||
| 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; | |||
| } | |||
| @@ -1498,6 +1514,7 @@ extern "C" | |||
| jack_nframes_t systemic_input_latency = 0; | |||
| jack_nframes_t systemic_output_latency = 0; | |||
| int async_output_latency = 100; | |||
| int computation_grain = -1; | |||
| for (node = params; node; node = jack_slist_next(node)) { | |||
| param = (const jack_driver_param_t *) node->data; | |||
| @@ -1567,6 +1584,10 @@ extern "C" | |||
| case 'L': | |||
| async_output_latency = param->value.ui; | |||
| 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); | |||
| 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; | |||
| } else { | |||
| delete driver; | |||
| @@ -72,6 +72,7 @@ class JackCoreAudioDriver : public JackAudioDriver | |||
| bool fMonitor; | |||
| float fIOUsage; | |||
| float fComputationGrain; | |||
| /* | |||
| #ifdef MAC_OS_X_VERSION_10_5 | |||
| @@ -164,7 +165,8 @@ class JackCoreAudioDriver : public JackAudioDriver | |||
| const char* playback_driver_name, | |||
| jack_nframes_t capture_latency, | |||
| jack_nframes_t playback_latency, | |||
| int async_output_latency); | |||
| int async_output_latency, | |||
| int computation_grain); | |||
| int Close(); | |||
| int Attach(); | |||
| @@ -68,51 +68,51 @@ int gCycleWriteCount = 0; | |||
| 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) { | |||
| case 16: { | |||
| signed short *s16src = (signed short*)src; | |||
| s16src += channel; | |||
| sample_move_dS_s16(dst, (char*)s16src, nframes, chcount<<1); | |||
| sample_move_dS_s16(dst, (char*)s16src, nframes, byte_skip); | |||
| break; | |||
| } | |||
| case 24: { | |||
| signed short *s32src = (signed short*)src; | |||
| signed int *s32src = (signed int*)src; | |||
| s32src += channel; | |||
| sample_move_dS_s24(dst, (char*)s32src, nframes, chcount<<2); | |||
| sample_move_dS_s24(dst, (char*)s32src, nframes, byte_skip); | |||
| break; | |||
| } | |||
| case 32: { | |||
| signed short *s32src = (signed short*)src; | |||
| signed int *s32src = (signed int*)src; | |||
| s32src += channel; | |||
| sample_move_dS_s32u24(dst, (char*)s32src, nframes, chcount<<2); | |||
| sample_move_dS_s32u24(dst, (char*)s32src, nframes, byte_skip); | |||
| 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) { | |||
| case 16: { | |||
| signed short *s16dst = (signed short*)dst; | |||
| 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; | |||
| } | |||
| case 24: { | |||
| signed int *s32dst = (signed int*)dst; | |||
| 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; | |||
| } | |||
| case 32: { | |||
| signed int *s32dst = (signed int*)dst; | |||
| 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; | |||
| } | |||
| } | |||
| @@ -124,16 +124,16 @@ void JackBoomerDriver::SetSampleFormat() | |||
| case 24: /* native-endian LSB aligned 24-bits in 32-bits integer */ | |||
| fSampleFormat = AFMT_S24_NE; | |||
| fSampleSize = sizeof(int); | |||
| fSampleSize = 4; | |||
| break; | |||
| case 32: /* native-endian 32-bit integer */ | |||
| fSampleFormat = AFMT_S32_NE; | |||
| fSampleSize = sizeof(int); | |||
| fSampleSize = 4; | |||
| break; | |||
| case 16: /* native-endian 16-bit integer */ | |||
| default: | |||
| fSampleFormat = AFMT_S16_NE; | |||
| fSampleSize = sizeof(short); | |||
| fSampleSize = 2; | |||
| break; | |||
| } | |||
| } | |||
| @@ -171,6 +171,7 @@ void JackBoomerDriver::DisplayDeviceInfo() | |||
| } else { | |||
| jack_info("output space info: fragments = %d, fragstotal = %d, fragsize = %d, bytes = %d", | |||
| info.fragments, info.fragstotal, info.fragsize, info.bytes); | |||
| fFragmentSize = info.fragsize; | |||
| } | |||
| 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) | |||
| : JackAudioDriver(name, alias, engine, table), | |||
| 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), | |||
| fInputBuffer(NULL), fOutputBuffer(NULL), | |||
| fInputThread(&fInputHandler), fOutputThread(&fOutputHandler), | |||
| @@ -401,15 +403,8 @@ int JackBoomerDriver::Open(jack_nframes_t nframes, | |||
| const char* playback_driver_uid, | |||
| jack_nframes_t capture_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 | |||
| if (JackAudioDriver::Open(nframes, samplerate, capturing, playing, inchannels, outchannels, monitor, | |||
| 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 |= ((playing) ? kWrite : 0); | |||
| fBits = bits; | |||
| fIgnoreHW = ignorehwbuf; | |||
| fNperiods = user_nperiods; | |||
| fExcl = excl; | |||
| fNperiods = (user_nperiods == 0) ? 1 : user_nperiods ; | |||
| fSyncIO = syncio; | |||
| #ifdef JACK_MONITOR | |||
| // Force memory page in | |||
| memset(&gCycleTable, 0, sizeof(gCycleTable)); | |||
| @@ -514,12 +509,12 @@ int JackBoomerDriver::OpenAux() | |||
| void JackBoomerDriver::CloseAux() | |||
| { | |||
| if (fRWMode & kRead && fInFD > 0) { | |||
| if (fRWMode & kRead && fInFD >= 0) { | |||
| close(fInFD); | |||
| fInFD = -1; | |||
| } | |||
| if (fRWMode & kWrite && fOutFD > 0) { | |||
| if (fRWMode & kWrite && fOutFD >= 0) { | |||
| close(fOutFD); | |||
| fOutFD = -1; | |||
| } | |||
| @@ -538,8 +533,61 @@ int JackBoomerDriver::Start() | |||
| jack_log("JackBoomerDriver::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 | |||
| if (fInFD > 0) { | |||
| if (fInFD >= 0) { | |||
| if (fInputThread.StartSync() < 0) { | |||
| jack_error("Cannot start input thread"); | |||
| return -1; | |||
| @@ -547,7 +595,7 @@ int JackBoomerDriver::Start() | |||
| } | |||
| // Start output thread only when needed | |||
| if (fOutFD > 0) { | |||
| if (fOutFD >= 0) { | |||
| if (fOutputThread.StartSync() < 0) { | |||
| jack_error("Cannot start output thread"); | |||
| return -1; | |||
| @@ -560,38 +608,18 @@ int JackBoomerDriver::Start() | |||
| int JackBoomerDriver::Stop() | |||
| { | |||
| // Stop input thread only when needed | |||
| if (fInFD > 0) { | |||
| if (fInFD >= 0) { | |||
| fInputThread.Kill(); | |||
| } | |||
| // Stop output thread only when needed | |||
| if (fOutFD > 0) { | |||
| if (fOutFD >= 0) { | |||
| fOutputThread.Kill(); | |||
| } | |||
| 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() | |||
| { | |||
| if (fDriver->IsRealTime()) { | |||
| @@ -602,18 +630,13 @@ bool JackBoomerDriver::JackBoomerDriverInput::Init() | |||
| set_threaded_log_function(); | |||
| } | |||
| } | |||
| return true; | |||
| } | |||
| bool JackBoomerDriver::JackBoomerDriverInput::Execute() | |||
| { | |||
| if (fDriver->fInFD < 0) { | |||
| // Keep begin cycle time | |||
| fDriver->CycleTakeBeginTime(); | |||
| return true; | |||
| } | |||
| #ifdef JACK_MONITOR | |||
| gCycleTable.fTable[gCycleReadCount].fBeforeRead = GetMicroSeconds(); | |||
| #endif | |||
| @@ -651,7 +674,12 @@ bool JackBoomerDriver::JackBoomerDriverInput::Execute() | |||
| fDriver->CycleTakeBeginTime(); | |||
| for (int i = 0; i < fDriver->fCaptureChannels; i++) { | |||
| if (fDriver->fGraphManager->GetConnectionsNum(fDriver->fCapturePortList[i]) > 0) { | |||
| CopyAndConvertIn(fDriver->GetInputBuffer(i), fDriver->fInputBuffer, fDriver->fEngineControl->fBufferSize, i, fDriver->fCaptureChannels, fDriver->fBits); | |||
| 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 | |||
| } | |||
| fDriver->SynchronizeRead(); | |||
| // Duplex : sync with write thread | |||
| if (fDriver->fInFD >= 0 && fDriver->fOutFD >= 0) { | |||
| fDriver->SynchronizeRead(); | |||
| } else { | |||
| // Otherwise direct process | |||
| fDriver->Process(); | |||
| } | |||
| return true; | |||
| } | |||
| @@ -675,27 +709,14 @@ bool JackBoomerDriver::JackBoomerDriverOutput::Init() | |||
| 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; | |||
| } | |||
| @@ -710,7 +731,12 @@ bool JackBoomerDriver::JackBoomerDriverOutput::Execute() | |||
| for (int i = 0; i < fDriver->fPlaybackChannels; i++) { | |||
| if (fDriver->fGraphManager->GetConnectionsNum(fDriver->fPlaybackPortList[i]) > 0) { | |||
| CopyAndConvertOut(fDriver->fOutputBuffer, fDriver->GetOutputBuffer(i), fDriver->fEngineControl->fBufferSize, i, fDriver->fPlaybackChannels, fDriver->fBits); | |||
| 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); | |||
| } | |||
| 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; | |||
| } | |||
| @@ -839,7 +872,7 @@ SERVER_EXPORT jack_driver_desc_t* driver_get_descriptor() | |||
| desc->params[i].value.ui = OSS_DRIVER_DEF_OUTS; | |||
| strcpy(desc->params[i].short_desc, "Playback channels"); | |||
| strcpy(desc->params[i].long_desc, desc->params[i].short_desc); | |||
| i++; | |||
| strcpy(desc->params[i].name, "excl"); | |||
| 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].short_desc, "OSS device name"); | |||
| 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++; | |||
| strcpy(desc->params[i].name, "input-latency"); | |||
| 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].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; | |||
| } | |||
| @@ -912,10 +945,10 @@ EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine | |||
| int chan_out = 0; | |||
| bool monitor = false; | |||
| bool excl = false; | |||
| bool syncio = false; | |||
| unsigned int nperiods = OSS_DRIVER_DEF_NPERIODS; | |||
| const JSList *node; | |||
| const jack_driver_param_t *param; | |||
| bool ignorehwbuf = false; | |||
| jack_nframes_t systemic_input_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); | |||
| capture_pcm_name = strdup (param->value.str); | |||
| break; | |||
| case 'b': | |||
| ignorehwbuf = true; | |||
| break; | |||
| case 'e': | |||
| excl = true; | |||
| break; | |||
| @@ -983,6 +1012,10 @@ EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLockedEngine | |||
| case 'O': | |||
| systemic_output_latency = param->value.ui; | |||
| 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); | |||
| // 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; | |||
| } else { | |||
| delete boomer_driver; // Delete the driver | |||
| @@ -91,10 +91,11 @@ class JackBoomerDriver : public JackAudioDriver | |||
| int fSampleFormat; | |||
| int fNperiods; | |||
| unsigned int fSampleSize; | |||
| unsigned int fFragmentSize; | |||
| int fRWMode; | |||
| bool fExcl; | |||
| bool fIgnoreHW; | |||
| bool fSyncIO; | |||
| unsigned int fInputBufferSize; | |||
| unsigned int fOutputBufferSize; | |||
| @@ -131,23 +132,19 @@ class JackBoomerDriver : public JackAudioDriver | |||
| bool playing, | |||
| int chan_in, | |||
| int chan_out, | |||
| bool vmix, | |||
| bool excl, | |||
| bool monitor, | |||
| const char* capture_driver_name, | |||
| const char* playback_driver_name, | |||
| jack_nframes_t capture_latency, | |||
| jack_nframes_t playback_latency, | |||
| int bits, | |||
| bool ignorehwbuf); | |||
| int bits, bool syncio); | |||
| int Close(); | |||
| int Start(); | |||
| int Stop(); | |||
| int Read(); | |||
| int Write(); | |||
| // BufferSize can be changed | |||
| bool IsFixedBufferSize() | |||
| { | |||
| @@ -44,13 +44,13 @@ static inline void CopyAndConvertIn(jack_sample_t *dst, void *src, size_t nframe | |||
| break; | |||
| } | |||
| case 24: { | |||
| signed short *s32src = (signed short*)src; | |||
| signed int *s32src = (signed int*)src; | |||
| s32src += channel; | |||
| sample_move_dS_s24(dst, (char*)s32src, nframes, chcount<<2); | |||
| break; | |||
| } | |||
| case 32: { | |||
| signed short *s32src = (signed short*)src; | |||
| signed int *s32src = (signed int*)src; | |||
| s32src += channel; | |||
| sample_move_dS_s32u24(dst, (char*)s32src, nframes, chcount<<2); | |||
| break; | |||
| @@ -309,8 +309,6 @@ int JackOSSAdapter::OpenInput() | |||
| return -1; | |||
| } | |||
| jack_log("JackOSSAdapter::OpenInput input fInFD = %d", fInFD); | |||
| if (fExcl) { | |||
| if (ioctl(fInFD, SNDCTL_DSP_COOKEDMODE, &flags) == -1) { | |||
| 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); | |||
| if (ioctl(fInFD, SNDCTL_DSP_SETFRAGMENT, &gFragFormat) == -1) { | |||
| 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); | |||
| if (ioctl(fOutFD, SNDCTL_DSP_SETFRAGMENT, &gFragFormat) == -1) { | |||
| 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; | |||
| } | |||
| case 24: { | |||
| signed short *s32src = (signed short*)src; | |||
| signed int *s32src = (signed int*)src; | |||
| s32src += channel; | |||
| sample_move_dS_s24(dst, (char*)s32src, nframes, chcount<<2); | |||
| break; | |||
| } | |||
| case 32: { | |||
| signed short *s32src = (signed short*)src; | |||
| signed int *s32src = (signed int*)src; | |||
| s32src += channel; | |||
| sample_move_dS_s32u24(dst, (char*)s32src, nframes, chcount<<2); | |||
| break; | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 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 | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp Audio Adapter for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 3, 0\0" | |||
| VALUE "FileVersion", "1, 9, 4, 0\0" | |||
| VALUE "InternalName", "audioadapter\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "audioadapter.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "audioadapter\0" | |||
| VALUE "ProductVersion", "1, 9, 3, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 4, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 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 | |||
| FILETYPE VFT_APP | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jack server for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 3, 0\0" | |||
| VALUE "FileVersion", "1, 9, 4, 0\0" | |||
| VALUE "InternalName", "jackd\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "jackd.exe\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "jackd\0" | |||
| VALUE "ProductVersion", "1, 9, 3, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 4, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 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 | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp Net Adapter for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 3, 0\0" | |||
| VALUE "FileVersion", "1, 9, 4, 0\0" | |||
| VALUE "InternalName", "netadapter\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "netadapter.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "netadapter\0" | |||
| VALUE "ProductVersion", "1, 9, 3, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 4, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 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 | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp Net Driver for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 3, 0\0" | |||
| VALUE "FileVersion", "1, 9, 4, 0\0" | |||
| VALUE "InternalName", "jack_netdriver\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "jack_netdriver.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "jack_netdriver\0" | |||
| VALUE "ProductVersion", "1, 9, 3, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 4, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 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 | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp Net Manager for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 3, 0\0" | |||
| VALUE "FileVersion", "1, 9, 4, 0\0" | |||
| VALUE "InternalName", "netmanager\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "netmanager.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "netmanager\0" | |||
| VALUE "ProductVersion", "1, 9, 3, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 4, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 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 | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp PortAudio Driver for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 3, 0\0" | |||
| VALUE "FileVersion", "1, 9, 4, 0\0" | |||
| VALUE "InternalName", "jack_portaudio\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "jack_portaudio.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "jack_portaudio\0" | |||
| VALUE "ProductVersion", "1, 9, 3, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 4, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 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 | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\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 "LegalCopyright", "Copyright Grame © 2006-2009\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "jack_winmme.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "jack_winmme\0" | |||
| VALUE "ProductVersion", "1, 9, 3, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 4, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 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 | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jack client library for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 3, 0\0" | |||
| VALUE "FileVersion", "1, 9, 4, 0\0" | |||
| VALUE "InternalName", "libjack\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "libjack.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "libjack\0" | |||
| VALUE "ProductVersion", "1, 9, 3, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 4, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,8 +11,8 @@ | |||
| // | |||
| LANGUAGE LANG_FRENCH, SUBLANG_DEFAULT | |||
| 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 | |||
| FILETYPE VFT_DLL | |||
| BEGIN | |||
| @@ -23,14 +23,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jack server library for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 3, 0\0" | |||
| VALUE "FileVersion", "1, 9, 4, 0\0" | |||
| VALUE "InternalName", "libjackserver\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "libjackserver.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "libjackserver\0" | |||
| VALUE "ProductVersion", "1, 9, 3, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 4, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -14,8 +14,8 @@ LANGUAGE LANG_FRENCH, SUBLANG_FRENCH | |||
| #ifndef _MAC | |||
| 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 | |||
| #ifdef _DEBUG | |||
| FILEFLAGS 0x1L | |||
| @@ -33,14 +33,14 @@ BEGIN | |||
| VALUE "Comments", "\0" | |||
| VALUE "CompanyName", "Grame\0" | |||
| VALUE "FileDescription", "Jackmp for Windows\0" | |||
| VALUE "FileVersion", "1, 9, 3, 0\0" | |||
| VALUE "FileVersion", "1, 9, 4, 0\0" | |||
| VALUE "InternalName", "libjackmp\0" | |||
| VALUE "LegalCopyright", "Copyright Grame © 2006-2009\0" | |||
| VALUE "LegalTrademarks", "\0" | |||
| VALUE "OriginalFilename", "libjackmp.dll\0" | |||
| VALUE "PrivateBuild", "\0" | |||
| VALUE "ProductName", "libjackmp\0" | |||
| VALUE "ProductVersion", "1, 9, 3, 0\0" | |||
| VALUE "ProductVersion", "1, 9, 4, 0\0" | |||
| VALUE "SpecialBuild", "\0" | |||
| END | |||
| END | |||
| @@ -11,7 +11,7 @@ import Task | |||
| import re | |||
| import Logs | |||
| VERSION='1.9.3' | |||
| VERSION='1.9.4' | |||
| APPNAME='jack' | |||
| JACK_API_VERSION = '0.1.0' | |||