23 #include "JackALSARawMidiInputPort.h"
24 #include "JackMidiUtil.h"
25 #include "JackError.h"
29 JackALSARawMidiInputPort::JackALSARawMidiInputPort(snd_rawmidi_info_t *info,
33 JackALSARawMidiPort(info, index, POLLIN)
37 receive_queue =
new JackALSARawMidiReceiveQueue(rawmidi, max_bytes);
38 std::auto_ptr<JackALSARawMidiReceiveQueue> receive_ptr(receive_queue);
39 thread_queue =
new JackMidiAsyncQueue(max_bytes, max_messages);
40 std::auto_ptr<JackMidiAsyncQueue> thread_ptr(thread_queue);
41 write_queue =
new JackMidiBufferWriteQueue();
42 std::auto_ptr<JackMidiBufferWriteQueue> write_ptr(write_queue);
43 raw_queue =
new JackMidiRawInputWriteQueue(thread_queue, max_bytes,
47 receive_ptr.release();
50 JackALSARawMidiInputPort::~JackALSARawMidiInputPort()
59 JackALSARawMidiInputPort::ProcessJack(JackMidiBuffer *port_buffer,
60 jack_nframes_t frames)
63 bool dequeued =
false;
69 case JackMidiWriteQueue::BUFFER_TOO_SMALL:
70 jack_error(
"JackALSARawMidiInputPort::ProcessJack - The write "
71 "queue couldn't enqueue a %d-byte event. Dropping "
72 "event.", jack_event->
size);
74 case JackMidiWriteQueue::OK:
77 goto trigger_queue_event;
87 return dequeued ? TriggerQueueEvent() : true;
91 JackALSARawMidiInputPort::ProcessPollEvents(jack_nframes_t current_frame)
93 if (GetQueuePollEvent() == -1) {
96 int io_event = GetIOPollEvent();
104 size_t size = alsa_event->
size;
106 bool enough_room = space >= size;
110 JackMidiWriteQueue::OK);
115 JackMidiWriteQueue::OK);
116 alsa_event->
buffer += space;
117 alsa_event->
size -= space;
119 SetIOEventsEnabled(enough_room);
jack_midi_data_t * buffer
jack_midi_event_t * DequeueEvent()
EnqueueResult EnqueueEvent(jack_nframes_t time, size_t size, jack_midi_data_t *buffer)
SERVER_EXPORT void jack_error(const char *fmt,...)
void ResetMidiBuffer(JackMidiBuffer *buffer, jack_nframes_t frames)
virtual jack_midi_event_t * DequeueEvent()