aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/panning.c
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2017-03-11 06:20:04 -0800
committerChris Robinson <[email protected]>2017-03-11 06:20:04 -0800
commit98e8f941b773df0b591e7c6c6c0e3b5096a9b4f2 (patch)
treed09869e6f5e9f049159d26f0cd43d94c770c937a /Alc/panning.c
parent6b4b00e4625139157996bcf2161ec8688a4b11e8 (diff)
Allocate as many channels for DirectHrtfState as needed
Diffstat (limited to 'Alc/panning.c')
-rw-r--r--Alc/panning.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/Alc/panning.c b/Alc/panning.c
index 728001c2..0ff58c3a 100644
--- a/Alc/panning.c
+++ b/Alc/panning.c
@@ -927,11 +927,14 @@ static void InitHrtfPanning(ALCdevice *device, bool hoa_mode)
};
const ALfloat (*AmbiMatrix)[2][MAX_AMBI_COEFFS] = hoa_mode ? AmbiMatrixHOA : AmbiMatrixFOA;
ALsizei count = hoa_mode ? 9 : 4;
+ size_t sizeof_hrtfstate;
ALsizei i;
- static_assert(9 <= COUNTOF(device->Hrtf->Coeffs), "ALCdevice::Hrtf.Values/Coeffs size is too small");
static_assert(COUNTOF(AmbiPoints) <= HRTF_AMBI_MAX_CHANNELS, "HRTF_AMBI_MAX_CHANNELS is too small");
+ sizeof_hrtfstate = offsetof(DirectHrtfState, Chan[count]);
+ device->Hrtf = al_calloc(16, sizeof_hrtfstate);
+
for(i = 0;i < count;i++)
{
device->Dry.Ambi.Map[i].Scale = 1.0f;
@@ -962,9 +965,8 @@ static void InitHrtfPanning(ALCdevice *device, bool hoa_mode)
device->RealOut.NumChannels = ChannelsFromDevFmt(device->FmtChans);
- memset(device->Hrtf->Coeffs, 0, sizeof(device->Hrtf->Coeffs));
device->Hrtf->IrSize = BuildBFormatHrtf(device->HrtfHandle,
- device->Hrtf->Coeffs, device->Dry.NumChannels,
+ device->Hrtf, device->Dry.NumChannels,
AmbiPoints, AmbiMatrix, COUNTOF(AmbiPoints)
);
@@ -1196,7 +1198,6 @@ void aluInitRenderer(ALCdevice *device, ALint hrtf_id, enum HrtfRequestMode hrtf
device->AmbiUp = ambiup_alloc();
hoa_mode = true;
}
- device->Hrtf = al_calloc(16, sizeof(device->Hrtf[0]));
TRACE("%s HRTF rendering enabled, using \"%s\"\n",
((device->Render_Mode == HrtfRender) ? "Full" : "Basic"),