diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-01-30 07:40:13 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-01-30 07:40:13 +0000 |
commit | 70b939da4f9d4097160e32f2373a7a5ff8f4957f (patch) | |
tree | 5917e5847c75e441c9df550d5101352d18e8286f /libs/ardour/audio_buffer.cc | |
parent | ee62ee07d39f51ba1b70f390dc2158c57f54a572 (diff) |
first pass at internal sends. this is a very tentative work in progress, and it is possible that major changes may follow in the near future. it is certainly not complete, but the fundamental changes to Port/Buffer operation merit a commit at this point
git-svn-id: svn://localhost/ardour2/branches/3.0@4464 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/audio_buffer.cc')
-rw-r--r-- | libs/ardour/audio_buffer.cc | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/libs/ardour/audio_buffer.cc b/libs/ardour/audio_buffer.cc index 915fdeb948..506b34eb04 100644 --- a/libs/ardour/audio_buffer.cc +++ b/libs/ardour/audio_buffer.cc @@ -29,9 +29,7 @@ static const int CPU_CACHE_ALIGN = 16; /* arguably 32 on most arches, but it mat #endif using namespace PBD; - -namespace ARDOUR { - +using namespace ARDOUR; AudioBuffer::AudioBuffer(size_t capacity) : Buffer(DataType::AUDIO, capacity) @@ -41,6 +39,7 @@ AudioBuffer::AudioBuffer(size_t capacity) if (_capacity > 0) { _owns_data = true; // prevent resize() from gagging resize (_capacity); + _silent = false; // force silence on the intial buffer state silence (_capacity); } } @@ -51,10 +50,28 @@ AudioBuffer::~AudioBuffer() free(_data); } +/* called to replace a pointer to an external buffer (e.g. JACK) with + buffer-owned memory. +*/ + +void +AudioBuffer::replace_data (size_t capacity) +{ + _owns_data = true; + _data = 0; + _capacity = 0; // force reallocation + resize (capacity); +} + void AudioBuffer::resize (size_t size) { - if (!_owns_data || (size < _capacity)) { + if (!_owns_data) { + return; + } + + if (size < _capacity) { + _size = size; return; } @@ -74,9 +91,12 @@ AudioBuffer::resize (size_t size) CPU_CACHE_ALIGN, sizeof (Sample) * _capacity, strerror (errno)) << endmsg; } #endif - - _owns_data = true; + } -} // namespace ARDOUR +void +AudioBuffer::copy_to_internal (Sample* p, nframes_t cnt, nframes_t offset) +{ + memcpy (_data + offset, p, sizeof(Sample*) * cnt); +} |