From e291f3d257360667e12754154acac9ba3fe3316a Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Wed, 15 Aug 2012 00:29:38 +0200
Subject: [PATCH] decoder/fluidsynth: remove throttle (requires libfluidsynth
 1.1)

The libfluidsynth API is now sane, and does not require real-time
decoding.
---
 Makefile.am                             |  3 ---
 NEWS                                    |  2 ++
 configure.ac                            |  2 +-
 src/decoder/fluidsynth_decoder_plugin.c | 18 +-----------------
 4 files changed, 4 insertions(+), 21 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 0077eaf59..89b643530 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1070,7 +1070,6 @@ test_dump_playlist_SOURCES = test/dump_playlist.c \
 	src/audio_check.c src/pcm_buffer.c \
 	src/text_input_stream.c src/fifo_buffer.c \
 	src/cue/cue_parser.c src/cue/cue_parser.h \
-	src/timer.c src/clock.c \
 	src/fd_util.c
 
 if HAVE_FLAC
@@ -1097,7 +1096,6 @@ test_run_decoder_SOURCES = test/run_decoder.c \
 	src/fd_util.c \
 	src/audio_check.c \
 	src/audio_format.c \
-	src/timer.c src/clock.c \
 	$(ARCHIVE_SRC) \
 	$(INPUT_SRC) \
 	$(TAG_SRC) \
@@ -1119,7 +1117,6 @@ test_read_tags_SOURCES = test/read_tags.c \
 	src/uri.c \
 	src/fd_util.c \
 	src/audio_check.c \
-	src/timer.c src/clock.c \
 	$(DECODER_SRC)
 
 if HAVE_ID3TAG
diff --git a/NEWS b/NEWS
index 27817a275..2cb2c04c9 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,8 @@
 ver 0.17.2 (2012/??/??)
 * protocol:
   - fix crash in local file check
+* decoder:
+  - fluidsynth: remove throttle (requires libfluidsynth 1.1)
 * output:
   - httpd: use monotonic clock, avoid hiccups after system clock adjustment
   - httpd: fix throttling bug after resuming playback
diff --git a/configure.ac b/configure.ac
index f433fd08b..8a0f02871 100644
--- a/configure.ac
+++ b/configure.ac
@@ -845,7 +845,7 @@ enable_flac_encoder=$enable_flac
 
 dnl -------------------------------- FluidSynth -------------------------------
 if test x$enable_fluidsynth = xyes; then
-	PKG_CHECK_MODULES(FLUIDSYNTH, [fluidsynth],
+	PKG_CHECK_MODULES(FLUIDSYNTH, [fluidsynth >= 1.1],
 		AC_DEFINE(ENABLE_FLUIDSYNTH, 1, [Define for fluidsynth support]),
 		enable_fluidsynth=no)
 fi
diff --git a/src/decoder/fluidsynth_decoder_plugin.c b/src/decoder/fluidsynth_decoder_plugin.c
index 085f84f14..9e2511d3e 100644
--- a/src/decoder/fluidsynth_decoder_plugin.c
+++ b/src/decoder/fluidsynth_decoder_plugin.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * Copyright (C) 2003-2012 The Music Player Daemon Project
  * http://www.musicpd.org
  *
  * This program is free software; you can redistribute it and/or modify
@@ -28,7 +28,6 @@
 
 #include "config.h"
 #include "decoder_api.h"
-#include "timer.h"
 #include "conf.h"
 
 #include <glib.h>
@@ -102,7 +101,6 @@ fluidsynth_file_decode(struct decoder *decoder, const char *path_fs)
 	fluid_player_t *player;
 	char *path_dup;
 	int ret;
-	struct timer *timer;
 	enum decoder_command cmd;
 
 	soundfont_path =
@@ -170,13 +168,6 @@ fluidsynth_file_decode(struct decoder *decoder, const char *path_fs)
 		return;
 	}
 
-	/* set up a timer for synchronization; fluidsynth always
-	   decodes in real time, which forces us to synchronize */
-	/* XXX is there any way to switch off real-time decoding? */
-
-	timer = timer_new(&audio_format);
-	timer_start(timer);
-
 	/* initialization complete - announce the audio format to the
 	   MPD core */
 
@@ -186,11 +177,6 @@ fluidsynth_file_decode(struct decoder *decoder, const char *path_fs)
 		int16_t buffer[2048];
 		const unsigned max_frames = G_N_ELEMENTS(buffer) / 2;
 
-		/* synchronize with the fluid player */
-
-		timer_add(timer, sizeof(buffer));
-		timer_sync(timer);
-
 		/* read samples from fluidsynth and send them to the
 		   MPD core */
 
@@ -209,8 +195,6 @@ fluidsynth_file_decode(struct decoder *decoder, const char *path_fs)
 
 	/* clean up */
 
-	timer_free(timer);
-
 	fluid_player_stop(player);
 	fluid_player_join(player);