21 #include "JackSystemDeps.h"    22 #include "JackThreadedDriver.h"    23 #include "JackError.h"    24 #include "JackTools.h"    25 #include "JackGlobals.h"    26 #include "JackEngineControl.h"    31 JackThreadedDriver::JackThreadedDriver(JackDriver* driver):fThread(this),fDriver(driver)
    34 JackThreadedDriver::~JackThreadedDriver()
    39 int JackThreadedDriver::Open()
    41     return fDriver->Open();
    44 int JackThreadedDriver::Open(jack_nframes_t buffer_size,
    45                              jack_nframes_t samplerate,
    51                              const char* capture_driver_name,
    52                              const char* playback_driver_name,
    53                              jack_nframes_t capture_latency,
    54                              jack_nframes_t playback_latency)
    56     return fDriver->Open(buffer_size,
    57                         samplerate, capturing,
    60                         capture_driver_name, playback_driver_name,
    61                         capture_latency, playback_latency);
    64 int JackThreadedDriver::Close()
    66     return fDriver->Close();
    69 int JackThreadedDriver::Process()
    71     return fDriver->Process();
    74 int JackThreadedDriver::Attach()
    76     return fDriver->Attach();
    79 int JackThreadedDriver::Detach()
    81     return fDriver->Detach();
    84 int JackThreadedDriver::Read()
    86     return fDriver->Read();
    89 int JackThreadedDriver::Write()
    91     return fDriver->Write();
    94 bool JackThreadedDriver::IsFixedBufferSize()
    96     return fDriver->IsFixedBufferSize();
    99 int JackThreadedDriver::SetBufferSize(jack_nframes_t buffer_size)
   101     return fDriver->SetBufferSize(buffer_size);
   104 int JackThreadedDriver::SetSampleRate(jack_nframes_t sample_rate)
   106     return fDriver->SetSampleRate(sample_rate);
   109 void JackThreadedDriver::SetMaster(
bool onoff)
   111     fDriver->SetMaster(onoff);
   114 bool JackThreadedDriver::GetMaster()
   116     return fDriver->GetMaster();
   119 void JackThreadedDriver::AddSlave(JackDriverInterface* slave)
   121     fDriver->AddSlave(slave);
   124 void JackThreadedDriver::RemoveSlave(JackDriverInterface* slave)
   126     fDriver->RemoveSlave(slave);
   129 int JackThreadedDriver::ProcessReadSlaves()
   131     return fDriver->ProcessReadSlaves();
   134 int JackThreadedDriver::ProcessWriteSlaves()
   136     return fDriver->ProcessWriteSlaves();
   139 int JackThreadedDriver::ProcessRead()
   141     return fDriver->ProcessRead();
   144 int JackThreadedDriver::ProcessWrite()
   146     return fDriver->ProcessWrite();
   149 int JackThreadedDriver::ProcessReadSync()
   151     return fDriver->ProcessReadSync();
   154 int JackThreadedDriver::ProcessWriteSync()
   156     return fDriver->ProcessWriteSync();
   159 int JackThreadedDriver::ProcessReadAsync()
   161     return fDriver->ProcessReadAsync();
   164 int JackThreadedDriver::ProcessWriteAsync()
   166     return fDriver->ProcessWriteAsync();
   169 std::list<JackDriverInterface*> JackThreadedDriver::GetSlaves()
   171     return fDriver->GetSlaves();
   174 int JackThreadedDriver::ClientNotify(
int refnum, 
const char* name, 
int notify, 
int sync, 
const char* message, 
int value1, 
int value2)
   176     return fDriver->ClientNotify(refnum, name, notify, sync, message, value1, value2);
   179 JackClientControl* JackThreadedDriver::GetClientControl()
 const   181     return fDriver->GetClientControl();
   184 bool JackThreadedDriver::IsRealTime()
 const   186     return fDriver->IsRealTime();
   189 bool JackThreadedDriver::IsRunning()
 const   191     return fDriver->IsRunning();
   194 int JackThreadedDriver::Start()
   196     jack_log(
"JackThreadedDriver::Start");
   198     if (fDriver->Start() < 0) {
   202     if (fThread.StartSync() < 0) {
   210 int JackThreadedDriver::Stop()
   212     jack_log(
"JackThreadedDriver::Stop");
   214     switch (fThread.GetStatus()) {
   217         case JackThread::kStarting:
   218         case JackThread::kIniting:
   219             if (fThread.Kill() < 0) {
   225         case JackThread::kRunning:
   226             if (fThread.Stop() < 0) {
   235     if (fDriver->Stop() < 0) {
   242 bool JackThreadedDriver::Execute()
   244     return (Process() == 0);
   249     if (fDriver->Initialize())  {
   257 void JackThreadedDriver::SetRealTime()
   259     if (fDriver->IsRealTime()) {
   260         jack_log(
"JackThreadedDriver::Init real-time");
   262         GetEngineControl()->fPeriod = GetEngineControl()->fConstraint = GetEngineControl()->fPeriodUsecs * 1000;
   263         GetEngineControl()->fComputation = JackTools::ComputationMicroSec(GetEngineControl()->fBufferSize) * 1000;
   264         fThread.SetParams(GetEngineControl()->fPeriod, GetEngineControl()->fComputation, GetEngineControl()->fConstraint);
   265         if (fThread.AcquireSelfRealTime(GetEngineControl()->fServerPriority) < 0) {
   268             set_threaded_log_function();
   271         jack_log(
"JackThreadedDriver::Init non-realtime");
 SERVER_EXPORT void jack_error(const char *fmt,...)
SERVER_EXPORT void jack_log(const char *fmt,...)