From 0cf11acc27a66c8d7aca4e529971755ff355eb5c Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 8 Mar 2015 19:00:29 +0100 Subject: [PATCH] add backend support for port properties (CoreAudio) --- libs/backends/coreaudio/coreaudio_backend.cc | 29 +++++++++++++++++--- libs/backends/coreaudio/coreaudio_backend.h | 4 +++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/libs/backends/coreaudio/coreaudio_backend.cc b/libs/backends/coreaudio/coreaudio_backend.cc index 315c10adaf..d2ffd31d58 100644 --- a/libs/backends/coreaudio/coreaudio_backend.cc +++ b/libs/backends/coreaudio/coreaudio_backend.cc @@ -793,6 +793,23 @@ CoreAudioBackend::get_port_name (PortEngine::PortHandle port) const return static_cast(port)->name (); } +int +CoreAudioBackend::get_port_property (PortHandle port, const std::string& key, std::string& value, std::string& type) const +{ + if (!valid_port (port)) { + PBD::error << _("CoreAudioBackend::get_port_name: Invalid Port(s)") << endmsg; + return -1; + } + if (key == "http://jackaudio.org/metadata/pretty-name") { + type = ""; + value = static_cast(port)->pretty_name (); + if (!value.empty()) { + return 0; + } + } + return -1; +} + PortEngine::PortHandle CoreAudioBackend::get_port_by_name (const std::string& name) const { @@ -917,21 +934,25 @@ CoreAudioBackend::register_system_audio_ports() lr.min = lr.max = coreaudio_reported_input_latency + (_measure_latency ? 0 : _systemic_audio_input_latency); for (uint32_t i = 0; i < a_ins; ++i) { char tmp[64]; - snprintf(tmp, sizeof(tmp), "system:capture_%s", _pcmio->cached_port_name(i, true).c_str()); + snprintf(tmp, sizeof(tmp), "system:capture_%d", i+1); PortHandle p = add_port(std::string(tmp), DataType::AUDIO, static_cast(IsOutput | IsPhysical | IsTerminal)); if (!p) return -1; set_latency_range (p, false, lr); - _system_inputs.push_back(static_cast(p)); + CoreBackendPort *cp = static_cast(p); + cp->set_pretty_name (_pcmio->cached_port_name(i, true)); + _system_inputs.push_back(cp); } lr.min = lr.max = coreaudio_reported_output_latency + (_measure_latency ? 0 : _systemic_audio_output_latency); for (uint32_t i = 0; i < a_out; ++i) { char tmp[64]; - snprintf(tmp, sizeof(tmp), "system:playback_%s", _pcmio->cached_port_name(i, false).c_str()); + snprintf(tmp, sizeof(tmp), "system:playback_%d", i+1); PortHandle p = add_port(std::string(tmp), DataType::AUDIO, static_cast(IsInput | IsPhysical | IsTerminal)); if (!p) return -1; set_latency_range (p, true, lr); - _system_outputs.push_back(static_cast(p)); + CoreBackendPort *cp = static_cast(p); + cp->set_pretty_name (_pcmio->cached_port_name(i, false)); + _system_outputs.push_back(cp); } return 0; } diff --git a/libs/backends/coreaudio/coreaudio_backend.h b/libs/backends/coreaudio/coreaudio_backend.h index 542d1ac746..b36c53105c 100644 --- a/libs/backends/coreaudio/coreaudio_backend.h +++ b/libs/backends/coreaudio/coreaudio_backend.h @@ -65,9 +65,11 @@ class CoreBackendPort { virtual ~CoreBackendPort (); const std::string& name () const { return _name; } + const std::string& pretty_name () const { return _pretty_name; } PortFlags flags () const { return _flags; } int set_name (const std::string &name) { _name = name; return 0; } + int set_pretty_name (const std::string &name) { _pretty_name = name; return 0; } virtual DataType type () const = 0; @@ -107,6 +109,7 @@ class CoreBackendPort { private: CoreAudioBackend &_osx_backend; std::string _name; + std::string _pretty_name; const PortFlags _flags; LatencyRange _capture_latency_range; LatencyRange _playback_latency_range; @@ -250,6 +253,7 @@ class CoreAudioBackend : public AudioBackend { int set_port_name (PortHandle, const std::string&); std::string get_port_name (PortHandle) const; PortHandle get_port_by_name (const std::string&) const; + int get_port_property (PortHandle, const std::string& key, std::string& value, std::string& type) const; int get_ports (const std::string& port_name_pattern, DataType type, PortFlags flags, std::vector&) const; -- 2.30.2