diff options
author | Chris Robinson <[email protected]> | 2015-05-16 01:46:06 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2015-05-16 02:18:09 -0700 |
commit | 3058205963ee3293341bc7d92061fa18ccae4df8 (patch) | |
tree | 7e85b9134e2bbe35c535346b8aafe932abdc32b2 | |
parent | 80f0b5e736eaf4a19b6a0de8666e055816cba043 (diff) |
Add a method to reset the device
This basically acts as if the app created a new context with the specified
attributes (causing the device to reset with new parameters), then immediately
delete it. Existing contexts remain undisturbed, except for a temporary pause
while the device output is reconfigured.
-rw-r--r-- | Alc/ALc.c | 38 | ||||
-rw-r--r-- | OpenAL32/Include/alMain.h | 4 |
2 files changed, 42 insertions, 0 deletions
@@ -162,6 +162,8 @@ static const ALCfunction alcFunctions[] = { DECL(alcGetInteger64vSOFT), + DECL(alcResetDeviceSOFT), + DECL(alEnable), DECL(alDisable), DECL(alIsEnabled), @@ -3289,6 +3291,42 @@ ALC_API ALCdevice* ALC_APIENTRY alcGetContextsDevice(ALCcontext *Context) } +/* alcResetDeviceSOFT + * + * Resets the given device output, using the specified attribute list. + */ +ALC_API ALCboolean ALC_APIENTRY alcResetDeviceSOFT(ALCdevice *device, const ALCint *attribs) +{ + ALCenum err; + + LockLists(); + if(!(device=VerifyDevice(device)) || device->Type == Capture || !device->Connected) + { + UnlockLists(); + alcSetError(device, ALC_INVALID_DEVICE); + if(device) ALCdevice_DecRef(device); + return ALC_FALSE; + } + + if((err=UpdateDeviceParams(device, attribs)) != ALC_NO_ERROR) + { + UnlockLists(); + alcSetError(device, err); + if(err == ALC_INVALID_DEVICE) + { + V0(device->Backend,lock)(); + aluHandleDisconnect(device); + V0(device->Backend,unlock)(); + } + ALCdevice_DecRef(device); + return ALC_FALSE; + } + UnlockLists(); + ALCdevice_DecRef(device); + + return ALC_TRUE; +} + /* alcOpenDevice * * Opens the named device. diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h index 2b590979..71da2456 100644 --- a/OpenAL32/Include/alMain.h +++ b/OpenAL32/Include/alMain.h @@ -49,6 +49,10 @@ #define ALC_HRTF_REQUIRED_SOFT 0x0003 #define ALC_HRTF_HEADPHONES_DETECTED_SOFT 0x0004 #define ALC_HRTF_UNSUPPORTED_FORMAT_SOFT 0x0005 +typedef ALCboolean (ALC_APIENTRY*LPALCRESETDEVICESOFT)(ALCdevice *device, const ALCint *attribs); +#ifdef AL_ALEXT_PROTOTYPES +ALC_API ALCboolean ALC_APIENTRY alcResetDeviceSOFT(ALCdevice *device, const ALCint *attribs); +#endif #endif #ifndef ALC_SOFT_midi_interface |