summaryrefslogtreecommitdiff
path: root/libs/ardour/rt_midibuffer.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2019-10-15 16:57:23 -0600
committerPaul Davis <paul@linuxaudiosystems.com>2019-11-02 16:32:18 -0600
commite87e0ec0283674c3e649c1218822fa03c3fc9016 (patch)
tree79027f00faa4c49231bb81ae275d89fe77f02e05 /libs/ardour/rt_midibuffer.cc
parent67beff22ceaf2cdcbab92a978e8afc35a9751762 (diff)
add a MidiStateTracker to DiskReader and use to handle transport stop note resolving
Diffstat (limited to 'libs/ardour/rt_midibuffer.cc')
-rw-r--r--libs/ardour/rt_midibuffer.cc24
1 files changed, 23 insertions, 1 deletions
diff --git a/libs/ardour/rt_midibuffer.cc b/libs/ardour/rt_midibuffer.cc
index c966e23121..c2fec01e59 100644
--- a/libs/ardour/rt_midibuffer.cc
+++ b/libs/ardour/rt_midibuffer.cc
@@ -26,6 +26,7 @@
#include "ardour/debug.h"
#include "ardour/midi_buffer.h"
+#include "ardour/midi_state_tracker.h"
#include "ardour/rt_midibuffer.h"
using namespace std;
@@ -74,6 +75,26 @@ RTMidiBuffer::resize (size_t size)
assert(_data);
}
+void
+RTMidiBuffer::dump (uint32_t cnt)
+{
+ for (Map::iterator iter = _map.begin(); iter != _map.end() && cnt; ++iter, --cnt) {
+
+ uint8_t* addr = &_data[iter->second];
+ TimeType evtime = iter->first;
+ uint32_t size = *(reinterpret_cast<Evoral::EventType*>(addr));
+ addr += sizeof (size);
+
+ cerr << "@ " << evtime << " sz=" << size << '\t';
+
+ cerr << hex;
+ for (size_t i =0 ; i < size; ++i) {
+ cerr << "0x" << hex << (int)addr[i] << dec << '/' << (int)addr[i] << ' ';
+ }
+ cerr << dec << endl;
+ }
+}
+
uint32_t
RTMidiBuffer::write (TimeType time, Evoral::EventType /*type*/, uint32_t size, const uint8_t* buf)
{
@@ -99,7 +120,7 @@ RTMidiBuffer::write (TimeType time, Evoral::EventType /*type*/, uint32_t size, c
}
uint32_t
-RTMidiBuffer::read (MidiBuffer& dst, samplepos_t start, samplepos_t end, samplecnt_t offset)
+RTMidiBuffer::read (MidiBuffer& dst, samplepos_t start, samplepos_t end, MidiStateTracker& tracker, samplecnt_t offset)
{
Map::iterator iter = _map.lower_bound (start);
uint32_t count = 0;
@@ -142,6 +163,7 @@ RTMidiBuffer::read (MidiBuffer& dst, samplepos_t start, samplepos_t end, samplec
DEBUG_TRACE (DEBUG::MidiRingBuffer, string_compose ("read event sz %1 @ %2\n", size, unadjusted_time));
memcpy (write_loc, addr, size);
+ tracker.track (addr);
++iter;
++count;