summaryrefslogtreecommitdiff
path: root/libs/evoral/src/Sequence.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2009-10-23 04:24:20 +0000
committerDavid Robillard <d@drobilla.net>2009-10-23 04:24:20 +0000
commit82a0c02af177d640b3876dd24789438ebaecee79 (patch)
tree8d7004dbfa5ff051a739d4d998544eed5d1a4b8f /libs/evoral/src/Sequence.cpp
parent653a487bbd88d143c59d857be6199d8d634c24c2 (diff)
Fix controller iteration / linear interpolation.
Add unit test for controller iteration / linear interpolation. git-svn-id: svn://localhost/ardour2/branches/3.0@5886 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/evoral/src/Sequence.cpp')
-rw-r--r--libs/evoral/src/Sequence.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/libs/evoral/src/Sequence.cpp b/libs/evoral/src/Sequence.cpp
index 636816eb69..93eccb6cce 100644
--- a/libs/evoral/src/Sequence.cpp
+++ b/libs/evoral/src/Sequence.cpp
@@ -97,7 +97,7 @@ Sequence<Time>::const_iterator::const_iterator(const Sequence<Time>& seq, Time t
for (Controls::const_iterator i = seq._controls.begin(); i != seq._controls.end(); ++i) {
DUMP(format("Iterator: control: %1%\n") % seq._type_map.to_symbol(i->first));
double x, y;
- bool ret = i->second->list()->rt_safe_earliest_event_unlocked(t, DBL_MAX, x, y);
+ bool ret = i->second->list()->rt_safe_earliest_event_unlocked(t, DBL_MAX, x, y, true);
if (!ret) {
DUMP(format("Iterator: CC %1% (size %2%) has no events past %3%\n")
% i->first.id() % i->second->list()->size() % t);
@@ -128,6 +128,7 @@ Sequence<Time>::const_iterator::const_iterator(const Sequence<Time>& seq, Time t
if (found) {
_control_iter = _control_iters.begin() + earliest_control_index;
+ assert(_control_iter != _control_iters.end());
} else {
_control_iter = _control_iters.end();
}
@@ -140,14 +141,15 @@ Sequence<Time>::const_iterator::const_iterator(const Sequence<Time>& seq, Time t
earliest_t = (*_note_iter)->time();
}
- if (_sysex_iter != seq.sysexes().end() && (*_sysex_iter)->time() < earliest_t) {
+ if (_sysex_iter != seq.sysexes().end()
+ && ((*_sysex_iter)->time() < earliest_t || _type == NIL)) {
_type = SYSEX;
earliest_t = (*_sysex_iter)->time();
}
if (_control_iter != _control_iters.end()
&& earliest_control.list && earliest_control.x >= t
- && earliest_control.x < earliest_t) {
+ && (earliest_control.x < earliest_t || _type == NIL)) {
_type = CONTROL;
earliest_t = earliest_control.x;
}