23 #include "JackALSARawMidiInputPort.h"
24 #include "JackMidiUtil.h"
28 JackALSARawMidiInputPort::JackALSARawMidiInputPort(snd_rawmidi_info_t *info,
32 JackALSARawMidiPort(info, index, POLLIN)
36 receive_queue =
new JackALSARawMidiReceiveQueue(rawmidi, max_bytes);
37 std::auto_ptr<JackALSARawMidiReceiveQueue> receive_ptr(receive_queue);
38 thread_queue =
new JackMidiAsyncQueue(max_bytes, max_messages);
39 std::auto_ptr<JackMidiAsyncQueue> thread_ptr(thread_queue);
40 write_queue =
new JackMidiBufferWriteQueue();
41 std::auto_ptr<JackMidiBufferWriteQueue> write_ptr(write_queue);
42 raw_queue =
new JackMidiRawInputWriteQueue(thread_queue, max_bytes,
46 receive_ptr.release();
49 JackALSARawMidiInputPort::~JackALSARawMidiInputPort()
58 JackALSARawMidiInputPort::ProcessJack(JackMidiBuffer *port_buffer,
59 jack_nframes_t frames)
62 bool dequeued =
false;
68 case JackMidiWriteQueue::BUFFER_TOO_SMALL:
69 jack_error(
"JackALSARawMidiInputPort::ProcessJack - The write "
70 "queue couldn't enqueue a %d-byte event. Dropping "
71 "event.", jack_event->
size);
73 case JackMidiWriteQueue::OK:
76 goto trigger_queue_event;
86 return dequeued ? TriggerQueueEvent() : true;
90 JackALSARawMidiInputPort::ProcessPollEvents(jack_nframes_t current_frame)
92 if (GetQueuePollEvent() == -1) {
95 int io_event = GetIOPollEvent();
103 size_t size = alsa_event->
size;
105 bool enough_room = space >= size;
109 JackMidiWriteQueue::OK);
114 JackMidiWriteQueue::OK);
115 alsa_event->
buffer += space;
116 alsa_event->
size -= space;
118 SetIOEventsEnabled(enough_room);