Mercurial > sdl-ios-xcode
diff src/audio/alsa/SDL_alsa_audio.c @ 4320:33d306630296 SDL-1.2
Corrected misuse of snd_pcm_writei() in ALSA driver.
Hopefully fixes Bugzilla #650.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Mon, 12 Oct 2009 08:06:40 +0000 |
parents | 464126f4c7db |
children | c9a1de1eda57 |
line wrap: on
line diff
--- a/src/audio/alsa/SDL_alsa_audio.c Sat Oct 10 15:10:06 2009 +0000 +++ b/src/audio/alsa/SDL_alsa_audio.c Mon Oct 12 08:06:40 2009 +0000 @@ -304,17 +304,18 @@ static void ALSA_PlayAudio(_THIS) { - int status; - int sample_len; - signed short *sample_buf; + int status; + snd_pcm_uframes_t frames_left; + const Uint8 *sample_buf = (const Uint8 *) mixbuf; + const int frame_size = ( ((int) this->spec.channels) * + ((int) (this->spec.format & 0xFF)) ); swizzle_alsa_channels(this); - sample_len = this->spec.samples; - sample_buf = (signed short *)mixbuf; + frames_left = ((snd_pcm_uframes_t) this->spec.samples) / this->spec.channels; - while ( sample_len > 0 ) { - status = SDL_NAME(snd_pcm_writei)(pcm_handle, sample_buf, sample_len); + while ( frames_left > 0 ) { + status = SDL_NAME(snd_pcm_writei)(pcm_handle, sample_buf, frames_left); if ( status < 0 ) { if ( status == -EAGAIN ) { SDL_Delay(1); @@ -336,8 +337,8 @@ } continue; } - sample_buf += status * this->spec.channels; - sample_len -= status; + sample_buf += status * frame_size; + frames_left -= status; } }