From b6ac249c3c009dc45ba758d2dbe6b2959215959b Mon Sep 17 00:00:00 2001
From: Sebastian Thorarensen <sebth@naju.se>
Date: Fri, 18 Oct 2013 04:12:36 +0200
Subject: decoder/mikmod: Add loop configuration parameter

This patch allows the user to configure the mikmod decoder plugin to loop
modules. It adds a configuration parameter to the mikmod decoder called
"loop" which can be "no" (the old behaviour, default) or "yes" to allow
modules to use backward loops.
---
 NEWS                                |  1 +
 doc/user.xml                        | 10 ++++++++++
 src/decoder/MikmodDecoderPlugin.cxx |  5 +++--
 3 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/NEWS b/NEWS
index fc565d5e4..1b575ddb6 100644
--- a/NEWS
+++ b/NEWS
@@ -17,6 +17,7 @@ ver 0.18 (2012/??/??)
   - flac: support FLAC files inside archives
   - opus: new decoder plugin for the Opus codec
   - vorbis: skip 16 bit quantisation, provide float samples
+  - mikmod: add "loop" configuration parameter
   - mp4ff: obsolete plugin removed
 * encoder:
   - opus: new encoder plugin for the Opus codec
diff --git a/doc/user.xml b/doc/user.xml
index 61d02c162..b3ab8d447 100644
--- a/doc/user.xml
+++ b/doc/user.xml
@@ -976,6 +976,16 @@ systemctl start mpd.socket</programlisting>
               </row>
             </thead>
             <tbody>
+              <row>
+                <entry>
+                  <varname>loop</varname>
+                  <parameter>yes|no</parameter>
+                </entry>
+                <entry>
+                  Allow backward loops in modules.  Default is
+		  <parameter>no</parameter>.
+                </entry>
+              </row>
               <row>
                 <entry>
                   <varname>sample_rate</varname>
diff --git a/src/decoder/MikmodDecoderPlugin.cxx b/src/decoder/MikmodDecoderPlugin.cxx
index fb82eb732..6f2fd039d 100644
--- a/src/decoder/MikmodDecoderPlugin.cxx
+++ b/src/decoder/MikmodDecoderPlugin.cxx
@@ -104,6 +104,7 @@ static MDRIVER drv_mpd = {
 	VC_VoiceRealVolume
 };
 
+static bool mikmod_loop;
 static unsigned mikmod_sample_rate;
 
 static bool
@@ -111,6 +112,7 @@ mikmod_decoder_init(const config_param &param)
 {
 	static char params[] = "";
 
+	mikmod_loop = param.GetBlockValue("loop", false);
 	mikmod_sample_rate = param.GetBlockValue("sample_rate", 44100u);
 	if (!audio_valid_sample_rate(mikmod_sample_rate))
 		FormatFatalError("Invalid sample rate in line %d: %u",
@@ -161,8 +163,7 @@ mikmod_decoder_file_decode(struct decoder *decoder, const char *path_fs)
 		return;
 	}
 
-	/* Prevent module from looping forever */
-	handle->loop = 0;
+	handle->loop = mikmod_loop;
 
 	const AudioFormat audio_format(mikmod_sample_rate, SampleFormat::S16, 2);
 	assert(audio_format.IsValid());
-- 
cgit v1.2.3