20 #include "JackAudioAdapter.h"    21 #include "JackError.h"    22 #include "JackCompilerDeps.h"    23 #include "JackTools.h"    35 int JackAudioAdapter::Process(jack_nframes_t frames, 
void* arg)
    37     JackAudioAdapter* adapter = 
static_cast<JackAudioAdapter*
>(arg);
    38     return adapter->ProcessAux(frames);
    41 int JackAudioAdapter::ProcessAux(jack_nframes_t frames)
    44     for (
int i = 0; i < fAudioAdapter->GetInputs(); i++) {
    45         fInputBufferList[i] = (jack_default_audio_sample_t*)
jack_port_get_buffer(fCapturePortList[i], frames);
    46         memset(fInputBufferList[i], 0, frames * 
sizeof(jack_default_audio_sample_t));
    49     for (
int i = 0; i < fAudioAdapter->GetOutputs(); i++) {
    50         fOutputBufferList[i] = (jack_default_audio_sample_t*)
jack_port_get_buffer(fPlaybackPortList[i], frames);
    53     fAudioAdapter->PullAndPush(fInputBufferList, fOutputBufferList, frames);
    57 int JackAudioAdapter::BufferSize(jack_nframes_t buffer_size, 
void* arg)
    59     JackAudioAdapter* adapter = 
static_cast<JackAudioAdapter*
>(arg);
    61     adapter->fAudioAdapter->SetHostBufferSize(buffer_size);
    65 int JackAudioAdapter::SampleRate(jack_nframes_t sample_rate, 
void* arg)
    67     JackAudioAdapter* adapter = 
static_cast<JackAudioAdapter*
>(arg);
    69     adapter->fAudioAdapter->SetHostSampleRate(sample_rate);
    73 void JackAudioAdapter::Latency(jack_latency_callback_mode_t mode, 
void* arg)
    75     JackAudioAdapter* adapter = 
static_cast<JackAudioAdapter*
>(arg);
    77     if (mode == JackCaptureLatency) {
    78         for (
int i = 0; i < adapter->fAudioAdapter->GetInputs(); i++) {
    80             range.
min = range.
max = adapter->fAudioAdapter->GetInputLatency(i);
    85         for (
int i = 0; i < adapter->fAudioAdapter->GetOutputs(); i++) {
    87             range.
min = range.
max = adapter->fAudioAdapter->GetOutputLatency(i);
    93 JackAudioAdapter::JackAudioAdapter(jack_client_t* client, JackAudioAdapterInterface* audio_io, 
const JSList* params)
    94     :fClient(client), fAudioAdapter(audio_io)
   100     for (node = params; node; node = jack_slist_next(node)) {
   102         switch (param->character) {
   110 JackAudioAdapter::~JackAudioAdapter()
   113     delete fAudioAdapter;
   116 void JackAudioAdapter::FreePorts()
   118     for (
int i = 0; i < fAudioAdapter->GetInputs(); i++) {
   119         if (fCapturePortList[i]) {
   123     for (
int i = 0; i < fAudioAdapter->GetOutputs(); i++) {
   124         if (fPlaybackPortList[i]) {
   129     delete[] fCapturePortList;
   130     delete[] fPlaybackPortList;
   132     delete[] fInputBufferList;
   133     delete[] fOutputBufferList;
   136 void JackAudioAdapter::ConnectPorts()
   140     ports = 
jack_get_ports(fClient, NULL, NULL, JackPortIsPhysical | JackPortIsInput);
   142         for (
int i = 0; i < fAudioAdapter->GetInputs() && ports[i]; i++) {
   148     ports = 
jack_get_ports(fClient, NULL, NULL, JackPortIsPhysical | JackPortIsOutput);
   150         for (
int i = 0; i < fAudioAdapter->GetOutputs() && ports[i]; i++) {
   157 void JackAudioAdapter::Reset()
   159     fAudioAdapter->Reset();
   162 int JackAudioAdapter::Open()
   165     jack_log(
"JackAudioAdapter::Open fCaptureChannels %d fPlaybackChannels %d", fAudioAdapter->GetInputs(), fAudioAdapter->GetOutputs());
   166     fAudioAdapter->Create();
   169     fCapturePortList = 
new jack_port_t*[fAudioAdapter->GetInputs()];
   170     fPlaybackPortList = 
new jack_port_t*[fAudioAdapter->GetOutputs()];
   172     fInputBufferList = 
new jack_default_audio_sample_t*[fAudioAdapter->GetInputs()];
   173     fOutputBufferList = 
new jack_default_audio_sample_t*[fAudioAdapter->GetOutputs()];
   175     for (
int i = 0; i < fAudioAdapter->GetInputs(); i++) {
   176         snprintf(name, 
sizeof(name), 
"capture_%d", i + 1);
   177         if ((fCapturePortList[i] = 
jack_port_register(fClient, name, JACK_DEFAULT_AUDIO_TYPE, CaptureDriverFlags, 0)) == NULL) {
   182     for (
int i = 0; i < fAudioAdapter->GetOutputs(); i++) {
   183         snprintf(name, 
sizeof(name), 
"playback_%d", i + 1);
   184         if ((fPlaybackPortList[i] = 
jack_port_register(fClient, name, JACK_DEFAULT_AUDIO_TYPE, PlaybackDriverFlags, 0)) == NULL) {
   199     if (jack_set_latency_callback(fClient, Latency, 
this) < 0) {
   211     return fAudioAdapter->Open();
   216     fAudioAdapter->Destroy();
   220 int JackAudioAdapter::Close()
   222     fAudioAdapter->Close();
   223     fAudioAdapter->Destroy();
 LIB_EXPORT int jack_port_unregister(jack_client_t *, jack_port_t *)
LIB_EXPORT int jack_set_process_callback(jack_client_t *client, JackProcessCallback process_callback, void *arg)
LIB_EXPORT int jack_activate(jack_client_t *client)
LIB_EXPORT void jack_port_set_latency_range(jack_port_t *port, jack_latency_callback_mode_t mode, jack_latency_range_t *range)
LIB_EXPORT int jack_connect(jack_client_t *, const char *source_port, const char *destination_port)
LIB_EXPORT jack_port_t * jack_port_register(jack_client_t *client, const char *port_name, const char *port_type, unsigned long flags, unsigned long buffer_size)
LIB_EXPORT int jack_set_sample_rate_callback(jack_client_t *client, JackSampleRateCallback srate_callback, void *arg)
LIB_EXPORT void * jack_port_get_buffer(jack_port_t *, jack_nframes_t)
LIB_EXPORT int jack_set_buffer_size_callback(jack_client_t *client, JackBufferSizeCallback bufsize_callback, void *arg)
LIB_EXPORT const char * jack_port_name(const jack_port_t *port)
LIB_EXPORT const char ** jack_get_ports(jack_client_t *, const char *port_name_pattern, const char *type_name_pattern, unsigned long flags)
SERVER_EXPORT void jack_log(const char *fmt,...)