diff --git a/src/osd/modules/sound/pa_sound.cpp b/src/osd/modules/sound/pa_sound.cpp index 071fbe8c598c2..dfba0cfa13295 100644 --- a/src/osd/modules/sound/pa_sound.cpp +++ b/src/osd/modules/sound/pa_sound.cpp @@ -59,7 +59,7 @@ class sound_pa : public osd_module, public sound_module audio_buffer(int size, int reserve) : size(size + reserve), reserve(reserve) { playpos = writepos = 0; - buf = new T[size](); + buf = new T[this->size]; } ~audio_buffer() { delete[] buf; } @@ -130,6 +130,12 @@ class sound_pa : public osd_module, public sound_module } }; + enum + { + LATENCY_MIN = 1, + LATENCY_MAX = 5, + }; + int callback(s16* output_buffer, size_t number_of_frames); static int _callback(const void*, void *output_buffer, @@ -186,6 +192,7 @@ int sound_pa::init(osd_options const &options) m_skip_threshold_ticks = 0; m_osd_tps = osd_ticks_per_second(); m_buffer_min_ct = INT_MAX; + m_audio_latency = std::min(std::max(m_audio_latency, LATENCY_MIN), LATENCY_MAX); try { m_ab = new audio_buffer(m_sample_rate, 2); @@ -415,12 +422,15 @@ void sound_pa::exit() osd_printf_error("PortAudio: Error writing log.\n"); #endif - Pa_StopStream(m_pa_stream); - err = Pa_Terminate(); + err = Pa_StopStream(m_pa_stream); if (err != paNoError) goto error; + err = Pa_CloseStream(m_pa_stream); if (err != paNoError) goto error; + error: if (err != paNoError) osd_printf_error("PortAudio error: %s\n", Pa_GetErrorText(err)); + Pa_Terminate(); + delete m_ab; if (m_overflows || m_underflows)