From e7b2f7ee286350bc3bb56b44ed98e4d8bf49af82 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 13 Dec 2016 20:53:58 -0500 Subject: Fix real-time issues with buffer allocation --- src/server/Buffer.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'src/server/Buffer.cpp') diff --git a/src/server/Buffer.cpp b/src/server/Buffer.cpp index c5f9a1c2..71dd320a 100644 --- a/src/server/Buffer.cpp +++ b/src/server/Buffer.cpp @@ -91,7 +91,7 @@ Buffer::Buffer(BufferFactory& bufs, Float, which acts like an individual float (has a value), but the buffer itself only transmits changes and does not necessarily contain the current value. */ - _value_buffer = bufs.get_buffer(value_type, 0, 0, false); + _value_buffer = bufs.get_buffer(value_type, 0, 0); } } } @@ -110,12 +110,12 @@ Buffer::recycle() } void -Buffer::set_type(LV2_URID type, LV2_URID value_type) +Buffer::set_type(GetFn get, LV2_URID type, LV2_URID value_type) { _type = type; _value_type = value_type; if (type == _factory.uris().atom_Sequence && value_type) { - _value_buffer = _factory.get_buffer(value_type, 0, 0, false); + _value_buffer = (_factory.*get)(value_type, 0, 0); } } @@ -312,8 +312,7 @@ Buffer::append_event(int64_t frames, LV2_Atom* atom = get(); if (atom->type == _factory.uris().atom_Chunk) { - // Chunk initialized with prepare_output_write(), clear - clear(); + clear(); // Chunk initialized with prepare_output_write(), clear } if (sizeof(LV2_Atom) + atom->size + lv2_atom_pad_size(size) > _capacity) { @@ -384,7 +383,7 @@ Buffer::set_value(const Atom& value) } if (value.size() > _value_buffer->size()) { - _value_buffer = _factory.get_buffer(value.type(), 0, value.size(), false, false); + _value_buffer = _factory.claim_buffer(value.type(), 0, value.size()); } memcpy(_value_buffer->get(), value.atom(), sizeof(LV2_Atom) + value.size()); -- cgit v1.2.1