diff options
author | Robin Gareus <robin@gareus.org> | 2017-07-04 20:12:51 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-07-04 20:12:51 +0200 |
commit | c4578db595771b5db9572b23cfe3f9a7ebef66c3 (patch) | |
tree | af8f4fd9445491dc9701f5ef85239042d8cd6e65 | |
parent | 135ffdcf6b27411b0d075449b0eda8e4c5fdd2cb (diff) |
Compatibility with old out-of-range automation-lane data
Ardour may have ignored log-scale for parameters 0..N and allowed
writing '0'. Force those values into the valid range on session load.
Also mark the list as "needs sorting" which removes potential duplicates.
-rw-r--r-- | libs/ardour/automation_list.cc | 2 | ||||
-rw-r--r-- | libs/evoral/src/ControlList.cpp | 3 |
2 files changed, 5 insertions, 0 deletions
diff --git a/libs/ardour/automation_list.cc b/libs/ardour/automation_list.cc index 014b4c511b..8ceab4f3ea 100644 --- a/libs/ardour/automation_list.cc +++ b/libs/ardour/automation_list.cc @@ -444,6 +444,7 @@ AutomationList::deserialize_events (const XMLNode& node) ok = false; break; } + y = std::min ((double)_desc.upper, std::max ((double)_desc.lower, y)); fast_simple_add (x, y); } @@ -501,6 +502,7 @@ AutomationList::set_state (const XMLNode& node, int version) continue; } + y = std::min ((double)_desc.upper, std::max ((double)_desc.lower, y)); fast_simple_add (x, y); } diff --git a/libs/evoral/src/ControlList.cpp b/libs/evoral/src/ControlList.cpp index 8bb1c125d2..a05c1f9308 100644 --- a/libs/evoral/src/ControlList.cpp +++ b/libs/evoral/src/ControlList.cpp @@ -412,6 +412,9 @@ ControlList::fast_simple_add (double when, double value) _events.insert (_events.end(), new ControlEvent (when, value)); mark_dirty (); + if (_frozen) { + _sort_pending = true; + } } void |