Browse Source

Correct fPeriodUsecs computation in JackAudioDriver::SetBufferSize and JackAudioDriver::SetSampleRate.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1717 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.69
sletz 17 years ago
parent
commit
eb9bbab928
4 changed files with 21 additions and 10 deletions
  1. +3
    -0
      ChangeLog
  2. +10
    -7
      common/JackAudioDriver.cpp
  3. +3
    -3
      common/JackDriver.cpp
  4. +5
    -0
      common/JackTools.h

+ 3
- 0
ChangeLog View File

@@ -15,6 +15,9 @@ Kjetil S.Matheussen
Jackdmp changes log Jackdmp changes log
--------------------------- ---------------------------


2007-11-28 Stephane Letz <letz@grame.fr>
* Correct fPeriodUsecs computation in JackAudioDriver::SetBufferSize and JackAudioDriver::SetSampleRate.

2007-11-28 Stephane Letz <letz@grame.fr> 2007-11-28 Stephane Letz <letz@grame.fr>
* On OSX, use jack server name in notification system. * On OSX, use jack server name in notification system.




+ 10
- 7
common/JackAudioDriver.cpp View File

@@ -30,6 +30,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackPort.h" #include "JackPort.h"
#include "JackGraphManager.h" #include "JackGraphManager.h"
#include "JackEngine.h" #include "JackEngine.h"
#include "JackTools.h"
#include <assert.h> #include <assert.h>


namespace Jack namespace Jack
@@ -45,22 +46,24 @@ JackAudioDriver::JackAudioDriver(const char* name, JackEngine* engine, JackSynch
JackAudioDriver::~JackAudioDriver() JackAudioDriver::~JackAudioDriver()
{} {}


// DB: This is here because audio driver is the only one, who can change buffer size.
// It can be moved into JackDriver, but then it would be called twice
// because of JackServer::SetBufferSize() implementation.
// Initial values are set in JackDriver::Open(...). Yes it is a duplicate code (bad).
int JackAudioDriver::SetBufferSize(jack_nframes_t buffer_size) int JackAudioDriver::SetBufferSize(jack_nframes_t buffer_size)
{ {
fEngineControl->fBufferSize = buffer_size; fEngineControl->fBufferSize = buffer_size;
fEngineControl->fPeriodUsecs = jack_time_t(1000000.f / fEngineControl->fSampleRate * fEngineControl->fBufferSize); // in microsec
fGraphManager->SetBufferSize(buffer_size);
fGraphManager->SetBufferSize(buffer_size);
float new_val = 1000000.f / fEngineControl->fSampleRate * fEngineControl->fBufferSize; // in microsec
if (JackTools::EqualFloat(2.f * fEngineControl->fPeriodUsecs, fEngineControl->fTimeOutUsecs)) // -t (timeout) was not used, see JackDriver::Open...
fEngineControl->fTimeOutUsecs = jack_time_t(2.f * new_val);
fEngineControl->fPeriodUsecs = jack_time_t(new_val);
return 0; return 0;
} }


int JackAudioDriver::SetSampleRate(jack_nframes_t sample_rate) int JackAudioDriver::SetSampleRate(jack_nframes_t sample_rate)
{ {
fEngineControl->fSampleRate = sample_rate; fEngineControl->fSampleRate = sample_rate;
fEngineControl->fPeriodUsecs = jack_time_t(1000000.f / fEngineControl->fSampleRate * fEngineControl->fBufferSize); // in microsec
float new_val = 1000000.f / fEngineControl->fSampleRate * fEngineControl->fBufferSize; // in microsec
if (JackTools::EqualFloat(2.f * fEngineControl->fPeriodUsecs, fEngineControl->fTimeOutUsecs)) // -t (timeout) was not used, see JackDriver::Open...
fEngineControl->fTimeOutUsecs = jack_time_t(2.f * new_val);
fEngineControl->fPeriodUsecs = jack_time_t(new_val);
return 0; return 0;
} }




+ 3
- 3
common/JackDriver.cpp View File

@@ -116,9 +116,9 @@ int JackDriver::Open(jack_nframes_t nframes,
strcpy(fCaptureDriverName, capture_driver_name); strcpy(fCaptureDriverName, capture_driver_name);
strcpy(fPlaybackDriverName, playback_driver_name); strcpy(fPlaybackDriverName, playback_driver_name);


fEngineControl->fPeriodUsecs = (jack_time_t)floor((((float)nframes) / (float)samplerate) * 1000000.0f);
if (fEngineControl->fTimeOutUsecs == 0) /* usecs; if zero, use 2 period size. */
fEngineControl->fTimeOutUsecs = (jack_time_t)(2.f * fEngineControl->fPeriodUsecs);
fEngineControl->fPeriodUsecs = jack_time_t(1000000.f / fEngineControl->fSampleRate * fEngineControl->fBufferSize); // in microsec
if (fEngineControl->fTimeOutUsecs == 0) /* if zero [-t (timeout) was not used], use 2 period size */
fEngineControl->fTimeOutUsecs = jack_time_t(2.f * fEngineControl->fPeriodUsecs);


fGraphManager->SetBufferSize(nframes); fGraphManager->SetBufferSize(nframes);
fGraphManager->DirectConnect(fClientControl->fRefNum, fClientControl->fRefNum); // Connect driver to itself for "sync" mode fGraphManager->DirectConnect(fClientControl->fRefNum, fClientControl->fRefNum); // Connect driver to itself for "sync" mode


+ 5
- 0
common/JackTools.h View File

@@ -42,6 +42,11 @@ namespace Jack
static void CleanupFiles(const char* server_name); static void CleanupFiles(const char* server_name);
static int GetTmpdir(); static int GetTmpdir();
static void RewriteName(const char* name, char* new_name); static void RewriteName(const char* name, char* new_name);
static bool inline EqualFloat(float a, float b)
{
return (fabs(a - b) < 0.00001f);
}


}; };
} }


Loading…
Cancel
Save