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 my snd_pcm_writei fix.
Apparently ALSA says "frames" but it means samples...you don't split this into
groups by number of channels.
The adventure continues.
- Loading branch information
Showing
with
7 additions
and
8 deletions.
-
+7
−8
src/audio/alsa/SDL_alsa_audio.c
|
@@ -305,17 +305,16 @@ static __inline__ void swizzle_alsa_channels(_THIS) |
|
|
static void ALSA_PlayAudio(_THIS) |
|
|
{ |
|
|
int status; |
|
|
snd_pcm_uframes_t frames_left; |
|
|
snd_pcm_uframes_t samps_left; |
|
|
const Uint8 *sample_buf = (const Uint8 *) mixbuf; |
|
|
const int frame_size = ( ((int) this->spec.channels) * |
|
|
(((int) (this->spec.format & 0xFF)) / 8) ); |
|
|
const int sample_size = ((int) (this->spec.format & 0xFF)) / 8; |
|
|
|
|
|
swizzle_alsa_channels(this); |
|
|
|
|
|
frames_left = ((snd_pcm_uframes_t) this->spec.samples) / this->spec.channels; |
|
|
samps_left = ((snd_pcm_uframes_t) this->spec.samples); |
|
|
|
|
|
while ( frames_left > 0 ) { |
|
|
status = SDL_NAME(snd_pcm_writei)(pcm_handle, sample_buf, frames_left); |
|
|
while ( samps_left > 0 ) { |
|
|
status = SDL_NAME(snd_pcm_writei)(pcm_handle, sample_buf, samps_left); |
|
|
if ( status < 0 ) { |
|
|
if ( status == -EAGAIN ) { |
|
|
SDL_Delay(1); |
|
@@ -337,8 +336,8 @@ static void ALSA_PlayAudio(_THIS) |
|
|
} |
|
|
continue; |
|
|
} |
|
|
sample_buf += status * frame_size; |
|
|
frames_left -= status; |
|
|
sample_buf += status * sample_size; |
|
|
samps_left -= status; |
|
|
} |
|
|
} |
|
|
|
|
|