summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-08-11 04:43:07 +0200
committerRobin Gareus <robin@gareus.org>2015-08-11 04:43:07 +0200
commite8b2d7a85ba4f747a6752b708744f9a27c4c80e5 (patch)
tree9d344fbadc1593dd69e34e2907f570dc24babadc /libs
parent5e5db3c4024c05b52c6b913c7763cd164539cb8d (diff)
fix coreaudio half-duplex buffersize query
Diffstat (limited to 'libs')
-rw-r--r--libs/backends/coreaudio/coreaudio_backend.cc22
1 files changed, 19 insertions, 3 deletions
diff --git a/libs/backends/coreaudio/coreaudio_backend.cc b/libs/backends/coreaudio/coreaudio_backend.cc
index 85bd2355bc..1eb55ca61e 100644
--- a/libs/backends/coreaudio/coreaudio_backend.cc
+++ b/libs/backends/coreaudio/coreaudio_backend.cc
@@ -237,11 +237,27 @@ CoreAudioBackend::available_sample_rates (const std::string&) const
}
std::vector<uint32_t>
-CoreAudioBackend::available_buffer_sizes (const std::string& device) const
+CoreAudioBackend::available_buffer_sizes (const std::string&) const
{
std::vector<uint32_t> bs;
- _pcmio->available_buffer_sizes(name_to_id(device), bs);
- return bs;
+ std::vector<uint32_t> bs_in;
+ std::vector<uint32_t> bs_out;
+ const uint32_t inp = name_to_id(_input_audio_device);
+ const uint32_t out = name_to_id(_output_audio_device);
+ if (inp == UINT32_MAX && out == UINT32_MAX) {
+ return bs;
+ } else if (inp == UINT32_MAX) {
+ _pcmio->available_buffer_sizes(out, bs_out);
+ return bs_out;
+ } else if (out == UINT32_MAX) {
+ _pcmio->available_buffer_sizes(out, bs_in);
+ return bs_in;
+ } else {
+ _pcmio->available_buffer_sizes(inp, bs_in);
+ _pcmio->available_buffer_sizes(out, bs_out);
+ std::set_intersection(bs_in.begin(), bs_in.end(), bs_out.begin(), bs_out.end(), std::back_inserter(bs));
+ return bs;
+ }
}
uint32_t