diff options
author | Sebastian Leonhardt <sebastian.leonhardt@web.de> | 2016-10-01 22:58:50 +0200 |
---|---|---|
committer | Gerrit Rockbox <gerrit@rockbox.org> | 2017-01-06 20:44:25 +0100 |
commit | 5279d60e0afb13b39efdcd21585baa251d0133a6 (patch) | |
tree | f62ad61023b62e1714b4a2f5103312ab49d238f3 /apps | |
parent | 69e9738a1c7bba243eda271f1e22ef8b0b5a1cec (diff) | |
download | rockbox-5279d60e0afb13b39efdcd21585baa251d0133a6.tar.gz rockbox-5279d60e0afb13b39efdcd21585baa251d0133a6.zip |
Midi Player: fix premature stopping of audio buffer playback
Change-Id: I3794e8d8837722442b25e2b48db1b5b3c3c2dc51
Diffstat (limited to 'apps')
-rw-r--r-- | apps/plugins/midi/midiplay.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/apps/plugins/midi/midiplay.c b/apps/plugins/midi/midiplay.c index 6df1578bb3..344efd317e 100644 --- a/apps/plugins/midi/midiplay.c +++ b/apps/plugins/midi/midiplay.c | |||
@@ -323,6 +323,7 @@ long bpm IBSS_ATTR; | |||
323 | int32_t gmbuf[BUF_SIZE*NBUF]; | 323 | int32_t gmbuf[BUF_SIZE*NBUF]; |
324 | static unsigned int samples_in_buf; | 324 | static unsigned int samples_in_buf; |
325 | 325 | ||
326 | bool midi_end = false; | ||
326 | bool quit = false; | 327 | bool quit = false; |
327 | bool swap = false; | 328 | bool swap = false; |
328 | bool lastswap = true; | 329 | bool lastswap = true; |
@@ -341,6 +342,10 @@ static inline void synthbuf(void) | |||
341 | #else | 342 | #else |
342 | outptr = gmbuf; | 343 | outptr = gmbuf; |
343 | #endif | 344 | #endif |
345 | if (midi_end) { | ||
346 | samples_in_buf = 0; | ||
347 | return; | ||
348 | } | ||
344 | 349 | ||
345 | /* synth samples for as many whole ticks as we can fit in the buffer */ | 350 | /* synth samples for as many whole ticks as we can fit in the buffer */ |
346 | for (; i >= number_of_samples; i -= number_of_samples) | 351 | for (; i >= number_of_samples; i -= number_of_samples) |
@@ -353,7 +358,7 @@ static inline void synthbuf(void) | |||
353 | rb->yield(); | 358 | rb->yield(); |
354 | #endif | 359 | #endif |
355 | if (tick() == 0) | 360 | if (tick() == 0) |
356 | quit = true; | 361 | midi_end = true; /* no more midi data to play */ |
357 | } | 362 | } |
358 | 363 | ||
359 | /* how many samples did we write to the buffer? */ | 364 | /* how many samples did we write to the buffer? */ |
@@ -379,6 +384,10 @@ static void get_more(const void** start, size_t* size) | |||
379 | #else | 384 | #else |
380 | *start = gmbuf; | 385 | *start = gmbuf; |
381 | #endif | 386 | #endif |
387 | if (samples_in_buf==0) { | ||
388 | *start = NULL; | ||
389 | quit = true; /* this was the last buffer to play */ | ||
390 | } | ||
382 | } | 391 | } |
383 | 392 | ||
384 | static int midimain(const void * filename) | 393 | static int midimain(const void * filename) |