mirror of
https://github.com/DrBeef/ioq3quest.git
synced 2024-11-10 23:02:01 +00:00
bug 2747
* open music stream in S_AL_StartBackgroundTrack() instead of relying on S_AL_MusicProcess() to open it. This allows S_AL_MusicProcess() to return early when called whenever there is no open music stream to prevent a segfault.
This commit is contained in:
parent
fe35a8eef8
commit
0141a4b4b0
1 changed files with 10 additions and 13 deletions
|
@ -1369,6 +1369,9 @@ void S_AL_MusicProcess(ALuint b)
|
||||||
int l;
|
int l;
|
||||||
ALuint format;
|
ALuint format;
|
||||||
|
|
||||||
|
if(!mus_stream)
|
||||||
|
return;
|
||||||
|
|
||||||
l = S_CodecReadStream(mus_stream, MUSIC_BUFFER_SIZE, decode_buffer);
|
l = S_CodecReadStream(mus_stream, MUSIC_BUFFER_SIZE, decode_buffer);
|
||||||
|
|
||||||
// Run out data to read, start at the beginning again
|
// Run out data to read, start at the beginning again
|
||||||
|
@ -1443,6 +1446,13 @@ void S_AL_StartBackgroundTrack( const char *intro, const char *loop )
|
||||||
if(musicSourceHandle == -1)
|
if(musicSourceHandle == -1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
mus_stream = S_CodecOpenStream(s_backgroundLoop);
|
||||||
|
if(!mus_stream)
|
||||||
|
{
|
||||||
|
S_AL_MusicSourceFree();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Generate the musicBuffers
|
// Generate the musicBuffers
|
||||||
qalGenBuffers(NUM_MUSIC_BUFFERS, musicBuffers);
|
qalGenBuffers(NUM_MUSIC_BUFFERS, musicBuffers);
|
||||||
|
|
||||||
|
@ -1450,19 +1460,6 @@ void S_AL_StartBackgroundTrack( const char *intro, const char *loop )
|
||||||
for(i = 0; i < NUM_MUSIC_BUFFERS; i++)
|
for(i = 0; i < NUM_MUSIC_BUFFERS; i++)
|
||||||
{
|
{
|
||||||
S_AL_MusicProcess(musicBuffers[i]);
|
S_AL_MusicProcess(musicBuffers[i]);
|
||||||
|
|
||||||
// check whether our stream still exists.
|
|
||||||
if(!mus_stream)
|
|
||||||
{
|
|
||||||
// there was an error in reading which resulted in a
|
|
||||||
// closed stream. We must bail out or we'll crash.
|
|
||||||
|
|
||||||
// deallocate everything we allocated so far:
|
|
||||||
qalDeleteBuffers(NUM_MUSIC_BUFFERS, musicBuffers);
|
|
||||||
S_AL_MusicSourceFree();
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qalSourceQueueBuffers(musicSource, NUM_MUSIC_BUFFERS, musicBuffers);
|
qalSourceQueueBuffers(musicSource, NUM_MUSIC_BUFFERS, musicBuffers);
|
||||||
|
|
Loading…
Reference in a new issue