00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __JackMidiAsyncQueue__
00021 #define __JackMidiAsyncQueue__
00022
00023 #include "JackMidiPort.h"
00024 #include "JackMidiReadQueue.h"
00025 #include "JackMidiWriteQueue.h"
00026 #include "ringbuffer.h"
00027
00028 namespace Jack {
00029
00040 class SERVER_EXPORT JackMidiAsyncQueue:
00041 public JackMidiReadQueue, public JackMidiWriteQueue {
00042
00043 private:
00044
00045 static const size_t INFO_SIZE =
00046 sizeof(jack_nframes_t) + sizeof(size_t);
00047
00048 jack_ringbuffer_t *byte_ring;
00049 jack_midi_data_t *data_buffer;
00050 jack_midi_event_t dequeue_event;
00051 jack_ringbuffer_t *info_ring;
00052 size_t max_bytes;
00053
00054 public:
00055
00056 using JackMidiWriteQueue::EnqueueEvent;
00057
00064 JackMidiAsyncQueue(size_t max_bytes=4096, size_t max_messages=1024);
00065
00066 virtual
00067 ~JackMidiAsyncQueue();
00068
00074 virtual jack_midi_event_t *
00075 DequeueEvent();
00076
00083 virtual EnqueueResult
00084 EnqueueEvent(jack_nframes_t time, size_t size,
00085 jack_midi_data_t *buffer);
00086
00091 size_t
00092 GetAvailableSpace();
00093
00094 };
00095
00096 }
00097
00098 #endif