diff options
-rw-r--r-- | libs/ardour/ardour/async_midi_port.h | 5 | ||||
-rw-r--r-- | libs/ardour/async_midi_port.cc | 6 |
2 files changed, 9 insertions, 2 deletions
diff --git a/libs/ardour/ardour/async_midi_port.h b/libs/ardour/ardour/async_midi_port.h index 46d5f94a91..4e578b5ed1 100644 --- a/libs/ardour/ardour/async_midi_port.h +++ b/libs/ardour/ardour/async_midi_port.h @@ -47,8 +47,10 @@ class LIBARDOUR_API AsyncMIDIPort : public ARDOUR::MidiPort, public MIDI::Port { AsyncMIDIPort (std::string const &, PortFlags); ~AsyncMIDIPort (); - /* called from an RT context */ + bool flush_at_cycle_start () const { return _flush_at_cycle_start; } + void set_flush_at_cycle_start (bool en) { _flush_at_cycle_start = en; } + /* called from an RT context */ void cycle_start (pframes_t nframes); void cycle_end (pframes_t nframes); @@ -79,6 +81,7 @@ class LIBARDOUR_API AsyncMIDIPort : public ARDOUR::MidiPort, public MIDI::Port { private: bool _currently_in_cycle; MIDI::timestamp_t _last_write_timestamp; + bool _flush_at_cycle_start; bool have_timer; boost::function<framecnt_t (void)> timer; RingBuffer< Evoral::Event<double> > output_fifo; diff --git a/libs/ardour/async_midi_port.cc b/libs/ardour/async_midi_port.cc index eee585fd96..388aaf1935 100644 --- a/libs/ardour/async_midi_port.cc +++ b/libs/ardour/async_midi_port.cc @@ -46,6 +46,7 @@ AsyncMIDIPort::AsyncMIDIPort (string const & name, PortFlags flags) , MIDI::Port (name, MIDI::Port::Flags (0)) , _currently_in_cycle (false) , _last_write_timestamp (0) + , _flush_at_cycle_start (false) , have_timer (false) , output_fifo (2048) , input_fifo (1024) @@ -119,6 +120,9 @@ AsyncMIDIPort::cycle_start (MIDI::pframes_t nframes) if (ARDOUR::Port::sends_output()) { flush_output_fifo (nframes); + if (_flush_at_cycle_start) { + flush_buffers (nframes); + } } /* copy incoming data from the port buffer into the input FIFO @@ -152,7 +156,7 @@ AsyncMIDIPort::cycle_start (MIDI::pframes_t nframes) void AsyncMIDIPort::cycle_end (MIDI::pframes_t nframes) { - if (ARDOUR::Port::sends_output()) { + if (ARDOUR::Port::sends_output() && !_flush_at_cycle_start) { /* move any additional data from output FIFO into the port buffer. */ |