aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2012-08-15 00:47:10 +0200
committerMax Kellermann <max@duempel.org>2012-08-15 00:47:10 +0200
commitb1bbd70f0f956e9829158ee80a42f1bafde67347 (patch)
tree6edf07b31915413ad8c38596a94759c52faedd0c
parentc31d11bfe07a6c37d53061dd0ef732d602f98154 (diff)
downloadmpd-b1bbd70f0f956e9829158ee80a42f1bafde67347.tar.gz
mpd-b1bbd70f0f956e9829158ee80a42f1bafde67347.tar.xz
mpd-b1bbd70f0f956e9829158ee80a42f1bafde67347.zip
decoder/fluidsynth: stop playback at end of file
Use libfluidsynth's new function fluid_player_get_status().
-rw-r--r--NEWS1
-rw-r--r--src/decoder/fluidsynth_decoder_plugin.c9
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 */