diff options
-rw-r--r-- | Alc/ALc.c | 15 | ||||
-rw-r--r-- | OpenAL32/Include/alMain.h | 3 |
2 files changed, 14 insertions, 4 deletions
@@ -1925,9 +1925,12 @@ static ALCenum UpdateDeviceParams(ALCdevice *device, const ALCint *attrList) ALCdevice_Unlock(device); RestoreFPUMode(&oldMode); - if(V0(device->Backend,start)() == ALC_FALSE) - return ALC_INVALID_DEVICE; - device->Flags |= DEVICE_RUNNING; + if(!(device->Flags&DEVICE_PAUSED)) + { + if(V0(device->Backend,start)() == ALC_FALSE) + return ALC_INVALID_DEVICE; + device->Flags |= DEVICE_RUNNING; + } return ALC_NO_ERROR; } @@ -3515,6 +3518,7 @@ ALC_API void ALC_APIENTRY alcDevicePauseSOFT(ALCdevice *device) if((device->Flags&DEVICE_RUNNING)) V0(device->Backend,stop)(); device->Flags &= ~DEVICE_RUNNING; + device->Flags |= DEVICE_PAUSED; UnlockLists(); } if(device) ALCdevice_DecRef(device); @@ -3531,10 +3535,13 @@ ALC_API void ALC_APIENTRY alcDeviceResumeSOFT(ALCdevice *device) else { LockLists(); - if(device->ContextList) + if((device->Flags&DEVICE_PAUSED)) { if(V0(device->Backend,start)() != ALC_FALSE) + { device->Flags |= DEVICE_RUNNING; + device->Flags &= ~DEVICE_PAUSED; + } else { alcSetError(device, ALC_INVALID_DEVICE); diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h index 987254fc..3394eab2 100644 --- a/OpenAL32/Include/alMain.h +++ b/OpenAL32/Include/alMain.h @@ -657,6 +657,9 @@ struct ALCdevice_struct // Stereo sources cover 120-degree angles around +/-90 #define DEVICE_WIDE_STEREO (1<<16) +// Specifies if the DSP is paused at user request +#define DEVICE_PAUSED (1<<30) + // Specifies if the device is currently running #define DEVICE_RUNNING (1<<31) |