comparison src/audio/SDL_audio.c @ 1562:1d487a3fab41

Fixed bug #18 Reordered the audio thread loop so there's no initial wait.
author Sam Lantinga <slouken@libsdl.org>
date Tue, 21 Mar 2006 06:45:47 +0000
parents c724c4a99759
children 12b6d331d82a
comparison
equal deleted inserted replaced
1561:c724c4a99759 1562:1d487a3fab41
172 } else { 172 } else {
173 silence = audio->spec.silence; 173 silence = audio->spec.silence;
174 stream_len = audio->spec.size; 174 stream_len = audio->spec.size;
175 } 175 }
176 176
177 stream = audio->GetAudioBuf(audio);
178 if ( stream == NULL ) {
179 stream = audio->fake_stream;
180 }
181
182 #if SDL_AUDIO_DRIVER_AHI 177 #if SDL_AUDIO_DRIVER_AHI
183 SDL_mutexV(audio->mixer_lock); 178 SDL_mutexV(audio->mixer_lock);
184 D(bug("Entering audio loop...\n")); 179 D(bug("Entering audio loop...\n"));
185 #endif 180 #endif
186 181
206 #endif 201 #endif
207 202
208 /* Loop, filling the audio buffers */ 203 /* Loop, filling the audio buffers */
209 while ( audio->enabled ) { 204 while ( audio->enabled ) {
210 205
211 /* Wait for new current buffer to finish playing */
212 if ( stream == audio->fake_stream ) {
213 SDL_Delay((audio->spec.samples*1000)/audio->spec.freq);
214 } else {
215 #if SDL_AUDIO_DRIVER_AHI
216 if ( started > 1 )
217 #endif
218 audio->WaitAudio(audio);
219 }
220
221 /* Fill the current buffer with sound */ 206 /* Fill the current buffer with sound */
222 if ( audio->convert.needed ) { 207 if ( audio->convert.needed ) {
223 if ( audio->convert.buf ) { 208 if ( audio->convert.buf ) {
224 stream = audio->convert.buf; 209 stream = audio->convert.buf;
225 } else { 210 } else {
251 } 236 }
252 237
253 /* Ready current buffer for play and change current buffer */ 238 /* Ready current buffer for play and change current buffer */
254 if ( stream != audio->fake_stream ) { 239 if ( stream != audio->fake_stream ) {
255 audio->PlayAudio(audio); 240 audio->PlayAudio(audio);
256 #if SDL_AUDIO_DRIVER_AHI 241 }
257 /* AmigaOS don't have to wait the first time audio is played! */ 242
258 started++; 243 /* Wait for an audio buffer to become available */
259 #endif 244 if ( stream == audio->fake_stream ) {
260 } 245 SDL_Delay((audio->spec.samples*1000)/audio->spec.freq);
261 } 246 } else {
247 audio->WaitAudio(audio);
248 }
249 }
250
262 /* Wait for the audio to drain.. */ 251 /* Wait for the audio to drain.. */
263 if ( audio->WaitDone ) { 252 if ( audio->WaitDone ) {
264 audio->WaitDone(audio); 253 audio->WaitDone(audio);
265 } 254 }
266 255