diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2015-08-24 12:57:34 +1000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2015-09-02 12:07:15 +1000 |
commit | 1cb36108bbb97e2c7494b48c93964b1a47bf16b4 (patch) | |
tree | 1cb102565304f0bd2ec53fafed8d87f67c3d15bb | |
parent | 3b71674eeea6f00ff127ee0c679c28682aa85a1f (diff) |
Change the functions related to initializing the Portaudio library
-rw-r--r-- | libs/backends/portaudio/portaudio_io.cc | 54 | ||||
-rw-r--r-- | libs/backends/portaudio/portaudio_io.h | 8 |
2 files changed, 37 insertions, 25 deletions
diff --git a/libs/backends/portaudio/portaudio_io.cc b/libs/backends/portaudio/portaudio_io.cc index 5ca99d1677..f0a6450c28 100644 --- a/libs/backends/portaudio/portaudio_io.cc +++ b/libs/backends/portaudio/portaudio_io.cc @@ -42,8 +42,7 @@ using namespace PBD; using namespace ARDOUR; PortAudioIO::PortAudioIO () - : _initialized (false) - , _capture_channels (0) + : _capture_channels (0) , _playback_channels (0) , _stream (0) , _input_buffer (0) @@ -59,10 +58,7 @@ PortAudioIO::~PortAudioIO () { pcm_stop(); - if (_initialized) { - Pa_Terminate(); - } - + pa_deinitialize (); clear_device_lists (); free (_input_buffer); _input_buffer = NULL; @@ -113,7 +109,7 @@ PortAudioIO::get_default_sample_rates (std::vector<float>& rates) int PortAudioIO::available_sample_rates(int device_id, std::vector<float>& sampleRates) { - if (!initialize_pa()) return -1; + if (!pa_initialize()) return -1; #ifdef WITH_ASIO if (get_current_host_api_type() == paASIO) { @@ -307,28 +303,44 @@ PortAudioIO::output_device_list(std::map<int, std::string> &devices) const } } +bool& +PortAudioIO::pa_initialized() +{ + static bool s_initialized = false; + return s_initialized; +} + bool -PortAudioIO::initialize_pa () +PortAudioIO::pa_initialize() { - PaError err = paNoError; + if (pa_initialized()) return true; - if (!_initialized) { - err = Pa_Initialize(); - if (err != paNoError) { - return false; - } - _initialized = true; - _host_api_index = Pa_GetDefaultHostApi (); - _host_api_name = get_host_api_name_from_index (_host_api_index); + PaError err = Pa_Initialize(); + if (err != paNoError) { + return false; } + pa_initialized() = true; return true; } +bool +PortAudioIO::pa_deinitialize() +{ + if (!pa_initialized()) return true; + + PaError err = Pa_Terminate(); + if (err != paNoError) { + return false; + } + pa_initialized() = false; + return true; +} + void PortAudioIO::host_api_list (std::vector<std::string>& api_list) { - if (!initialize_pa()) return; + if (!pa_initialize()) return; PaHostApiIndex count = Pa_GetHostApiCount(); @@ -382,7 +394,7 @@ PortAudioIO::set_host_api (const std::string& host_api_name) PaHostApiIndex PortAudioIO::get_host_api_index_from_name (const std::string& name) { - if (!initialize_pa()) return -1; + if (!pa_initialize()) return -1; PaHostApiIndex count = Pa_GetHostApiCount(); @@ -519,7 +531,7 @@ void PortAudioIO::discover() { DEBUG_AUDIO ("PortAudio: discover\n"); - if (!initialize_pa()) return; + if (!pa_initialize()) return; clear_device_lists (); add_none_devices (); @@ -682,7 +694,7 @@ PortAudioIO::pcm_setup ( int device_input, int device_output, double sample_rate, uint32_t samples_per_period) { - if (!initialize_pa()) { + if (!pa_initialize()) { DEBUG_AUDIO ("PortAudio Initialization Failed\n"); return InitializationError; } diff --git a/libs/backends/portaudio/portaudio_io.h b/libs/backends/portaudio/portaudio_io.h index 6daa13d5ea..71200b6e15 100644 --- a/libs/backends/portaudio/portaudio_io.h +++ b/libs/backends/portaudio/portaudio_io.h @@ -54,8 +54,6 @@ public: DeviceDefault = -1 }; - bool initialize_pa (); - void host_api_list (std::vector<std::string>&); bool set_host_api (const std::string& host_api_name); std::string get_host_api () const { return _host_api_name; } @@ -110,6 +108,10 @@ public: private: // Methods + static bool pa_initialize(); + static bool pa_deinitialize(); + static bool& pa_initialized(); + void clear_device_lists (); void add_none_devices (); void add_default_devices (); @@ -130,8 +132,6 @@ private: // Methods static void get_default_buffer_sizes(std::vector<uint32_t>&); private: // Data - bool _initialized; - uint32_t _capture_channels; uint32_t _playback_channels; |