From 8e0e3fcdee28a7a7a4ba6b3e26505a57c37c6dfa Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Sun, 23 Aug 2015 17:37:14 +1000 Subject: [PATCH] Refactor part of PortAudioIO::pcm_setup into new method --- libs/backends/portaudio/portaudio_io.cc | 43 +++++++++++++++---------- libs/backends/portaudio/portaudio_io.h | 1 + 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/libs/backends/portaudio/portaudio_io.cc b/libs/backends/portaudio/portaudio_io.cc index 4cb10c5431..c4711e06b2 100644 --- a/libs/backends/portaudio/portaudio_io.cc +++ b/libs/backends/portaudio/portaudio_io.cc @@ -559,6 +559,31 @@ PortAudioIO::pcm_start() return 0; } +bool +PortAudioIO::set_sample_rate_and_latency_from_stream () +{ + const PaStreamInfo* nfo_s = Pa_GetStreamInfo(_stream); + + if (nfo_s == NULL) { + return false; + } + + _cur_sample_rate = nfo_s->sampleRate; + _cur_input_latency = nfo_s->inputLatency * _cur_sample_rate; + _cur_output_latency = nfo_s->outputLatency * _cur_sample_rate; + + DEBUG_AUDIO (string_compose ("PA Sample Rate %1 SPS\n", _cur_sample_rate)); + + DEBUG_AUDIO (string_compose ("PA Input Latency %1ms, %2 spl\n", + 1e3 * nfo_s->inputLatency, + _cur_input_latency)); + + DEBUG_AUDIO (string_compose ("PA Output Latency %1ms, %2 spl\n", + 1e3 * nfo_s->outputLatency, + _cur_output_latency)); + return true; +} + bool PortAudioIO::allocate_buffers_for_blocking_api (uint32_t samples_per_period) { @@ -592,7 +617,6 @@ PortAudioIO::pcm_setup ( PaError err = paNoError; const PaDeviceInfo *nfo_in = NULL; const PaDeviceInfo *nfo_out = NULL; - const PaStreamInfo *nfo_s = NULL; if (!initialize_pa()) { DEBUG_AUDIO ("PortAudio Initialization Failed\n"); @@ -693,27 +717,12 @@ PortAudioIO::pcm_setup ( return -1; } - nfo_s = Pa_GetStreamInfo (_stream); - if (!nfo_s) { + if (!set_sample_rate_and_latency_from_stream()) { DEBUG_AUDIO ("PortAudio failed to query stream information.\n"); pcm_stop(); return -1; } - _cur_sample_rate = nfo_s->sampleRate; - _cur_input_latency = nfo_s->inputLatency * _cur_sample_rate; - _cur_output_latency = nfo_s->outputLatency * _cur_sample_rate; - - DEBUG_AUDIO (string_compose ("PA Sample Rate %1 SPS\n", _cur_sample_rate)); - - DEBUG_AUDIO (string_compose ("PA Input Latency %1ms, %2 spl\n", - 1e3 * nfo_s->inputLatency, - _cur_input_latency)); - - DEBUG_AUDIO (string_compose ("PA Output Latency %1ms, %2 spl\n", - 1e3 * nfo_s->outputLatency, - _cur_output_latency)); - _state = 0; if (!allocate_buffers_for_blocking_api(samples_per_period)) { diff --git a/libs/backends/portaudio/portaudio_io.h b/libs/backends/portaudio/portaudio_io.h index 8bd6d2ae9b..769eb5d096 100644 --- a/libs/backends/portaudio/portaudio_io.h +++ b/libs/backends/portaudio/portaudio_io.h @@ -106,6 +106,7 @@ private: // Methods void add_devices (); std::string get_host_api_name_from_index (PaHostApiIndex index); + bool set_sample_rate_and_latency_from_stream (); bool allocate_buffers_for_blocking_api (uint32_t samples_per_period); static void get_default_sample_rates(std::vector&);