From b1bbd70f0f956e9829158ee80a42f1bafde67347 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 15 Aug 2012 00:47:10 +0200 Subject: decoder/fluidsynth: stop playback at end of file Use libfluidsynth's new function fluid_player_get_status(). --- NEWS | 1 + src/decoder/fluidsynth_decoder_plugin.c | 9 ++++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index 0dfa92b60..a1aee15b9 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ ver 0.17.2 (2012/??/??) - fix crash in local file check * decoder: - fluidsynth: remove throttle (requires libfluidsynth 1.1) + - fluidsynth: stop playback at end of file - fluidsynth: check MIDI file format while scanning * output: - httpd: use monotonic clock, avoid hiccups after system clock adjustment diff --git a/src/decoder/fluidsynth_decoder_plugin.c b/src/decoder/fluidsynth_decoder_plugin.c index b55c1db5e..a8c148c89 100644 --- a/src/decoder/fluidsynth_decoder_plugin.c +++ b/src/decoder/fluidsynth_decoder_plugin.c @@ -168,7 +168,7 @@ fluidsynth_file_decode(struct decoder *decoder, const char *path_fs) decoder_initialized(decoder, &audio_format, false, -1); - do { + while (fluid_player_get_status(player) == FLUID_PLAYER_PLAYING) { int16_t buffer[2048]; const unsigned max_frames = G_N_ELEMENTS(buffer) / 2; @@ -178,15 +178,14 @@ fluidsynth_file_decode(struct decoder *decoder, const char *path_fs) ret = fluid_synth_write_s16(synth, max_frames, buffer, 0, 2, buffer, 1, 2); - /* XXX how do we see whether the player is done? We - can't access the private attribute - player->status */ if (ret != 0) break; cmd = decoder_data(decoder, NULL, buffer, sizeof(buffer), 0); - } while (cmd == DECODE_COMMAND_NONE); + if (cmd != DECODE_COMMAND_NONE) + break; + } /* clean up */ -- cgit v1.2.3