diff options
author | Chris Robinson <[email protected]> | 2009-03-13 22:16:01 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2009-03-13 22:16:01 -0700 |
commit | 89ddd7d8e5a3338467c72dce291d8b5531aa6ae2 (patch) | |
tree | 99a3bfc75abdef418b218f10177026c7ebf0566c /Alc/alsa.c | |
parent | 8d0c4ccb3b128348446f67b2e2895e51230d27b5 (diff) |
Don't modify the device struct until playback succesfully starts
Diffstat (limited to 'Alc/alsa.c')
-rw-r--r-- | Alc/alsa.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -320,6 +320,7 @@ static ALCboolean alsa_open_playback(ALCdevice *device, const ALCchar *deviceNam snd_pcm_hw_params_t *p = NULL; snd_pcm_access_t access; unsigned int periods; + unsigned int rate; alsa_data *data; char driver[64]; const char *str; @@ -394,6 +395,7 @@ open_alsa: periods = GetConfigValueInt("alsa", "periods", 0); bufferSizeInFrames = device->UpdateSize; + rate = device->Frequency; str = GetConfigValue("alsa", "mmap", "true"); allowmmap = (strcasecmp(str, "true") == 0 || @@ -415,7 +417,7 @@ open_alsa: /* set periods (implicitly constrains period/buffer parameters) */ (!periods || ok(psnd_pcm_hw_params_set_periods_near(data->pcmHandle, p, &periods, NULL), "set periods near")) && /* set rate (implicitly constrains period/buffer parameters) */ - ok(psnd_pcm_hw_params_set_rate_near(data->pcmHandle, p, &device->Frequency, NULL), "set rate near") && + ok(psnd_pcm_hw_params_set_rate_near(data->pcmHandle, p, &rate, NULL), "set rate near") && /* set buffer size in frame units (implicitly sets period size/bytes/time and buffer time/bytes) */ ok(psnd_pcm_hw_params_set_buffer_size_near(data->pcmHandle, p, &bufferSizeInFrames), "set buffer size near") && /* install and prepare hardware configuration */ @@ -449,8 +451,6 @@ open_alsa: psnd_pcm_hw_params_free(p); - device->UpdateSize = bufferSizeInFrames; - data->size = psnd_pcm_frames_to_bytes(data->pcmHandle, device->UpdateSize); if(access == SND_PCM_ACCESS_RW_INTERLEAVED) { @@ -491,6 +491,9 @@ open_alsa: return ALC_FALSE; } + device->UpdateSize = bufferSizeInFrames; + device->Frequency = rate; + return ALC_TRUE; } |