diff --git a/ChangeLog b/ChangeLog index 0a50e4d8..c615c46a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -27,7 +27,7 @@ Paul Davis 2009-07-30 Stephane Letz - * Add a -G parameter in CoreAudio backend (the computation value in RT thread expressed at percent of period). + * Add a -G parameter in CoreAudio backend (the computation value in RT thread expressed as percent of period). 2009-07-28 Stephane Letz diff --git a/dbus/audio_reserve.c b/dbus/audio_reserve.c index 120db64f..049826a5 100644 --- a/dbus/audio_reserve.c +++ b/dbus/audio_reserve.c @@ -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 diff --git a/solaris/oss/JackBoomerDriver.cpp b/solaris/oss/JackBoomerDriver.cpp index ac1d7aa0..396b80ef 100644 --- a/solaris/oss/JackBoomerDriver.cpp +++ b/solaris/oss/JackBoomerDriver.cpp @@ -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 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 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; } } @@ -233,7 +233,7 @@ 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),fTrigger(0), + fSampleFormat(0), fNperiods(0), fRWMode(0), fExcl(false), fInputBufferSize(0), fOutputBufferSize(0), fInputBuffer(NULL), fOutputBuffer(NULL), fInputThread(&fInputHandler), fOutputThread(&fOutputHandler), @@ -529,18 +529,7 @@ int JackBoomerDriver::Start() { jack_log("JackBoomerDriver::Start"); JackAudioDriver::Start(); - - if (fInFD >= 0 && fOutFD >= 0) { - - ioctl(fOutFD, SNDCTL_DSP_SETTRIGGER, &fTrigger); - fTrigger = (PCM_ENABLE_INPUT|PCM_ENABLE_OUTPUT); - - if (ioctl(fInFD, SNDCTL_DSP_SETDUPLEX, 0) < 0) { - if (errno != EINVAL) /* Dont care */ - jack_error("JackBoomerDriver::Start failed to enable full duplex errno = %d", errno); - } - } - + // Start input thread only when needed if (fInFD >= 0) { if (fInputThread.StartSync() < 0) { @@ -585,7 +574,7 @@ bool JackBoomerDriver::JackBoomerDriverInput::Init() set_threaded_log_function(); } } - + return true; } @@ -629,7 +618,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); } } @@ -667,21 +661,17 @@ bool JackBoomerDriver::JackBoomerDriverOutput::Init() for (int i = 0; i < fDriver->fNperiods; i++) { ssize_t count = ::write(fDriver->fOutFD, fDriver->fOutputBuffer, fDriver->fOutputBufferSize); if (count < (int)fDriver->fOutputBufferSize) { - jack_error("JackBoomerDriver::Write error bytes written = %ld", count); + jack_error("JackBoomerDriverOutput::Init error bytes written = %ld", count); } } - - if (fDriver->fTrigger) { - ioctl(fDriver->fOutFD, SNDCTL_DSP_SETTRIGGER, &fDriver->fTrigger); - } 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); + jack_error("JackBoomerDriverOutput::Init 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); + jack_info("JackBoomerDriverOutput::Init output latency frames = %ld", delay); return true; } @@ -696,7 +686,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); } } diff --git a/solaris/oss/JackBoomerDriver.h b/solaris/oss/JackBoomerDriver.h index b2540fbf..c54d6a91 100644 --- a/solaris/oss/JackBoomerDriver.h +++ b/solaris/oss/JackBoomerDriver.h @@ -93,8 +93,7 @@ class JackBoomerDriver : public JackAudioDriver unsigned int fSampleSize; int fRWMode; bool fExcl; - int fTrigger; - + unsigned int fInputBufferSize; unsigned int fOutputBufferSize;