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

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>
* 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 "JackGraphManager.h"
#include "JackEngine.h"
#include "JackTools.h"
#include <assert.h>

namespace Jack
@@ -45,22 +46,24 @@ JackAudioDriver::JackAudioDriver(const char* name, JackEngine* engine, JackSynch
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)
{
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;
}

int JackAudioDriver::SetSampleRate(jack_nframes_t 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;
}



+ 3
- 3
common/JackDriver.cpp View File

@@ -116,9 +116,9 @@ int JackDriver::Open(jack_nframes_t nframes,
strcpy(fCaptureDriverName, capture_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->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 int GetTmpdir();
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