From 88d797bd6424f9cdbf48a26e0913965a6f102363 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 16 Jan 2017 19:42:04 +0100 Subject: [PATCH] Prepare session-wide implicit monitoring overrides --- libs/ardour/ardour/session_configuration_vars.h | 1 + libs/ardour/ardour/types.h | 2 ++ libs/ardour/enums.cc | 14 ++++++++++++++ libs/ardour/session_state.cc | 4 +++- libs/ardour/track.cc | 11 +++++++++++ 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/libs/ardour/ardour/session_configuration_vars.h b/libs/ardour/ardour/session_configuration_vars.h index 25c2b61186..db789553cb 100644 --- a/libs/ardour/ardour/session_configuration_vars.h +++ b/libs/ardour/ardour/session_configuration_vars.h @@ -36,6 +36,7 @@ CONFIG_VARIABLE (bool, auto_return, "auto-return", false) CONFIG_VARIABLE (bool, auto_input, "auto-input", true) CONFIG_VARIABLE (bool, punch_in, "punch-in", false) CONFIG_VARIABLE (bool, punch_out, "punch-out", false) +CONFIG_VARIABLE (MonitorChoice, session_monitoring, "session-monitoring", MonitorAuto) CONFIG_VARIABLE (bool, layered_record_mode, "layered-record-mode", false) CONFIG_VARIABLE (uint32_t, subframes_per_frame, "subframes-per-frame", 100) CONFIG_VARIABLE (Timecode::TimecodeFormat, timecode_format, "timecode-format", Timecode::timecode_30) diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h index 9a7b719111..46ef2bade9 100644 --- a/libs/ardour/ardour/types.h +++ b/libs/ardour/ardour/types.h @@ -721,6 +721,7 @@ std::istream& operator>>(std::istream& o, ARDOUR::AutoConnectOption& sf); std::istream& operator>>(std::istream& o, ARDOUR::TracksAutoNamingRule& sf); std::istream& operator>>(std::istream& o, ARDOUR::EditMode& sf); std::istream& operator>>(std::istream& o, ARDOUR::MonitorModel& sf); +std::istream& operator>>(std::istream& o, ARDOUR::MonitorChoice& sf); std::istream& operator>>(std::istream& o, ARDOUR::PFLPosition& sf); std::istream& operator>>(std::istream& o, ARDOUR::AFLPosition& sf); std::istream& operator>>(std::istream& o, ARDOUR::ListenPosition& sf); @@ -744,6 +745,7 @@ std::ostream& operator<<(std::ostream& o, const ARDOUR::AutoConnectOption& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::TracksAutoNamingRule& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::EditMode& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::MonitorModel& sf); +std::ostream& operator<<(std::ostream& o, const ARDOUR::MonitorChoice& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::PFLPosition& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::AFLPosition& sf); std::ostream& operator<<(std::ostream& o, const ARDOUR::ListenPosition& sf); diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc index db8aeb17b2..c2a2a32801 100644 --- a/libs/ardour/enums.cc +++ b/libs/ardour/enums.cc @@ -833,6 +833,20 @@ std::ostream& operator<<(std::ostream& o, const TracksAutoNamingRule& var) return o << s; } +std::istream& operator>>(std::istream& o, MonitorChoice& var) +{ + std::string s; + o >> s; + var = (MonitorChoice) string_2_enum (s, var); + return o; +} + +std::ostream& operator<<(std::ostream& o, const MonitorChoice& var) +{ + std::string s = enum_2_string (var); + return o << s; +} + std::istream& operator>>(std::istream& o, MonitorModel& var) { std::string s; diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index bae1f46d01..b4b08de44d 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -3907,11 +3907,13 @@ Session::config_changed (std::string p, bool ours) } else if (p == "auto-loop") { + } else if (p == "session-monitoring") { + } else if (p == "auto-input") { if (Config->get_monitoring_model() == HardwareMonitoring && transport_rolling()) { /* auto-input only makes a difference if we're rolling */ - set_track_monitor_input_status (!config.get_auto_input()); + set_track_monitor_input_status (!config.get_auto_input()); } } else if (p == "punch-in") { diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index 7cdca70d3b..cb23943f2a 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -929,6 +929,17 @@ Track::monitoring_state () const return MonitoringDisk; } + switch (_session.config.get_session_monitoring ()) { + case MonitorDisk: + return MonitoringDisk; + break; + case MonitorInput: + return MonitoringInput; + break; + default: + break; + } + /* This is an implementation of the truth table in doc/monitor_modes.pdf; I don't think it's ever going to be too pretty too look at. */