Add API to enforce valid device selection.
authorRobin Gareus <robin@gareus.org>
Sat, 26 Nov 2016 13:30:46 +0000 (14:30 +0100)
committerRobin Gareus <robin@gareus.org>
Sat, 26 Nov 2016 14:31:21 +0000 (15:31 +0100)
libs/ardour/ardour/audio_backend.h
libs/backends/alsa/alsa_audiobackend.h
libs/backends/portaudio/portaudio_backend.h

index 9a00cf281ee11b259c619069b484bf28e420d2d8..6523eb5081995535741a7dcb28e65a198bc828d3 100644 (file)
@@ -202,6 +202,14 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
      */
     virtual bool use_separate_input_and_output_devices () const { return false; }
 
      */
     virtual bool use_separate_input_and_output_devices () const { return false; }
 
+    /* Return true if the backend uses separate I/O devices only for the case
+     * of allowing one to be "None".
+     *
+     * ie. Input Device must match Output Device, except if either of them
+     * is get_standard_device_name (DeviceNone).
+     */
+    virtual bool match_input_output_devices_or_none () const { return false; }
+
     /** Returns a collection of DeviceStatuses identifying devices discovered
      * by this backend since the start of the process.
      *
     /** Returns a collection of DeviceStatuses identifying devices discovered
      * by this backend since the start of the process.
      *
index d8dfb31725453f1e6490e26be51f94b697fb040d..bc2620ed9e6ce173c90967eb217c7a9fea5e8669 100644 (file)
@@ -172,6 +172,7 @@ class AlsaAudioBackend : public AudioBackend {
                bool is_realtime () const;
 
                bool use_separate_input_and_output_devices () const { return true; }
                bool is_realtime () const;
 
                bool use_separate_input_and_output_devices () const { return true; }
+               bool match_input_output_devices_or_none () const { return true; }
                bool can_set_period_size () const { return true; }
 
                std::vector<DeviceStatus> enumerate_devices () const;
                bool can_set_period_size () const { return true; }
 
                std::vector<DeviceStatus> enumerate_devices () const;
index 601c3433cb1a24a153229bc76f2ad3c5e9e1f7cb..692e4c0e6131a4e53b9b30d79cbe09c8f4ec246e 100644 (file)
@@ -179,6 +179,7 @@ class PortAudioBackend : public AudioBackend {
                bool get_use_buffered_io () { return _use_blocking_api; }
 
                bool use_separate_input_and_output_devices () const;
                bool get_use_buffered_io () { return _use_blocking_api; }
 
                bool use_separate_input_and_output_devices () const;
+               bool match_input_output_devices_or_none () const { return true; }
                std::vector<DeviceStatus> enumerate_devices () const;
                std::vector<DeviceStatus> enumerate_input_devices () const;
                std::vector<DeviceStatus> enumerate_output_devices () const;
                std::vector<DeviceStatus> enumerate_devices () const;
                std::vector<DeviceStatus> enumerate_input_devices () const;
                std::vector<DeviceStatus> enumerate_output_devices () const;