diff options
author | Thomas Brand <tom@trellis.ch> | 2019-01-22 14:18:24 +0100 |
---|---|---|
committer | Thomas Brand <tom@trellis.ch> | 2019-01-22 14:18:24 +0100 |
commit | a4b588bde0fdbd2067b033c97c1cacadc1ca5bba (patch) | |
tree | 7be08ea3589ec20eb21fe1e8d2b48dcb85ec90f7 | |
parent | 03e164cdbb62d83e7a0af1b0750b1c04fd752529 (diff) | |
download | jack2-a4b588bde0fdbd2067b033c97c1cacadc1ca5bba.tar.gz |
Ignore MIDI messages > MSG_BUFFER_SIZE
-rw-r--r-- | example-clients/midi_dump.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/example-clients/midi_dump.c b/example-clients/midi_dump.c index 8e5f0801..4ffbd62f 100644 --- a/example-clients/midi_dump.c +++ b/example-clients/midi_dump.c @@ -19,10 +19,6 @@ #include <sys/mman.h> #endif -#ifndef MAX -#define MAX(a,b) ( (a) < (b) ? (b) : (a) ) -#endif - static jack_port_t* port; static jack_ringbuffer_t *rb = NULL; static pthread_mutex_t msg_thread_lock = PTHREAD_MUTEX_INITIALIZER; @@ -31,10 +27,11 @@ static pthread_cond_t data_ready = PTHREAD_COND_INITIALIZER; static int keeprunning = 1; static uint64_t monotonic_cnt = 0; -#define RBSIZE 100000 +#define RBSIZE 100 +#define MSG_BUFFER_SIZE 4096 typedef struct { - uint8_t buffer[4096]; + uint8_t buffer[MSG_BUFFER_SIZE]; uint32_t size; uint32_t tme_rel; uint64_t tme_mon; @@ -85,14 +82,19 @@ process (jack_nframes_t frames, void* arg) r = jack_midi_event_get (&event, buffer, i); - if (r == 0 && jack_ringbuffer_write_space (rb) >= sizeof(midimsg)) { + if(event.size>MSG_BUFFER_SIZE) { + fprintf(stderr, "Error: MIDI message was too large, skipping event. Max. allowed size: %d bytes\n", MSG_BUFFER_SIZE); + } + else if (r == 0 && jack_ringbuffer_write_space (rb) >= sizeof(midimsg)) { midimsg m; m.tme_mon = monotonic_cnt; m.tme_rel = event.time; m.size = event.size; - memcpy (m.buffer, event.buffer, MAX(sizeof(m.buffer), event.size)); + memcpy (m.buffer, event.buffer, event.size); jack_ringbuffer_write (rb, (void *) &m, sizeof(midimsg)); - + } + else { + fprintf(stderr, "Error: ringbuffer was full, skipping event.\n"); } } @@ -107,6 +109,7 @@ process (jack_nframes_t frames, void* arg) } static void wearedone(int sig) { + fprintf(stderr, "Shutting down\n"); keeprunning = 0; } |