diff options
Diffstat (limited to '')
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | doc/user.xml | 31 | ||||
-rw-r--r-- | src/decoder/ModplugDecoderPlugin.cxx | 17 |
3 files changed, 48 insertions, 1 deletions
@@ -18,6 +18,7 @@ ver 0.18 (2012/??/??) - opus: new decoder plugin for the Opus codec - vorbis: skip 16 bit quantisation, provide float samples - mikmod: add "loop" configuration parameter + - modplug: add "loop_count" 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 b3ab8d447..cebc4cadf 100644 --- a/doc/user.xml +++ b/doc/user.xml @@ -1001,6 +1001,37 @@ systemctl start mpd.socket</programlisting> </section> <section> + <title><varname>modplug</varname></title> + + <para> + Module player based on MODPlug. + </para> + + <informaltable> + <tgroup cols="2"> + <thead> + <row> + <entry>Setting</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row> + <entry> + <varname>loop_count</varname> + </entry> + <entry> + Number of times to loop the module if it uses backward loops. + Default is <parameter>0</parameter> which prevents looping. + <parameter>-1</parameter> loops forever. + </entry> + </row> + </tbody> + </tgroup> + </informaltable> + </section> + + <section> <title><varname>wildmidi</varname></title> <para> diff --git a/src/decoder/ModplugDecoderPlugin.cxx b/src/decoder/ModplugDecoderPlugin.cxx index 685675350..e3779a66a 100644 --- a/src/decoder/ModplugDecoderPlugin.cxx +++ b/src/decoder/ModplugDecoderPlugin.cxx @@ -22,6 +22,7 @@ #include "DecoderAPI.hxx" #include "InputStream.hxx" #include "tag/TagHandler.hxx" +#include "system/FatalError.hxx" #include "util/Domain.hxx" #include "Log.hxx" @@ -38,6 +39,19 @@ static constexpr size_t MODPLUG_PREALLOC_BLOCK = 256 * 1024; static constexpr size_t MODPLUG_READ_BLOCK = 128 * 1024; static constexpr input_stream::offset_type MODPLUG_FILE_LIMIT = 100 * 1024 * 1024; +static int modplug_loop_count; + +static bool +modplug_decoder_init(const config_param ¶m) +{ + modplug_loop_count = param.GetBlockValue("loop_count", 0); + if (modplug_loop_count < -1) + FormatFatalError("Invalid loop count in line %d: %i", + param.line, modplug_loop_count); + + return true; +} + static GByteArray * mod_loadfile(struct decoder *decoder, struct input_stream *is) { @@ -114,6 +128,7 @@ mod_decode(struct decoder *decoder, struct input_stream *is) settings.mChannels = 2; settings.mBits = 16; settings.mFrequency = 44100; + settings.mLoopCount = modplug_loop_count; /* insert more setting changes here */ ModPlug_SetSettings(&settings); @@ -192,7 +207,7 @@ static const char *const mod_suffixes[] = { const struct decoder_plugin modplug_decoder_plugin = { "modplug", - nullptr, + modplug_decoder_init, nullptr, mod_decode, nullptr, |