mirror of
https://github.com/holub/mame
synced 2025-07-03 17:08:39 +03:00
pa_sound: add support for audio latency and samplerate options
This commit is contained in:
parent
16cc6c9d80
commit
d2ee234660
@ -84,6 +84,7 @@ private:
|
|||||||
std::map<uint32_t, stream_info> m_streams;
|
std::map<uint32_t, stream_info> m_streams;
|
||||||
|
|
||||||
uint32_t m_stream_id;
|
uint32_t m_stream_id;
|
||||||
|
int m_audio_latency;
|
||||||
|
|
||||||
int stream_callback(stream_info *stream, const void *input, void *output, unsigned long frameCount, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags);
|
int stream_callback(stream_info *stream, const void *input, void *output, unsigned long frameCount, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags);
|
||||||
static int s_stream_callback(const void *input, void *output, unsigned long frameCount, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData);
|
static int s_stream_callback(const void *input, void *output, unsigned long frameCount, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData);
|
||||||
@ -136,7 +137,7 @@ int sound_pa::init(osd_interface &osd, osd_options const &options)
|
|||||||
auto &node = m_info.m_nodes[dev];
|
auto &node = m_info.m_nodes[dev];
|
||||||
node.m_name = di->name;
|
node.m_name = di->name;
|
||||||
node.m_id = dev + 1;
|
node.m_id = dev + 1;
|
||||||
node.m_rate.m_default_rate = node.m_rate.m_min_rate = node.m_rate.m_max_rate = di->defaultSampleRate;
|
node.m_rate.m_default_rate = node.m_rate.m_min_rate = node.m_rate.m_max_rate = options.sample_rate();
|
||||||
node.m_sinks = di->maxOutputChannels;
|
node.m_sinks = di->maxOutputChannels;
|
||||||
node.m_sources = di->maxInputChannels;
|
node.m_sources = di->maxInputChannels;
|
||||||
|
|
||||||
@ -153,6 +154,7 @@ int sound_pa::init(osd_interface &osd, osd_options const &options)
|
|||||||
m_info.m_default_sink = dc(Pa_GetDefaultOutputDevice());
|
m_info.m_default_sink = dc(Pa_GetDefaultOutputDevice());
|
||||||
m_info.m_default_source = dc(Pa_GetDefaultInputDevice());
|
m_info.m_default_source = dc(Pa_GetDefaultInputDevice());
|
||||||
|
|
||||||
|
m_audio_latency = options.audio_latency();
|
||||||
m_stream_id = 1;
|
m_stream_id = 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -188,7 +190,7 @@ uint32_t sound_pa::stream_sink_open(uint32_t node, std::string name, uint32_t ra
|
|||||||
op.device = node - 1;
|
op.device = node - 1;
|
||||||
op.channelCount = m_info.m_nodes[node-1].m_sinks;
|
op.channelCount = m_info.m_nodes[node-1].m_sinks;
|
||||||
op.sampleFormat = paInt16;
|
op.sampleFormat = paInt16;
|
||||||
op.suggestedLatency = Pa_GetDeviceInfo(node - 1)->defaultLowOutputLatency;
|
op.suggestedLatency = (m_audio_latency > 0) ? (m_audio_latency / 10.0) : Pa_GetDeviceInfo(node - 1)->defaultLowOutputLatency;
|
||||||
op.hostApiSpecificStreamInfo = nullptr;
|
op.hostApiSpecificStreamInfo = nullptr;
|
||||||
|
|
||||||
PaError err = Pa_OpenStream(&si->second.m_stream, nullptr, &op, rate, paFramesPerBufferUnspecified, 0, s_stream_callback, &si->second);
|
PaError err = Pa_OpenStream(&si->second.m_stream, nullptr, &op, rate, paFramesPerBufferUnspecified, 0, s_stream_callback, &si->second);
|
||||||
@ -216,7 +218,7 @@ uint32_t sound_pa::stream_source_open(uint32_t node, std::string name, uint32_t
|
|||||||
ip.device = node - 1;
|
ip.device = node - 1;
|
||||||
ip.channelCount = m_info.m_nodes[node-1].m_sources;
|
ip.channelCount = m_info.m_nodes[node-1].m_sources;
|
||||||
ip.sampleFormat = paInt16;
|
ip.sampleFormat = paInt16;
|
||||||
ip.suggestedLatency = Pa_GetDeviceInfo(node - 1)->defaultLowInputLatency;
|
ip.suggestedLatency = (m_audio_latency > 0) ? (m_audio_latency / 10.0) : Pa_GetDeviceInfo(node - 1)->defaultLowInputLatency;
|
||||||
ip.hostApiSpecificStreamInfo = nullptr;
|
ip.hostApiSpecificStreamInfo = nullptr;
|
||||||
|
|
||||||
PaError err = Pa_OpenStream(&si->second.m_stream, &ip, nullptr, rate, paFramesPerBufferUnspecified, 0, s_stream_callback, &si->second);
|
PaError err = Pa_OpenStream(&si->second.m_stream, &ip, nullptr, rate, paFramesPerBufferUnspecified, 0, s_stream_callback, &si->second);
|
||||||
|
Loading…
Reference in New Issue
Block a user