diff options
author | David Robillard <d@drobilla.net> | 2016-10-14 17:09:01 -0400 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2016-10-14 17:47:35 -0400 |
commit | 01e143ed3353de6ef2bd0e4648b9b2a1a72a9959 (patch) | |
tree | c8a87b597fb8f5ade1b508082c93d127ae578266 /src/server/Buffer.cpp | |
parent | 8d92e5a38e141236b3687e8d775ee5d034127fb8 (diff) | |
download | ingen-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.cpp | 22 |
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; } |