add new API for retrieving port flags from backend
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 17 Oct 2018 18:10:50 +0000 (14:10 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 17 Oct 2018 18:11:37 +0000 (14:11 -0400)
libs/ardour/ardour/port_engine.h
libs/backends/alsa/alsa_audiobackend.cc
libs/backends/alsa/alsa_audiobackend.h
libs/backends/coreaudio/coreaudio_backend.cc
libs/backends/coreaudio/coreaudio_backend.h
libs/backends/dummy/dummy_audiobackend.cc
libs/backends/dummy/dummy_audiobackend.h
libs/backends/jack/jack_audiobackend.h
libs/backends/jack/jack_portengine.cc
libs/backends/portaudio/portaudio_backend.cc
libs/backends/portaudio/portaudio_backend.h

index 9c72b77550b8ccbcba42dba152a2b4e5f3f3e132..e93e78db4a7d3d8b687946c8ff82324a6e291a8a 100644 (file)
@@ -120,6 +120,11 @@ public:
         */
        virtual std::string get_port_name (PortHandle) const = 0;
 
+       /** Return the flags of the port referred to by @param port. If the port
+        * does not exist, return an empty string.
+        */
+       virtual PortFlags get_port_flags (PortHandle) const = 0;
+
        /** Return the port-property value and type for a given key.
         * (eg query a human readable port name)
         *
index 42af5a4b92e20464375ecc207616462cbff9275b..9594f31d98e326fe106c8b4df4c10b14b99721c1 100644 (file)
@@ -1212,6 +1212,16 @@ AlsaAudioBackend::get_port_name (PortEngine::PortHandle port) const
        return static_cast<AlsaPort*>(port)->name ();
 }
 
+PortFlags
+AlsaAudioBackend::get_port_flags (PortEngine::PortHandle port) const
+{
+       if (!valid_port (port)) {
+               PBD::warning << _("AlsaBackend::get_port_flags: Invalid Port(s)") << endmsg;
+               return PortFlags (0);
+       }
+       return static_cast<AlsaPort*>(port)->flags ();
+}
+
 int
 AlsaAudioBackend::get_port_property (PortHandle port, const std::string& key, std::string& value, std::string& type) const
 {
index f6887fe346296ec7cba24add7834d0e0cb895d0c..11623cfcf4921eb7c970dcab9f3f96da08ef16be 100644 (file)
@@ -275,6 +275,7 @@ class AlsaAudioBackend : public AudioBackend {
 
                int         set_port_name (PortHandle, const std::string&);
                std::string get_port_name (PortHandle) const;
+               PortFlags get_port_flags (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;
index 848068641660bcc363db3019178d5f5ee06c6384..4c02c32ec8608b4d7c0d21dd28bf8e94d5841151 100644 (file)
@@ -957,6 +957,16 @@ CoreAudioBackend::get_port_name (PortEngine::PortHandle port) const
        return static_cast<CoreBackendPort*>(port)->name ();
 }
 
+PortFlags
+CoreAudioBackend::get_port_flags (PortEngine::PortHandle port) const
+{
+       if (!valid_port (port)) {
+               PBD::warning << _("CoreAudioBackend::get_port_flags: Invalid Port(s)") << endmsg;
+               return PortFlags (0);
+       }
+       return static_cast<CoreBackendPort*>(port)->flags ();
+}
+
 int
 CoreAudioBackend::get_port_property (PortHandle port, const std::string& key, std::string& value, std::string& type) const
 {
index b0a9727ae31db64cffcec8622fce07e804900277..712deca97bc1ac058ff72fa3a3a19c816e0045ab 100644 (file)
@@ -321,6 +321,7 @@ class CoreAudioBackend : public AudioBackend {
 
        int         set_port_name (PortHandle, const std::string&);
        std::string get_port_name (PortHandle) const;
+       PortFlags get_port_flags (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 set_port_property (PortHandle, const std::string& key, const std::string& value, const std::string& type);
index a8dcb8509eb5a027a5d118c4767a169c7974e305..8f0daf6aec5e1e831436a516c4023af1a295b5ee 100644 (file)
@@ -678,6 +678,16 @@ DummyAudioBackend::get_port_name (PortEngine::PortHandle port) const
        return static_cast<DummyPort*>(port)->name ();
 }
 
+PortFlags
+DummyAudioBackend::get_port_flags (PortEngine::PortHandle port) const
+{
+       if (!valid_port (port)) {
+               PBD::error << _("DummyBackend::get_port_flags: Invalid Port(s)") << endmsg;
+               return PortFlags (0);
+       }
+       return static_cast<DummyPort*>(port)->flags ();
+}
+
 int
 DummyAudioBackend::get_port_property (PortHandle port, const std::string& key, std::string& value, std::string& type) const
 {
index 48e588d3647960a61431d57c43f2ee82d6087638..e687321abfc31bad9936827215d850d270a98af3 100644 (file)
@@ -328,6 +328,7 @@ class DummyAudioBackend : public AudioBackend {
 
                int         set_port_name (PortHandle, const std::string&);
                std::string get_port_name (PortHandle) const;
+               PortFlags get_port_flags (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;
index e14396ea24e21273b9f2c239f07c1955b587d019..bd4886651f5ec3bc9765e476483c03e01d605aeb 100644 (file)
@@ -132,6 +132,7 @@ class JACKAudioBackend : public AudioBackend {
 
     int         set_port_name (PortHandle, const std::string&);
     std::string get_port_name (PortHandle) const;
+    PortFlags get_port_flags (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 set_port_property (PortHandle, const std::string& key, const std::string& value, const std::string& type);
index 70dded77c46f07a5487347c47127bf8303b760c3..a9cca6fc305f129658b1e6ba06f9d4614de58831 100644 (file)
@@ -124,6 +124,12 @@ JACKAudioBackend::get_port_name (PortHandle port) const
        return jack_port_name ((jack_port_t*) port);
 }
 
+PortFlags
+JACKAudioBackend::get_port_flags (PortHandle port) const
+{
+       return PortFlags (jack_port_flags ((jack_port_t*) port));
+}
+
 int
 JACKAudioBackend::get_port_property (PortHandle port, const std::string& key, std::string& value, std::string& type) const
 {
index 01753803c97deaa2ed9c4a3fb245bb082c044109..398347b8dbd70071226606f60586a842ef972150 100644 (file)
@@ -1223,11 +1223,21 @@ PortAudioBackend::get_port_name (PortEngine::PortHandle port) const
 {
        if (!valid_port (port)) {
                DEBUG_PORTS("get_port_name: Invalid Port(s)\n");
-               return std::string ();
+               return PortFlags (0);
        }
        return static_cast<PamPort*>(port)->name ();
 }
 
+PortFlags
+PortAudioBackend::get_port_flags (PortEngine::PortHandle port) const
+{
+       if (!valid_port (port)) {
+               DEBUG_PORTS("get_port_flags: Invalid Port(s)\n");
+               return std::string ();
+       }
+       return static_cast<PamPort*>(port)->flags ();
+}
+
 int
 PortAudioBackend::get_port_property (PortHandle port,
                                      const std::string& key,
index bc493101fc2fa5eee28a45cab56e21c00b84247d..da16d826c4f1296dfc4d20515ca79148f07eef16 100644 (file)
@@ -255,6 +255,7 @@ class PortAudioBackend : public AudioBackend {
 
                int         set_port_name (PortHandle, const std::string&);
                std::string get_port_name (PortHandle) const;
+               PortFlags get_port_flags (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 set_port_property (PortHandle, const std::string& key, const std::string& value, const std::string& type);