coreaudio backend: SR/BS query for separate devices

This commit is contained in:
Robin Gareus 2015-08-11 12:52:03 +02:00
parent 1d3690d845
commit 8f10b38275
2 changed files with 42 additions and 18 deletions

View file

@ -211,14 +211,23 @@ CoreAudioBackend::enumerate_output_devices () const
} }
std::vector<float> std::vector<float>
CoreAudioBackend::available_sample_rates (const std::string&) const CoreAudioBackend::available_sample_rates (const std::string& device) const
{
std::vector<float> sr;
_pcmio->available_sample_rates (name_to_id (device), sr);
return sr;
}
std::vector<float>
CoreAudioBackend::available_sample_rates (const std::string& input_device, const std::string& output_device) const
{ {
std::vector<float> sr; std::vector<float> sr;
std::vector<float> sr_in; std::vector<float> sr_in;
std::vector<float> sr_out; std::vector<float> sr_out;
const uint32_t inp = name_to_id(_input_audio_device); const uint32_t inp = name_to_id (input_device);
const uint32_t out = name_to_id(_output_audio_device); const uint32_t out = name_to_id (output_device);
if (inp == UINT32_MAX && out == UINT32_MAX) { if (inp == UINT32_MAX && out == UINT32_MAX) {
return sr; return sr;
} else if (inp == UINT32_MAX) { } else if (inp == UINT32_MAX) {
@ -237,20 +246,28 @@ CoreAudioBackend::available_sample_rates (const std::string&) const
} }
std::vector<uint32_t> std::vector<uint32_t>
CoreAudioBackend::available_buffer_sizes (const std::string&) const CoreAudioBackend::available_buffer_sizes (const std::string& device) const
{
std::vector<uint32_t> bs;
_pcmio->available_buffer_sizes (name_to_id (device), bs);
return bs;
}
std::vector<uint32_t>
CoreAudioBackend::available_buffer_sizes (const std::string& input_device, const std::string& output_device) const
{ {
std::vector<uint32_t> bs; std::vector<uint32_t> bs;
std::vector<uint32_t> bs_in; std::vector<uint32_t> bs_in;
std::vector<uint32_t> bs_out; std::vector<uint32_t> bs_out;
const uint32_t inp = name_to_id(_input_audio_device); const uint32_t inp = name_to_id (input_device);
const uint32_t out = name_to_id(_output_audio_device); const uint32_t out = name_to_id (output_device);
if (inp == UINT32_MAX && out == UINT32_MAX) { if (inp == UINT32_MAX && out == UINT32_MAX) {
return bs; return bs;
} else if (inp == UINT32_MAX) { } else if (inp == UINT32_MAX) {
_pcmio->available_buffer_sizes (out, bs_out); _pcmio->available_buffer_sizes (out, bs_out);
return bs_out; return bs_out;
} else if (out == UINT32_MAX) { } else if (out == UINT32_MAX) {
_pcmio->available_buffer_sizes(out, bs_in); _pcmio->available_buffer_sizes (inp, bs_in);
return bs_in; return bs_in;
} else { } else {
_pcmio->available_buffer_sizes (inp, bs_in); _pcmio->available_buffer_sizes (inp, bs_in);
@ -315,7 +332,7 @@ CoreAudioBackend::set_output_device_name (const std::string& d)
int int
CoreAudioBackend::set_sample_rate (float sr) CoreAudioBackend::set_sample_rate (float sr)
{ {
std::vector<float> srs = available_sample_rates (/* really ignored */_input_audio_device); std::vector<float> srs = available_sample_rates (_input_audio_device, _output_audio_device);
if (std::find(srs.begin(), srs.end(), sr) == srs.end()) { if (std::find(srs.begin(), srs.end(), sr) == srs.end()) {
return -1; return -1;
} }
@ -463,8 +480,13 @@ CoreAudioBackend::midi_option () const
void void
CoreAudioBackend::launch_control_app () CoreAudioBackend::launch_control_app ()
{ {
if (name_to_id (_input_audio_device) != UINT32_MAX) {
_pcmio->launch_control_app(name_to_id(_input_audio_device)); _pcmio->launch_control_app(name_to_id(_input_audio_device));
} }
if (name_to_id (_output_audio_device) != UINT32_MAX) {
_pcmio->launch_control_app(name_to_id(_output_audio_device));
}
}
/* State Control */ /* State Control */

View file

@ -171,7 +171,9 @@ class CoreAudioBackend : public AudioBackend {
std::vector<DeviceStatus> enumerate_output_devices () const; std::vector<DeviceStatus> enumerate_output_devices () const;
std::vector<float> available_sample_rates (const std::string& device) const; std::vector<float> available_sample_rates (const std::string& device) const;
std::vector<float> available_sample_rates (const std::string&, const std::string&) const;
std::vector<uint32_t> available_buffer_sizes (const std::string& device) const; std::vector<uint32_t> available_buffer_sizes (const std::string& device) const;
std::vector<uint32_t> available_buffer_sizes (const std::string&, const std::string&) const;
uint32_t available_input_channel_count (const std::string& device) const; uint32_t available_input_channel_count (const std::string& device) const;
uint32_t available_output_channel_count (const std::string& device) const; uint32_t available_output_channel_count (const std::string& device) const;