diff options
Diffstat (limited to 'Alc')
-rw-r--r-- | Alc/ALc.c | 3 | ||||
-rw-r--r-- | Alc/hrtf.c | 8 |
2 files changed, 9 insertions, 2 deletions
@@ -1335,8 +1335,7 @@ static ALCboolean UpdateDeviceParams(ALCdevice *device, const ALCint *attrList) if(!device->IsLoopbackDevice && GetConfigValueBool(NULL, "hrtf", AL_FALSE)) device->Flags |= DEVICE_USE_HRTF; - if((device->FmtChans != DevFmtStereo || device->Frequency != 44100) && - (device->Flags&DEVICE_USE_HRTF)) + if((device->Flags&DEVICE_USE_HRTF) && !IsHrtfCompatible(device)) { AL_PRINT("HRTF disabled (format is %uhz %s)\n", device->Frequency, DevFmtChannelsString(device->FmtChans)); device->Flags &= ~DEVICE_USE_HRTF; @@ -27,6 +27,7 @@ #define HRIR_COUNT 828 +static const ALuint sampleRate = 44100; static const ALubyte evCount = 19; static const ALushort evOffset[19] = { 0, 1, 13, 37, 73, 118, 174, 234, 306, 378, 450, 522, 594, 654, 710, 755, 791, 815, 827 }; static const ALubyte azCount[19] = { 1, 12, 24, 36, 45, 56, 60, 72, 72, 72, 72, 72, 60, 56, 45, 36, 24, 12, 1 }; @@ -68,6 +69,13 @@ void GetHrtfCoeffs(ALfloat elevation, ALfloat angle, const ALshort **left, const *right = Hrtf.coeffs[ridx]; } +ALCboolean IsHrtfCompatible(ALCdevice *device) +{ + if(device->FmtChans == DevFmtStereo && device->Frequency == sampleRate) + return ALC_TRUE; + return ALC_FALSE; +} + void InitHrtf(void) { const char *str; |