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()) {