summaryrefslogtreecommitdiffstats
path: root/src/server/Buffer.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2016-10-14 17:09:01 -0400
committerDavid Robillard <d@drobilla.net>2016-10-14 17:47:35 -0400
commit01e143ed3353de6ef2bd0e4648b9b2a1a72a9959 (patch)
treec8a87b597fb8f5ade1b508082c93d127ae578266 /src/server/Buffer.cpp
parent8d92e5a38e141236b3687e8d775ee5d034127fb8 (diff)
downloadingen-01e143ed3353de6ef2bd0e4648b9b2a1a72a9959.tar.gz
ingen-01e143ed3353de6ef2bd0e4648b9b2a1a72a9959.tar.bz2
ingen-01e143ed3353de6ef2bd0e4648b9b2a1a72a9959.zip
Fix sequence ports with values
Diffstat (limited to 'src/server/Buffer.cpp')
-rw-r--r--src/server/Buffer.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/server/Buffer.cpp b/src/server/Buffer.cpp
index e08510a5..1a1f804f 100644
--- a/src/server/Buffer.cpp
+++ b/src/server/Buffer.cpp
@@ -167,8 +167,10 @@ Buffer::copy(const RunContext& context, const Buffer* src)
clear();
}
- if (value() && src->value()) {
- memcpy(value(), src->value(), lv2_atom_total_size(src->value()));
+ if (_value_buffer && src->_value_buffer) {
+ memcpy(_value_buffer->get<LV2_Atom>(),
+ src->value(),
+ lv2_atom_total_size(src->value()));
}
} else if (src->is_audio() && is_control()) {
samples()[0] = src->samples()[0];
@@ -374,16 +376,24 @@ Buffer::value() const
return _value_buffer ? _value_buffer->get<const LV2_Atom>() : NULL;
}
-LV2_Atom*
-Buffer::value()
+void
+Buffer::set_value(const Atom& value)
{
- return _value_buffer ? _value_buffer->get<LV2_Atom>() : NULL;
+ if (!value.is_valid() || !_value_buffer) {
+ return;
+ }
+
+ if (value.size() > _value_buffer->size()) {
+ _value_buffer = _factory.get_buffer(value.type(), 0, value.size(), false, false);
+ }
+
+ memcpy(_value_buffer->get<LV2_Atom*>(), value.atom(), sizeof(LV2_Atom) + value.size());
}
void
Buffer::update_value_buffer(SampleCount offset)
{
- if (!_value_buffer) {
+ if (!_value_buffer || !_value_type) {
return;
}