summaryrefslogtreecommitdiff
path: root/src/lib/util.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-11-04 19:57:17 +0000
committerCarl Hetherington <cth@carlh.net>2012-11-04 19:57:17 +0000
commitb7466a9653345bc51db4cb1d7e960bfc4c12721f (patch)
tree1de42bc7c5973cecfdedc93d95671fdc7096be68 /src/lib/util.cc
parentfe4e160ba2df273e8e065d0d12411eba35b00ebf (diff)
parentc2dc03da9cc94fd9bd7e530363b113564237f00e (diff)
Fix merge; other tweaks.
Diffstat (limited to 'src/lib/util.cc')
-rw-r--r--src/lib/util.cc33
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);