summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-07-04 20:12:51 +0200
committerRobin Gareus <robin@gareus.org>2017-07-04 20:12:51 +0200
commitc4578db595771b5db9572b23cfe3f9a7ebef66c3 (patch)
treeaf8f4fd9445491dc9701f5ef85239042d8cd6e65
parent135ffdcf6b27411b0d075449b0eda8e4c5fdd2cb (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.cc2
-rw-r--r--libs/evoral/src/ControlList.cpp3
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