20 #ifndef __ardour_route_h__
21 #define __ardour_route_h__
30 #include <boost/shared_ptr.hpp>
31 #include <boost/weak_ptr.hpp>
32 #include <boost/dynamic_bitset.hpp>
33 #include <boost/enable_shared_from_this.hpp>
35 #include <glibmm/threads.h>
67 class MonitorProcessor;
69 class CapturingProcessor;
95 bool active()
const {
return _active; }
96 void set_active (
bool yn,
void *);
98 static std::string ensure_track_or_route_name(std::string,
Session &);
101 void set_comment (std::string str,
void *src);
103 bool set_name (
const std::string& str);
104 static void set_name_in_state (
XMLNode &,
const std::string &);
106 uint32_t order_key ()
const;
107 bool has_order_key ()
const;
108 void set_order_key (uint32_t);
120 int declick,
bool& need_butler);
123 bool state_changing);
132 virtual void nonrealtime_handle_transport_stopped (
bool abort,
bool did_locate,
bool flush_processors);
135 virtual void non_realtime_locate (
framepos_t);
136 virtual void set_pending_declick (
int);
142 void set_gain (
gain_t val,
void *src);
143 void inc_gain (
gain_t delta,
void *src);
145 void set_trim (
gain_t val,
void *src);
146 void inc_trim (
gain_t delta,
void *src);
152 void set_mute (
bool yn,
void* src);
157 void set_solo (
bool yn,
void *src);
158 bool soloed ()
const {
return self_soloed () || soloed_by_others (); }
159 void cancel_solo_after_disconnect (
bool upstream);
161 bool soloed_by_others ()
const {
return _soloed_by_others_upstream||_soloed_by_others_downstream; }
166 void set_solo_isolated (
bool yn,
void *src);
167 bool solo_isolated()
const;
169 void set_solo_safe (
bool yn,
void *src);
170 bool solo_safe()
const;
172 void set_listen (
bool yn,
void* src);
173 bool listening_via_monitor ()
const;
174 void enable_monitor_send ();
176 void set_phase_invert (uint32_t,
bool yn);
177 void set_phase_invert (boost::dynamic_bitset<>);
178 bool phase_invert (uint32_t)
const;
179 boost::dynamic_bitset<> phase_invert ()
const;
181 void set_denormal_protection (
bool yn);
182 bool denormal_protection()
const;
184 void set_meter_point (
MeterPoint,
bool force =
false);
185 bool apply_processor_changes_rt ();
186 void emit_pending_signals ();
201 void flush_processors ();
204 Glib::Threads::RWLock::ReaderLock lm (_processor_lock);
205 for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
206 if (boost::dynamic_pointer_cast<UnknownProcessor> (*i)) {
214 Glib::Threads::RWLock::ReaderLock lm (_processor_lock);
215 ProcessorList::iterator i;
216 for (i = _processors.begin(); i != _processors.end() && n; ++i, --n) {}
217 if (i == _processors.end()) {
229 bool has_io_processor_named (
const std::string&);
232 std::list<std::string> unknown_processors ()
const;
241 void add_internal_return ();
244 void listen_position_changed ();
263 bool processors_reorder_needs_configure (
const ProcessorList& new_order);
266 int reorder_processors (
const ProcessorList& new_order,
ProcessorStreams* err = 0);
268 void disable_processors ();
270 void disable_plugins ();
271 void ab_plugins (
bool forward);
273 void all_visible_processors_active (
bool);
275 framecnt_t set_private_port_latencies (
bool playback)
const;
276 void set_public_port_latencies (
framecnt_t,
bool playback)
const;
279 virtual void set_latency_compensation (
framecnt_t);
305 if (tn == _track_number) {
return; }
307 track_number_changed();
329 virtual int set_state (
const XMLNode&,
int version);
330 virtual XMLNode& get_template();
332 XMLNode& get_processor_state ();
333 virtual void set_processor_state (
const XMLNode&);
335 int save_as_template (
const std::string& path,
const std::string& name);
368 , sends_only (sendsonly) {}
377 typedef std::set<FeedRecord,FeedRecordCompare>
FedBy;
379 const FedBy&
fed_by()
const {
return _fed_by; }
380 void clear_fed_by ();
390 void set_value (
double);
400 void set_value (
double);
404 void set_superficial_value(
bool muted);
411 return _solo_control;
415 return _mute_control;
442 void protect_automation ();
449 MasterBusRemoteControlID = 318,
450 MonitorBusRemoteControlID = 319,
453 void set_remote_control_id (uint32_t
id,
bool notify_class_listeners =
true);
454 uint32_t remote_control_id ()
const;
455 void set_remote_control_id_explicit (uint32_t order_key);
466 bool has_external_redirects()
const;
477 void catch_up_on_solo_mute_override ();
478 void mod_solo_by_others_upstream (int32_t);
479 void mod_solo_by_others_downstream (int32_t);
480 void curve_reallocate ();
481 virtual void set_block_size (
pframes_t nframes);
494 virtual void process_output_buffers (
BufferSet& bufs,
497 bool gain_automation_ok);
499 virtual void bounce_process (
BufferSet& bufs,
502 bool for_export,
bool for_freeze);
527 EmitMeterChanged = 0x01,
528 EmitMeterVisibilityChange = 0x02,
529 EmitRtProcessorChange = 0x04
549 bool _recordable : 1;
551 bool _declickable : 1;
567 virtual ChanCount input_streams ()
const;
583 uint32_t pans_required()
const;
596 int set_state_2X (
const XMLNode&,
int);
597 void set_processor_state_2X (
XMLNodeList const &,
int);
605 void input_change_handler (
IOChange,
void *src);
606 void output_change_handler (
IOChange,
void *src);
608 bool input_port_count_changing (
ChanCount);
609 bool output_port_count_changing (
ChanCount);
615 bool set_meter_point_unlocked ();
616 void apply_processor_order (
const ProcessorList& new_order);
621 bool add_processor_from_xml_2X (
const XMLNode&,
int);
623 void placement_range (
Placement p, ProcessorList::iterator&
start, ProcessorList::iterator& end);
625 void set_self_solo (
bool yn);
626 void set_mute_master_solo ();
628 void set_processor_positions ();
631 void setup_invisible_processors ();
643 , _processors (r->_processors)
644 , _processor_max_streams (r->processor_max_streams)
648 _route->_processors = _processors;
649 _route->processor_max_streams = _processor_max_streams;
666 void maybe_note_meter_position ();
675 void reset_instrument_info ();
677 void set_remote_control_id_internal (uint32_t
id,
bool notify_class_listeners =
true);
boost::shared_ptr< InternalReturn > internal_return() const
boost::shared_ptr< Pannable > _pannable
PBD::Signal1< void, void * > record_enable_changed
PBD::Signal0< void > initial_delay_changed
bool _in_configure_processors
bool soloed_by_others_downstream() const
ProcessorList _pending_processor_order
virtual void set_record_enabled(bool, void *)
boost::shared_ptr< Delivery > _main_outs
MeterPoint meter_point() const
boost::shared_ptr< Amp > amp() const
boost::shared_ptr< InternalSend > monitor_send() const
boost::shared_ptr< Amp > _amp
LIBARDOUR_API PBD::PropertyDescriptor< std::string > name
PBD::Signal0< void > meter_change
boost::shared_ptr< MonitorProcessor > _monitor_control
void set_meter_type(MeterType t)
PBD::Signal1< void, void * > comment_changed
MeterPoint _pending_meter_point
const FedBy & fed_by() const
PBD::Signal0< void > io_changed
void set_track_number(int64_t tn)
bool _have_internal_generator
ProcessorList _processors
boost::shared_ptr< MonitorProcessor > monitor_control() const
bool is_auditioner() const
boost::shared_ptr< PeakMeter > shared_peak_meter() const
boost::shared_ptr< MuteMaster > mute_master() const
LIBARDOUR_API PBD::PropertyDescriptor< framepos_t > start
InstrumentInfo _instrument_info
virtual bool can_record()
PBD::Signal1< void, void * > solo_isolated_changed
virtual void realtime_locate()
uint32_t _soloed_by_others_upstream
boost::shared_ptr< DelayLine > _delayline
framecnt_t signal_latency() const
virtual void write_out_of_band_data(BufferSet &, framepos_t, framepos_t, framecnt_t)
static PBD::Signal0< void > RemoteControlIDChange
boost::weak_ptr< Processor > _processor_after_last_custom_meter
boost::shared_ptr< PeakMeter > _meter
std::list< XMLNode * > XMLNodeList
framecnt_t _signal_latency_at_trim_position
boost::shared_ptr< Amp > trim() const
ChanCount processor_out_streams
boost::shared_ptr< MuteControllable > _mute_control
int64_t track_number() const
const PeakMeter & peak_meter() const
PBD::Signal1< void, void * > solo_safe_changed
virtual bool record_enabled() const
boost::shared_ptr< InternalReturn > _intreturn
PBD::Signal2< void, std::string, void * > gui_changed
PBD::Signal0< void > track_number_changed
boost::shared_ptr< IO > _output
virtual void act_on_mute()
PBD::Signal1< void, void * > SelectedChanged
PBD::Signal0< void > RemoteControlIDChanged
LIBARDOUR_API PBD::PropertyDescriptor< float > shift
ChanCount _processor_max_streams
boost::shared_ptr< InternalSend > _monitor_send
boost::shared_ptr< Delivery > main_outs() const
FeedRecord(boost::shared_ptr< Route > rp, bool sendsonly)
bool _custom_meter_position_noted
PBD::Signal0< void > denormal_protection_changed
ChanCount n_outputs() const
PBD::Signal0< void > active_changed
boost::dynamic_bitset _phase_invert
uint32_t _remote_control_id
PBD::Signal1< void, void * > listen_changed
ChanCount processor_max_streams
void foreach_processor(boost::function< void(boost::weak_ptr< Processor >)> method)
uint32_t _soloed_by_others_downstream
framecnt_t _signal_latency
framecnt_t initial_delay() const
bool _denormal_protection
boost::shared_ptr< SoloControllable > _solo_control
ChanCount n_inputs() const
virtual void realtime_handle_transport_stopped()
PBD::Signal0< void > mute_points_changed
PBD::Signal2< void, bool, void * > solo_changed
boost::weak_ptr< Route > _route
bool soloed_by_others() const
boost::shared_ptr< Amp > _trim
ChanCount count
Input requested of processor.
boost::shared_ptr< IO > _input
uint32_t index
Index of processor where configuration failed.
PBD::Signal1< void, RouteProcessorChange > processors_changed
static PBD::Signal0< void > SyncOrderKeys
bool soloed_by_others_upstream() const
PBD::Signal1< void, void * > mute_changed
boost::shared_ptr< SoloControllable > solo_control() const
MeterType meter_type() const
std::list< boost::shared_ptr< Processor > > ProcessorList
framecnt_t _signal_latency_at_amp_position
std::set< FeedRecord, FeedRecordCompare > FedBy
boost::weak_ptr< Route > _route
boost::shared_ptr< MuteControllable > mute_control() const
boost::weak_ptr< Route > r
boost::shared_ptr< IO > input() const
ProcessorStreams(size_t i=0, ChanCount c=ChanCount())
boost::shared_ptr< DelayLine > delay_line() const
virtual framecnt_t check_initial_delay(framecnt_t nframes, framepos_t &)
boost::shared_ptr< MuteMaster > _mute_master
InstrumentInfo & instrument_info()
boost::shared_ptr< IO > output() const
framecnt_t _initial_delay
Glib::Threads::RWLock _processor_lock
gint _pending_process_reorder
static LilvNode * get_value(LilvWorld *world, const LilvNode *subject, const LilvNode *predicate)
ChanCount max_processor_streams() const
boost::shared_ptr< CapturingProcessor > _capturing_processor
ProcessorList _processors
PBD::Signal0< void > phase_invert_changed
LIBARDOUR_API bool init(bool with_vst, bool try_optimization, const char *localedir)
boost::shared_ptr< Processor > nth_processor(uint32_t n)
LIBARDOUR_API PBD::PropertyDescriptor< bool > muted
PBD::Signal0< void > signal_latency_changed