22 #include "JackFFADOMidiOutputPort.h"
23 #include "JackMidiUtil.h"
24 #include "JackError.h"
28 JackFFADOMidiOutputPort::JackFFADOMidiOutputPort(
size_t non_rt_size,
29 size_t max_non_rt_messages,
30 size_t max_rt_messages)
33 read_queue =
new JackMidiBufferReadQueue();
34 std::auto_ptr<JackMidiBufferReadQueue> read_queue_ptr(read_queue);
35 send_queue =
new JackFFADOMidiSendQueue();
36 std::auto_ptr<JackFFADOMidiSendQueue> send_queue_ptr(send_queue);
37 raw_queue =
new JackMidiRawOutputWriteQueue(send_queue, non_rt_size,
40 send_queue_ptr.release();
41 read_queue_ptr.release();
44 JackFFADOMidiOutputPort::~JackFFADOMidiOutputPort()
52 JackFFADOMidiOutputPort::Process(JackMidiBuffer *port_buffer,
53 uint32_t *output_buffer,
54 jack_nframes_t frames)
57 send_queue->ResetOutputBuffer(output_buffer, frames);
58 jack_nframes_t boundary_frame = GetLastFrame() + frames;
64 case JackMidiWriteQueue::BUFFER_FULL:
69 raw_queue->
Process(boundary_frame);
71 case JackMidiWriteQueue::BUFFER_TOO_SMALL:
74 jack_error(
"JackFFADOMidiOutputPort::Process - **BUG** "
75 "JackMidiRawOutputWriteQueue::EnqueueEvent "
76 "returned `BUFFER_FULL`, and then returned "
77 "`BUFFER_TOO_SMALL` after a `Process()` call.");
79 case JackMidiWriteQueue::OK:
84 case JackMidiWriteQueue::BUFFER_TOO_SMALL:
85 jack_error(
"JackFFADOMidiOutputPort::Process - The write queue "
86 "couldn't enqueue a %d-byte event. Dropping event.",
89 case JackMidiWriteQueue::OK:
98 raw_queue->
Process(boundary_frame);
jack_midi_event_t * DequeueEvent()
void ResetMidiBuffer(JackMidiBuffer *buffer)
SERVER_EXPORT void jack_error(const char *fmt,...)
EnqueueResult EnqueueEvent(jack_nframes_t time, size_t size, jack_midi_data_t *buffer)
jack_nframes_t Process(jack_nframes_t boundary_frame=0)