name ALSA midi ports after device 4.6
authorRobin Gareus <robin@gareus.org>
Mon, 11 Jan 2016 10:46:10 +0000 (11:46 +0100)
committerRobin Gareus <robin@gareus.org>
Mon, 11 Jan 2016 10:46:10 +0000 (11:46 +0100)
libs/backends/alsa/alsa_audiobackend.cc
libs/backends/alsa/alsa_audiobackend.h

index 725fc80b765c63b9f64340c2afaa3229ec07d72b..3658aa34a6daceaa736a3f357b5d5101a27c5806 100644 (file)
@@ -1220,12 +1220,29 @@ std::string
 AlsaAudioBackend::get_port_name (PortEngine::PortHandle port) const
 {
        if (!valid_port (port)) {
-               PBD::error << _("AlsaBackend::get_port_name: Invalid Port(s)") << endmsg;
+               PBD::warning << _("AlsaBackend::get_port_name: Invalid Port(s)") << endmsg;
                return std::string ();
        }
        return static_cast<AlsaPort*>(port)->name ();
 }
 
+int
+AlsaAudioBackend::get_port_property (PortHandle port, const std::string& key, std::string& value, std::string& type) const
+{
+       if (!valid_port (port)) {
+               PBD::warning << _("AlsaBackend::get_port_property: Invalid Port(s)") << endmsg;
+               return -1;
+       }
+       if (key == "http://jackaudio.org/metadata/pretty-name") {
+               type = "";
+               value = static_cast<AlsaPort*>(port)->pretty_name ();
+               if (!value.empty()) {
+                       return 0;
+               }
+       }
+       return -1;
+}
+
 PortEngine::PortHandle
 AlsaAudioBackend::get_port_by_name (const std::string& name) const
 {
@@ -1347,7 +1364,9 @@ AlsaAudioBackend::register_system_audio_ports()
                PortHandle p = add_port(std::string(tmp), DataType::AUDIO, static_cast<PortFlags>(IsOutput | IsPhysical | IsTerminal));
                if (!p) return -1;
                set_latency_range (p, false, lr);
-               _system_inputs.push_back(static_cast<AlsaPort*>(p));
+               AlsaPort *ap = static_cast<AlsaPort*>(p);
+               //ap->set_pretty_name ("")
+               _system_inputs.push_back (ap);
        }
 
        lr.min = lr.max = lcpp + (_measure_latency ? 0 : _systemic_audio_output_latency);
@@ -1357,7 +1376,9 @@ AlsaAudioBackend::register_system_audio_ports()
                PortHandle p = add_port(std::string(tmp), DataType::AUDIO, static_cast<PortFlags>(IsInput | IsPhysical | IsTerminal));
                if (!p) return -1;
                set_latency_range (p, true, lr);
-               _system_outputs.push_back(static_cast<AlsaPort*>(p));
+               AlsaPort *ap = static_cast<AlsaPort*>(p);
+               //ap->set_pretty_name ("")
+               _system_outputs.push_back (ap);
        }
        return 0;
 }
@@ -1417,7 +1438,9 @@ AlsaAudioBackend::register_system_midi_ports(const std::string device)
                                lr.min = lr.max = (_measure_latency ? 0 : nfo->systemic_output_latency);
                                set_latency_range (p, true, lr);
                                static_cast<AlsaMidiPort*>(p)->set_n_periods(_periods_per_cycle); // TODO check MIDI alignment
-                               _system_midi_out.push_back(static_cast<AlsaPort*>(p));
+                               AlsaPort *ap = static_cast<AlsaPort*>(p);
+                               ap->set_pretty_name (i->first);
+                               _system_midi_out.push_back (ap);
                                _rmidi_out.push_back (mout);
                        }
                }
@@ -1454,7 +1477,9 @@ AlsaAudioBackend::register_system_midi_ports(const std::string device)
                                LatencyRange lr;
                                lr.min = lr.max = (_measure_latency ? 0 : nfo->systemic_input_latency);
                                set_latency_range (p, false, lr);
-                               _system_midi_in.push_back(static_cast<AlsaPort*>(p));
+                               AlsaPort *ap = static_cast<AlsaPort*>(p);
+                               ap->set_pretty_name (i->first);
+                               _system_midi_in.push_back (ap);
                                _rmidi_in.push_back (midin);
                        }
                }
index 2233c9be9e16098b19b38c6bfa460aa099ab7c9c..01f757928ff9a2cfbbb020bf746b187656a099d7 100644 (file)
@@ -70,9 +70,11 @@ class AlsaPort {
                virtual ~AlsaPort ();
 
                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;
 
@@ -112,6 +114,7 @@ class AlsaPort {
        private:
                AlsaAudioBackend &_alsa_backend;
                std::string _name;
+               std::string _pretty_name;
                const PortFlags _flags;
                LatencyRange _capture_latency_range;
                LatencyRange _playback_latency_range;
@@ -263,6 +266,7 @@ class AlsaAudioBackend : 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<std::string>&) const;