aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Alc/backends/sdl2.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/Alc/backends/sdl2.c b/Alc/backends/sdl2.c
index b54fcc4b..391b110d 100644
--- a/Alc/backends/sdl2.c
+++ b/Alc/backends/sdl2.c
@@ -36,9 +36,11 @@ typedef struct ALCsdl2Backend {
SDL_AudioDeviceID deviceID;
ALCboolean quit;
+
ALuint Frequency;
enum DevFmtChannels FmtChans;
enum DevFmtType FmtType;
+ ALuint UpdateSize;
} ALCsdl2Backend;
static void ALCsdl2Backend_Construct(ALCsdl2Backend *self, ALCdevice *device);
@@ -123,11 +125,8 @@ static ALCenum ALCsdl2Backend_open(ALCsdl2Backend *self, const ALCchar *name)
ERR("Could not open device\n");
return ALC_INVALID_VALUE;
}
- if(want.freq != have.freq)
- {
- TRACE("Frequency changed by SDL2\n");
- device->Frequency = have.freq;
- }
+
+ device->Frequency = have.freq;
if(have.channels == 1)
device->FmtChans = DevFmtMono;
else if(have.channels == 2)
@@ -149,12 +148,15 @@ static ALCenum ALCsdl2Backend_open(ALCsdl2Backend *self, const ALCchar *name)
ERR("Unsupported format\n");
return ALC_INVALID_VALUE;
}
+ device->UpdateSize = have.samples;
+ device->NumUpdates = 2; /* SDL always (tries to) use two periods. */
+
self->Frequency = device->Frequency;
self->FmtChans = device->FmtChans;
self->FmtType = device->FmtType;
- if(!name)
- name = defaultDeviceName;
- alstr_copy_cstr(&STATIC_CAST(ALCbackend, self)->mDevice->DeviceName, name);
+ self->UpdateSize = device->UpdateSize;
+
+ alstr_copy_cstr(&device->DeviceName, name ? name : defaultDeviceName);
return ALC_NO_ERROR;
}
@@ -165,6 +167,8 @@ static ALCboolean ALCsdl2Backend_reset(ALCsdl2Backend *self)
device->Frequency = self->Frequency;
device->FmtChans = self->FmtChans;
device->FmtType = self->FmtType;
+ device->UpdateSize = self->UpdateSize;
+ device->NumUpdates = 2;
SetDefaultWFXChannelOrder(device);
return ALC_TRUE;
}