summaryrefslogtreecommitdiffstats
path: root/src/server/Buffer.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2017-03-20 02:50:00 +0100
committerDavid Robillard <d@drobilla.net>2017-03-20 03:19:33 +0100
commit8bf529bb24c03ebdce884cf9a4288812bb9b2cd5 (patch)
tree13f22cae9425a7b11d1c6c081b34e61e9cde964a /src/server/Buffer.cpp
parent2a8f4846d02de4256a0c624ff8a29867bb7da86b (diff)
downloadingen-8bf529bb24c03ebdce884cf9a4288812bb9b2cd5.tar.gz
ingen-8bf529bb24c03ebdce884cf9a4288812bb9b2cd5.tar.bz2
ingen-8bf529bb24c03ebdce884cf9a4288812bb9b2cd5.zip
Fix value buffer update
Diffstat (limited to 'src/server/Buffer.cpp')
-rw-r--r--src/server/Buffer.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/server/Buffer.cpp b/src/server/Buffer.cpp
index 7af3d47e..fb7efa85 100644
--- a/src/server/Buffer.cpp
+++ b/src/server/Buffer.cpp
@@ -421,15 +421,21 @@ Buffer::update_value_buffer(SampleCount offset)
return;
}
- LV2_Atom_Sequence* seq = get<LV2_Atom_Sequence>();
+ LV2_Atom_Sequence* seq = get<LV2_Atom_Sequence>();
+ LV2_Atom_Event* latest = NULL;
LV2_ATOM_SEQUENCE_FOREACH(seq, ev) {
- if (ev->time.frames <= offset && ev->body.type == _value_type) {
- memcpy(_value_buffer->get<LV2_Atom>(),
- &ev->body,
- lv2_atom_total_size(&ev->body));
+ if (ev->time.frames > offset) {
break;
+ } else if (ev->body.type == _value_type) {
+ latest = ev;
}
}
+
+ if (latest) {
+ memcpy(_value_buffer->get<LV2_Atom>(),
+ &latest->body,
+ lv2_atom_total_size(&latest->body));
+ }
}
#ifndef NDEBUG