new internal port type, round I, plus tiny fix for legalize_for_xml() (also for 2...
[ardour.git] / libs / ardour / midi_buffer.cc
index e971e9ae8ff1cae71f8a7ba920c94b18a742bbc9..52f04eaf910a9162ee6fa1d2aefd9ee75e0d30aa 100644 (file)
@@ -38,20 +38,31 @@ MidiBuffer::MidiBuffer(size_t capacity)
        , _events(NULL)
        , _data(NULL)
 {
-       assert(capacity > 0);
+       _data = 0;
+       resize (_capacity);
+       silence(_capacity);
+}
 
-       _size = 0;
+void
+MidiBuffer::resize (size_t size)
+{
+       assert(size > 0);
 
+       if (_data) {
+               free (_data);
+       }
+
+       _size = 0;
+       _capacity = size;
 #ifdef NO_POSIX_MEMALIGN
-       _events = (MidiEvent *) malloc(sizeof(MidiEvent) * capacity);
-       _data = (Byte *) malloc(sizeof(Byte) * capacity * MAX_EVENT_SIZE);
+       _events = (MidiEvent *) malloc(sizeof(MidiEvent) * _capacity);
+       _data = (Byte *) malloc(sizeof(Byte) * _capacity * MAX_EVENT_SIZE);
 #else
-       posix_memalign((void**)&_events, CPU_CACHE_ALIGN, sizeof(MidiEvent) * capacity);
-       posix_memalign((void**)&_data, CPU_CACHE_ALIGN, sizeof(Byte) * capacity * MAX_EVENT_SIZE);
+       posix_memalign((void**)&_events, CPU_CACHE_ALIGN, sizeof(MidiEvent) * _capacity);
+       posix_memalign((void**)&_data, CPU_CACHE_ALIGN, sizeof(Byte) * _capacity * MAX_EVENT_SIZE);
 #endif 
        assert(_data);
        assert(_events);
-       silence(_capacity);
 }
 
 void