summaryrefslogtreecommitdiff
path: root/libs/ardour/buffer.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-09-01 07:38:55 +0000
committerDavid Robillard <d@drobilla.net>2006-09-01 07:38:55 +0000
commitbd1220a46db9fe909d09c08139cfb61ba98ec9f3 (patch)
tree5662e862dba8408601c0495e1aa8dabba72c688a /libs/ardour/buffer.cc
parent017e16c530bb1a9f186aa81893089dc79b4ddc24 (diff)
Fixes for IO port adding/removing
Working audio sends/port inserts Send gain, panning MIDI sends working (maybe port inserts too?) Buffer/Port fixes (related to silence) Metering bug fixes git-svn-id: svn://localhost/ardour2/branches/midi@883 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/buffer.cc')
-rw-r--r--libs/ardour/buffer.cc12
1 files changed, 8 insertions, 4 deletions
diff --git a/libs/ardour/buffer.cc b/libs/ardour/buffer.cc
index 7b99f2a900..d4a370685c 100644
--- a/libs/ardour/buffer.cc
+++ b/libs/ardour/buffer.cc
@@ -39,6 +39,7 @@ Buffer::create(DataType type, size_t capacity)
AudioBuffer::AudioBuffer(size_t capacity)
: Buffer(DataType::AUDIO, capacity)
+ , _owns_data(false)
, _data(NULL)
{
_size = capacity; // For audio buffers, size = capacity (always)
@@ -49,10 +50,8 @@ AudioBuffer::AudioBuffer(size_t capacity)
posix_memalign((void**)&_data, 16, sizeof(Sample) * capacity);
#endif
assert(_data);
- clear();
_owns_data = true;
- } else {
- _owns_data = false;
+ clear();
}
}
@@ -108,13 +107,15 @@ MidiBuffer::read_from(const Buffer& src, jack_nframes_t nframes, jack_nframes_t
clear();
assert(_size == 0);
- // FIXME: This is embarrassingly slow. branch branch branch
+ // FIXME: slow
for (size_t i=0; i < src.size(); ++i) {
const MidiEvent& ev = msrc[i];
if (ev.time >= offset && ev.time < offset+nframes) {
push_back(ev);
}
}
+
+ _silent = src.silent();
}
@@ -140,6 +141,8 @@ MidiBuffer::push_back(const MidiEvent& ev)
//cerr << "MidiBuffer: pushed, size = " << _size << endl;
+ _silent = false;
+
return true;
}
@@ -154,6 +157,7 @@ MidiBuffer::silence(jack_nframes_t dur, jack_nframes_t offset)
memset(_events, 0, sizeof(MidiEvent) * _capacity);
memset(_data, 0, sizeof(RawMidi) * _capacity * MAX_EVENT_SIZE);
_size = 0;
+ _silent = true;
}