From 57d1f68cd6ef3b55fd43462b92dbed91b7c250ac Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 23 Oct 2016 22:25:40 +0200 Subject: Introduce "virtual" async MIDI ports This allows to flush an async MIDI port's ringbuffer at cycle-start, to makes its data available as "input/source" during process(), while collecting data in the background for the next cycle. This facilitates virtual MIDI Ports for eg. Control Surface Pads: output from a surface, input to Ardour channels. --- libs/ardour/async_midi_port.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'libs/ardour/async_midi_port.cc') 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. */ -- cgit v1.2.3