Jack2  1.9.8
JackMidiBufferReadQueue.cpp
1 /*
2 Copyright (C) 2010 Devin Anderson
3 
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as published by
6 the Free Software Foundation; either version 2.1 of the License, or
7 (at your option) any later version.
8 
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU Lesser General Public License for more details.
13 
14 You should have received a copy of the GNU Lesser General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 
18 */
19 
20 #include "JackMidiBufferReadQueue.h"
21 #include "JackMidiUtil.h"
22 
24 
25 JackMidiBufferReadQueue::JackMidiBufferReadQueue()
26 {
27  event_count = 0;
28  index = 0;
29 }
30 
33 {
34  jack_midi_event_t *e = 0;
35  if (index < event_count) {
36  JackMidiEvent *event = &(buffer->events[index]);
37  midi_event.buffer = event->GetData(buffer);
38  midi_event.size = event->size;
39  midi_event.time = last_frame_time + event->time;
40  e = &midi_event;
41  index++;
42  }
43  return e;
44 }
45 
46 void
48 {
49  event_count = 0;
50  index = 0;
51  if (! buffer) {
52  jack_error("JackMidiBufferReadQueue::ResetMidiBuffer - buffer reset "
53  "to NULL");
54  } else if (! buffer->IsValid()) {
55  jack_error("JackMidiBufferReadQueue::ResetMidiBuffer - buffer reset "
56  "to invalid buffer");
57  } else {
58  uint32_t lost_events = buffer->lost_events;
59  if (lost_events) {
60  jack_error("JackMidiBufferReadQueue::ResetMidiBuffer - %d events "
61  "lost during mixdown", lost_events);
62  }
63  this->buffer = buffer;
64  event_count = buffer->event_count;
65  last_frame_time = GetLastFrame();
66  }
67 }