Return int and float config values through a parameter

This allows the getter functions to return whether or not the option exists
without a separate call and check.
This commit is contained in:
Chris Robinson 2011-09-18 16:16:55 -07:00
parent d46db2f648
commit 7e06a10f73
5 changed files with 89 additions and 68 deletions

117
Alc/ALc.c
View File

@ -559,6 +559,7 @@ static void alc_deinit(void)
static void alc_initconfig(void)
{
const char *devs, *str;
float valf;
int i, n;
str = getenv("ALSOFT_LOGLEVEL");
@ -582,14 +583,17 @@ static void alc_initconfig(void)
InitHrtf();
#ifdef _WIN32
RTPrioLevel = GetConfigValueInt(NULL, "rt-prio", 1);
RTPrioLevel = 1;
#else
RTPrioLevel = GetConfigValueInt(NULL, "rt-prio", 0);
RTPrioLevel = 0;
#endif
ConfigValueInt(NULL, "rt-prio", &RTPrioLevel);
DefaultResampler = GetConfigValueInt(NULL, "resampler", RESAMPLER_DEFAULT);
if(DefaultResampler >= RESAMPLER_MAX || DefaultResampler <= RESAMPLER_MIN)
DefaultResampler = RESAMPLER_DEFAULT;
if(ConfigValueInt(NULL, "resampler", &n))
{
if(n < RESAMPLER_MAX && n > RESAMPLER_MIN)
DefaultResampler = n;
}
if(!TrapALCError)
TrapALCError = GetConfigValueBool(NULL, "trap-alc-error", ALC_FALSE);
@ -597,8 +601,9 @@ static void alc_initconfig(void)
if(!TrapALError)
TrapALError = GetConfigValueBool(NULL, "trap-al-error", AL_FALSE);
ReverbBoost *= aluPow(10.0f, GetConfigValueFloat("reverb", "boost", 0.0f) /
20.0f);
if(ConfigValueFloat("reverb", "boost", &valf))
ReverbBoost *= aluPow(10.0f, valf / 20.0f);
EmulateEAXReverb = GetConfigValueBool("reverb", "emulate-eax", AL_FALSE);
devs = GetConfigValue(NULL, "drivers", "");
@ -1080,9 +1085,6 @@ static ALCboolean UpdateDeviceParams(ALCdevice *device, const ALCint *attrList)
numStereo = device->NumStereoSources;
numSends = device->NumAuxSends;
freq = GetConfigValueInt(NULL, "frequency", freq);
if(freq < 8000) freq = 8000;
attrIdx = 0;
while(attrList[attrIdx])
{
@ -1121,10 +1123,9 @@ static ALCboolean UpdateDeviceParams(ALCdevice *device, const ALCint *attrList)
return ALC_FALSE;
}
}
else if(!ConfigValueExists(NULL, "frequency"))
else
{
freq = attrList[attrIdx + 1];
if(freq < 8000) freq = 8000;
device->Flags |= DEVICE_FREQUENCY_REQUEST;
}
}
@ -1138,17 +1139,20 @@ static ALCboolean UpdateDeviceParams(ALCdevice *device, const ALCint *attrList)
numMono = device->MaxNoOfSources - numStereo;
}
if(attrList[attrIdx] == ALC_MAX_AUXILIARY_SENDS &&
!ConfigValueExists(NULL, "sends"))
{
if(attrList[attrIdx] == ALC_MAX_AUXILIARY_SENDS)
numSends = attrList[attrIdx + 1];
if(numSends > MAX_SENDS)
numSends = MAX_SENDS;
}
attrIdx += 2;
}
if(!device->IsLoopbackDevice)
{
ConfigValueUInt(NULL, "frequency", &freq);
freq = maxu(freq, 8000);
}
ConfigValueUInt(NULL, "sends", &numSends);
numSends = minu(MAX_SENDS, numSends);
device->UpdateSize = (ALuint64)device->UpdateSize * freq /
device->Frequency;
@ -2459,51 +2463,53 @@ ALC_API ALCdevice* ALC_APIENTRY alcOpenDevice(const ALCchar *deviceName)
device->Flags = 0;
device->Bs2b = NULL;
device->Bs2bLevel = 0;
device->szDeviceName = NULL;
device->ContextList = NULL;
device->MaxNoOfSources = 256;
device->AuxiliaryEffectSlotMax = 4;
device->NumAuxSends = MAX_SENDS;
InitUIntMap(&device->BufferMap, ~0);
InitUIntMap(&device->EffectMap, ~0);
InitUIntMap(&device->FilterMap, ~0);
//Set output format
if(ConfigValueExists(NULL, "frequency"))
device->NumUpdates = 4;
device->UpdateSize = 1024;
device->Frequency = DEFAULT_OUTPUT_RATE;
if(ConfigValueUInt(NULL, "frequency", &device->Frequency))
device->Flags |= DEVICE_FREQUENCY_REQUEST;
device->Frequency = GetConfigValueInt(NULL, "frequency", DEFAULT_OUTPUT_RATE);
if(device->Frequency < 8000)
device->Frequency = 8000;
device->Frequency = maxu(device->Frequency, 8000);
if(ConfigValueExists(NULL, "format"))
device->Flags |= DEVICE_CHANNELS_REQUEST;
fmt = GetConfigValue(NULL, "format", "AL_FORMAT_STEREO16");
GetFormatFromString(fmt, &device->FmtChans, &device->FmtType);
device->NumUpdates = GetConfigValueInt(NULL, "periods", 4);
if(device->NumUpdates < 2)
device->NumUpdates = 4;
ConfigValueUInt(NULL, "periods", &device->NumUpdates);
if(device->NumUpdates < 2) device->NumUpdates = 4;
device->UpdateSize = GetConfigValueInt(NULL, "period_size", 1024);
if(device->UpdateSize <= 0)
device->UpdateSize = 1024;
ConfigValueUInt(NULL, "period_size", &device->UpdateSize);
if(device->UpdateSize == 0) device->UpdateSize = 1024;
device->MaxNoOfSources = GetConfigValueInt(NULL, "sources", 256);
if(device->MaxNoOfSources <= 0)
device->MaxNoOfSources = 256;
ConfigValueUInt(NULL, "sources", &device->MaxNoOfSources);
if(device->MaxNoOfSources == 0) device->MaxNoOfSources = 256;
device->AuxiliaryEffectSlotMax = GetConfigValueInt(NULL, "slots", 4);
if(device->AuxiliaryEffectSlotMax <= 0)
device->AuxiliaryEffectSlotMax = 4;
ConfigValueUInt(NULL, "slots", &device->AuxiliaryEffectSlotMax);
if(device->AuxiliaryEffectSlotMax == 0) device->AuxiliaryEffectSlotMax = 4;
ConfigValueUInt(NULL, "sends", &device->NumAuxSends);
if(device->NumAuxSends > MAX_SENDS) device->NumAuxSends = MAX_SENDS;
ConfigValueInt(NULL, "cf_level", &device->Bs2bLevel);
device->NumStereoSources = 1;
device->NumMonoSources = device->MaxNoOfSources - device->NumStereoSources;
device->NumAuxSends = GetConfigValueInt(NULL, "sends", MAX_SENDS);
if(device->NumAuxSends > MAX_SENDS)
device->NumAuxSends = MAX_SENDS;
device->Bs2bLevel = GetConfigValueInt(NULL, "cf_level", 0);
// Find a playback device to open
LockLists();
if((err=ALCdevice_OpenPlayback(device, deviceName)) != ALC_NO_ERROR)
@ -2592,44 +2598,47 @@ ALC_API ALCdevice* ALC_APIENTRY alcLoopbackOpenDeviceSOFT(void)
device->Flags = 0;
device->Bs2b = NULL;
device->Bs2bLevel = 0;
device->szDeviceName = NULL;
device->ContextList = NULL;
device->MaxNoOfSources = 256;
device->AuxiliaryEffectSlotMax = 4;
device->NumAuxSends = MAX_SENDS;
InitUIntMap(&device->BufferMap, ~0);
InitUIntMap(&device->EffectMap, ~0);
InitUIntMap(&device->FilterMap, ~0);
//Set output format
device->NumUpdates = 0;
device->UpdateSize = 0;
device->Frequency = 44100;
device->FmtChans = DevFmtStereo;
device->FmtType = DevFmtShort;
device->NumUpdates = 0;
device->UpdateSize = 0;
ConfigValueUInt(NULL, "sources", &device->MaxNoOfSources);
if(device->MaxNoOfSources == 0) device->MaxNoOfSources = 256;
device->MaxNoOfSources = GetConfigValueInt(NULL, "sources", 256);
if(device->MaxNoOfSources <= 0)
device->MaxNoOfSources = 256;
ConfigValueUInt(NULL, "slots", &device->AuxiliaryEffectSlotMax);
if(device->AuxiliaryEffectSlotMax == 0) device->AuxiliaryEffectSlotMax = 4;
device->AuxiliaryEffectSlotMax = GetConfigValueInt(NULL, "slots", 4);
if(device->AuxiliaryEffectSlotMax <= 0)
device->AuxiliaryEffectSlotMax = 4;
ConfigValueUInt(NULL, "sends", &device->NumAuxSends);
if(device->NumAuxSends > MAX_SENDS) device->NumAuxSends = MAX_SENDS;
ConfigValueInt(NULL, "cf_level", &device->Bs2bLevel);
device->NumStereoSources = 1;
device->NumMonoSources = device->MaxNoOfSources - device->NumStereoSources;
device->NumAuxSends = GetConfigValueInt(NULL, "sends", MAX_SENDS);
if(device->NumAuxSends > MAX_SENDS)
device->NumAuxSends = MAX_SENDS;
device->Bs2bLevel = GetConfigValueInt(NULL, "cf_level", 0);
// Open the "backend"
ALCdevice_OpenPlayback(device, "Loopback");
do {
device->next = DeviceList;
} while(!CompExchangePtr((void**)&DeviceList, device->next, device));
return device;
}

View File

@ -313,24 +313,35 @@ int ConfigValueExists(const char *blockName, const char *keyName)
return !!val[0];
}
int GetConfigValueInt(const char *blockName, const char *keyName, int def)
int ConfigValueInt(const char *blockName, const char *keyName, int *ret)
{
const char *val = GetConfigValue(blockName, keyName, "");
if(!val[0]) return 0;
if(!val[0]) return def;
return strtol(val, NULL, 0);
*ret = strtol(val, NULL, 0);
return 1;
}
float GetConfigValueFloat(const char *blockName, const char *keyName, float def)
int ConfigValueUInt(const char *blockName, const char *keyName, unsigned int *ret)
{
const char *val = GetConfigValue(blockName, keyName, "");
if(!val[0]) return 0;
*ret = strtoul(val, NULL, 0);
return 1;
}
int ConfigValueFloat(const char *blockName, const char *keyName, float *ret)
{
const char *val = GetConfigValue(blockName, keyName, "");
if(!val[0]) return 0;
if(!val[0]) return def;
#ifdef HAVE_STRTOF
return strtof(val, NULL);
*ret = strtof(val, NULL);
#else
return (float)strtod(val, NULL);
*ret = (float)strtod(val, NULL);
#endif
return 1;
}
int GetConfigValueBool(const char *blockName, const char *keyName, int def)

View File

@ -168,8 +168,8 @@ static ALCenum pa_open_playback(ALCdevice *device, const ALCchar *deviceName)
device->ExtraData = data;
outParams.device = GetConfigValueInt("port", "device", -1);
if(outParams.device < 0)
outParams.device = -1;
if(!ConfigValueInt("port", "device", &outParams.device) || outParams.device < 0)
outParams.device = Pa_GetDefaultOutputDevice();
outParams.suggestedLatency = (device->UpdateSize*device->NumUpdates) /
(float)device->Frequency;
@ -299,8 +299,8 @@ static ALCenum pa_open_capture(ALCdevice *device, const ALCchar *deviceName)
if(data->ring == NULL)
goto error;
inParams.device = GetConfigValueInt("port", "capture", -1);
if(inParams.device < 0)
inParams.device = -1;
if(!ConfigValueInt("port", "capture", &inParams.device) || inParams.device < 0)
inParams.device = Pa_GetDefaultOutputDevice();
inParams.suggestedLatency = 0.0f;
inParams.hostApiSpecificStreamInfo = NULL;

View File

@ -669,9 +669,10 @@ void ReadALConfig(void);
void FreeALConfig(void);
int ConfigValueExists(const char *blockName, const char *keyName);
const char *GetConfigValue(const char *blockName, const char *keyName, const char *def);
int GetConfigValueInt(const char *blockName, const char *keyName, int def);
float GetConfigValueFloat(const char *blockName, const char *keyName, float def);
int GetConfigValueBool(const char *blockName, const char *keyName, int def);
int ConfigValueInt(const char *blockName, const char *keyName, int *ret);
int ConfigValueUInt(const char *blockName, const char *keyName, unsigned int *ret);
int ConfigValueFloat(const char *blockName, const char *keyName, float *ret);
void SetRTPriority(void);

View File

@ -33,7 +33,7 @@
#include "alAuxEffectSlot.h"
enum Resampler DefaultResampler;
enum Resampler DefaultResampler = RESAMPLER_DEFAULT;
const ALsizei ResamplerPadding[RESAMPLER_MAX] = {
0, /* Point */
1, /* Linear */