diff options
Diffstat (limited to 'src/decoder')
-rw-r--r-- | src/decoder/mikmod_plugin.c | 43 |
1 files changed, 12 insertions, 31 deletions
diff --git a/src/decoder/mikmod_plugin.c b/src/decoder/mikmod_plugin.c index 9b331aa9e..4f79e0ad0 100644 --- a/src/decoder/mikmod_plugin.c +++ b/src/decoder/mikmod_plugin.c @@ -131,38 +131,10 @@ typedef struct _mod_Data { SBYTE audio_buffer[MIKMOD_FRAME_SIZE]; } mod_Data; -static bool -mod_open(mod_Data *data, const char *path) -{ - char *path2; - MODULE *moduleHandle; - - path2 = g_strdup(path); - moduleHandle = Player_Load(path2, 128, 0); - g_free(path2); - - if (moduleHandle == NULL) - return false; - - /* Prevent module from looping forever */ - moduleHandle->loop = 0; - - data->moduleHandle = moduleHandle; - - Player_Start(data->moduleHandle); - - return true; -} - -static void mod_close(mod_Data * data) -{ - Player_Stop(); - Player_Free(data->moduleHandle); -} - static void mod_decode(struct decoder *decoder, const char *path) { + char *path2; mod_Data data; struct audio_format audio_format; float total_time = 0.0; @@ -170,11 +142,18 @@ mod_decode(struct decoder *decoder, const char *path) float secPerByte; enum decoder_command cmd = DECODE_COMMAND_NONE; - if (!mod_open(&data, path)) { + path2 = g_strdup(path); + data.moduleHandle = Player_Load(path2, 128, 0); + g_free(path2); + + if (data.moduleHandle == NULL) { g_warning("failed to open mod: %s\n", path); return; } + /* Prevent module from looping forever */ + data.moduleHandle->loop = 0; + audio_format_init(&audio_format, 44100, 16, 2); assert(audio_format_valid(&audio_format)); @@ -184,6 +163,7 @@ mod_decode(struct decoder *decoder, const char *path) decoder_initialized(decoder, &audio_format, false, 0); + Player_Start(data.moduleHandle); while (cmd == DECODE_COMMAND_NONE && Player_Active()) { ret = VC_WriteBytes(data.audio_buffer, MIKMOD_FRAME_SIZE); total_time += ret * secPerByte; @@ -192,7 +172,8 @@ mod_decode(struct decoder *decoder, const char *path) total_time, 0, NULL); } - mod_close(&data); + Player_Stop(); + Player_Free(data.moduleHandle); } static struct tag *modTagDup(const char *file) |