diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-11-04 19:57:17 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-11-04 19:57:17 +0000 |
| commit | b7466a9653345bc51db4cb1d7e960bfc4c12721f (patch) | |
| tree | 1de42bc7c5973cecfdedc93d95671fdc7096be68 /src/lib/util.cc | |
| parent | fe4e160ba2df273e8e065d0d12411eba35b00ebf (diff) | |
| parent | c2dc03da9cc94fd9bd7e530363b113564237f00e (diff) | |
Fix merge; other tweaks.
Diffstat (limited to 'src/lib/util.cc')
| -rw-r--r-- | src/lib/util.cc | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/lib/util.cc b/src/lib/util.cc index d89ebd0d5..26b2877f7 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -726,6 +726,7 @@ get_optional_int (multimap<string, string> const & kv, string k) AudioBuffers::AudioBuffers (int channels, int frames) : _channels (channels) , _frames (frames) + , _allocated_frames (frames) { _data = new float*[_channels]; for (int i = 0; i < _channels; ++i) { @@ -733,6 +734,18 @@ AudioBuffers::AudioBuffers (int channels, int frames) } } +AudioBuffers::AudioBuffers (AudioBuffers const & other) + : _channels (other._channels) + , _frames (other._frames) + , _allocated_frames (other._frames) +{ + _data = new float*[_channels]; + for (int i = 0; i < _channels; ++i) { + _data[i] = new float[_frames]; + memcpy (_data[i], other._data[i], _frames * sizeof (float)); + } +} + AudioBuffers::~AudioBuffers () { for (int i = 0; i < _channels; ++i) { @@ -752,7 +765,7 @@ AudioBuffers::data (int c) const void AudioBuffers::set_frames (int f) { - assert (f <= _frames); + assert (f <= _allocated_frames); _frames = f; } @@ -767,6 +780,24 @@ AudioBuffers::make_silent () } void +AudioBuffers::copy_from (AudioBuffers* from, int frames_to_copy, int read_offset, int write_offset) +{ + assert (from->channels() == channels()); + + for (int i = 0; i < _channels; ++i) { + memcpy (_data[i] + write_offset, from->_data[i] + read_offset, frames_to_copy * sizeof(float)); + } +} + +void +AudioBuffers::move (int from, int to, int frames) +{ + for (int i = 0; i < _channels; ++i) { + memmove (_data[i] + to, _data[i] + from, frames * sizeof(float)); + } +} + +void ensure_ui_thread () { assert (this_thread::get_id() == ui_thread); |
