23 #include "ardour/debug.h"
42 if (this->read_space() == 0) {
49 const size_t prefix_size =
sizeof(T) +
sizeof(
Evoral::EventType) +
sizeof(uint32_t);
51 while (this->read_space() >= prefix_size) {
53 uint8_t peekbuf[prefix_size];
58 this->peek (peekbuf, prefix_size);
60 ev_time = *(
reinterpret_cast<T*
>((uintptr_t)peekbuf));
61 ev_size = *(
reinterpret_cast<uint32_t*
>((uintptr_t)(peekbuf +
sizeof(T) +
sizeof (
Evoral::EventType))));
63 if (this->read_space() < ev_size) {
70 }
else if (ev_time < start) {
83 this->increment_read_ptr (prefix_size);
86 bool r = this->peek (&status,
sizeof(uint8_t));
91 uint8_t* write_loc = dst.
reserve (ev_time, ev_size);
93 if (stop_on_overflow_in_dst) {
97 error <<
"MRB: Unable to reserve space in buffer, event skipped" <<
endmsg;
98 this->increment_read_ptr (ev_size);
103 bool success = read_contents (ev_size, write_loc);
109 for (
size_t i=0; i < ev_size; ++i) {
121 _tracker.track(write_loc);
124 cerr <<
"WARNING: error reading event contents from MIDI ring" << endl;
135 if (this->read_space() == 0) {
142 const size_t prefix_size =
sizeof(T) +
sizeof(
Evoral::EventType) +
sizeof(uint32_t);
144 while (this->read_space() >= prefix_size) {
146 uint8_t peekbuf[prefix_size];
147 this->peek (peekbuf, prefix_size);
149 ev_time = *(
reinterpret_cast<T*
>((uintptr_t)peekbuf));
150 ev_size = *(
reinterpret_cast<uint32_t*
>((uintptr_t)(peekbuf +
sizeof(T) +
sizeof (
Evoral::EventType))));
152 if (ev_time >= start) {
156 if (this->read_space() < ev_size) {
160 this->increment_read_ptr (prefix_size);
163 bool r = this->peek (&status,
sizeof(uint8_t));
181 this->increment_read_ptr (ev_size);
184 uint8_t write_loc[8];
185 bool success = read_contents (ev_size, write_loc);
187 _tracker.track(write_loc);
200 const size_t prefix_size =
sizeof(T) +
sizeof(
Evoral::EventType) +
sizeof(uint32_t);
202 while (this->read_space() >= prefix_size) {
203 uint8_t peekbuf[prefix_size];
208 success = this->peek (peekbuf, prefix_size);
214 ev_time = *(
reinterpret_cast<T*
>((uintptr_t)peekbuf));
216 if (ev_time >= end) {
220 ev_size = *(
reinterpret_cast<uint32_t*
>((uintptr_t)(peekbuf +
sizeof(T) +
sizeof (
Evoral::EventType))));
221 this->increment_read_ptr (prefix_size);
222 this->increment_read_ptr (ev_size);
232 if ((rspace = this->read_space()) == 0) {
233 str <<
"MRB::dump: empty\n";
244 if (vec.len[0] == 0) {
248 str <<
this <<
": Dump size = " << vec.len[0] + vec.len[1]
253 uint8_t *buf =
new uint8_t[vec.len[0] + vec.len[1]];
254 memcpy (buf, vec.
buf[0], vec.len[0]);
257 memcpy (buf+vec.len[1], vec.
buf[1], vec.len[1]);
261 const uint8_t* end = buf + vec.len[0] + vec.len[1];
265 memcpy (&ev_time, data,
sizeof (T));
267 str <<
"\ttime " << ev_time;
270 str <<
"(incomplete)\n ";
274 memcpy (&ev_type, data,
sizeof (ev_type));
275 data +=
sizeof (ev_type);
276 str <<
" type " << ev_type;
279 str <<
"(incomplete)\n";
283 memcpy (&ev_size, data,
sizeof (ev_size));
284 data +=
sizeof (ev_size);
285 str <<
" size " << ev_size;
288 str <<
"(incomplete)\n";
292 for (uint32_t i = 0; i != ev_size && data < end; ++i) {
293 str <<
' ' << hex << (int) data[i] << dec;
315 _tracker.resolve_notes (dst, t);
322 _tracker.resolve_notes(dst, t);
LIBARDOUR_API uint64_t MidiDiskstreamIO
LIBPBD_API Transmitter error
std::ostream & endmsg(std::ostream &ostr)
LIBARDOUR_API PBD::PropertyDescriptor< framepos_t > start
uint8_t * reserve(TimeType time, size_t size)
#define DEBUG_TRACE(bits, str)
LIBPBD_API uint64_t debug_bits
#define DEBUG_STR_APPEND(id, s)
#define DEBUG_STR_DECL(id)
std::string string_compose(const std::string &fmt, const T1 &o1)