From 1de584961a746090583a4c97251f25924d6e03ad Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 27 Nov 2016 22:54:05 +0100 Subject: [PATCH] NO-OP; Backport changes from Mixbus branch --- libs/ardour/audio_diskstream.cc | 16 ++++++++++++++++ libs/ardour/diskstream.cc | 10 ++++++++++ libs/ardour/track.cc | 4 +++- libs/surfaces/mackie/mackie_control_protocol.cc | 2 +- libs/surfaces/mackie/mcp_buttons.cc | 6 ++++++ libs/surfaces/mackie/strip.cc | 6 ++++++ 6 files changed, 42 insertions(+), 2 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; } diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc index 2ea61cc9f0..1a73ad56b9 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.cc +++ b/libs/surfaces/mackie/mackie_control_protocol.cc @@ -320,7 +320,7 @@ MackieControlProtocol::get_sorted_stripables() break; case Auxes: // in ardour, for now aux and buss are same. for mixbus, "Busses" are mixbuses, "Auxes" are ardour buses #ifdef MIXBUS - if (!s->mixbus() && !is_track() && !s->presentation_info().hidden()) + if (!s->mixbus() && !is_track(s) && !s->presentation_info().hidden()) #else if (!is_track(s) && !s->presentation_info().hidden()) #endif diff --git a/libs/surfaces/mackie/mcp_buttons.cc b/libs/surfaces/mackie/mcp_buttons.cc index 5f3d2766c8..3fbc846111 100644 --- a/libs/surfaces/mackie/mcp_buttons.cc +++ b/libs/surfaces/mackie/mcp_buttons.cc @@ -934,6 +934,9 @@ MackieControlProtocol::miditracks_release (Mackie::Button&) Mackie::LedState MackieControlProtocol::inputs_press (Mackie::Button&) { +#ifdef MIXBUS + set_view_mode (Mixer); //in Mixbus, this is the same as Global View (avoid dead buttons) +#endif return none; } Mackie::LedState @@ -955,6 +958,9 @@ MackieControlProtocol::audiotracks_release (Mackie::Button&) Mackie::LedState MackieControlProtocol::audioinstruments_press (Mackie::Button& b) { +#ifdef MIXBUS + set_view_mode (MidiTracks); //in Mixbus, we do the same thing as MIDI Tracks ( aviod dead buttons ) +#endif return none; } diff --git a/libs/surfaces/mackie/strip.cc b/libs/surfaces/mackie/strip.cc index 1c2fe8d1b9..e7ce72cff8 100644 --- a/libs/surfaces/mackie/strip.cc +++ b/libs/surfaces/mackie/strip.cc @@ -1341,6 +1341,12 @@ Strip::vpot_mode_string () default: break; } +#ifdef MIXBUS + //"None" mode, by definition (currently) shows the pan control above the fader. + //Mixbus controllers are created from a LADSPA so they don't have ac->desc().type + //For the forseeable future, we will just return "Pan" here. + return "Pan"; +#endif return "???"; }