diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2019-10-15 16:57:23 -0600 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2019-11-02 16:32:18 -0600 |
commit | e87e0ec0283674c3e649c1218822fa03c3fc9016 (patch) | |
tree | 79027f00faa4c49231bb81ae275d89fe77f02e05 /libs/ardour/rt_midibuffer.cc | |
parent | 67beff22ceaf2cdcbab92a978e8afc35a9751762 (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.cc | 24 |
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; |