projects
/
ardour.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
NO-OP document Evoral::ControlList
[ardour.git]
/
libs
/
evoral
/
evoral
/
midi_util.h
diff --git
a/libs/evoral/evoral/midi_util.h
b/libs/evoral/evoral/midi_util.h
index c30aa861ff7603e2eb50f6ffe637beda437baeb6..2ad5b3f3288ad8b6f23d25432b54d88b33bf091a 100644
(file)
--- a/
libs/evoral/evoral/midi_util.h
+++ b/
libs/evoral/evoral/midi_util.h
@@
-19,11
+19,14
@@
#ifndef EVORAL_MIDI_UTIL_H
#define EVORAL_MIDI_UTIL_H
#ifndef EVORAL_MIDI_UTIL_H
#define EVORAL_MIDI_UTIL_H
+#include <iostream>
+
#include <stdint.h>
#include <stdint.h>
-#include <stdbool.h>
#include <string>
#include <sys/types.h>
#include <assert.h>
#include <string>
#include <sys/types.h>
#include <assert.h>
+
+#include "evoral/visibility.h"
#include "evoral/midi_events.h"
namespace Evoral {
#include "evoral/midi_events.h"
namespace Evoral {
@@
-66,9
+69,11
@@
midi_event_size(uint8_t status)
return 1;
case MIDI_CMD_COMMON_SYSEX:
return 1;
case MIDI_CMD_COMMON_SYSEX:
+ std::cerr << "event size called for sysex\n";
return -1;
}
return -1;
}
+ std::cerr << "event size called for unknown status byte " << std::hex << (int) status << "\n";
return -1;
}
return -1;
}
@@
-88,8
+93,11
@@
midi_event_size(const uint8_t* buffer)
// see http://www.midi.org/techspecs/midimessages.php
if (status == MIDI_CMD_COMMON_SYSEX) {
int end;
// see http://www.midi.org/techspecs/midimessages.php
if (status == MIDI_CMD_COMMON_SYSEX) {
int end;
+
for (end = 1; buffer[end] != MIDI_CMD_COMMON_SYSEX_END; end++) {
for (end = 1; buffer[end] != MIDI_CMD_COMMON_SYSEX_END; end++) {
- assert((buffer[end] & 0x80) == 0);
+ if ((buffer[end] & 0x80) != 0) {
+ return -1;
+ }
}
assert(buffer[end] == MIDI_CMD_COMMON_SYSEX_END);
return end + 1;
}
assert(buffer[end] == MIDI_CMD_COMMON_SYSEX_END);
return end + 1;
@@
-112,10
+120,20
@@
midi_event_is_valid(const uint8_t* buffer, size_t len)
if (size < 0 || (size_t)size != len) {
return false;
}
if (size < 0 || (size_t)size != len) {
return false;
}
+ if (status < 0xf0) {
+ /* Channel messages: all start with status byte followed by
+ * non status bytes.
+ */
+ for (size_t i = 1; i < len; ++i) {
+ if ((buffer[i] & 0x80) != 0) {
+ return false; // Non-status byte has MSb set
+ }
+ }
+ }
return true;
}
return true;
}
-std::string midi_note_name (uint8_t noteval);
+
LIBEVORAL_API
std::string midi_note_name (uint8_t noteval);
} // namespace Evoral
} // namespace Evoral