Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Corrected misuse of snd_pcm_writei() in ALSA driver.
Hopefully fixes Bugzilla #650.
- Loading branch information
Showing
with
10 additions
and
9 deletions.
-
+10
−9
src/audio/alsa/SDL_alsa_audio.c
|
@@ -304,17 +304,18 @@ static __inline__ void swizzle_alsa_channels(_THIS) |
|
|
|
|
|
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 @@ static void ALSA_PlayAudio(_THIS) |
|
|
} |
|
|
continue; |
|
|
} |
|
|
sample_buf += status * this->spec.channels; |
|
|
sample_len -= status; |
|
|
sample_buf += status * frame_size; |
|
|
frames_left -= status; |
|
|
} |
|
|
} |
|
|
|
|
|