Mercurial > hg > svapp
diff audioio/AudioPortAudioTarget.cpp @ 70:716e9d2f91c7
* Skip ID3 block when reading MP3 files (so long as ID3 support is included)
* Show progress when retrieving audio file from playlist
* Avoid -- but do not actually fix -- segmentation fault on exit. I am
totally stumped at the moment about why both the PA and JACK audio targets
should crash when properly shut down. For the moment, we just don't shut
them down...
* Fix incorrect behaviour (introduced on Friday as part of a different fix)
when replacing main model in situation where no current main model exists
author | Chris Cannam |
---|---|
date | Fri, 30 Nov 2007 17:31:09 +0000 |
parents | bf1a53489ccc |
children | 448ff6e34b99 22bf057ea151 |
line wrap: on
line diff
--- a/audioio/AudioPortAudioTarget.cpp Thu Nov 29 17:10:53 2007 +0000 +++ b/audioio/AudioPortAudioTarget.cpp Fri Nov 30 17:31:09 2007 +0000 @@ -29,7 +29,8 @@ m_stream(0), m_bufferSize(0), m_sampleRate(0), - m_latency(0) + m_latency(0), + m_done(false) { PaError err; @@ -105,17 +106,37 @@ AudioPortAudioTarget::~AudioPortAudioTarget() { + std::cerr << "AudioPortAudioTarget::~AudioPortAudioTarget()" << std::endl; + + shutdown(); + if (m_stream) { + + std::cerr << "closing stream" << std::endl; + PaError err; err = Pa_CloseStream(m_stream); if (err != paNoError) { std::cerr << "ERROR: AudioPortAudioTarget: Failed to close PortAudio stream: " << Pa_GetErrorText(err) << std::endl; } + + std::cerr << "terminating" << std::endl; + err = Pa_Terminate(); if (err != paNoError) { std::cerr << "ERROR: AudioPortAudioTarget: Failed to terminate PortAudio: " << Pa_GetErrorText(err) << std::endl; } } + + m_stream = 0; + + std::cerr << "AudioPortAudioTarget::~AudioPortAudioTarget() done" << std::endl; +} + +void +AudioPortAudioTarget::shutdown() +{ + m_done = true; } bool @@ -169,7 +190,7 @@ std::cout << "AudioPortAudioTarget::process(" << nframes << ")" << std::endl; #endif - if (!m_source) return 0; + if (!m_source || m_done) return 0; float *output = (float *)outputBuffer;