summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd
diff options
context:
space:
mode:
author intealls <johan@wennersten.eu>2017-01-30 15:29:31 +0100
committer intealls <johan@wennersten.eu>2017-01-30 16:32:28 +0100
commit51749ab970f0b2598bff5e84bfeba422d86850ed (patch)
treeb1b03ce51a2af5f92f7d1d86b0905b016d346ff7 /src/osd
parent06e22ce79d2bc41ac333ed5cf59ee1c2db5cfd6e (diff)
Fix issues on 32-bit builds and clamp latency
Diffstat (limited to 'src/osd')
-rw-r--r--src/osd/modules/sound/pa_sound.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/osd/modules/sound/pa_sound.cpp b/src/osd/modules/sound/pa_sound.cpp
index 071fbe8c598..dfba0cfa132 100644
--- a/src/osd/modules/sound/pa_sound.cpp
+++ b/src/osd/modules/sound/pa_sound.cpp
@@ -59,7 +59,7 @@ private:
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 @@ private:
}
};
+ 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<int>(std::max<int>(m_audio_latency, LATENCY_MIN), LATENCY_MAX);
try {
m_ab = new audio_buffer<s16>(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)