mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-17 02:01:35 +00:00
Merge branch 'libopenmpt-fixes' into 'master'
Improved libopenmpt loading See merge request STJr/SRB2Internal!251
This commit is contained in:
commit
6cf82fbb43
1 changed files with 32 additions and 34 deletions
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue