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)
    62     write_queue->ResetMidiBuffer(port_buffer, frames);
    63     bool dequeued = 
false;
    68         switch (write_queue->EnqueueEvent(jack_event, frames)) {
    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;
    80         jack_event = thread_queue->DequeueEvent();
    87     return dequeued ? TriggerQueueEvent() : true;
    91 JackALSARawMidiInputPort::ProcessPollEvents(jack_nframes_t current_frame)
    93     if (GetQueuePollEvent() == -1) {
    96     int io_event = GetIOPollEvent();
   101         alsa_event = receive_queue->DequeueEvent();
   104         size_t size = alsa_event->size;
   105         size_t space = raw_queue->GetAvailableSpace();
   106         bool enough_room = space >= size;
   108             assert(raw_queue->EnqueueEvent(current_frame, size,
   109                                            alsa_event->buffer) ==
   110                    JackMidiWriteQueue::OK);
   113             assert(raw_queue->EnqueueEvent(current_frame, space,
   114                                            alsa_event->buffer) ==
   115                    JackMidiWriteQueue::OK);
   116             alsa_event->buffer += space;
   117             alsa_event->size -= space;
   119         SetIOEventsEnabled(enough_room);
   121     raw_queue->Process();
 
SERVER_EXPORT void jack_error(const char *fmt,...)