00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
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