+ /** Returns a collection of DeviceStatuses identifying input devices
+ * discovered by this backend since the start of the process.
+ *
+ * Any of the names in each DeviceStatus may be used to identify a
+ * device in other calls to the backend, though any of them may become
+ * invalid at any time.
+ */
+ virtual std::vector<DeviceStatus> enumerate_input_devices () const
+ { return std::vector<DeviceStatus>(); }
+
+ /** Returns a collection of DeviceStatuses identifying output devices
+ * discovered by this backend since the start of the process.
+ *
+ * Any of the names in each DeviceStatus may be used to identify a
+ * device in other calls to the backend, though any of them may become
+ * invalid at any time.
+ */
+ virtual std::vector<DeviceStatus> enumerate_output_devices () const
+ { return std::vector<DeviceStatus>(); }
+
+
+ /** An interface to set buffers/period for playback latency.
+ * useful for ALSA or JACK/ALSA on Linux.
+ *
+ * @return true if the backend supports period-size configuration
+ */
+ virtual bool can_set_period_size () const { return false; }
+
+ /** Returns a vector of supported period-sizes for the given driver */
+ virtual std::vector<uint32_t> available_period_sizes (const std::string& driver) const { return std::vector<uint32_t>(); }
+
+ /** Set the period size to be used.
+ * must be called before starting the backend.
+ */
+ virtual int set_peridod_size (uint32_t) { return -1; }
+
+ /**
+ * @return true if backend supports requesting an update to the device list
+ * and any cached properties associated with the devices.
+ */
+ virtual bool can_request_update_devices () { return false; }
+
+ /**
+ * Request an update to the list of devices returned in the enumerations.
+ * The Backend must return true from can_request_update_devices to support
+ * this interface.
+ * @return true if the devices were updated
+ */
+ virtual bool update_devices () { return false; }
+
+ /**
+ * @return true if backend supports a blocking or buffered mode, false by
+ * default unless implemented by a derived class.
+ */
+ virtual bool can_use_buffered_io () { return false; }
+
+ /**
+ * Set the backend to use a blocking or buffered I/O mode
+ */
+ virtual void set_use_buffered_io (bool) { }
+
+ /**
+ * @return Set the backend to use a blocking or buffered I/O mode, false by
+ * default unless implemented by a derived class.
+ */
+ virtual bool get_use_buffered_io () { return false; }
+