Merge branch 'libopenmpt-fixes' into 'master'

Improved libopenmpt loading

See merge request STJr/SRB2Internal!251
This commit is contained in:
Monster Iestyn 2019-07-14 11:03:14 -04:00
commit 6cf82fbb43

View file

@ -111,6 +111,8 @@ static UINT16 current_track;
int mod_err = OPENMPT_ERROR_OK; int mod_err = OPENMPT_ERROR_OK;
static const char *mod_err_str; static const char *mod_err_str;
static UINT16 current_subsong; static UINT16 current_subsong;
size_t probesize;
int result;
#endif #endif
static void var_cleanup(void) static void var_cleanup(void)
@ -1112,6 +1114,36 @@ boolean I_LoadSong(char *data, size_t len)
} }
#endif #endif
#ifdef HAVE_OPENMPT
/*
If the size of the data to be checked is bigger than the recommended size (> 2048)
Let's just set the probe size to the recommended size
Otherwise let's give it the full data size
*/
if (len > openmpt_probe_file_header_get_recommended_size())
probesize = openmpt_probe_file_header_get_recommended_size();
else
probesize = len;
result = openmpt_probe_file_header(OPENMPT_PROBE_FILE_HEADER_FLAGS_DEFAULT, data, probesize, len, NULL, NULL, NULL, NULL, NULL, NULL);
if (result == OPENMPT_PROBE_FILE_HEADER_RESULT_SUCCESS) // We only cared if it succeeded, continue on if not.
{
openmpt_mhandle = openmpt_module_create_from_memory2(data, len, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
if (!openmpt_mhandle) // Failed to create module handle? Show error and return!
{
mod_err = openmpt_module_error_get_last(openmpt_mhandle);
mod_err_str = openmpt_error_string(mod_err);
CONS_Alert(CONS_ERROR, "openmpt_module_create_from_memory2: %s\n", mod_err_str);
return false;
}
else
return true; // All good and we're ready for music playback!
}
#endif
// Let's see if Mixer is able to load this.
rw = SDL_RWFromMem(data, len); rw = SDL_RWFromMem(data, len);
if (rw != NULL) if (rw != NULL)
{ {
@ -1123,40 +1155,6 @@ boolean I_LoadSong(char *data, size_t len)
return false; return false;
} }
#ifdef HAVE_OPENMPT
switch(Mix_GetMusicType(music))
{
case MUS_MODPLUG:
case MUS_MOD:
openmpt_mhandle = openmpt_module_create_from_memory2(data, len, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
if (!openmpt_mhandle)
{
mod_err = openmpt_module_error_get_last(openmpt_mhandle);
mod_err_str = openmpt_error_string(mod_err);
CONS_Alert(CONS_ERROR, "openmpt_module_create_from_memory2: %s\n", mod_err_str);
Mix_FreeMusic(music);
music = NULL;
return false;
}
else
{
Mix_FreeMusic(music);
music = NULL;
return true;
}
break;
case MUS_WAV:
case MUS_MID:
case MUS_OGG:
case MUS_MP3:
case MUS_FLAC:
Mix_HookMusic(NULL, NULL);
break;
default:
break;
}
#endif
// Find the OGG loop point. // Find the OGG loop point.
loop_point = 0.0f; loop_point = 0.0f;
song_length = 0.0f; song_length = 0.0f;