OpenAL fixes

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@161 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
gewlitys
2002-10-27 18:27:52 +00:00
parent bd8feed538
commit 7f07c121ea
2 changed files with 20 additions and 19 deletions
@@ -27,12 +27,12 @@
#endif
#include <stdio.h>
#include <vorbis/codec.h>
#include <vorbis/vorbisfile.h>
#include "decoder.h"
#include "wav.h"
#include "libs/sound/sound_common.h"
#include "mikmod/mikmod.h"
#include "vorbis/codec.h"
#include "vorbis/vorbisfile.h"
MIKMODAPI extern struct MDRIVER drv_openal;
@@ -225,7 +225,7 @@ TFB_SoundDecoder* SoundDecoder_Load (char *filename, ALuint buffer_size)
vinfo = ov_info (vf, -1);
if (!vinfo)
{
fprintf (stderr, "SoundDecoder_Load(): failed to retrieve ogg bitstream info\n");
fprintf (stderr, "SoundDecoder_Load(): failed to retrieve ogg bitstream info for %s\n", filename);
ov_clear (vf);
free (vf);
return NULL;
@@ -276,13 +276,13 @@ ALuint SoundDecoder_Decode (TFB_SoundDecoder *decoder)
{
if (decoder->looping)
{
//fprintf (stderr, "SoundDecoder_Decode(): looping %s\n", decoder->filename);
fprintf (stderr, "SoundDecoder_Decode(): looping %s\n", decoder->filename);
Player_SetPosition (0);
Player_Start (mod);
}
else
{
//fprintf (stderr, "SoundDecoder_Decode(): eof for %s\n", decoder->filename);
fprintf (stderr, "SoundDecoder_Decode(): eof for %s\n", decoder->filename);
decoder->error = SOUNDDECODER_EOF;
return 0;
}
@@ -312,19 +312,20 @@ ALuint SoundDecoder_Decode (TFB_SoundDecoder *decoder)
{
if (decoder->looping)
{
if (ov_raw_seek (vf, 0) != 0)
int err;
if ((err = ov_raw_seek (vf, 0)) != 0)
{
fprintf (stderr, "SoundDecoder_Decode(): tried to loop %s but couldn't rewind\n", decoder->filename);
fprintf (stderr, "SoundDecoder_Decode(): tried to loop %s but couldn't rewind, error code %d\n", decoder->filename, err);
}
else
{
//fprintf (stderr, "SoundDecoder_Decode(): looping %s\n", decoder->filename);
fprintf (stderr, "SoundDecoder_Decode(): looping %s\n", decoder->filename);
count++;
continue;
}
}
//fprintf (stderr, "SoundDecoder_Decode(): eof for %s\n", decoder->filename);
fprintf (stderr, "SoundDecoder_Decode(): eof for %s\n", decoder->filename);
decoder->error = SOUNDDECODER_EOF;
return decoded_bytes;
}
@@ -402,19 +403,20 @@ void SoundDecoder_Rewind (TFB_SoundDecoder *decoder)
MODULE *mod = (MODULE *)decoder->data;
Player_Start (mod);
Player_SetPosition (0);
//fprintf (stderr, "SoundDecoder_Rewind(): rewinded %s\n", decoder->filename);
fprintf (stderr, "SoundDecoder_Rewind(): rewinded %s\n", decoder->filename);
decoder->error = SOUNDDECODER_OK;
return;
}
case SOUNDDECODER_OGG:
{
int err;
OggVorbis_File *vf = (OggVorbis_File *) decoder->data;
if (ov_raw_seek (vf, 0) != 0)
if ((err = ov_raw_seek (vf, 0)) != 0)
{
fprintf (stderr, "SoundDecoder_Rewind(): couldn't rewind %s\n", decoder->filename);
fprintf (stderr, "SoundDecoder_Rewind(): couldn't rewind %s, error code %d\n", decoder->filename, err);
break;
}
//fprintf (stderr, "SoundDecoder_Rewind(): rewinded %s\n", decoder->filename);
fprintf (stderr, "SoundDecoder_Rewind(): rewinded %s\n", decoder->filename);
decoder->error = SOUNDDECODER_OK;
return;
}
+5 -6
View File
@@ -119,7 +119,6 @@ StreamDecoderTaskFunc (void *data)
{
ALuint processed, queued;
ALint state;
ALboolean finished = AL_FALSE;
ALboolean do_speech_advancetrack = AL_FALSE;
LockMutex (soundSource[i].stream_mutex);
@@ -134,13 +133,16 @@ StreamDecoderTaskFunc (void *data)
}
alGetSourcei (soundSource[i].handle, AL_BUFFERS_PROCESSED, &processed);
alGetSourcei (soundSource[i].handle, AL_BUFFERS_QUEUED, &queued);
if (processed == 0)
{
alGetSourcei (soundSource[i].handle, AL_SOURCE_STATE, &state);
if (state != AL_PLAYING)
{
if (soundSource[i].sample->decoder->error == SOUNDDECODER_EOF)
if (queued == 0 && soundSource[i].sample->decoder->error == SOUNDDECODER_EOF)
{
fprintf (stderr, "StreamDecoderTaskFunc(): finished playing %s, source %d\n", soundSource[i].sample->decoder->filename, i);
soundSource[i].stream_should_be_playing = FALSE;
if (i == SPEECH_SOURCE && speech_advancetrack)
{
@@ -155,10 +157,9 @@ StreamDecoderTaskFunc (void *data)
}
}
alGetSourcei (soundSource[i].handle, AL_BUFFERS_QUEUED, &queued);
//fprintf (stderr, "StreamDecoderTaskFunc(): source %d, processed %d queued %d\n", i, processed, queued);
while (processed && !finished)
while (processed)
{
ALenum error;
ALuint buffer;
@@ -205,7 +206,6 @@ StreamDecoderTaskFunc (void *data)
{
fprintf (stderr, "StreamDecoderTaskFunc(): OpenAL error after alBufferData: %x, file %s, source %d, decoded_bytes %d\n",
error, soundSource[i].sample->decoder->filename, i, decoded_bytes);
finished = AL_TRUE;
}
else
{
@@ -215,7 +215,6 @@ StreamDecoderTaskFunc (void *data)
{
fprintf (stderr, "StreamDecoderTaskFunc(): OpenAL error after alSourceQueueBuffers: %x, file %s, source %d, decoded_bytes %d\n",
error, i, soundSource[i].sample->decoder->filename, decoded_bytes);
finished = AL_TRUE;
}
}
}