From aab4f853834e1ec7cef4c73f09442233f9677002 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 3 Jun 2011 03:10:16 -0700 Subject: Change HRTF table user input format --- Alc/hrtf.c | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) (limited to 'Alc/hrtf.c') diff --git a/Alc/hrtf.c b/Alc/hrtf.c index 7a2e30cb..b33a7a9a 100644 --- a/Alc/hrtf.c +++ b/Alc/hrtf.c @@ -75,49 +75,49 @@ void InitHrtf(void) str = GetConfigValue(NULL, "hrtf_tables", ""); if(str[0] != '\0') + { f = fopen(str, "rb"); + if(f == NULL) + AL_PRINT("Could not open %s\n", str); + } if(f != NULL) { const ALubyte maxDelay = SRC_HISTORY_LENGTH - HRIR_LENGTH; + ALboolean failed = AL_FALSE; struct HRTF newdata; size_t i, j; - union { - ALfloat f; - ALubyte ub[4]; - } val; for(i = 0;i < HRIR_COUNT;i++) { for(j = 0;j < HRIR_LENGTH;j++) { - val.ub[0] = fgetc(f); - val.ub[1] = fgetc(f); - val.ub[2] = fgetc(f); - val.ub[3] = fgetc(f); - if(val.f > 1.0f) newdata.coeffs[i][j] = 32767; - else if(val.f < -1.0f) newdata.coeffs[i][j] = -32768; - else newdata.coeffs[i][j] = (ALshort)(val.f*32767.0f); + ALshort val; + val = fgetc(f); + val |= fgetc(f)<<8; + newdata.coeffs[i][j] = val; } } - val.ub[0] = fgetc(f); - val.ub[1] = fgetc(f); - val.ub[2] = fgetc(f); - val.ub[3] = fgetc(f); - /* skip maxHrtd */ for(i = 0;i < HRIR_COUNT;i++) { - val.ub[0] = fgetc(f); - val.ub[1] = fgetc(f); - val.ub[2] = fgetc(f); - val.ub[3] = fgetc(f); - val.f *= 44100.0f; - if(val.f >= maxDelay) newdata.delays[i] = maxDelay; - else newdata.delays[i] = (ALubyte)val.f; + ALubyte val; + val = fgetc(f); + newdata.delays[i] = val; + if(val > maxDelay) + { + AL_PRINT("Invalid delay at idx %d: %u (max: %u), in %s\n", i, val, maxDelay, str); + failed = AL_TRUE; + } + } + if(feof(f)) + { + AL_PRINT("Premature end of data while reading %s\n", str); + failed = AL_TRUE; } - if(!feof(f)) - Hrtf = newdata; fclose(f); f = NULL; + + if(!failed) + Hrtf = newdata; } } -- cgit v1.2.3