summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-11-27 22:54:05 +0100
committerRobin Gareus <robin@gareus.org>2016-11-27 22:54:23 +0100
commit1de584961a746090583a4c97251f25924d6e03ad (patch)
tree6cc66baec95fde2dbf91d7c1a02f26026a149142 /libs/ardour
parent5ec21347a9595a88d7d1e935a5e4a271bdfb7933 (diff)
NO-OP; Backport changes from Mixbus branch
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/audio_diskstream.cc16
-rw-r--r--libs/ardour/diskstream.cc10
-rw-r--r--libs/ardour/track.cc4
3 files changed, 29 insertions, 1 deletions
diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc
index 330b9d582a..53ab63961d 100644
--- a/libs/ardour/audio_diskstream.cc
+++ b/libs/ardour/audio_diskstream.cc
@@ -2174,6 +2174,22 @@ AudioDiskstream::set_align_style_from_io ()
}
}
+#ifdef MIXBUS
+ // compensate for latency when bouncing from master or mixbus.
+ // we need to use "ExistingMaterial" to pick up the master bus' latency
+ // see also Route::direct_feeds_according_to_reality
+ IOVector ios;
+ ios.push_back (_io);
+ if (_session.master_out() && ios.fed_by (_session.master_out()->output())) {
+ have_physical = true;
+ }
+ for (uint32_t n = 0; n < NUM_MIXBUSES && !have_physical; ++n) {
+ if (_session.get_mixbus (n) && ios.fed_by (_session.get_mixbus(n)->output())) {
+ have_physical = true;
+ }
+ }
+#endif
+
if (have_physical) {
set_align_style (ExistingMaterial);
} else {
diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc
index ebd11a1887..a81c1e473d 100644
--- a/libs/ardour/diskstream.cc
+++ b/libs/ardour/diskstream.cc
@@ -260,6 +260,16 @@ Diskstream::set_capture_offset ()
_capture_offset = 0;
break;
}
+#ifdef MIXBUS
+ framecnt_t port_offset;
+ if (_track->mixbus_internal_bounce (port_offset)) {
+ /* _capture_offset may become negative, but the sum
+ * _capture_offset + existing_material_offset
+ * will be postive.
+ */
+ _capture_offset -= port_offset;
+ }
+#endif
DEBUG_TRACE (DEBUG::CaptureAlignment, string_compose ("%1: using IO latency, capture offset set to %2 with style = %3\n", name(), _capture_offset, enum_2_string (_alignment_style)));
}
diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc
index 02c44eddf7..7cdca70d3b 100644
--- a/libs/ardour/track.cc
+++ b/libs/ardour/track.cc
@@ -27,6 +27,7 @@
#include "ardour/playlist.h"
#include "ardour/port.h"
#include "ardour/processor.h"
+#include "ardour/profile.h"
#include "ardour/record_enable_control.h"
#include "ardour/record_safe_control.h"
#include "ardour/route_group_specialized.h"
@@ -365,7 +366,8 @@ Track::no_roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame,
/* no outputs? nothing to do ... what happens if we have sends etc. ? */
- if (n_outputs().n_total() == 0) {
+ if (n_outputs().n_total() == 0 && !ARDOUR::Profile->get_mixbus()) {
+ //Note: Mixbus has its own output mechanism, so we should operate even if no explicit outputs are assigned
return 0;
}