Jack2  1.9.10
JackMidiRawOutputWriteQueue.h
00001 /*
00002 Copyright (C) 2010 Devin Anderson
00003 
00004 This program is free software; you can redistribute it and/or modify
00005 it under the terms of the GNU Lesser General Public License as published by
00006 the Free Software Foundation; either version 2.1 of the License, or
00007 (at your option) any later version.
00008 
00009 This program is distributed in the hope that it will be useful,
00010 but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 GNU Lesser General Public License for more details.
00013 
00014 You should have received a copy of the GNU Lesser General Public License
00015 along with this program; if not, write to the Free Software
00016 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00017 
00018 */
00019 
00020 #ifndef __JackMidiRawOutputWriteQueue__
00021 #define __JackMidiRawOutputWriteQueue__
00022 
00023 #include "JackMidiAsyncQueue.h"
00024 #include "JackMidiSendQueue.h"
00025 
00026 namespace Jack {
00027 
00046     class SERVER_EXPORT JackMidiRawOutputWriteQueue:
00047         public JackMidiWriteQueue {
00048 
00049     private:
00050 
00051         jack_midi_event_t *non_rt_event;
00052         jack_nframes_t non_rt_event_time;
00053         JackMidiAsyncQueue *non_rt_queue;
00054         jack_midi_event_t *rt_event;
00055         jack_nframes_t rt_event_time;
00056         JackMidiAsyncQueue *rt_queue;
00057         jack_midi_data_t running_status;
00058         JackMidiSendQueue *send_queue;
00059 
00060         void
00061         DequeueNonRealtimeEvent();
00062 
00063         void
00064         DequeueRealtimeEvent();
00065 
00066         bool
00067         SendByte(jack_nframes_t time, jack_midi_data_t byte);
00068 
00069         bool
00070         SendNonRTBytes(jack_nframes_t boundary_frame);
00071 
00072     protected:
00073 
00080         virtual void
00081         HandleWriteQueueBug(jack_nframes_t time, jack_midi_data_t byte);
00082 
00083     public:
00084 
00085         using JackMidiWriteQueue::EnqueueEvent;
00086 
00098         JackMidiRawOutputWriteQueue(JackMidiSendQueue *send_queue,
00099                                     size_t non_rt_size=4096,
00100                                     size_t max_non_rt_messages=1024,
00101                                     size_t max_rt_messages=128);
00102 
00103         ~JackMidiRawOutputWriteQueue();
00104 
00105         EnqueueResult
00106         EnqueueEvent(jack_nframes_t time, size_t size,
00107                      jack_midi_data_t *buffer);
00108 
00132         jack_nframes_t
00133         Process(jack_nframes_t boundary_frame=0);
00134 
00135     };
00136 
00137 }
00138 
00139 #endif