From 7f07c121ea3cf136d6fcfd79100dba8c4e0fb692 Mon Sep 17 00:00:00 2001 From: gewlitys Date: Sun, 27 Oct 2002 18:27:52 +0000 Subject: [PATCH] OpenAL fixes git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@161 8092fc87-c524-0410-9efc-e669fe64eaf9 --- .../libs/sound/openal/decoders/decoder.c | 28 ++++++++++--------- sc2/src/sc2code/libs/sound/openal/stream.c | 11 ++++---- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/sc2/src/sc2code/libs/sound/openal/decoders/decoder.c b/sc2/src/sc2code/libs/sound/openal/decoders/decoder.c index a467252f6..0de933043 100644 --- a/sc2/src/sc2code/libs/sound/openal/decoders/decoder.c +++ b/sc2/src/sc2code/libs/sound/openal/decoders/decoder.c @@ -27,12 +27,12 @@ #endif #include +#include +#include #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; } diff --git a/sc2/src/sc2code/libs/sound/openal/stream.c b/sc2/src/sc2code/libs/sound/openal/stream.c index f0d9947eb..a327cffb0 100644 --- a/sc2/src/sc2code/libs/sound/openal/stream.c +++ b/sc2/src/sc2code/libs/sound/openal/stream.c @@ -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; } } }