Convert ambdec.c to C++

This commit is contained in:
Chris Robinson
2018-11-03 19:51:23 -07:00
parent 4bfaa173c4
commit 96819237d6
5 changed files with 110 additions and 168 deletions
+79 -125
View File
@@ -7,6 +7,8 @@
#include <string.h>
#include <ctype.h>
#include <vector>
#include "compat.h"
@@ -26,37 +28,19 @@ static char *rstrip(char *line)
return line;
}
static int readline(FILE *f, char **output, size_t *maxlen)
static int readline(FILE *f, std::vector<char> &output)
{
size_t len = 0;
int c;
while((c=fgetc(f)) != EOF && (c == '\r' || c == '\n'))
;
while((c=fgetc(f)) != EOF && (c == '\r' || c == '\n')) {
}
if(c == EOF)
return 0;
output.clear();
do {
if(len+1 >= *maxlen)
{
void *temp = NULL;
size_t newmax;
newmax = (*maxlen ? (*maxlen)<<1 : 32);
if(newmax > *maxlen)
temp = realloc(*output, newmax);
if(!temp)
{
ERR("Failed to realloc "SZFMT" bytes from "SZFMT"!\n", newmax, *maxlen);
return 0;
}
*output = temp;
*maxlen = newmax;
}
(*output)[len++] = c;
(*output)[len] = '\0';
output.emplace_back(c);
} while((c=fgetc(f)) != EOF && c != '\r' && c != '\n');
output.emplace_back((c=0));
return 1;
}
@@ -66,21 +50,21 @@ static int readline(FILE *f, char **output, size_t *maxlen)
static char *my_strtok_r(char *str, const char *delim, char **saveptr)
{
/* Sanity check and update internal pointer. */
if(!saveptr || !delim) return NULL;
if(!saveptr || !delim) return nullptr;
if(str) *saveptr = str;
str = *saveptr;
/* Nothing more to do with this string. */
if(!str) return NULL;
if(!str) return nullptr;
/* Find the first non-delimiter character. */
while(*str != '\0' && strchr(delim, *str) != NULL)
while(*str != '\0' && strchr(delim, *str) != nullptr)
str++;
if(*str == '\0')
{
/* End of string. */
*saveptr = NULL;
return NULL;
*saveptr = nullptr;
return nullptr;
}
/* Find the next delimiter character. */
@@ -122,31 +106,31 @@ static char *read_float(ALfloat *num, const char *line)
}
char *read_clipped_line(FILE *f, char **buffer, size_t *maxlen)
char *read_clipped_line(FILE *f, std::vector<char> &buffer)
{
while(readline(f, buffer, maxlen))
while(readline(f, buffer))
{
char *line, *comment;
line = lstrip(*buffer);
line = lstrip(buffer.data());
comment = strchr(line, '#');
if(comment) *(comment++) = 0;
line = rstrip(line);
if(line[0]) return line;
}
return NULL;
return nullptr;
}
static int load_ambdec_speakers(AmbDecConf *conf, FILE *f, char **buffer, size_t *maxlen, char **saveptr)
static int load_ambdec_speakers(AmbDecConf *conf, FILE *f, std::vector<char> &buffer, char **saveptr)
{
ALsizei cur = 0;
while(cur < conf->NumSpeakers)
{
const char *cmd = my_strtok_r(NULL, " \t", saveptr);
const char *cmd = my_strtok_r(nullptr, " \t", saveptr);
if(!cmd)
{
char *line = read_clipped_line(f, buffer, maxlen);
char *line = read_clipped_line(f, buffer);
if(!line)
{
ERR("Unexpected end of file\n");
@@ -157,14 +141,14 @@ static int load_ambdec_speakers(AmbDecConf *conf, FILE *f, char **buffer, size_t
if(strcmp(cmd, "add_spkr") == 0)
{
const char *name = my_strtok_r(NULL, " \t", saveptr);
const char *dist = my_strtok_r(NULL, " \t", saveptr);
const char *az = my_strtok_r(NULL, " \t", saveptr);
const char *elev = my_strtok_r(NULL, " \t", saveptr);
const char *conn = my_strtok_r(NULL, " \t", saveptr);
const char *name = my_strtok_r(nullptr, " \t", saveptr);
const char *dist = my_strtok_r(nullptr, " \t", saveptr);
const char *az = my_strtok_r(nullptr, " \t", saveptr);
const char *elev = my_strtok_r(nullptr, " \t", saveptr);
const char *conn = my_strtok_r(nullptr, " \t", saveptr);
if(!name) WARN("Name not specified for speaker %u\n", cur+1);
else alstr_copy_cstr(&conf->Speakers[cur].Name, name);
else conf->Speakers[cur].Name = name;
if(!dist) WARN("Distance not specified for speaker %u\n", cur+1);
else read_float(&conf->Speakers[cur].Distance, dist);
if(!az) WARN("Azimuth not specified for speaker %u\n", cur+1);
@@ -172,7 +156,7 @@ static int load_ambdec_speakers(AmbDecConf *conf, FILE *f, char **buffer, size_t
if(!elev) WARN("Elevation not specified for speaker %u\n", cur+1);
else read_float(&conf->Speakers[cur].Elevation, elev);
if(!conn) TRACE("Connection not specified for speaker %u\n", cur+1);
else alstr_copy_cstr(&conf->Speakers[cur].Connection, conn);
else conf->Speakers[cur].Connection = conn;
cur++;
}
@@ -182,7 +166,7 @@ static int load_ambdec_speakers(AmbDecConf *conf, FILE *f, char **buffer, size_t
return 0;
}
cmd = my_strtok_r(NULL, " \t", saveptr);
cmd = my_strtok_r(nullptr, " \t", saveptr);
if(cmd)
{
ERR("Unexpected junk on line: %s\n", cmd);
@@ -193,16 +177,16 @@ static int load_ambdec_speakers(AmbDecConf *conf, FILE *f, char **buffer, size_t
return 1;
}
static int load_ambdec_matrix(ALfloat *gains, ALfloat (*matrix)[MAX_AMBI_COEFFS], ALsizei maxrow, FILE *f, char **buffer, size_t *maxlen, char **saveptr)
static int load_ambdec_matrix(ALfloat *gains, ALfloat (*matrix)[MAX_AMBI_COEFFS], ALsizei maxrow, FILE *f, std::vector<char> &buffer, char **saveptr)
{
int gotgains = 0;
ALsizei cur = 0;
while(cur < maxrow)
{
const char *cmd = my_strtok_r(NULL, " \t", saveptr);
const char *cmd = my_strtok_r(nullptr, " \t", saveptr);
if(!cmd)
{
char *line = read_clipped_line(f, buffer, maxlen);
char *line = read_clipped_line(f, buffer);
if(!line)
{
ERR("Unexpected end of file\n");
@@ -215,7 +199,7 @@ static int load_ambdec_matrix(ALfloat *gains, ALfloat (*matrix)[MAX_AMBI_COEFFS]
{
ALuint curgain = 0;
char *line;
while((line=my_strtok_r(NULL, " \t", saveptr)) != NULL)
while((line=my_strtok_r(nullptr, " \t", saveptr)) != nullptr)
{
ALfloat value;
line = read_float(&value, line);
@@ -236,7 +220,7 @@ static int load_ambdec_matrix(ALfloat *gains, ALfloat (*matrix)[MAX_AMBI_COEFFS]
{
ALuint curidx = 0;
char *line;
while((line=my_strtok_r(NULL, " \t", saveptr)) != NULL)
while((line=my_strtok_r(nullptr, " \t", saveptr)) != nullptr)
{
ALfloat value;
line = read_float(&value, line);
@@ -259,7 +243,7 @@ static int load_ambdec_matrix(ALfloat *gains, ALfloat (*matrix)[MAX_AMBI_COEFFS]
return 0;
}
cmd = my_strtok_r(NULL, " \t", saveptr);
cmd = my_strtok_r(nullptr, " \t", saveptr);
if(cmd)
{
ERR("Unexpected junk on line: %s\n", cmd);
@@ -276,36 +260,9 @@ static int load_ambdec_matrix(ALfloat *gains, ALfloat (*matrix)[MAX_AMBI_COEFFS]
return 1;
}
void ambdec_init(AmbDecConf *conf)
int AmbDecConf::load(const char *fname)
{
ALsizei i;
memset(conf, 0, sizeof(*conf));
AL_STRING_INIT(conf->Description);
for(i = 0;i < MAX_OUTPUT_CHANNELS;i++)
{
AL_STRING_INIT(conf->Speakers[i].Name);
AL_STRING_INIT(conf->Speakers[i].Connection);
}
}
void ambdec_deinit(AmbDecConf *conf)
{
ALsizei i;
alstr_reset(&conf->Description);
for(i = 0;i < MAX_OUTPUT_CHANNELS;i++)
{
alstr_reset(&conf->Speakers[i].Name);
alstr_reset(&conf->Speakers[i].Connection);
}
memset(conf, 0, sizeof(*conf));
}
int ambdec_load(AmbDecConf *conf, const char *fname)
{
char *buffer = NULL;
size_t maxlen = 0;
std::vector<char> buffer;
char *line;
FILE *f;
@@ -316,7 +273,7 @@ int ambdec_load(AmbDecConf *conf, const char *fname)
return 0;
}
while((line=read_clipped_line(f, &buffer, &maxlen)) != NULL)
while((line=read_clipped_line(f, buffer)) != nullptr)
{
char *saveptr;
char *command;
@@ -330,31 +287,31 @@ int ambdec_load(AmbDecConf *conf, const char *fname)
if(strcmp(command, "description") == 0)
{
char *value = my_strtok_r(NULL, "", &saveptr);
alstr_copy_cstr(&conf->Description, lstrip(value));
char *value = my_strtok_r(nullptr, "", &saveptr);
Description = lstrip(value);
}
else if(strcmp(command, "version") == 0)
{
line = my_strtok_r(NULL, "", &saveptr);
line = read_uint(&conf->Version, line, 10);
line = my_strtok_r(nullptr, "", &saveptr);
line = read_uint(&Version, line, 10);
if(line && *line != '\0')
{
ERR("Extra junk after version: %s\n", line);
goto fail;
}
if(conf->Version != 3)
if(Version != 3)
{
ERR("Unsupported version: %u\n", conf->Version);
ERR("Unsupported version: %u\n", Version);
goto fail;
}
}
else if(strcmp(command, "dec") == 0)
{
const char *dec = my_strtok_r(NULL, "/ \t", &saveptr);
const char *dec = my_strtok_r(nullptr, "/ \t", &saveptr);
if(strcmp(dec, "chan_mask") == 0)
{
line = my_strtok_r(NULL, "", &saveptr);
line = read_uint(&conf->ChanMask, line, 16);
line = my_strtok_r(nullptr, "", &saveptr);
line = read_uint(&ChanMask, line, 16);
if(line && *line != '\0')
{
ERR("Extra junk after mask: %s\n", line);
@@ -363,43 +320,43 @@ int ambdec_load(AmbDecConf *conf, const char *fname)
}
else if(strcmp(dec, "freq_bands") == 0)
{
line = my_strtok_r(NULL, "", &saveptr);
line = read_uint(&conf->FreqBands, line, 10);
line = my_strtok_r(nullptr, "", &saveptr);
line = read_uint(&FreqBands, line, 10);
if(line && *line != '\0')
{
ERR("Extra junk after freq_bands: %s\n", line);
goto fail;
}
if(conf->FreqBands != 1 && conf->FreqBands != 2)
if(FreqBands != 1 && FreqBands != 2)
{
ERR("Invalid freq_bands value: %u\n", conf->FreqBands);
ERR("Invalid freq_bands value: %u\n", FreqBands);
goto fail;
}
}
else if(strcmp(dec, "speakers") == 0)
{
line = my_strtok_r(NULL, "", &saveptr);
line = read_int(&conf->NumSpeakers, line, 10);
line = my_strtok_r(nullptr, "", &saveptr);
line = read_int(&NumSpeakers, line, 10);
if(line && *line != '\0')
{
ERR("Extra junk after speakers: %s\n", line);
goto fail;
}
if(conf->NumSpeakers > MAX_OUTPUT_CHANNELS)
if(NumSpeakers > MAX_OUTPUT_CHANNELS)
{
ERR("Unsupported speaker count: %u\n", conf->NumSpeakers);
ERR("Unsupported speaker count: %u\n", NumSpeakers);
goto fail;
}
}
else if(strcmp(dec, "coeff_scale") == 0)
{
line = my_strtok_r(NULL, " \t", &saveptr);
line = my_strtok_r(nullptr, " \t", &saveptr);
if(strcmp(line, "n3d") == 0)
conf->CoeffScale = ADS_N3D;
CoeffScale = AmbDecScale::N3D;
else if(strcmp(line, "sn3d") == 0)
conf->CoeffScale = ADS_SN3D;
CoeffScale = AmbDecScale::SN3D;
else if(strcmp(line, "fuma") == 0)
conf->CoeffScale = ADS_FuMa;
CoeffScale = AmbDecScale::FuMa;
else
{
ERR("Unsupported coeff scale: %s\n", line);
@@ -414,11 +371,11 @@ int ambdec_load(AmbDecConf *conf, const char *fname)
}
else if(strcmp(command, "opt") == 0)
{
const char *opt = my_strtok_r(NULL, "/ \t", &saveptr);
const char *opt = my_strtok_r(nullptr, "/ \t", &saveptr);
if(strcmp(opt, "xover_freq") == 0)
{
line = my_strtok_r(NULL, "", &saveptr);
line = read_float(&conf->XOverFreq, line);
line = my_strtok_r(nullptr, "", &saveptr);
line = read_float(&XOverFreq, line);
if(line && *line != '\0')
{
ERR("Extra junk after xover_freq: %s\n", line);
@@ -427,8 +384,8 @@ int ambdec_load(AmbDecConf *conf, const char *fname)
}
else if(strcmp(opt, "xover_ratio") == 0)
{
line = my_strtok_r(NULL, "", &saveptr);
line = read_float(&conf->XOverRatio, line);
line = my_strtok_r(nullptr, "", &saveptr);
line = read_float(&XOverRatio, line);
if(line && *line != '\0')
{
ERR("Extra junk after xover_ratio: %s\n", line);
@@ -439,7 +396,7 @@ int ambdec_load(AmbDecConf *conf, const char *fname)
strcmp(opt, "delay_comp") == 0 || strcmp(opt, "level_comp") == 0)
{
/* Unused */
my_strtok_r(NULL, " \t", &saveptr);
my_strtok_r(nullptr, " \t", &saveptr);
}
else
{
@@ -449,18 +406,18 @@ int ambdec_load(AmbDecConf *conf, const char *fname)
}
else if(strcmp(command, "speakers") == 0)
{
const char *value = my_strtok_r(NULL, "/ \t", &saveptr);
const char *value = my_strtok_r(nullptr, "/ \t", &saveptr);
if(strcmp(value, "{") != 0)
{
ERR("Expected { after %s command, got %s\n", command, value);
goto fail;
}
if(!load_ambdec_speakers(conf, f, &buffer, &maxlen, &saveptr))
if(!load_ambdec_speakers(this, f, buffer, &saveptr))
goto fail;
value = my_strtok_r(NULL, "/ \t", &saveptr);
value = my_strtok_r(nullptr, "/ \t", &saveptr);
if(!value)
{
line = read_clipped_line(f, &buffer, &maxlen);
line = read_clipped_line(f, buffer);
if(!line)
{
ERR("Unexpected end of file\n");
@@ -477,35 +434,34 @@ int ambdec_load(AmbDecConf *conf, const char *fname)
else if(strcmp(command, "lfmatrix") == 0 || strcmp(command, "hfmatrix") == 0 ||
strcmp(command, "matrix") == 0)
{
const char *value = my_strtok_r(NULL, "/ \t", &saveptr);
const char *value = my_strtok_r(nullptr, "/ \t", &saveptr);
if(strcmp(value, "{") != 0)
{
ERR("Expected { after %s command, got %s\n", command, value);
goto fail;
}
if(conf->FreqBands == 1)
if(FreqBands == 1)
{
if(strcmp(command, "matrix") != 0)
{
ERR("Unexpected \"%s\" type for a single-band decoder\n", command);
goto fail;
}
if(!load_ambdec_matrix(conf->HFOrderGain, conf->HFMatrix, conf->NumSpeakers,
f, &buffer, &maxlen, &saveptr))
if(!load_ambdec_matrix(HFOrderGain, HFMatrix, NumSpeakers, f, buffer, &saveptr))
goto fail;
}
else
{
if(strcmp(command, "lfmatrix") == 0)
{
if(!load_ambdec_matrix(conf->LFOrderGain, conf->LFMatrix, conf->NumSpeakers,
f, &buffer, &maxlen, &saveptr))
if(!load_ambdec_matrix(LFOrderGain, LFMatrix, NumSpeakers, f, buffer,
&saveptr))
goto fail;
}
else if(strcmp(command, "hfmatrix") == 0)
{
if(!load_ambdec_matrix(conf->HFOrderGain, conf->HFMatrix, conf->NumSpeakers,
f, &buffer, &maxlen, &saveptr))
if(!load_ambdec_matrix(HFOrderGain, HFMatrix, NumSpeakers, f, buffer,
&saveptr))
goto fail;
}
else
@@ -514,10 +470,10 @@ int ambdec_load(AmbDecConf *conf, const char *fname)
goto fail;
}
}
value = my_strtok_r(NULL, "/ \t", &saveptr);
value = my_strtok_r(nullptr, "/ \t", &saveptr);
if(!value)
{
line = read_clipped_line(f, &buffer, &maxlen);
line = read_clipped_line(f, buffer);
if(!line)
{
ERR("Unexpected end of file\n");
@@ -533,7 +489,7 @@ int ambdec_load(AmbDecConf *conf, const char *fname)
}
else if(strcmp(command, "end") == 0)
{
line = my_strtok_r(NULL, "/ \t", &saveptr);
line = my_strtok_r(nullptr, "/ \t", &saveptr);
if(line)
{
ERR("Unexpected junk on end: %s\n", line);
@@ -541,7 +497,6 @@ int ambdec_load(AmbDecConf *conf, const char *fname)
}
fclose(f);
free(buffer);
return 1;
}
else
@@ -550,7 +505,7 @@ int ambdec_load(AmbDecConf *conf, const char *fname)
goto fail;
}
line = my_strtok_r(NULL, "/ \t", &saveptr);
line = my_strtok_r(nullptr, "/ \t", &saveptr);
if(line)
{
ERR("Unexpected junk on line: %s\n", line);
@@ -561,6 +516,5 @@ int ambdec_load(AmbDecConf *conf, const char *fname)
fail:
fclose(f);
free(buffer);
return 0;
}
+13 -22
View File
@@ -1,38 +1,35 @@
#ifndef AMBDEC_H
#define AMBDEC_H
#include "alstring.h"
#include "alMain.h"
#include <string>
#ifdef __cplusplus
extern "C" {
#endif
#include "alMain.h"
/* Helpers to read .ambdec configuration files. */
enum AmbDecScaleType {
ADS_N3D,
ADS_SN3D,
ADS_FuMa,
enum class AmbDecScale {
N3D,
SN3D,
FuMa,
};
typedef struct AmbDecConf {
al_string Description;
struct AmbDecConf {
std::string Description;
ALuint Version; /* Must be 3 */
ALuint ChanMask;
ALuint FreqBands; /* Must be 1 or 2 */
ALsizei NumSpeakers;
enum AmbDecScaleType CoeffScale;
AmbDecScale CoeffScale;
ALfloat XOverFreq;
ALfloat XOverRatio;
struct {
al_string Name;
std::string Name;
ALfloat Distance;
ALfloat Azimuth;
ALfloat Elevation;
al_string Connection;
std::string Connection;
} Speakers[MAX_OUTPUT_CHANNELS];
/* Unused when FreqBands == 1 */
@@ -41,14 +38,8 @@ typedef struct AmbDecConf {
ALfloat HFOrderGain[MAX_AMBI_ORDER+1];
ALfloat HFMatrix[MAX_OUTPUT_CHANNELS][MAX_AMBI_COEFFS];
} AmbDecConf;
void ambdec_init(AmbDecConf *conf);
void ambdec_deinit(AmbDecConf *conf);
int ambdec_load(AmbDecConf *conf, const char *fname);
#ifdef __cplusplus
} // extern "C"
#endif
int load(const char *fname);
};
#endif /* AMBDEC_H */
+2 -2
View File
@@ -204,9 +204,9 @@ void bformatdec_reset(BFormatDec *dec, const AmbDecConf *conf, ALsizei chancount
for(i = 0;i < conf->NumSpeakers;i++)
dec->Enabled |= 1 << chanmap[i];
if(conf->CoeffScale == ADS_SN3D)
if(conf->CoeffScale == AmbDecScale::SN3D)
coeff_scale = SN3D2N3DScale;
else if(conf->CoeffScale == ADS_FuMa)
else if(conf->CoeffScale == AmbDecScale::FuMa)
coeff_scale = FuMa2N3DScale;
memset(dec->UpSampler, 0, sizeof(dec->UpSampler));
+15 -18
View File
@@ -275,45 +275,45 @@ static bool MakeSpeakerMap(ALCdevice *device, const AmbDecConf *conf, ALsizei sp
* use the side channels when the device is configured for back,
* and vice-versa.
*/
if(alstr_cmp_cstr(conf->Speakers[i].Name, "LF") == 0)
if(conf->Speakers[i].Name == "LF")
ch = FrontLeft;
else if(alstr_cmp_cstr(conf->Speakers[i].Name, "RF") == 0)
else if(conf->Speakers[i].Name == "RF")
ch = FrontRight;
else if(alstr_cmp_cstr(conf->Speakers[i].Name, "CE") == 0)
else if(conf->Speakers[i].Name == "CE")
ch = FrontCenter;
else if(alstr_cmp_cstr(conf->Speakers[i].Name, "LS") == 0)
else if(conf->Speakers[i].Name == "LS")
{
if(device->FmtChans == DevFmtX51Rear)
ch = BackLeft;
else
ch = SideLeft;
}
else if(alstr_cmp_cstr(conf->Speakers[i].Name, "RS") == 0)
else if(conf->Speakers[i].Name == "RS")
{
if(device->FmtChans == DevFmtX51Rear)
ch = BackRight;
else
ch = SideRight;
}
else if(alstr_cmp_cstr(conf->Speakers[i].Name, "LB") == 0)
else if(conf->Speakers[i].Name == "LB")
{
if(device->FmtChans == DevFmtX51)
ch = SideLeft;
else
ch = BackLeft;
}
else if(alstr_cmp_cstr(conf->Speakers[i].Name, "RB") == 0)
else if(conf->Speakers[i].Name == "RB")
{
if(device->FmtChans == DevFmtX51)
ch = SideRight;
else
ch = BackRight;
}
else if(alstr_cmp_cstr(conf->Speakers[i].Name, "CB") == 0)
else if(conf->Speakers[i].Name == "CB")
ch = BackCenter;
else
{
const char *name = alstr_get_cstr(conf->Speakers[i].Name);
const char *name = conf->Speakers[i].Name.c_str();
unsigned int n;
char c;
@@ -329,7 +329,7 @@ static bool MakeSpeakerMap(ALCdevice *device, const AmbDecConf *conf, ALsizei sp
if(chidx == -1)
{
ERR("Failed to lookup AmbDec speaker label %s\n",
alstr_get_cstr(conf->Speakers[i].Name));
conf->Speakers[i].Name.c_str());
return false;
}
speakermap[i] = chidx;
@@ -423,14 +423,14 @@ static void InitDistanceComp(ALCdevice *device, const AmbDecConf *conf, const AL
srate + 0.5f);
if(delay >= (ALfloat)MAX_DELAY_LENGTH)
ERR("Delay for speaker \"%s\" exceeds buffer length (%f >= %u)\n",
alstr_get_cstr(conf->Speakers[i].Name), delay, MAX_DELAY_LENGTH);
conf->Speakers[i].Name.c_str(), delay, MAX_DELAY_LENGTH);
device->ChannelDelay[chan].Length = (ALsizei)clampf(
delay, 0.0f, (ALfloat)(MAX_DELAY_LENGTH-1)
);
device->ChannelDelay[chan].Gain = conf->Speakers[i].Distance / maxdist;
TRACE("Channel %u \"%s\" distance compensation: %d samples, %f gain\n", chan,
alstr_get_cstr(conf->Speakers[i].Name), device->ChannelDelay[chan].Length,
conf->Speakers[i].Name.c_str(), device->ChannelDelay[chan].Length,
device->ChannelDelay[chan].Gain
);
@@ -639,9 +639,9 @@ static void InitCustomPanning(ALCdevice *device, const AmbDecConf *conf, const A
}
}
if(conf->CoeffScale == ADS_SN3D)
if(conf->CoeffScale == AmbDecScale::SN3D)
coeff_scale = SN3D2N3DScale;
else if(conf->CoeffScale == ADS_FuMa)
else if(conf->CoeffScale == AmbDecScale::FuMa)
coeff_scale = FuMa2N3DScale;
for(i = 0;i < conf->NumSpeakers;i++)
@@ -963,8 +963,6 @@ void aluInitRenderer(ALCdevice *device, ALint hrtf_id, enum HrtfRequestMode hrtf
if(hrtf_appreq == Hrtf_Enable)
device->HrtfStatus = ALC_HRTF_UNSUPPORTED_FORMAT_SOFT;
ambdec_init(&conf);
devname = alstr_get_cstr(device->DeviceName);
switch(device->FmtChans)
{
@@ -984,7 +982,7 @@ void aluInitRenderer(ALCdevice *device, ALint hrtf_id, enum HrtfRequestMode hrtf
const char *fname;
if(ConfigValueStr(devname, "decoder", layout, &fname))
{
if(!ambdec_load(&conf, fname))
if(!conf.load(fname))
ERR("Failed to load layout file %s\n", fname);
else
{
@@ -1062,7 +1060,6 @@ void aluInitRenderer(ALCdevice *device, ALint hrtf_id, enum HrtfRequestMode hrtf
}
TRACE("Front stablizer %s\n", device->Stablizer ? "enabled" : "disabled");
ambdec_deinit(&conf);
return;
}
+1 -1
View File
@@ -874,7 +874,7 @@ SET(ALC_OBJS
Alc/hrtf.h
Alc/uhjfilter.cpp
Alc/uhjfilter.h
Alc/ambdec.c
Alc/ambdec.cpp
Alc/ambdec.h
Alc/bformatdec.cpp
Alc/bformatdec.h