diff options
author | Carl Hetherington <carl@carlh.net> | 2010-08-20 20:00:08 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-08-20 20:00:08 +0000 |
commit | da4dee659bf0e834161ab7f8e48f9c4062ffe722 (patch) | |
tree | 4b8b3855749d350c127ae84a63de8c9ac9adef42 /libs/ardour/buffer_set.cc | |
parent | 8d1b41180ab0c5901894609e1b58f79419757165 (diff) |
Re-work duplicate and buggy ensure_buffers() method.
git-svn-id: svn://localhost/ardour2/branches/3.0@7659 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/buffer_set.cc')
-rw-r--r-- | libs/ardour/buffer_set.cc | 63 |
1 files changed, 2 insertions, 61 deletions
diff --git a/libs/ardour/buffer_set.cc b/libs/ardour/buffer_set.cc index b0f5563564..e3022e745f 100644 --- a/libs/ardour/buffer_set.cc +++ b/libs/ardour/buffer_set.cc @@ -180,68 +180,9 @@ BufferSet::ensure_buffers(DataType type, size_t num_buffers, size_t buffer_capac void BufferSet::ensure_buffers(const ChanCount& chns, size_t buffer_capacity) { - if (chns == ChanCount::ZERO) { - return; - } - - // If we're a mirror just make sure we're ok - if (_is_mirror) { - assert(_count >= chns); - return; - } - - for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) { - - // The vector of buffers of this type - BufferVec& bufs = _buffers[*t]; - - uint32_t nbufs = chns.get (*t); - - if (nbufs == 0) { - // Nuke it - for (BufferVec::iterator i = bufs.begin(); i != bufs.end(); ++i) { - delete (*i); - } - bufs.clear(); - continue; - } - - // If there's not enough or they're too small, just nuke the whole thing and - // rebuild it (so I'm lazy..) - if (bufs.size() < nbufs - || (bufs.size() > 0 && bufs[0]->capacity() < buffer_capacity)) { - - // Nuke it - for (BufferVec::iterator i = bufs.begin(); i != bufs.end(); ++i) { - delete (*i); - } - bufs.clear(); - - // Rebuild it - for (size_t i = 0; i < nbufs; ++i) { - bufs.push_back(Buffer::create(*t, buffer_capacity)); - } - - _available.set (*t, nbufs); - } - -#ifdef HAVE_SLV2 - // Ensure enough low level MIDI format buffers are available for conversion - // in both directions (input & output, out-of-place) - if (*t == DataType::MIDI && _lv2_buffers.size() < _buffers[DataType::MIDI].size() * 2 + 1) { - while (_lv2_buffers.size() < _buffers[DataType::MIDI].size() * 2) { - _lv2_buffers.push_back(std::make_pair(false, new LV2EventBuffer(buffer_capacity))); - } - } -#endif - - // Post-conditions - assert(bufs[0]->type() == *t); - assert(bufs.size() == _available.get(*t)); - assert(bufs[0]->capacity() >= buffer_capacity); + for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) { + ensure_buffers (*i, chns.get (*i), buffer_capacity); } - - assert (available() >= chns); } /** Get the capacity (size) of the available buffers of the given type. |