Use a fixed array for the effect state factory list
This commit is contained in:
parent
0051ebace0
commit
dcc5a10c7b
@ -1127,8 +1127,6 @@ static void alc_initconfig(void)
|
||||
} while(next++);
|
||||
}
|
||||
|
||||
InitEffectFactoryMap();
|
||||
|
||||
InitEffect(&DefaultEffect);
|
||||
str = getenv("ALSOFT_DEFAULT_REVERB");
|
||||
if((str && str[0]) || ConfigValueStr(NULL, NULL, "default-reverb", &str))
|
||||
@ -1229,8 +1227,6 @@ static void alc_cleanup(void)
|
||||
} while((dev=dev->next) != NULL);
|
||||
ERR("%u device%s not closed\n", num, (num>1)?"s":"");
|
||||
}
|
||||
|
||||
DeinitEffectFactoryMap();
|
||||
}
|
||||
|
||||
static void alc_deinit_safe(void)
|
||||
|
@ -171,9 +171,6 @@ ALeffectStateFactory *ALdedicatedStateFactory_getFactory(void);
|
||||
|
||||
ALenum InitializeEffect(ALCcontext *Context, ALeffectslot *EffectSlot, ALeffect *effect);
|
||||
|
||||
void InitEffectFactoryMap(void);
|
||||
void DeinitEffectFactoryMap(void);
|
||||
|
||||
void ALeffectState_DecRef(ALeffectState *state);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -39,12 +39,32 @@
|
||||
extern inline void LockEffectSlotList(ALCcontext *context);
|
||||
extern inline void UnlockEffectSlotList(ALCcontext *context);
|
||||
|
||||
static UIntMap EffectStateFactoryMap;
|
||||
static const struct {
|
||||
ALenum Type;
|
||||
ALeffectStateFactory* (*GetFactory)(void);
|
||||
} FactoryList[] = {
|
||||
{ AL_EFFECT_NULL, ALnullStateFactory_getFactory },
|
||||
{ AL_EFFECT_EAXREVERB, ALreverbStateFactory_getFactory },
|
||||
{ AL_EFFECT_REVERB, ALreverbStateFactory_getFactory },
|
||||
{ AL_EFFECT_CHORUS, ALchorusStateFactory_getFactory },
|
||||
{ AL_EFFECT_COMPRESSOR, ALcompressorStateFactory_getFactory },
|
||||
{ AL_EFFECT_DISTORTION, ALdistortionStateFactory_getFactory },
|
||||
{ AL_EFFECT_ECHO, ALechoStateFactory_getFactory },
|
||||
{ AL_EFFECT_EQUALIZER, ALequalizerStateFactory_getFactory },
|
||||
{ AL_EFFECT_FLANGER, ALflangerStateFactory_getFactory },
|
||||
{ AL_EFFECT_RING_MODULATOR, ALmodulatorStateFactory_getFactory },
|
||||
{ AL_EFFECT_DEDICATED_DIALOGUE, ALdedicatedStateFactory_getFactory },
|
||||
{ AL_EFFECT_DEDICATED_LOW_FREQUENCY_EFFECT, ALdedicatedStateFactory_getFactory }
|
||||
};
|
||||
|
||||
static inline ALeffectStateFactory *getFactoryByType(ALenum type)
|
||||
{
|
||||
ALeffectStateFactory* (*getFactory)(void) = LookupUIntMapKey(&EffectStateFactoryMap, type);
|
||||
if(getFactory != NULL)
|
||||
return getFactory();
|
||||
size_t i;
|
||||
for(i = 0;i < COUNTOF(FactoryList);i++)
|
||||
{
|
||||
if(FactoryList[i].Type == type)
|
||||
return FactoryList[i].GetFactory();
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -517,30 +537,6 @@ done:
|
||||
}
|
||||
|
||||
|
||||
void InitEffectFactoryMap(void)
|
||||
{
|
||||
InitUIntMap(&EffectStateFactoryMap, INT_MAX);
|
||||
|
||||
InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_NULL, ALnullStateFactory_getFactory);
|
||||
InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_EAXREVERB, ALreverbStateFactory_getFactory);
|
||||
InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_REVERB, ALreverbStateFactory_getFactory);
|
||||
InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_CHORUS, ALchorusStateFactory_getFactory);
|
||||
InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_COMPRESSOR, ALcompressorStateFactory_getFactory);
|
||||
InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_DISTORTION, ALdistortionStateFactory_getFactory);
|
||||
InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_ECHO, ALechoStateFactory_getFactory);
|
||||
InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_EQUALIZER, ALequalizerStateFactory_getFactory);
|
||||
InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_FLANGER, ALflangerStateFactory_getFactory);
|
||||
InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_RING_MODULATOR, ALmodulatorStateFactory_getFactory);
|
||||
InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_DEDICATED_DIALOGUE, ALdedicatedStateFactory_getFactory);
|
||||
InsertUIntMapEntry(&EffectStateFactoryMap, AL_EFFECT_DEDICATED_LOW_FREQUENCY_EFFECT, ALdedicatedStateFactory_getFactory);
|
||||
}
|
||||
|
||||
void DeinitEffectFactoryMap(void)
|
||||
{
|
||||
ResetUIntMap(&EffectStateFactoryMap);
|
||||
}
|
||||
|
||||
|
||||
ALenum InitializeEffect(ALCcontext *Context, ALeffectslot *EffectSlot, ALeffect *effect)
|
||||
{
|
||||
ALCdevice *Device = Context->Device;
|
||||
|
Loading…
Reference in New Issue
Block a user