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)
36 JackThreadedDriver::~JackThreadedDriver()
41 int JackThreadedDriver::Open()
43 return fDriver->Open();
46 int JackThreadedDriver::Open(jack_nframes_t buffer_size,
47 jack_nframes_t samplerate,
53 const char* capture_driver_name,
54 const char* playback_driver_name,
55 jack_nframes_t capture_latency,
56 jack_nframes_t playback_latency)
58 return fDriver->Open(buffer_size,
59 samplerate, capturing,
62 capture_driver_name, playback_driver_name,
63 capture_latency, playback_latency);
66 int JackThreadedDriver::Close()
68 return fDriver->Close();
71 int JackThreadedDriver::Process()
73 return fDriver->Process();
76 int JackThreadedDriver::Attach()
78 return fDriver->Attach();
81 int JackThreadedDriver::Detach()
83 return fDriver->Detach();
86 int JackThreadedDriver::Read()
88 return fDriver->Read();
91 int JackThreadedDriver::Write()
93 return fDriver->Write();
96 bool JackThreadedDriver::IsFixedBufferSize()
98 return fDriver->IsFixedBufferSize();
101 int JackThreadedDriver::SetBufferSize(jack_nframes_t buffer_size)
103 return fDriver->SetBufferSize(buffer_size);
106 int JackThreadedDriver::SetSampleRate(jack_nframes_t sample_rate)
108 return fDriver->SetSampleRate(sample_rate);
111 void JackThreadedDriver::SetMaster(
bool onoff)
113 fDriver->SetMaster(onoff);
116 bool JackThreadedDriver::GetMaster()
118 return fDriver->GetMaster();
121 void JackThreadedDriver::AddSlave(JackDriverInterface* slave)
123 fDriver->AddSlave(slave);
126 void JackThreadedDriver::RemoveSlave(JackDriverInterface* slave)
128 fDriver->RemoveSlave(slave);
131 int JackThreadedDriver::ProcessReadSlaves()
133 return fDriver->ProcessReadSlaves();
136 int JackThreadedDriver::ProcessWriteSlaves()
138 return fDriver->ProcessWriteSlaves();
141 int JackThreadedDriver::ProcessRead()
143 return fDriver->ProcessRead();
146 int JackThreadedDriver::ProcessWrite()
148 return fDriver->ProcessWrite();
151 int JackThreadedDriver::ProcessReadSync()
153 return fDriver->ProcessReadSync();
156 int JackThreadedDriver::ProcessWriteSync()
158 return fDriver->ProcessWriteSync();
161 int JackThreadedDriver::ProcessReadAsync()
163 return fDriver->ProcessReadAsync();
166 int JackThreadedDriver::ProcessWriteAsync()
168 return fDriver->ProcessWriteAsync();
171 std::list<JackDriverInterface*> JackThreadedDriver::GetSlaves()
173 return fDriver->GetSlaves();
176 int JackThreadedDriver::ClientNotify(
int refnum,
const char* name,
int notify,
int sync,
const char* message,
int value1,
int value2)
178 return fDriver->ClientNotify(refnum, name, notify, sync, message, value1, value2);
181 JackClientControl* JackThreadedDriver::GetClientControl()
const
183 return fDriver->GetClientControl();
186 bool JackThreadedDriver::IsRealTime()
const
188 return fDriver->IsRealTime();
191 bool JackThreadedDriver::IsRunning()
const
193 return fDriver->IsRunning();
196 int JackThreadedDriver::Start()
198 jack_log(
"JackThreadedDriver::Start");
200 if (fDriver->Start() < 0) {
204 if (fThread.StartSync() < 0) {
212 int JackThreadedDriver::Stop()
214 jack_log(
"JackThreadedDriver::Stop");
216 switch (fThread.GetStatus()) {
219 case JackThread::kStarting:
220 case JackThread::kIniting:
221 if (fThread.Kill() < 0) {
227 case JackThread::kRunning:
228 if (fThread.Stop() < 0) {
237 if (fDriver->Stop() < 0) {
244 bool JackThreadedDriver::Execute()
246 return (Process() == 0);
251 if (fDriver->Initialize()) {
259 void JackThreadedDriver::SetRealTime()
261 if (fDriver->IsRealTime()) {
262 jack_log(
"JackThreadedDriver::Init real-time");
264 GetEngineControl()->fPeriod = GetEngineControl()->fConstraint = GetEngineControl()->fPeriodUsecs * 1000;
265 GetEngineControl()->fComputation = JackTools::ComputationMicroSec(GetEngineControl()->fBufferSize) * 1000;
266 fThread.SetParams(GetEngineControl()->fPeriod, GetEngineControl()->fComputation, GetEngineControl()->fConstraint);
267 if (fThread.AcquireSelfRealTime(GetEngineControl()->fServerPriority) < 0) {
270 set_threaded_log_function();
273 jack_log(
"JackThreadedDriver::Init non-realtime");
SERVER_EXPORT void jack_error(const char *fmt,...)
SERVER_EXPORT void jack_log(const char *fmt,...)