Browse Source

Add internal client parameter handling (in progress)

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2675 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
sletz 17 years ago
parent
commit
500dcca3c6
11 changed files with 166 additions and 60 deletions
  1. +7
    -32
      common/JackAudioAdapter.cpp
  2. +1
    -3
      common/JackAudioAdapter.h
  3. +12
    -4
      common/JackAudioAdapterInterface.h
  4. +2
    -5
      common/JackCallbackAudioAdapter.cpp
  5. +1
    -3
      common/JackCallbackAudioAdapter.h
  6. +46
    -0
      linux/alsa/JackAlsaAdapter.cpp
  7. +1
    -5
      linux/alsa/JackAlsaAdapter.h
  8. +45
    -0
      macosx/JackCoreAudioAdapter.cpp
  9. +2
    -4
      macosx/JackCoreAudioAdapter.h
  10. +47
    -0
      windows/JackPortAudioAdapter.cpp
  11. +2
    -4
      windows/JackPortAudioAdapter.h

+ 7
- 32
common/JackAudioAdapter.cpp View File

@@ -32,15 +32,13 @@ namespace Jack
{

JackAudioAdapter::JackAudioAdapter(jack_client_t* jack_client,
JackAudioAdapterInterface* audio_io,
int input,
int output)
JackAudioAdapterInterface* audio_io)
{
int i;
char name[32];
fJackClient = jack_client;
fCaptureChannels = input;
fPlaybackChannels = output;
fCaptureChannels = audio_io->GetInputs();
fPlaybackChannels = audio_io->GetOutputs();
fAudioAdapter = audio_io;
fCapturePortList = new jack_port_t* [fCaptureChannels];
@@ -120,49 +118,26 @@ extern "C"
#include "JackPortAudioAdapter.h"
#endif

#define max(x,y) (((x)>(y)) ? (x) : (y))
#define min(x,y) (((x)<(y)) ? (x) : (y))

using namespace Jack;

EXPORT int jack_internal_initialize(jack_client_t* jack_client, const JSList* params)
{
Jack::JackAudioAdapter* adapter;
const char** ports;
jack_log("Loading audioadapter");
// Find out input and output ports numbers
int input = 0;
if ((ports = jack_get_ports(jack_client, NULL, NULL, JackPortIsPhysical|JackPortIsOutput)) != NULL) {
while (ports[input]) input++;
}
if (ports)
free(ports);
int output = 0;
if ((ports = jack_get_ports(jack_client, NULL, NULL, JackPortIsPhysical|JackPortIsInput)) != NULL) {
while (ports[output]) output++;
}
if (ports)
free(ports);
input = max(2, input);
output = max(2, output);
#ifdef __linux__
adapter = new Jack::JackCallbackAudioAdapter(jack_client,
new Jack::JackAlsaAdapter(input, output, jack_get_buffer_size(jack_client), jack_get_sample_rate(jack_client), params), input, output);
new Jack::JackAlsaAdapter(jack_get_buffer_size(jack_client), jack_get_sample_rate(jack_client), params));
#endif

#ifdef WIN32
adapter = new Jack::JackCallbackAudioAdapter(jack_client,
new Jack::JackPortAudioAdapter(input, output, jack_get_buffer_size(jack_client), jack_get_sample_rate(jack_client), params), input, output);
new Jack::JackPortAudioAdapter(jack_get_buffer_size(jack_client), jack_get_sample_rate(jack_client), params));
#endif
#ifdef __APPLE__
adapter = new Jack::JackCallbackAudioAdapter(jack_client,
new Jack::JackCoreAudioAdapter(input, output, jack_get_buffer_size(jack_client), jack_get_sample_rate(jack_client), params), input, output);
new Jack::JackCoreAudioAdapter(jack_get_buffer_size(jack_client), jack_get_sample_rate(jack_client), params));
#endif
assert(adapter);


+ 1
- 3
common/JackAudioAdapter.h View File

@@ -45,9 +45,7 @@ namespace Jack
public:

JackAudioAdapter(jack_client_t* jack_client,
JackAudioAdapterInterface* audio_io,
int input,
int output);
JackAudioAdapterInterface* audio_io);
virtual ~JackAudioAdapter();
int Open();


+ 12
- 4
common/JackAudioAdapterInterface.h View File

@@ -84,10 +84,8 @@ namespace Jack
public:
JackAudioAdapterInterface(int input, int output, jack_nframes_t buffer_size, jack_nframes_t sample_rate)
:fCaptureChannels(input),
fPlaybackChannels(output),
fBufferSize(buffer_size),
JackAudioAdapterInterface(jack_nframes_t buffer_size, jack_nframes_t sample_rate)
:fBufferSize(buffer_size),
fSampleRate(sample_rate),
fProducerDLL(buffer_size, sample_rate),
fConsumerDLL(buffer_size, sample_rate),
@@ -132,6 +130,16 @@ namespace Jack
}
void ResampleFactor(jack_nframes_t& frame1, jack_nframes_t& frame2);
int GetInputs()
{
return fCaptureChannels;
}
int GetOutputs()
{
return fPlaybackChannels;
}
};
}


+ 2
- 5
common/JackCallbackAudioAdapter.cpp View File

@@ -94,11 +94,8 @@ void JackCallbackAudioAdapter::Reset()
fAudioAdapter->Reset();
}

JackCallbackAudioAdapter::JackCallbackAudioAdapter(jack_client_t* jack_client,
JackAudioAdapterInterface* audio_io,
int input,
int output)
: JackAudioAdapter(jack_client, audio_io, input, output)
JackCallbackAudioAdapter::JackCallbackAudioAdapter(jack_client_t* jack_client, JackAudioAdapterInterface* audio_io)
: JackAudioAdapter(jack_client, audio_io)
{
int i;


+ 1
- 3
common/JackCallbackAudioAdapter.h View File

@@ -42,9 +42,7 @@ namespace Jack
public:

JackCallbackAudioAdapter(jack_client_t* jack_client,
JackAudioAdapterInterface* audio_io,
int input,
int output);
JackAudioAdapterInterface* audio_io);
~JackCallbackAudioAdapter();
};


+ 46
- 0
linux/alsa/JackAlsaAdapter.cpp View File

@@ -22,6 +22,52 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
namespace Jack
{


JackAlsaAdapter::JackAlsaAdapter(jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params)
:JackAudioAdapterInterface(buffer_size, sample_rate)
,fThread(this), fAudioInterface(GetInputs(), GetOutputs(), buffer_size, sample_rate)
{
const JSList* node;
const jack_driver_param_t* param;
fCaptureChannels = 2;
fPlaybackChannels = 2;
for (node = params; node; node = jack_slist_next(node)) {
param = (const jack_driver_param_t*) node->data;
switch (param->character) {
case 'i':
fCaptureChannels = param->value.ui;
break;
case 'o':
fPlaybackChannels = param->value.ui;
break;
case 'C':
break;
case 'P':
break;
case 'D':
break;
case 'n':
break;
case 'd':
break;
case 'r':
SetSampleRate(param->value.ui);
break;
}
}
}

int JackAlsaAdapter::Open()
{
if (fAudioInterface.open() == 0) {


+ 1
- 5
linux/alsa/JackAlsaAdapter.h View File

@@ -528,11 +528,7 @@ namespace Jack
public:
JackAlsaAdapter(int input, int output, jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params)
:JackAudioAdapterInterface(input, output, buffer_size, sample_rate)
,fThread(this), fAudioInterface(input, output, buffer_size, sample_rate)
{}
JackAlsaAdapter(jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params);
~JackAlsaAdapter()
{}


+ 45
- 0
macosx/JackCoreAudioAdapter.cpp View File

@@ -152,6 +152,51 @@ OSStatus JackCoreAudioAdapter::Render(void *inRefCon,
return noErr;
}

JackCoreAudioAdapter::JackCoreAudioAdapter(jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params)
:JackAudioAdapterInterface(buffer_size, sample_rate),fInputData(0),fState(false)
{

const JSList* node;
const jack_driver_param_t* param;
fCaptureChannels = 2;
fPlaybackChannels = 2;
for (node = params; node; node = jack_slist_next(node)) {
param = (const jack_driver_param_t*) node->data;
switch (param->character) {
case 'c' :
break;
case 'i':
fCaptureChannels = param->value.ui;
break;
case 'o':
fPlaybackChannels = param->value.ui;
break;
case 'C':
break;
case 'P':
break;
case 'D':
break;
case 'r':
SetSampleRate(param->value.ui);
break;
case 'l':
break;
}
}
}

OSStatus JackCoreAudioAdapter::GetDefaultDevice(AudioDeviceID* id)
{
OSStatus res;


+ 2
- 4
macosx/JackCoreAudioAdapter.h View File

@@ -97,10 +97,8 @@ namespace Jack
public:
JackCoreAudioAdapter(int input, int output, jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params)
:JackAudioAdapterInterface(input, output, buffer_size, sample_rate),fInputData(0),fState(false)
{}
~JackCoreAudioAdapter()
JackCoreAudioAdapter( jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params);
~JackCoreAudioAdapter()
{}
virtual int Open();


+ 47
- 0
windows/JackPortAudioAdapter.cpp View File

@@ -66,6 +66,53 @@ int JackPortAudioAdapter::Render(const void* inputBuffer, void* outputBuffer,
}
return paContinue;
}

JackPortAudioAdapter::JackPortAudioAdapter(jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params)
:JackAudioAdapterInterface(buffer_size, sample_rate)
{
const JSList* node;
const jack_driver_param_t* param;
fCaptureChannels = 2;
fPlaybackChannels = 2;
for (node = params; node; node = jack_slist_next(node)) {
param = (const jack_driver_param_t*) node->data;
switch (param->character) {
case 'c' :
break;
case 'i':
fCaptureChannels = param->value.ui;
break;
case 'o':
fPlaybackChannels = param->value.ui;
break;
case 'C':
break;
case 'P':
break;
case 'D':
break;
case 'r':
SetSampleRate(param->value.ui);
break;
case 'd':
break;
case 'l':
break;
}
}
}
int JackPortAudioAdapter::Open()
{


+ 2
- 4
windows/JackPortAudioAdapter.h View File

@@ -44,10 +44,8 @@ namespace Jack
public:
JackPortAudioAdapter(int input, int output, jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params)
:JackAudioAdapterInterface(input, output, buffer_size, sample_rate)
{}
~JackPortAudioAdapter()
JackPortAudioAdapter(jack_nframes_t buffer_size, jack_nframes_t sample_rate, const JSList* params);
~JackPortAudioAdapter()
{}
int Open();


Loading…
Cancel
Save