decoder/gme: add option "accuracy"

This commit is contained in:
Max Kellermann 2015-10-26 16:48:38 +01:00
parent 6269abbcc8
commit 08f77c2b60
3 changed files with 47 additions and 1 deletions

1
NEWS
View File

@ -14,6 +14,7 @@ ver 0.20 (not yet released)
* decoder * decoder
- ffmpeg: support ReplayGain and MixRamp - ffmpeg: support ReplayGain and MixRamp
- ffmpeg: support stream tags - ffmpeg: support stream tags
- gme: add option "accuracy"
- mad: reduce memory usage while scanning tags - mad: reduce memory usage while scanning tags
- mpcdec: read the bit rate - mpcdec: read the bit rate
* playlist * playlist

View File

@ -1749,6 +1749,28 @@ buffer_size: 16384</programlisting>
Video game music file emulator based on <ulink Video game music file emulator based on <ulink
url="https://bitbucket.org/mpyne/game-music-emu/wiki/Home"><application>game-music-emu</application></ulink>. url="https://bitbucket.org/mpyne/game-music-emu/wiki/Home"><application>game-music-emu</application></ulink>.
</para> </para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>Setting</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>
<varname>accuracy</varname>
<parameter>yes|no</parameter>
</entry>
<entry>
Enable more accurate sound emulation.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</section> </section>
<section> <section>

View File

@ -20,6 +20,7 @@
#include "config.h" #include "config.h"
#include "GmeDecoderPlugin.hxx" #include "GmeDecoderPlugin.hxx"
#include "../DecoderAPI.hxx" #include "../DecoderAPI.hxx"
#include "config/Block.cxx"
#include "CheckAudioFormat.hxx" #include "CheckAudioFormat.hxx"
#include "tag/TagHandler.hxx" #include "tag/TagHandler.hxx"
#include "fs/Path.hxx" #include "fs/Path.hxx"
@ -52,6 +53,23 @@ struct GmeContainerPath {
unsigned track; unsigned track;
}; };
#if GME_VERSION >= 0x000600
static int gme_accuracy;
#endif
static bool
gme_plugin_init(gcc_unused const ConfigBlock &block)
{
#if GME_VERSION >= 0x000600
auto accuracy = block.GetBlockParam("accuracy");
gme_accuracy = accuracy != nullptr
? (int)accuracy->GetBoolValue()
: -1;
#endif
return true;
}
gcc_pure gcc_pure
static unsigned static unsigned
ParseSubtuneName(const char *base) ParseSubtuneName(const char *base)
@ -123,6 +141,11 @@ gme_file_decode(Decoder &decoder, Path path_fs)
return; return;
} }
#if GME_VERSION >= 0x000600
if (gme_accuracy >= 0)
gme_enable_accuracy(emu, gme_accuracy);
#endif
gme_info_t *ti; gme_info_t *ti;
gme_err = gme_track_info(emu, &ti, container.track); gme_err = gme_track_info(emu, &ti, container.track);
if (gme_err != nullptr) { if (gme_err != nullptr) {
@ -274,7 +297,7 @@ static const char *const gme_suffixes[] = {
extern const struct DecoderPlugin gme_decoder_plugin; extern const struct DecoderPlugin gme_decoder_plugin;
const struct DecoderPlugin gme_decoder_plugin = { const struct DecoderPlugin gme_decoder_plugin = {
"gme", "gme",
nullptr, gme_plugin_init,
nullptr, nullptr,
nullptr, nullptr,
gme_file_decode, gme_file_decode,