diff options
author | Chris Robinson <[email protected]> | 2020-12-11 15:08:50 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2020-12-11 15:08:50 -0800 |
commit | 1bb7f575f056f33d0957fe864cd62072982fc66e (patch) | |
tree | 2c775560b5dfd13b8cb41dfb5fd7f6e676efffce /alc/panning.cpp | |
parent | bd08b9a5b52f4f6f056d428399f92df92f82c00a (diff) |
Don't modify the IR size of loaded HRTFs
Diffstat (limited to 'alc/panning.cpp')
-rw-r--r-- | alc/panning.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/alc/panning.cpp b/alc/panning.cpp index 24a303e5..c8db28c2 100644 --- a/alc/panning.cpp +++ b/alc/panning.cpp @@ -823,7 +823,7 @@ void InitHrtfPanning(ALCdevice *device) HrtfStore *Hrtf{device->mHrtf.get()}; auto hrtfstate = DirectHrtfState::Create(count); - hrtfstate->build(Hrtf, AmbiPoints, AmbiMatrix, AmbiOrderHFGain); + hrtfstate->build(Hrtf, device->mIrSize, AmbiPoints, AmbiMatrix, AmbiOrderHFGain); device->mHrtfState = std::move(hrtfstate); InitNearFieldCtrl(device, Hrtf->field[0].distance, ambi_order, true); @@ -849,11 +849,14 @@ void InitUhjPanning(ALCdevice *device) void aluInitRenderer(ALCdevice *device, int hrtf_id, HrtfRequestMode hrtf_appreq, HrtfRequestMode hrtf_userreq) { + const char *devname{device->DeviceName.c_str()}; + /* Hold the HRTF the device last used, in case it's used again. */ HrtfStorePtr old_hrtf{std::move(device->mHrtf)}; device->mHrtfState = nullptr; device->mHrtf = nullptr; + device->mIrSize = 0; device->HrtfName.clear(); device->mRenderMode = RenderMode::Normal; @@ -878,7 +881,6 @@ void aluInitRenderer(ALCdevice *device, int hrtf_id, HrtfRequestMode hrtf_appreq break; } - const char *devname{device->DeviceName.c_str()}; ALuint speakermap[MAX_OUTPUT_CHANNELS]; AmbDecConf *pconf{nullptr}; AmbDecConf conf{}; @@ -960,9 +962,8 @@ void aluInitRenderer(ALCdevice *device, int hrtf_id, HrtfRequestMode hrtf_appreq if(hrtf_id >= 0 && static_cast<ALuint>(hrtf_id) < device->HrtfList.size()) { - const char *devname{device->DeviceName.c_str()}; const std::string &hrtfname = device->HrtfList[static_cast<ALuint>(hrtf_id)]; - if(HrtfStorePtr hrtf{GetLoadedHrtf(hrtfname, devname, device->Frequency)}) + if(HrtfStorePtr hrtf{GetLoadedHrtf(hrtfname, device->Frequency)}) { device->mHrtf = std::move(hrtf); device->HrtfName = hrtfname; @@ -971,10 +972,9 @@ void aluInitRenderer(ALCdevice *device, int hrtf_id, HrtfRequestMode hrtf_appreq if(!device->mHrtf) { - const char *devname{device->DeviceName.c_str()}; for(const auto &hrtfname : device->HrtfList) { - if(HrtfStorePtr hrtf{GetLoadedHrtf(hrtfname, devname, device->Frequency)}) + if(HrtfStorePtr hrtf{GetLoadedHrtf(hrtfname, device->Frequency)}) { device->mHrtf = std::move(hrtf); device->HrtfName = hrtfname; @@ -987,6 +987,14 @@ void aluInitRenderer(ALCdevice *device, int hrtf_id, HrtfRequestMode hrtf_appreq { old_hrtf = nullptr; + HrtfStore *hrtf{device->mHrtf.get()}; + device->mIrSize = hrtf->irSize; + if(auto hrtfsizeopt = ConfigValueUInt(devname, nullptr, "hrtf-size")) + { + if(*hrtfsizeopt > 0 && *hrtfsizeopt < device->mIrSize) + device->mIrSize = maxu(*hrtfsizeopt, MIN_IR_LENGTH); + } + InitHrtfPanning(device); device->PostProcess = &ALCdevice::ProcessHrtf; return; |