X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fardour%2Fardour%2Froute.h;h=2e44d00984f018df7b13ce097a8974c520b9d9b2;hb=4d49961c93fe23dc4f76a5bcb60c93d0c80bcd3c;hp=695e151dbbb1205fb35a3595c5cd95691691e568;hpb=11415b49be02f16495c95d6286c485ac8afc5189;p=ardour.git diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index 695e151dbb..2e44d00984 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -32,7 +32,7 @@ #include #include -#include +#include #include "pbd/fastlog.h" #include "pbd/xml++.h" #include "pbd/undo.h" @@ -74,7 +74,7 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, typedef std::list > ProcessorList; enum Flag { - Hidden = 0x1, + Auditioner = 0x1, MasterOut = 0x2, MonitorOut = 0x4 }; @@ -106,7 +106,7 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, void set_order_key (RouteSortOrderKey, uint32_t); void sync_order_keys (RouteSortOrderKey); - bool is_hidden() const { return _flags & Hidden; } + bool is_auditioner() const { return _flags & Auditioner; } bool is_master() const { return _flags & MasterOut; } bool is_monitor() const { return _flags & MonitorOut; } @@ -131,6 +131,7 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, virtual void nonrealtime_handle_transport_stopped (bool abort, bool did_locate, bool flush_processors); virtual void realtime_handle_transport_stopped () {} virtual void realtime_locate () {} + virtual void non_realtime_locate (framepos_t); virtual void set_pending_declick (int); /* end of vfunc-based API */ @@ -180,6 +181,9 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, MeterPoint meter_point() const { return _meter_point; } void meter (); + void set_meter_type (MeterType t) { _meter_type = t; } + MeterType meter_type() const { return _meter_type; } + /* Processors */ boost::shared_ptr amp() const { return _amp; } @@ -190,7 +194,7 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, void flush_processors (); void foreach_processor (boost::function)> method) { - Glib::RWLock::ReaderLock lm (_processor_lock); + Glib::Threads::RWLock::ReaderLock lm (_processor_lock); for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { if (boost::dynamic_pointer_cast (*i)) { break; @@ -200,7 +204,7 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, } boost::shared_ptr nth_processor (uint32_t n) { - Glib::RWLock::ReaderLock lm (_processor_lock); + Glib::Threads::RWLock::ReaderLock lm (_processor_lock); ProcessorList::iterator i; for (i = _processors.begin(); i != _processors.end() && n; ++i, --n) {} if (i == _processors.end()) { @@ -409,7 +413,6 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, boost::shared_ptr the_instrument() const; InstrumentInfo& instrument_info() { return _instrument_info; } - void automation_snapshot (framepos_t now, bool force=false); void protect_automation (); enum { @@ -423,6 +426,7 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, void set_remote_control_id (uint32_t id, bool notify_class_listeners = true); uint32_t remote_control_id () const; + void set_remote_control_id_from_order_key (RouteSortOrderKey, uint32_t order_key); /* for things concerned about *this* route's RID */ @@ -435,6 +439,12 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, bool has_external_redirects() const; + /* can only be executed by a route for which is_monitor() is true + (i.e. the monitor out) + */ + void monitor_run (framepos_t start_frame, framepos_t end_frame, + pframes_t nframes, int declick); + protected: friend class Session; @@ -447,11 +457,13 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, protected: virtual framecnt_t check_initial_delay (framecnt_t nframes, framepos_t&) { return nframes; } - void passthru (framepos_t start_frame, framepos_t end_frame, + void fill_buffers_with_input (BufferSet& bufs, boost::shared_ptr io, pframes_t nframes); + + void passthru (BufferSet&, framepos_t start_frame, framepos_t end_frame, pframes_t nframes, int declick); virtual void write_out_of_band_data (BufferSet& /* bufs */, framepos_t /* start_frame */, framepos_t /* end_frame */, - framecnt_t /* nframes */) {} + framecnt_t /* nframes */) {} virtual void process_output_buffers (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, @@ -467,7 +479,7 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, framecnt_t _roll_delay; ProcessorList _processors; - mutable Glib::RWLock _processor_lock; + mutable Glib::Threads::RWLock _processor_lock; boost::shared_ptr _main_outs; boost::shared_ptr _monitor_send; boost::shared_ptr _intreturn; @@ -477,6 +489,7 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, Flag _flags; int _pending_declick; MeterPoint _meter_point; + MeterType _meter_type; boost::dynamic_bitset<> _phase_invert; bool _self_solo; uint32_t _soloed_by_others_upstream; @@ -526,15 +539,15 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, boost::shared_ptr _amp; boost::shared_ptr _meter; + boost::shared_ptr the_instrument_unlocked() const; + private: int set_state_2X (const XMLNode&, int); void set_processor_state_2X (XMLNodeList const &, int); - static uint32_t order_key_cnt; - typedef std::map OrderKeys; OrderKeys order_keys; - uint32_t* _remote_control_id; + uint32_t _remote_control_id; void input_change_handler (IOChange, void *src); void output_change_handler (IOChange, void *src); @@ -604,6 +617,8 @@ class Route : public SessionObject, public Automatable, public RouteGroupMember, bool _last_custom_meter_was_at_end; void reset_instrument_info (); + + void set_remote_control_id_internal (uint32_t id, bool notify_class_listeners = true); }; } // namespace ARDOUR