23 #include "JackALSARawMidiInputPort.h"
24 #include "JackMidiUtil.h"
25 #include "JackError.h"
29 JackALSARawMidiInputPort::JackALSARawMidiInputPort(
const char* client_name,
30 snd_rawmidi_info_t *info,
34 JackALSARawMidiPort(client_name, info, index, POLLIN)
38 receive_queue =
new JackALSARawMidiReceiveQueue(rawmidi, max_bytes);
39 std::unique_ptr<JackALSARawMidiReceiveQueue> receive_ptr(receive_queue);
40 thread_queue =
new JackMidiAsyncQueue(max_bytes, max_messages);
41 std::unique_ptr<JackMidiAsyncQueue> thread_ptr(thread_queue);
42 write_queue =
new JackMidiBufferWriteQueue();
43 std::unique_ptr<JackMidiBufferWriteQueue> write_ptr(write_queue);
44 raw_queue =
new JackMidiRawInputWriteQueue(thread_queue, max_bytes,
48 receive_ptr.release();
51 JackALSARawMidiInputPort::~JackALSARawMidiInputPort()
60 JackALSARawMidiInputPort::ProcessJack(JackMidiBuffer *port_buffer,
61 jack_nframes_t frames)
64 bool dequeued =
false;
70 case JackMidiWriteQueue::BUFFER_TOO_SMALL:
71 jack_error(
"JackALSARawMidiInputPort::ProcessJack - The write "
72 "queue couldn't enqueue a %d-byte event. Dropping "
73 "event.", jack_event->
size);
75 case JackMidiWriteQueue::OK:
78 goto trigger_queue_event;
88 return dequeued ? TriggerQueueEvent() : true;
92 JackALSARawMidiInputPort::ProcessPollEvents(jack_nframes_t current_frame)
94 if (GetQueuePollEvent() == -1) {
97 int io_event = GetIOPollEvent();
105 size_t size = alsa_event->
size;
107 bool enough_room = space >= size;
111 JackMidiWriteQueue::OK);
116 JackMidiWriteQueue::OK);
117 alsa_event->
buffer += space;
118 alsa_event->
size -= space;
120 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()