#include <cassert>
#include <iostream>
-
+#include <glib.h>
#include <ardour/base_midi_port.h>
#include <ardour/data_type.h>
, _own_buffer (false)
{
_type = DataType::MIDI;
- reset();
+ _mixdown = default_mixdown;
}
BaseMidiPort::~BaseMidiPort()
{
- if (_own_buffer && _buffer) {
+ if (_own_buffer) {
delete _buffer;
}
}
set<Port*>::const_iterator p = ports.begin();
if (first_overwrite) {
- dest->read_from ((dynamic_cast<BaseMidiPort*>(*p))->get_midi_buffer(), cnt, offset);
+ cout << "first overwrite" << endl;
+ dest->read_from ((dynamic_cast<BaseMidiPort*>(*p))->get_midi_buffer(cnt, offset), cnt, offset);
p++;
}
// XXX DAVE: this is just a guess
for (; p != ports.end(); ++p) {
- dest->merge (*dest, (dynamic_cast<BaseMidiPort*>(*p))->get_midi_buffer());
+ //cout << "merge" << endl;
+ dest->merge (*dest, (dynamic_cast<BaseMidiPort*>(*p))->get_midi_buffer(cnt, offset));
}
}
void
BaseMidiPort::set_mixdown_function (void (*func)(const set<Port*>&, MidiBuffer*, nframes_t, nframes_t, bool))
{
- /* caller should (but not must) hold process lock since this is an atomic operation on most platforms
- and even if its not, it doesn't really matter.
- */
-
- _mixdown = func;
+ g_atomic_pointer_set(&_mixdown, func);
}