Mercurial > hg > svapp
comparison audioio/AudioJACKTarget.cpp @ 71:a8acc7841d70 1.2-stable
* Merge r884 from trunk
author | Chris Cannam |
---|---|
date | Fri, 30 Nov 2007 17:36:14 +0000 |
parents | 34fef5e68a76 |
children | 22bf057ea151 |
comparison
equal
deleted
inserted
replaced
69:1a7d804c9f8d | 71:a8acc7841d70 |
---|---|
209 | 209 |
210 AudioJACKTarget::AudioJACKTarget(AudioCallbackPlaySource *source) : | 210 AudioJACKTarget::AudioJACKTarget(AudioCallbackPlaySource *source) : |
211 AudioCallbackPlayTarget(source), | 211 AudioCallbackPlayTarget(source), |
212 m_client(0), | 212 m_client(0), |
213 m_bufferSize(0), | 213 m_bufferSize(0), |
214 m_sampleRate(0) | 214 m_sampleRate(0), |
215 m_done(false) | |
215 { | 216 { |
216 JackOptions options = JackNullOption; | 217 JackOptions options = JackNullOption; |
217 #ifdef HAVE_PORTAUDIO | 218 #ifdef HAVE_PORTAUDIO |
218 options = JackNoStartServer; | 219 options = JackNoStartServer; |
219 #endif | 220 #endif |
245 } | 246 } |
246 | 247 |
247 AudioJACKTarget::~AudioJACKTarget() | 248 AudioJACKTarget::~AudioJACKTarget() |
248 { | 249 { |
249 std::cerr << "AudioJACKTarget::~AudioJACKTarget()" << std::endl; | 250 std::cerr << "AudioJACKTarget::~AudioJACKTarget()" << std::endl; |
251 | |
252 shutdown(); | |
253 | |
250 if (m_client) { | 254 if (m_client) { |
255 | |
256 while (m_outputs.size() > 0) { | |
257 std::vector<jack_port_t *>::iterator itr = m_outputs.end(); | |
258 --itr; | |
259 jack_port_t *port = *itr; | |
260 std::cerr << "unregister " << m_outputs.size() << std::endl; | |
261 if (port) jack_port_unregister(m_client, port); | |
262 m_outputs.erase(itr); | |
263 } | |
264 std::cerr << "Deactivating... "; | |
251 jack_deactivate(m_client); | 265 jack_deactivate(m_client); |
266 std::cerr << "done\nClosing... "; | |
252 jack_client_close(m_client); | 267 jack_client_close(m_client); |
253 } | 268 std::cerr << "done" << std::endl; |
269 } | |
270 | |
271 m_client = 0; | |
272 | |
254 std::cerr << "AudioJACKTarget::~AudioJACKTarget() done" << std::endl; | 273 std::cerr << "AudioJACKTarget::~AudioJACKTarget() done" << std::endl; |
274 } | |
275 | |
276 void | |
277 AudioJACKTarget::shutdown() | |
278 { | |
279 m_done = true; | |
255 } | 280 } |
256 | 281 |
257 bool | 282 bool |
258 AudioJACKTarget::isOK() const | 283 AudioJACKTarget::isOK() const |
259 { | 284 { |
340 } | 365 } |
341 | 366 |
342 int | 367 int |
343 AudioJACKTarget::process(jack_nframes_t nframes) | 368 AudioJACKTarget::process(jack_nframes_t nframes) |
344 { | 369 { |
370 if (m_done) return 0; | |
371 | |
345 if (!m_mutex.tryLock()) { | 372 if (!m_mutex.tryLock()) { |
346 return 0; | 373 return 0; |
347 } | 374 } |
348 | 375 |
349 if (m_outputs.empty()) { | 376 if (m_outputs.empty()) { |