summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-03-18 01:31:54 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-03-18 01:31:54 +0000
commit295eb9a395d2ad36654a1d71019a571400adaee8 (patch)
tree432a52be7b95e816a9bebace4910dfa05b59b75a
parent8caed20c973636343a8a337dc78b34a399b74d78 (diff)
force AFL monitor/listen send to be at the very end of the Route processor list; put the monitor processor used by the monitor/listen send right after that bus' internal return (to provide for post-monitor-control metering etc); hide monitor/listen sends
git-svn-id: svn://localhost/ardour2/branches/3.0@6773 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--libs/ardour/monitor_processor.cc2
-rw-r--r--libs/ardour/route.cc39
-rw-r--r--libs/ardour/send.cc7
3 files changed, 35 insertions, 13 deletions
diff --git a/libs/ardour/monitor_processor.cc b/libs/ardour/monitor_processor.cc
index aa1609a844..8399c0382a 100644
--- a/libs/ardour/monitor_processor.cc
+++ b/libs/ardour/monitor_processor.cc
@@ -268,6 +268,8 @@ MonitorProcessor::run (BufferSet& bufs, sframes_t /*start_frame*/, sframes_t /*e
}
if (_mono) {
+ DEBUG_TRACE (DEBUG::Monitor, "mono-izing\n");
+
/* chn is now the number of channels, use as a scaling factor when mixing
*/
gain_t scale = 1.0/chn;
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 41bd1207b5..448e295c1a 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -88,17 +88,33 @@ Route::Route (Session& sess, string name, Flag flg, DataType default_type)
add_processor (_meter, PostFader);
+ _main_outs.reset (new Delivery (_session, _output, _mute_master, _name, Delivery::Main));
+
+ add_processor (_main_outs, PostFader);
+
if (is_control()) {
/* where we listen to tracks */
_intreturn.reset (new InternalReturn (_session));
add_processor (_intreturn, PreFader);
+ ProcessorList::iterator i;
+
+ for (i = _processors.begin(); i != _processors.end(); ++i) {
+ if (*i == _intreturn) {
+ ++i;
+ break;
+ }
+ }
+
+ /* the thing that provides proper control over a control/monitor/listen bus
+ (such as per-channel cut, dim, solo, invert, etc).
+ It always goes right after the internal return;
+ */
_monitor_control.reset (new MonitorProcessor (_session));
- add_processor (_monitor_control, PostFader);
+ add_processor (_monitor_control, i);
}
- _main_outs.reset (new Delivery (_session, _output, _mute_master, _name, Delivery::Main));
- add_processor (_main_outs, PostFader);
+
/* now that we have _meter, its safe to connect to this */
@@ -744,7 +760,7 @@ Route::add_processor (boost::shared_ptr<Processor> processor, Placement placemen
/** Add a processor to the route.
- * If @a iter is not NULL, it must point to an iterator in _processors and the new
+ * @a iter must point to an iterator in _processors and the new
* processor will be inserted immediately before this location. Otherwise,
* @a position is used.
*/
@@ -2427,7 +2443,13 @@ Route::listen_via (boost::shared_ptr<Route> route, Placement placement, bool /*a
_control_outs = listener;
}
- add_processor (listener, placement);
+ if (placement == PostFader) {
+ /* put it *really* at the end, not just after the panner (main outs)
+ */
+ add_processor (listener, _processors.end());
+ } else {
+ add_processor (listener, PreFader);
+ }
return 0;
}
@@ -2803,7 +2825,6 @@ Route::put_control_outs_at (Placement p)
{
Glib::RWLock::WriterLock lm (_processor_lock);
ProcessorList as_it_was (_processors);
- // Move meter in the processors list
ProcessorList::iterator loc = find(_processors.begin(), _processors.end(), _control_outs);
_processors.erase(loc);
@@ -2815,13 +2836,11 @@ Route::put_control_outs_at (Placement p)
}
break;
case PostFader:
- loc = find(_processors.begin(), _processors.end(), _amp);
- assert (loc != _processors.end());
- loc++;
+ loc = _processors.end();
break;
}
- _processors.insert(loc, _control_outs);
+ _processors.insert (loc, _control_outs);
if (configure_processors_unlocked (0)) {
_processors = as_it_was;
diff --git a/libs/ardour/send.cc b/libs/ardour/send.cc
index 037ae9b043..c664d67617 100644
--- a/libs/ardour/send.cc
+++ b/libs/ardour/send.cc
@@ -259,9 +259,10 @@ Send::display_to_user () const
{
/* we ignore Deliver::_display_to_user */
-// if (_role == Listen || _role == MainListen) {
-// return false;
-// }
+ if (_role == Listen) {
+ /* don't make the monitor/control/listen send visible */
+ return false;
+ }
return true;
}