00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "JackMidiBufferReadQueue.h"
00021 #include "JackMidiUtil.h"
00022 #include "JackError.h"
00023
00024 using Jack::JackMidiBufferReadQueue;
00025
00026 JackMidiBufferReadQueue::JackMidiBufferReadQueue()
00027 {
00028 event_count = 0;
00029 index = 0;
00030 }
00031
00032 jack_midi_event_t *
00033 JackMidiBufferReadQueue::DequeueEvent()
00034 {
00035 jack_midi_event_t *e = 0;
00036 if (index < event_count) {
00037 JackMidiEvent *event = &(buffer->events[index]);
00038 midi_event.buffer = event->GetData(buffer);
00039 midi_event.size = event->size;
00040 midi_event.time = last_frame_time + event->time;
00041 e = &midi_event;
00042 index++;
00043 }
00044 return e;
00045 }
00046
00047 void
00048 JackMidiBufferReadQueue::ResetMidiBuffer(JackMidiBuffer *buffer)
00049 {
00050 event_count = 0;
00051 index = 0;
00052 if (! buffer) {
00053 jack_error("JackMidiBufferReadQueue::ResetMidiBuffer - buffer reset "
00054 "to NULL");
00055 } else if (! buffer->IsValid()) {
00056 jack_error("JackMidiBufferReadQueue::ResetMidiBuffer - buffer reset "
00057 "to invalid buffer");
00058 } else {
00059 uint32_t lost_events = buffer->lost_events;
00060 if (lost_events) {
00061 jack_error("JackMidiBufferReadQueue::ResetMidiBuffer - %d events "
00062 "lost during mixdown", lost_events);
00063 }
00064 this->buffer = buffer;
00065 event_count = buffer->event_count;
00066 last_frame_time = GetLastFrame();
00067 }
00068 }