22 #include "JackFFADOMidiOutputPort.h"
23 #include "JackMidiUtil.h"
27 JackFFADOMidiOutputPort::JackFFADOMidiOutputPort(
size_t non_rt_size,
28 size_t max_non_rt_messages,
29 size_t max_rt_messages)
32 read_queue =
new JackMidiBufferReadQueue();
33 std::auto_ptr<JackMidiBufferReadQueue> read_queue_ptr(read_queue);
34 send_queue =
new JackFFADOMidiSendQueue();
35 std::auto_ptr<JackFFADOMidiSendQueue> send_queue_ptr(send_queue);
36 raw_queue =
new JackMidiRawOutputWriteQueue(send_queue, non_rt_size,
39 send_queue_ptr.release();
40 read_queue_ptr.release();
43 JackFFADOMidiOutputPort::~JackFFADOMidiOutputPort()
51 JackFFADOMidiOutputPort::Process(JackMidiBuffer *port_buffer,
52 uint32_t *output_buffer,
53 jack_nframes_t frames)
56 send_queue->ResetOutputBuffer(output_buffer, frames);
57 jack_nframes_t boundary_frame = GetLastFrame() + frames;
63 case JackMidiWriteQueue::BUFFER_FULL:
68 raw_queue->
Process(boundary_frame);
70 case JackMidiWriteQueue::BUFFER_TOO_SMALL:
73 jack_error(
"JackFFADOMidiOutputPort::Process - **BUG** "
74 "JackMidiRawOutputWriteQueue::EnqueueEvent "
75 "returned `BUFFER_FULL`, and then returned "
76 "`BUFFER_TOO_SMALL` after a `Process()` call.");
78 case JackMidiWriteQueue::OK:
83 case JackMidiWriteQueue::BUFFER_TOO_SMALL:
84 jack_error(
"JackFFADOMidiOutputPort::Process - The write queue "
85 "couldn't enqueue a %d-byte event. Dropping event.",
88 case JackMidiWriteQueue::OK:
97 raw_queue->
Process(boundary_frame);