summaryrefslogtreecommitdiff
path: root/libs/ardour/track.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-10-21 23:14:00 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-10-21 23:14:00 +0000
commit1e23a865995407a94998ee3ba3ff6a434d04b36e (patch)
tree1cc1785b4985e6ea426d5ffd64061aed4702a59c /libs/ardour/track.cc
parentc1908086bb023e4039849a671b7b70c88b9f49f5 (diff)
improved/fixed monitoring_state() logic from chrisg
git-svn-id: svn://localhost/ardour2/branches/3.0@10275 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/track.cc')
-rw-r--r--libs/ardour/track.cc46
1 files changed, 29 insertions, 17 deletions
diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc
index 228ed31786..734c8f994d 100644
--- a/libs/ardour/track.cc
+++ b/libs/ardour/track.cc
@@ -700,8 +700,20 @@ Track::send_silence () const
if ((Config->get_monitoring_model() == SoftwareMonitoring)
&& ((_monitoring & MonitorInput) ||
(!(_monitoring & MonitorDisk) && (_session.config.get_auto_input () || _diskstream->record_enabled())))){
+
+ DEBUG_TRACE (DEBUG::Monitor,
+ string_compose ("%1: no roll, use silence = FALSE, monitoring choice %2 recenable %3 sRA %4 autoinput %5\n",
+ name(), enum_2_string (_monitoring),
+ _diskstream->record_enabled(), _session.actively_recording(),
+ _session.config.get_auto_input()));
+
send_silence = false;
} else {
+ DEBUG_TRACE (DEBUG::Monitor,
+ string_compose ("%1: no roll, use silence = TRUE, monitoring choice %2 recenable %3 sRA %4 autoinput %5\n",
+ name(), enum_2_string (_monitoring),
+ _diskstream->record_enabled(), _session.actively_recording(),
+ _session.config.get_auto_input()));
send_silence = true;
}
}
@@ -717,29 +729,27 @@ Track::monitoring_state ()
if (_session.transport_rolling()) {
/* roll case */
+
+ if (_monitoring & MonitorInput) { // explicitly requested input monitoring
+
+ ms = MonitoringInput;
- if ((_monitoring & MonitorInput) || // explicitly requested input monitoring
- (!(_monitoring & MonitorDisk) && // disk monitoring not requested
- (_diskstream->record_enabled() && // record-enabled BUT
- !_session.actively_recording() && // session NOT rec-armed
- !_session.config.get_auto_input()))) { // and auto-input is off
+ } else if (_monitoring & MonitorDisk) { // explicitly requested disk monitoring
+
+ ms = MonitoringDisk;
+ } else if (_diskstream->record_enabled() && _session.actively_recording()) { // Track actually recording
+
ms = MonitoringInput;
- } else {
+ } else if (_diskstream->record_enabled() && !_session.actively_recording() && _session.config.get_auto_input()) { // Track armed but not recording, with auto input enabled
+
+ ms = MonitoringInput;
- ms = MonitorState (0);
- }
+ } else { // Every other state
+
+ ms = MonitoringDisk;
- /* basically we're looking for monitor_disk || !recording
- */
-
- if ((_monitoring & MonitorDisk) || // explicitly requested disk monitoring
- (!(_monitoring & MonitorInput) && // input monitoring not requested
- (!_diskstream->record_enabled() || // NOT record-enabled OR
- !_session.actively_recording()))) { // session rec-armed OR
-
- ms = MonitorState (ms | MonitoringDisk);
}
} else {
@@ -747,8 +757,10 @@ Track::monitoring_state ()
/* no-roll case */
if (send_silence()) {
+
ms = MonitoringSilence;
} else {
+
ms = MonitoringInput;
}
}