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


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

using namespace Jack; using namespace Jack;


EXPORT int jack_internal_initialize(jack_client_t* jack_client, const JSList* params) EXPORT int jack_internal_initialize(jack_client_t* jack_client, const JSList* params)
{ {
Jack::JackAudioAdapter* adapter; Jack::JackAudioAdapter* adapter;
const char** ports;
jack_log("Loading audioadapter"); 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__ #ifdef __linux__
adapter = new Jack::JackCallbackAudioAdapter(jack_client, 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 #endif


#ifdef WIN32 #ifdef WIN32
adapter = new Jack::JackCallbackAudioAdapter(jack_client, 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 #endif
#ifdef __APPLE__ #ifdef __APPLE__
adapter = new Jack::JackCallbackAudioAdapter(jack_client, 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 #endif
assert(adapter); assert(adapter);


+ 1
- 3
common/JackAudioAdapter.h View File

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


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


+ 12
- 4
common/JackAudioAdapterInterface.h View File

@@ -84,10 +84,8 @@ namespace Jack
public: 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), fSampleRate(sample_rate),
fProducerDLL(buffer_size, sample_rate), fProducerDLL(buffer_size, sample_rate),
fConsumerDLL(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); 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(); 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; int i;


+ 1
- 3
common/JackCallbackAudioAdapter.h View File

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


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


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

@@ -22,6 +22,52 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
namespace Jack 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() int JackAlsaAdapter::Open()
{ {
if (fAudioInterface.open() == 0) { if (fAudioInterface.open() == 0) {


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

@@ -528,11 +528,7 @@ namespace Jack
public: 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() ~JackAlsaAdapter()
{} {}


+ 45
- 0
macosx/JackCoreAudioAdapter.cpp View File

@@ -152,6 +152,51 @@ OSStatus JackCoreAudioAdapter::Render(void *inRefCon,
return noErr; 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 JackCoreAudioAdapter::GetDefaultDevice(AudioDeviceID* id)
{ {
OSStatus res; OSStatus res;


+ 2
- 4
macosx/JackCoreAudioAdapter.h View File

@@ -97,10 +97,8 @@ namespace Jack
public: 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(); virtual int Open();


+ 47
- 0
windows/JackPortAudioAdapter.cpp View File

@@ -66,6 +66,53 @@ int JackPortAudioAdapter::Render(const void* inputBuffer, void* outputBuffer,
} }
return paContinue; 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() int JackPortAudioAdapter::Open()
{ {


+ 2
- 4
windows/JackPortAudioAdapter.h View File

@@ -44,10 +44,8 @@ namespace Jack
public: 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(); int Open();


Loading…
Cancel
Save