Browse Source

Add control for adapter ringbuffer size.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@3356 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.2
sletz 16 years ago
parent
commit
8902893408
12 changed files with 76 additions and 16 deletions
  1. +2
    -1
      ChangeLog
  2. +2
    -2
      common/JackAudioAdapter.cpp
  3. +9
    -3
      common/JackAudioAdapterInterface.h
  4. +2
    -2
      common/JackLibSampleRateResampler.cpp
  5. +1
    -1
      common/JackLibSampleRateResampler.h
  6. +6
    -0
      common/JackResampler.cpp
  7. +2
    -1
      common/JackResampler.h
  8. +14
    -3
      linux/alsa/JackAlsaAdapter.cpp
  9. +13
    -1
      macosx/coreaudio/JackCoreAudioAdapter.cpp
  10. +12
    -0
      solaris/oss/JackOSSAdapter.cpp
  11. +1
    -1
      solaris/oss/JackOSSAdapter.h
  12. +12
    -1
      windows/portaudio/JackPortAudioAdapter.cpp

+ 2
- 1
ChangeLog View File

@@ -27,7 +27,8 @@ Michael Voigt
* Fix JackNetDriver::Close method.
* For audio device reservation, add card_to_num function.
* Fix buffer size and sample rate handling in JackAlsaAdapter.
* Fix buffer size and sample rate handling in JackAlsaAdapter.
* Add control for adapter ringbuffer size.
2009-02-23 Stephane Letz <letz@grame.fr>


+ 2
- 2
common/JackAudioAdapter.cpp View File

@@ -140,9 +140,9 @@ namespace Jack
fCaptureRingBuffer = new JackResampler*[fCaptureChannels];
fPlaybackRingBuffer = new JackResampler*[fPlaybackChannels];
for ( i = 0; i < fCaptureChannels; i++ )
fCaptureRingBuffer[i] = new JackLibSampleRateResampler(fAudioAdapter->GetQuality());
fCaptureRingBuffer[i] = new JackLibSampleRateResampler(fAudioAdapter->GetQuality(), fAudioAdapter->GetRingbufferSize());
for ( i = 0; i < fPlaybackChannels; i++ )
fPlaybackRingBuffer[i] = new JackLibSampleRateResampler(fAudioAdapter->GetQuality());
fPlaybackRingBuffer[i] = new JackLibSampleRateResampler(fAudioAdapter->GetQuality(), fAudioAdapter->GetRingbufferSize());
fAudioAdapter->SetRingBuffers ( fCaptureRingBuffer, fPlaybackRingBuffer );
if (fCaptureChannels > 0)
jack_log ( "ReadSpace = %ld", fCaptureRingBuffer[0]->ReadSpace() );


+ 9
- 3
common/JackAudioAdapterInterface.h View File

@@ -90,7 +90,8 @@ namespace Jack
JackResampler** fPlaybackRingBuffer;
unsigned int fQuality;

unsigned int fRingbufferSize;
bool fRunning;

public:
@@ -104,8 +105,8 @@ namespace Jack
fAdaptedSampleRate ( sample_rate ),
fHostDLL ( buffer_size, sample_rate ),
fAdaptedDLL ( buffer_size, sample_rate ),
fQuality(0),
fRunning ( false )
fQuality(0), fRingbufferSize(DEFAULT_RB_SIZE),
fRunning(false)
{}

virtual ~JackAudioAdapterInterface()
@@ -129,6 +130,11 @@ namespace Jack

void ResetRingBuffers();
unsigned int GetRingbufferSize()
{
return fRingbufferSize;
}
unsigned int GetQuality()
{
return fQuality;


+ 2
- 2
common/JackLibSampleRateResampler.cpp View File

@@ -31,8 +31,8 @@ JackLibSampleRateResampler::JackLibSampleRateResampler()
jack_error("JackLibSampleRateResampler::JackLibSampleRateResampler err = %s", src_strerror(error));
}

JackLibSampleRateResampler::JackLibSampleRateResampler(unsigned int quality)
:JackResampler(),fRatio(1)
JackLibSampleRateResampler::JackLibSampleRateResampler(unsigned int quality, unsigned int ringbuffer_size)
:JackResampler(ringbuffer_size),fRatio(1)
{
switch (quality) {
case 0:


+ 1
- 1
common/JackLibSampleRateResampler.h View File

@@ -46,7 +46,7 @@ class JackLibSampleRateResampler : public JackResampler
public:
JackLibSampleRateResampler();
JackLibSampleRateResampler(unsigned int quality);
JackLibSampleRateResampler(unsigned int quality, unsigned int ringbuffer_size);
virtual ~JackLibSampleRateResampler();
unsigned int ReadResample(float* buffer, unsigned int frames);


+ 6
- 0
common/JackResampler.cpp View File

@@ -28,6 +28,12 @@ JackResampler::JackResampler():fNum(1),fDenom(1)
jack_ringbuffer_read_advance(fRingBuffer, (sizeof(float) * DEFAULT_RB_SIZE) / 2);
}

JackResampler::JackResampler(unsigned int ringbuffer_size):fNum(1),fDenom(1)
{
fRingBuffer = jack_ringbuffer_create(sizeof(float) * ringbuffer_size);
jack_ringbuffer_read_advance(fRingBuffer, (sizeof(float) * ringbuffer_size) / 2);
}

JackResampler::~JackResampler()
{
if (fRingBuffer)


+ 2
- 1
common/JackResampler.h View File

@@ -40,10 +40,11 @@ class JackResampler
jack_ringbuffer_t* fRingBuffer;
unsigned int fNum;
unsigned int fDenom;
public:
JackResampler();
JackResampler(unsigned int ringbuffer_size);
virtual ~JackResampler();
virtual void Reset();


+ 14
- 3
linux/alsa/JackAlsaAdapter.cpp View File

@@ -66,16 +66,19 @@ namespace Jack
fAudioInterface.fCardName = strdup ( param->value.str );
break;
case 'r':
fAudioInterface.fFrequency = param->value.ui;
fAudioInterface.fFrequency = param->value.ui;
SetAdaptedSampleRate ( param->value.ui );
break;
case 'p':
fAudioInterface.fBuffering = param->value.ui;
fAudioInterface.fBuffering = param->value.ui;
SetAdaptedBufferSize ( param->value.ui );
break;
case 'q':
fQuality = param->value.ui;
break;
case 'g':
fRingbufferSize = param->value.ui;
break;
}
}

@@ -222,7 +225,7 @@ extern "C"
strcpy ( desc->name, "audioadapter" ); // size MUST be less then JACK_DRIVER_NAME_MAX + 1
strcpy ( desc->desc, "netjack audio <==> net backend adapter" ); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1

desc->nparams = 10;
desc->nparams = 11;
desc->params = ( jack_driver_param_desc_t* ) calloc ( desc->nparams, sizeof ( jack_driver_param_desc_t ) );

i = 0;
@@ -310,6 +313,14 @@ extern "C"
desc->params[i].value.ui = 0;
strcpy(desc->params[i].short_desc, "Resample algorithm quality (0 - 4)");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc);
i++;
strcpy(desc->params[i].name, "ring-buffer");
desc->params[i].character = 'g';
desc->params[i].type = JackDriverParamInt;
desc->params[i].value.ui = 0;
strcpy(desc->params[i].short_desc, "Resampling ringbuffer size in frames (default = 32768)");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc);

return desc;
}


+ 13
- 1
macosx/coreaudio/JackCoreAudioAdapter.cpp View File

@@ -392,6 +392,10 @@ OSStatus JackCoreAudioAdapter::Render(void *inRefCon,
case 'q':
fQuality = param->value.ui;
break;
case 'g':
fRingbufferSize = param->value.ui;
break;
}
}
@@ -997,7 +1001,7 @@ extern "C"
strcpy(desc->name, "audioadapter"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1
strcpy(desc->desc, "netjack audio <==> net backend adapter"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1
desc->nparams = 11;
desc->nparams = 12;
desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t));

i = 0;
@@ -1087,6 +1091,14 @@ extern "C"
desc->params[i].value.ui = 0;
strcpy(desc->params[i].short_desc, "Resample algorithm quality (0 - 4)");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc);
i++;
strcpy(desc->params[i].name, "ring-buffer");
desc->params[i].character = 'g';
desc->params[i].type = JackDriverParamInt;
desc->params[i].value.ui = 0;
strcpy(desc->params[i].short_desc, "Resampling ringbuffer size in frames (default = 32768)");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc);

return desc;
}


+ 12
- 0
solaris/oss/JackOSSAdapter.cpp View File

@@ -181,6 +181,10 @@ JackOSSAdapter::JackOSSAdapter(jack_nframes_t buffer_size, jack_nframes_t sample
case 'q':
fQuality = param->value.ui;
break;
case 'g':
fRingbufferSize = param->value.ui;
break;

}
}
@@ -756,6 +760,14 @@ extern "C"
desc->params[i].value.ui = 0;
strcpy(desc->params[i].short_desc, "Resample algorithm quality (0 - 4)");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc);
i++;
strcpy(desc->params[i].name, "ring-buffer");
desc->params[i].character = 'g';
desc->params[i].type = JackDriverParamInt;
desc->params[i].value.ui = 0;
strcpy(desc->params[i].short_desc, "Resampling ringbuffer size in frames (default = 32768)");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc);
return desc;
}


+ 1
- 1
solaris/oss/JackOSSAdapter.h View File

@@ -34,7 +34,7 @@ namespace Jack

typedef jack_default_audio_sample_t jack_sample_t;

#define OSS_DRIVER_N_PARAMS 12
#define OSS_DRIVER_N_PARAMS 13
#define OSS_DRIVER_DEF_DEV "/dev/dsp"
#define OSS_DRIVER_DEF_FS 48000
#define OSS_DRIVER_DEF_BLKSIZE 1024


+ 12
- 1
windows/portaudio/JackPortAudioAdapter.cpp View File

@@ -128,6 +128,9 @@ namespace Jack
case 'q':
fQuality = param->value.ui;
break;
case 'g':
fRingbufferSize = param->value.ui;
break;
}
}

@@ -247,7 +250,7 @@ extern "C"
strcpy(desc->name, "audioadapter"); // size MUST be less then JACK_DRIVER_NAME_MAX + 1
strcpy(desc->desc, "netjack audio <==> net backend adapter"); // size MUST be less then JACK_DRIVER_PARAM_DESC + 1
desc->nparams = 9;
desc->nparams = 10;
desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t));

i = 0;
@@ -322,6 +325,14 @@ extern "C"
desc->params[i].value.ui = 0;
strcpy(desc->params[i].short_desc, "Resample algorithm quality (0 - 4)");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc);
i++;
strcpy(desc->params[i].name, "ring-buffer");
desc->params[i].character = 'g';
desc->params[i].type = JackDriverParamInt;
desc->params[i].value.ui = 0;
strcpy(desc->params[i].short_desc, "Resampling ringbuffer size in frames (default = 32768)");
strcpy(desc->params[i].long_desc, desc->params[i].short_desc);

return desc;
}


Loading…
Cancel
Save