summaryrefslogtreecommitdiff
path: root/libs/ardour/return.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-06-09 20:21:19 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-06-09 20:21:19 +0000
commite6eb059576eefd9a26c177627ae7dd3ba2feb727 (patch)
tree536ce6ee456f2306bb0346a51ede0a4aa64a8e63 /libs/ardour/return.cc
parent9bd274bfdee62c9cc0e5752d2a72027d2c732cd0 (diff)
the big Route structure refactor. !!!! THIS WILL ***NOT LOAD*** PRIOR 3.0 or 2.X SESSIONS !!!! BREAKAGE IS EXPECTED !!!! IF YOU HAVE AND NEED A WORKING 3.0 DO **NOT** UPDATE. !!!! otherwise, update and enjoy the steadily emerging joys of this major reworking of ardour internals
git-svn-id: svn://localhost/ardour2/branches/3.0@5137 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/return.cc')
-rw-r--r--libs/ardour/return.cc51
1 files changed, 40 insertions, 11 deletions
diff --git a/libs/ardour/return.cc b/libs/ardour/return.cc
index 1f228d01ca..4942f9023b 100644
--- a/libs/ardour/return.cc
+++ b/libs/ardour/return.cc
@@ -21,14 +21,15 @@
#include "pbd/xml++.h"
-#include "ardour/return.h"
-#include "ardour/session.h"
-#include "ardour/port.h"
+#include "ardour/amp.h"
#include "ardour/audio_port.h"
#include "ardour/buffer_set.h"
+#include "ardour/io.h"
#include "ardour/meter.h"
#include "ardour/panner.h"
-#include "ardour/io.h"
+#include "ardour/port.h"
+#include "ardour/return.h"
+#include "ardour/session.h"
#include "i18n.h"
@@ -36,14 +37,26 @@ using namespace ARDOUR;
using namespace PBD;
Return::Return (Session& s)
- : IOProcessor (s, string_compose (_("return %1"), (_bitslot = s.next_return_id()) + 1))
+ : IOProcessor (s, true, false, string_compose (_("return %1"), (_bitslot = s.next_return_id()) + 1))
+ , _metering (false)
{
+ /* never muted */
+
+ _amp.reset (new Amp (_session, boost::shared_ptr<MuteMaster>()));
+ _meter.reset (new PeakMeter (_session));
+
ProcessorCreated (this); /* EMIT SIGNAL */
}
Return::Return (Session& s, const XMLNode& node)
- : IOProcessor (s, "return")
+ : IOProcessor (s, true, false, "return")
+ , _metering (false)
{
+ /* never muted */
+
+ _amp.reset (new Amp (_session, boost::shared_ptr<MuteMaster>()));
+ _meter.reset (new PeakMeter (_session));
+
if (set_state (node)) {
throw failed_constructor();
}
@@ -108,23 +121,38 @@ Return::set_state(const XMLNode& node)
void
Return::run_in_place (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes)
{
- if (active()) {
- _io->collect_input (bufs, nframes, _configured_input);
- bufs.set_count(_configured_output);
+ if (!active() || _input->n_ports() == ChanCount::ZERO) {
+ return;
+ }
+
+ _input->collect_input (bufs, nframes, _configured_input);
+ bufs.set_count(_configured_output);
+
+ // Can't automate gain for sends or returns yet because we need different buffers
+ // so that we don't overwrite the main automation data for the route amp
+ // _amp->setup_gain_automation (start_frame, end_frame, nframes);
+ _amp->run_in_place (bufs, start_frame, end_frame, nframes);
+
+ if (_metering) {
+ if (_amp->gain_control()->get_value() == 0) {
+ _meter->reset();
+ } else {
+ _meter->run_in_place (bufs, start_frame, end_frame, nframes);
+ }
}
}
bool
Return::can_support_io_configuration (const ChanCount& in, ChanCount& out) const
{
- out = in + _io->n_inputs();
+ out = in + _input->n_ports();
return true;
}
bool
Return::configure_io (ChanCount in, ChanCount out)
{
- if (out != in + _io->n_inputs()) {
+ if (out != in + _input->n_ports()) {
return false;
}
@@ -162,3 +190,4 @@ Return::make_unique (XMLNode &state, Session &session)
}
}
+