X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fardour%2Fardour%2Fport.h;h=9f9a4d88df1aa51e299b90eafb2007bbcabe042c;hb=81faa3b420303eec2ca0e3a10e188ac948464099;hp=5eceac5ebcc0555baaabdf1bb934811ad00dcb4c;hpb=de9e216cb5fcc08b6c39071d7cef031673aa67da;p=ardour.git diff --git a/libs/ardour/ardour/port.h b/libs/ardour/ardour/port.h index 5eceac5ebc..9f9a4d88df 100644 --- a/libs/ardour/ardour/port.h +++ b/libs/ardour/ardour/port.h @@ -25,11 +25,12 @@ #include #include #include -#include #include #include "pbd/signals.h" #include "ardour/data_type.h" +#include "ardour/port_engine.h" +#include "ardour/libardour_visibility.h" #include "ardour/types.h" namespace ARDOUR { @@ -37,20 +38,15 @@ namespace ARDOUR { class AudioEngine; class Buffer; -class Port : public boost::noncopyable +class LIBARDOUR_API Port : public boost::noncopyable { public: - enum Flags { - IsInput = JackPortIsInput, - IsOutput = JackPortIsOutput, - }; - virtual ~Port (); - static void set_connecting_blocked( bool yn ) { + static void set_connecting_blocked( bool yn ) { _connecting_blocked = yn; } - static bool connecting_blocked() { + static bool connecting_blocked() { return _connecting_blocked; } @@ -59,10 +55,14 @@ public: return _name; } + /** @return Port human readable name */ + std::string pretty_name (bool fallback_to_name = false) const; + bool set_pretty_name (const std::string&); + int set_name (std::string const &); /** @return flags */ - Flags flags () const { + PortFlags flags () const { return _flags; } @@ -90,24 +90,24 @@ public: virtual int connect (Port *); int disconnect (Port *); - void ensure_monitor_input (bool); + void request_input_monitoring (bool); + void ensure_input_monitoring (bool); bool monitoring_input () const; int reestablish (); int reconnect (); - void request_monitor_input (bool); - - bool last_monitor() const { return _last_monitor; } - void set_last_monitor (bool yn) { _last_monitor = yn; } - jack_port_t* jack_port() const { return _jack_port; } - - void get_connected_latency_range (jack_latency_range_t& range, bool playback) const; + bool last_monitor() const { return _last_monitor; } + void set_last_monitor (bool yn) { _last_monitor = yn; } + + PortEngine::PortHandle port_handle() { return _port_handle; } - void set_private_latency_range (jack_latency_range_t& range, bool playback); - const jack_latency_range_t& private_latency_range (bool playback) const; + void get_connected_latency_range (LatencyRange& range, bool playback) const; - void set_public_latency_range (jack_latency_range_t& range, bool playback) const; - jack_latency_range_t public_latency_range (bool playback) const; + void set_private_latency_range (LatencyRange& range, bool playback); + const LatencyRange& private_latency_range (bool playback) const; + + void set_public_latency_range (LatencyRange& range, bool playback) const; + LatencyRange public_latency_range (bool playback) const; virtual void reset (); @@ -116,20 +116,19 @@ public: virtual void cycle_end (pframes_t) = 0; virtual void cycle_split () = 0; virtual Buffer& get_buffer (pframes_t nframes) = 0; - virtual void flush_buffers (pframes_t /*nframes*/, framepos_t /*time*/) {} + virtual void flush_buffers (pframes_t /*nframes*/) {} virtual void transport_stopped () {} virtual void realtime_locate () {} - bool physically_connected () const; - - static void set_engine (AudioEngine *); + bool physically_connected () const; PBD::Signal1 MonitorInputChanged; + static PBD::Signal2,boost::shared_ptr > PostDisconnect; + static PBD::Signal0 PortDrop; - - static void set_cycle_framecnt (pframes_t n) { - _cycle_nframes = n; - } + static void set_cycle_framecnt (pframes_t n) { + _cycle_nframes = n; + } static framecnt_t port_offset() { return _global_port_buffer_offset; } static void set_global_port_buffer_offset (pframes_t off) { _global_port_buffer_offset = off; @@ -138,35 +137,42 @@ public: _global_port_buffer_offset += n; } - virtual void increment_port_buffer_offset (pframes_t n); + virtual void increment_port_buffer_offset (pframes_t n); + + virtual XMLNode& get_state (void) const; + virtual int set_state (const XMLNode&, int version); + + static std::string state_node_name; protected: - Port (std::string const &, DataType, Flags); + Port (std::string const &, DataType, PortFlags); - jack_port_t* _jack_port; ///< JACK port + PortEngine::PortHandle _port_handle; static bool _connecting_blocked; static pframes_t _global_port_buffer_offset; /* access only from process() tree */ - static pframes_t _cycle_nframes; /* access only from process() tree */ + static pframes_t _cycle_nframes; /* access only from process() tree */ - framecnt_t _port_buffer_offset; /* access only from process() tree */ + framecnt_t _port_buffer_offset; /* access only from process() tree */ - jack_latency_range_t _private_playback_latency; - jack_latency_range_t _private_capture_latency; - - static AudioEngine* _engine; ///< the AudioEngine + LatencyRange _private_playback_latency; + LatencyRange _private_capture_latency; private: std::string _name; ///< port short name - Flags _flags; ///< flags + PortFlags _flags; ///< flags bool _last_monitor; /** ports that we are connected to, kept so that we can - reconnect to JACK when required - */ + reconnect to the backend when required + */ std::set _connections; + void port_connected_or_disconnected (boost::weak_ptr, boost::weak_ptr, bool); + void drop (); + PBD::ScopedConnection drop_connection; + PBD::ScopedConnection engine_connection; }; }