ardour
|
#include <midi_diskstream.h>
Public Member Functions | |
MidiRingBuffer (size_t size) | |
bool | read_prefix (T *time, Evoral::EventType *type, uint32_t *size) |
bool | read_contents (uint32_t size, uint8_t *buf) |
size_t | read (MidiBuffer &dst, framepos_t start, framepos_t end, framecnt_t offset=0, bool stop_on_overflow_in_destination=false) |
size_t | skip_to (framepos_t start) |
void | dump (std::ostream &dst) |
void | flush (framepos_t start, framepos_t end) |
void | reset_tracker () |
void | resolve_tracker (MidiBuffer &dst, framepos_t) |
void | resolve_tracker (Evoral::EventSink< framepos_t > &dst, framepos_t) |
Public Member Functions inherited from ARDOUR::EventRingBuffer< T > | |
EventRingBuffer (size_t capacity) | |
size_t | capacity () const |
bool | peek (uint8_t *, size_t size) |
uint32_t | write (Ttime, Evoral::EventType type, uint32_t size, const uint8_t *buf) |
bool | read (T *time, Evoral::EventType *type, uint32_t *size, uint8_t *buf) |
Public Member Functions inherited from PBD::RingBufferNPT< uint8_t > | |
RingBufferNPT (size_t sz) | |
virtual | ~RingBufferNPT () |
void | reset () |
void | set (size_t r, size_t w) |
size_t | read (uint8_t *dest, size_t cnt) |
size_t | write (const uint8_t *src, size_t cnt) |
void | get_read_vector (rw_vector *) |
void | get_write_vector (rw_vector *) |
void | decrement_read_ptr (size_t cnt) |
void | increment_read_ptr (size_t cnt) |
void | increment_write_ptr (size_t cnt) |
size_t | write_space () |
size_t | read_space () |
uint8_t * | buffer () |
size_t | get_write_ptr () const |
size_t | get_read_ptr () const |
size_t | bufsize () const |
Public Member Functions inherited from Evoral::EventSink< T > | |
virtual | ~EventSink () |
Private Attributes | |
MidiStateTracker | _tracker |
Additional Inherited Members | |
Protected Attributes inherited from PBD::RingBufferNPT< uint8_t > | |
uint8_t * | buf |
size_t | size |
gint | write_ptr |
gint | read_ptr |
A RingBuffer for (MIDI) events.
This is simply a wrapper around a raw ringbuffer which writes/reads events as flat placked blobs. The buffer looks like this:
[timestamp][type][size][size bytes of raw MIDI][timestamp][type]size
Definition at line 57 of file midi_diskstream.h.
|
inline |
size | Size in bytes. |
Definition at line 46 of file midi_ring_buffer.h.
void ARDOUR::MidiRingBuffer< T >::dump | ( | std::ostream & | dst | ) |
Definition at line 228 of file midi_ring_buffer.cc.
void ARDOUR::MidiRingBuffer< T >::flush | ( | framepos_t | start, |
framepos_t | end | ||
) |
Definition at line 198 of file midi_ring_buffer.cc.
size_t ARDOUR::MidiRingBuffer< T >::read | ( | MidiBuffer & | dst, |
framepos_t | start, | ||
framepos_t | end, | ||
framecnt_t | offset = 0 , |
||
bool | stop_on_overflow_in_dst = false |
||
) |
Read a block of MIDI events from this buffer into a MidiBuffer.
Timestamps of events returned are relative to start (i.e. event with stamp 0 occurred at start), with offset added.
Definition at line 40 of file midi_ring_buffer.cc.
|
inline |
Read the content of an event. This call MUST be immediately preceded by a call to read_prefix (or the returned even will be garbage).
Definition at line 94 of file midi_ring_buffer.h.
|
inline |
Read the time and size of an event. This call MUST be immediately proceeded by a call to read_contents (or the read pointer will be garbage).
Definition at line 71 of file midi_ring_buffer.h.
void ARDOUR::MidiRingBuffer< T >::reset_tracker | ( | ) |
Definition at line 306 of file midi_ring_buffer.cc.
void ARDOUR::MidiRingBuffer< T >::resolve_tracker | ( | MidiBuffer & | dst, |
framepos_t | t | ||
) |
Definition at line 313 of file midi_ring_buffer.cc.
void ARDOUR::MidiRingBuffer< T >::resolve_tracker | ( | Evoral::EventSink< framepos_t > & | dst, |
framepos_t | t | ||
) |
Definition at line 320 of file midi_ring_buffer.cc.
size_t ARDOUR::MidiRingBuffer< T >::skip_to | ( | framepos_t | start | ) |
Definition at line 133 of file midi_ring_buffer.cc.
|
private |
Definition at line 62 of file midi_ring_buffer.h.