Add an option to disable specific EFX effect types

This commit is contained in:
Chris Robinson
2008-11-14 07:13:59 -08:00
parent 506912aed7
commit d72b132c57
4 changed files with 52 additions and 2 deletions
+31
View File
@@ -309,6 +309,37 @@ static void InitAL(void)
strcasecmp(str, "yes") == 0 ||
strcasecmp(str, "on") == 0 ||
atoi(str) != 0);
str = GetConfigValue(NULL, "excludefx", "");
if(str[0])
{
const struct {
const char *name;
int type;
} EffectList[] = {
{ "reverb", REVERB },
{ NULL, 0 }
};
int n;
size_t len;
const char *next = str;
do {
str = next;
next = strchr(str, ',');
if(!str[0] || next == str)
continue;
len = (next ? ((size_t)(next-str)) : strlen(str));
for(n = 0;EffectList[n].name;n++)
{
if(len == strlen(EffectList[n].name) &&
strncmp(EffectList[n].name, str, len) == 0)
DisabledEffects[EffectList[n].type] = AL_TRUE;
}
} while(next++);
}
}
}
+7
View File
@@ -38,6 +38,13 @@ extern "C" {
#define AL_REVERB_DECAY_HFLIMIT 0x000D
enum {
REVERB = 0,
MAX_EFFECTS
};
extern ALboolean DisabledEffects[MAX_EFFECTS];
typedef struct ALeffect_struct
{
// Effect type (AL_EFFECT_NULL, ...)
+8 -2
View File
@@ -29,6 +29,10 @@
#include "alThunk.h"
#include "alError.h"
ALboolean DisabledEffects[MAX_EFFECTS];
static ALeffect *g_EffectList;
static ALuint g_EffectCount;
@@ -165,8 +169,10 @@ ALvoid AL_APIENTRY alEffecti(ALuint effect, ALenum param, ALint iValue)
if(param == AL_EFFECT_TYPE)
{
if(iValue == AL_EFFECT_NULL ||
iValue == AL_EFFECT_REVERB)
ALboolean isOk = (iValue == AL_EFFECT_NULL ||
(iValue == AL_EFFECT_REVERB && !DisabledEffects[REVERB]));
if(isOk)
InitEffectParams(ALEffect, iValue);
else
alSetError(AL_INVALID_VALUE);
+6
View File
@@ -61,6 +61,12 @@ drivers = # Sets the backend driver list order, comma-seperated. Unknown
# Default is:
# alsa,oss,solaris,dsound,winmm,wave
excludefx = # Sets which effects to exclude, preventing apps from using them.
# This can help for apps that try to use effects which are too CPU
# intensive for the system to handle. Available effects are:
# reverb
# Default is empty (all available effects enabled)
[alsa] # ALSA backend stuff
device = default # Sets the device name for the default playback device.
# Default is default