diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2007-10-17 16:49:31 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2007-10-17 16:49:31 +0000 |
commit | 239ec39da6583e6e00cd03fa3bde8f1e27016b4d (patch) | |
tree | 8e46988053361eefbbcaa0291f5d0540cd0ab9c7 /libs/ardour/audio_buffer.cc | |
parent | df28e90c673b209b946463efa02f35c5a0f6bed5 (diff) |
new internal port type, round I, plus tiny fix for legalize_for_xml() (also for 2.0-ongoing)
git-svn-id: svn://localhost/ardour2/trunk@2559 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/audio_buffer.cc')
-rw-r--r-- | libs/ardour/audio_buffer.cc | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/libs/ardour/audio_buffer.cc b/libs/ardour/audio_buffer.cc index 059b61ed2f..b07f70be1f 100644 --- a/libs/ardour/audio_buffer.cc +++ b/libs/ardour/audio_buffer.cc @@ -29,19 +29,13 @@ namespace ARDOUR { AudioBuffer::AudioBuffer(size_t capacity) : Buffer(DataType::AUDIO, capacity) - , _owns_data(false) - , _data(NULL) + , _owns_data (false) + , _data (0) { - _size = capacity; // For audio buffers, size = capacity (always) - if (capacity > 0) { -#ifdef NO_POSIX_MEMALIGN - _data = (Sample *) malloc(sizeof(Sample) * capacity); -#else - posix_memalign((void**)&_data, CPU_CACHE_ALIGN, sizeof(Sample) * capacity); -#endif - assert(_data); - _owns_data = true; - clear(); + if (_capacity) { + _owns_data = true; // prevent resize() from gagging + resize (_capacity); + silence (_capacity); } } @@ -51,6 +45,31 @@ AudioBuffer::~AudioBuffer() free(_data); } +void +AudioBuffer::resize (size_t size) +{ + assert (_owns_data); + + if (size < _capacity) { + return; + } + + if (_data) { + free (_data); + } + + _capacity = size; + _size = size; + _silent = false; + +#ifdef NO_POSIX_MEMALIGN + _data = (Sample *) malloc(sizeof(Sample) * _capacity); +#else + posix_memalign((void**)&_data, CPU_CACHE_ALIGN, sizeof(Sample) * _capacity); +#endif + + _owns_data = true; +} } // namespace ARDOUR |