diff options
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r-- | libs/ardour/ardour/audio_backend.h | 36 | ||||
-rw-r--r-- | libs/ardour/ardour/audioengine.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/port_engine.h | 22 | ||||
-rw-r--r-- | libs/ardour/ardour/port_manager.h | 9 |
4 files changed, 33 insertions, 36 deletions
diff --git a/libs/ardour/ardour/audio_backend.h b/libs/ardour/ardour/audio_backend.h index 6c4a54da3e..d9561a62e5 100644 --- a/libs/ardour/ardour/audio_backend.h +++ b/libs/ardour/ardour/audio_backend.h @@ -29,17 +29,15 @@ #include <boost/function.hpp> #include "ardour/types.h" +#include "ardour/audioengine.h" +#include "ardour/port_engine.h" namespace ARDOUR { -class AudioEngine; -class PortEngine; -class PortManager; - -class AudioBackend { +class AudioBackend : public PortEngine { public: - AudioBackend (AudioEngine& e) : engine (e){} + AudioBackend (AudioEngine& e) : PortEngine (e), engine (e) {} virtual ~AudioBackend () {} /** Return the name of this backend. @@ -49,17 +47,6 @@ class AudioBackend { */ virtual std::string name() const = 0; - /** Return a private, type-free pointer to any data - * that might be useful to a concrete implementation - */ - virtual void* private_handle() const = 0; - - /** Return true if the underlying mechanism/API is still available - * for us to utilize. return false if some or all of the AudioBackend - * API can no longer be effectively used. - */ - virtual bool connected() const = 0; - /** Return true if the callback from the underlying mechanism/API * (CoreAudio, JACK, ASIO etc.) occurs in a thread subject to realtime * constraints. Return false otherwise. @@ -416,11 +403,22 @@ class AudioBackend { struct AudioBackendInfo { const char* name; + /** Using arg1 and arg2, initialize this audiobackend. + * + * Returns zero on success, non-zero otherwise. + */ int (*instantiate) (const std::string& arg1, const std::string& arg2); + + /** Release all resources associated with this audiobackend + */ int (*deinstantiate) (void); - boost::shared_ptr<AudioBackend> (*backend_factory) (AudioEngine&); - boost::shared_ptr<PortEngine> (*portengine_factory) (PortManager&); + /** Factory method to create an AudioBackend-derived class. + * + * Returns a valid shared_ptr to the object if successfull, + * or a "null" shared_ptr otherwise. + */ + boost::shared_ptr<AudioBackend> (*factory) (AudioEngine&); /** Return true if the underlying mechanism/API has been * configured and does not need (re)configuration in order diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h index 5762e709b3..201d960479 100644 --- a/libs/ardour/ardour/audioengine.h +++ b/libs/ardour/ardour/audioengine.h @@ -200,8 +200,6 @@ public: static AudioEngine* _instance; - boost::shared_ptr<AudioBackend> _backend; - Glib::Threads::Mutex _process_lock; Glib::Threads::Cond session_removed; bool session_remove_pending; diff --git a/libs/ardour/ardour/port_engine.h b/libs/ardour/ardour/port_engine.h index 71f93ea05e..8c0ec9e754 100644 --- a/libs/ardour/ardour/port_engine.h +++ b/libs/ardour/ardour/port_engine.h @@ -79,6 +79,11 @@ class PortEngine { PortEngine (PortManager& pm) : manager (pm) {} virtual ~PortEngine() {} + /** Return a private, type-free pointer to any data + * that might be useful to a concrete implementation + */ + virtual void* private_handle() const = 0; + /* We use void* here so that the API can be defined for any implementation. * * We could theoretically use a template (PortEngine<T>) and define @@ -89,21 +94,16 @@ class PortEngine { typedef void* PortHandle; - /** Return a typeless pointer to an object that may be of interest - * that understands the internals of a particular PortEngine - * implementation. - * - * XXX the existence of this method is a band-aid over some design - * issues and will it will be removed in the future - */ - virtual void* private_handle() const = 0; - - virtual bool connected() const = 0; - /** Return the name of this process as used by the port manager * when naming ports. */ virtual const std::string& my_name() const = 0; + + /** Return true if the underlying mechanism/API is still available + * for us to utilize. return false if some or all of the AudioBackend + * API can no longer be effectively used. + */ + virtual bool available() const = 0; /** Return the maximum size of a port name */ diff --git a/libs/ardour/ardour/port_manager.h b/libs/ardour/ardour/port_manager.h index 6d45597a41..ba15142d83 100644 --- a/libs/ardour/ardour/port_manager.h +++ b/libs/ardour/ardour/port_manager.h @@ -34,10 +34,12 @@ #include "ardour/chan_count.h" #include "ardour/midiport_manager.h" #include "ardour/port.h" -#include "ardour/port_engine.h" namespace ARDOUR { +class PortEngine; +class AudioBackend; + class PortManager { public: @@ -47,8 +49,7 @@ class PortManager PortManager (); virtual ~PortManager() {} - void set_port_engine (PortEngine& pe); - PortEngine& port_engine() { return *_impl; } + PortEngine& port_engine(); uint32_t port_name_size() const; std::string my_name() const; @@ -134,7 +135,7 @@ class PortManager PBD::Signal5<void, boost::weak_ptr<Port>, std::string, boost::weak_ptr<Port>, std::string, bool> PortConnectedOrDisconnected; protected: - boost::shared_ptr<PortEngine> _impl; + boost::shared_ptr<AudioBackend> _backend; SerializedRCUManager<Ports> ports; bool _port_remove_in_progress; |