21 #include "JackSystemDeps.h"    22 #include "JackLoopbackDriver.h"    23 #include "JackDriverLoader.h"    24 #include "JackEngineControl.h"    25 #include "JackGraphManager.h"    26 #include "JackError.h"    35 int JackLoopbackDriver::ProcessReadSync()
    40     for (
int i = 0; i < fCaptureChannels; i++) {
    41         memcpy(GetInputBuffer(i), GetOutputBuffer(i), 
sizeof(jack_default_audio_sample_t) * fEngineControl->fBufferSize);
    45     if (ResumeRefNum() < 0) {
    46         jack_error(
"JackLoopbackDriver::ProcessReadSync - ResumeRefNum error");
    53 int JackLoopbackDriver::ProcessWriteSync()
    56     if (SuspendRefNum() < 0) {
    57         jack_error(
"JackLoopbackDriver::ProcessWriteSync - SuspendRefNum error");
    63 int JackLoopbackDriver::ProcessReadAsync()
    68     for (
int i = 0; i < fCaptureChannels; i++) {
    69         memcpy(GetInputBuffer(i), GetOutputBuffer(i), 
sizeof(jack_default_audio_sample_t) * fEngineControl->fBufferSize);
    73     if (ResumeRefNum() < 0) {
    74         jack_error(
"JackLoopbackDriver::ProcessReadAsync - ResumeRefNum error");
    81 int JackLoopbackDriver::ProcessWriteAsync()
    99         desc = jack_driver_descriptor_construct(
"loopback", JackDriverSlave, 
"Loopback backend", &filler);
   102         jack_driver_descriptor_add_parameter(desc, &filler, 
"channels", 
'c', JackDriverParamInt, &value, NULL, 
"Maximum number of loopback ports", NULL);
   113         for (node = params; node; node = jack_slist_next (node)) {
   116             switch (param->character) {
   119                     channels = param->value.ui;
   125         if (driver->Open(0, 0, 1, 1, channels, channels, 
false, 
"loopback", 
"loopback", 0, 0) == 0) {
 Locked Engine, access to methods is serialized using a mutex.
Inter process synchronization using POSIX semaphore.
SERVER_EXPORT void jack_error(const char *fmt,...)
The base interface for drivers clients.
The loopback driver : to be used to "pipeline" applications connected in sequence.