Hey everyone.
I have a well known issue of getting errors of the type "AL_INVALID_OPERATION" while the function which triggers them still works fine.
I get the following error while I try to generate effects and filters slots. A quick google shows many people are experiencing that problem mostly when they try to stream data (Not my case).
I can bypass the error by ignoring it but I wish to know what is the cause for that error.
I have tried to google the problem, looking for it in the openAL documentation and exploring the openAL SDK code. No luck.
*Active device and audio context both exist in the following code. No error found while creating them.
Relevant code segments :
[source lang="cpp"]
[font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]
void[/font][/font][/font][font="Consolas"][font="Consolas"] f_AskEffectsSupported(OUT [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]char[/font][/font][/font][font="Consolas"][font="Consolas"]** Buffer)
{
[font="Consolas"][font="Consolas"][font="Consolas"][font="Consolas"]
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]static[/font][/font][/font][font="Consolas"][font="Consolas"] [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]char[/font][/font][/font][font="Consolas"][font="Consolas"] ALEffects_Settings[2048] = {0};
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]char[/font][/font][/font][font="Consolas"][font="Consolas"]* Temp_ALState;
ALuint uiEffects[1] = {0};
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]if[/font][/font][/font][font="Consolas"][font="Consolas"]((!g_pAudioContext) || (!g_pAudioDevice))
{
*Buffer = msg_FailedALDeviceContext;
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]return[/font][/font][/font][font="Consolas"][font="Consolas"];
}
alGenEffects = (LPALGENEFFECTS)f_FindALExtensionHelper([/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"alIsEffect"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"NULL"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]false[/font][/font][/font][font="Consolas"][font="Consolas"]);
alDeleteEffects = (LPALDELETEEFFECTS)f_FindALExtensionHelper([/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"alDeleteEffects"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"NULL"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]false[/font][/font][/font][font="Consolas"][font="Consolas"]);
alIsEffect = (LPALISEFFECT)f_FindALExtensionHelper([/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"alIsEffect"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"NULL"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]false[/font][/font][/font][font="Consolas"][font="Consolas"]);
alEffecti = (LPALEFFECTI)f_FindALExtensionHelper([/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"alEffecti"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"NULL"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]false[/font][/font][/font][font="Consolas"][font="Consolas"]);
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]if[/font][/font][/font][font="Consolas"][font="Consolas"]((!alGenEffects) || (!alDeleteEffects) || (!alIsEffect) || (!alEffecti))
{
*Buffer = msg_ALEffectCallback;
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]return[/font][/font][/font][font="Consolas"][font="Consolas"];
}
alGenEffects(1, &uiEffects[0]); [/font][/font][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"]// The value in here stays 0 after generating effects slots, On openAL SDK 1.1 EFX enumerate, The value changes to 1.
[/font][/font][/font][font="Consolas"][font="Consolas"][/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]if[/font][/font][/font][font="Consolas"][font="Consolas"](f_checkALErrorHelper([/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"f_AskEffectsSupported : Generating effects."[/font][/font][/font][font="Consolas"][font="Consolas"], &Temp_ALState) != AL_NO_ERROR) [/font][/font][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"]// First Check.
[/font][/font][/font][font="Consolas"][font="Consolas"]{
*Buffer = msg_ALFailedEffects;
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]return[/font][/font][/font][font="Consolas"][font="Consolas"];
}
[/font][/font][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"]// Scan effects :
[/font][/font][/font][font="Consolas"][font="Consolas"]strcpy_s(&ALEffects_Settings[0], [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]sizeof[/font][/font][/font][font="Consolas"][font="Consolas"](ALEffects_Settings), [/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"Effects supported : "[/font][/font][/font][font="Consolas"][font="Consolas"]);
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]if[/font][/font][/font][font="Consolas"][font="Consolas"](alIsEffect(uiEffects[0])) [/font][/font][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"]// Double check.
[/font][/font][/font][font="Consolas"][font="Consolas"]{
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]for[/font][/font][/font][font="Consolas"][font="Consolas"]([/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][font="Consolas"] i = 1; i < ([/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]sizeof[/font][/font][/font][font="Consolas"][font="Consolas"](Effects_Table) / [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]sizeof[/font][/font][/font][font="Consolas"][font="Consolas"](Effects_Support)); i++)
{
alEffecti(uiEffects[0], AL_EFFECT_TYPE, Effects_Table.Effect);
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]if[/font][/font][/font][font="Consolas"][font="Consolas"](f_checkALErrorHelper([/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"f_AskEffectsFiltersSupported : Setting Effect"[/font][/font][/font][font="Consolas"][font="Consolas"], &Temp_ALState) == AL_NO_ERROR)
{
strcat_s(&ALEffects_Settings[0], [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]sizeof[/font][/font][/font][font="Consolas"][font="Consolas"](ALEffects_Settings), Effects_Table.EffectName);
strcat_s(&ALEffects_Settings[0], [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]sizeof[/font][/font][/font][font="Consolas"][font="Consolas"](ALEffects_Settings), [/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]","[/font][/font][/font][font="Consolas"][font="Consolas"]);
}
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]else
[/font][/font][/font][font="Consolas"][font="Consolas"][/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]continue[/font][/font][/font][font="Consolas"][font="Consolas"];
}
*Buffer = &ALEffects_Settings[0];
[/font][/font]
[/font][/font][font="Consolas"][font="Consolas"]
[/font][/font][/font][/font][font="Consolas"][font="Consolas"]}
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]else
[/font][/font][/font][font="Consolas"][font="Consolas"]*Buffer = msg_ALFailedEffects;
alDeleteEffects(1, &uiEffects[0]);
};
[font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]
void[/font][/font][/font][font="Consolas"][font="Consolas"] f_AskFiltersSupported(OUT [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]char[/font][/font][/font][font="Consolas"][font="Consolas"]** Buffer)
{
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]static[/font][/font][/font][font="Consolas"][font="Consolas"] [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]char[/font][/font][/font][font="Consolas"][font="Consolas"] ALFilters_Settings[2048] = {0};
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]char[/font][/font][/font][font="Consolas"][font="Consolas"]* Temp_ALState;
ALuint uiFilters[1] = {0};
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]if[/font][/font][/font][font="Consolas"][font="Consolas"]((!g_pAudioContext) || (!g_pAudioDevice))
{
*Buffer = msg_FailedALDeviceContext;
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]return[/font][/font][/font][font="Consolas"][font="Consolas"];
}
alGenFilters = (LPALGENFILTERS)f_FindALExtensionHelper([/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"alGenFilters"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"NULL"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]false[/font][/font][/font][font="Consolas"][font="Consolas"]);
alDeleteFilters = (LPALDELETEFILTERS)f_FindALExtensionHelper([/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"alDeleteFilters"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"NULL"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]false[/font][/font][/font][font="Consolas"][font="Consolas"]);
alIsFilter = (LPALISFILTER)f_FindALExtensionHelper([/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"alIsFilter"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"NULL"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]false[/font][/font][/font][font="Consolas"][font="Consolas"]);
alFilteri = (LPALFILTERI)f_FindALExtensionHelper([/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"alFilteri"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"NULL"[/font][/font][/font][font="Consolas"][font="Consolas"], [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]false[/font][/font][/font][font="Consolas"][font="Consolas"]);
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]if[/font][/font][/font][font="Consolas"][font="Consolas"]((!alGenFilters) || (!alDeleteFilters) || (!alIsFilter) || (!alFilteri))
{
*Buffer = msg_ALFilterCallback;
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]return[/font][/font][/font][font="Consolas"][font="Consolas"];
}
alGetError(); [/font][/font][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"]// Commenting this line will cause the function to fail.
[/font][/font][/font][font="Consolas"][font="Consolas"]alGenFilters(1, &uiFilters[0]); [/font][/font][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"]// Here it changes to 1.
[/font][/font][/font][font="Consolas"][font="Consolas"][/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]if[/font][/font][/font][font="Consolas"][font="Consolas"](f_checkALErrorHelper([/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"f_AskEffectsSupported : Generating filters."[/font][/font][/font][font="Consolas"][font="Consolas"], &Temp_ALState) != AL_NO_ERROR) [/font][/font][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"]// First check.
[/font][/font][/font][font="Consolas"][font="Consolas"]{
*Buffer = msg_ALFailedFilters;
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]return[/font][/font][/font][font="Consolas"][font="Consolas"];
}
[/font][/font][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"]// Scan filters :
[/font][/font][/font][font="Consolas"][font="Consolas"]f_checkALErrorHelper([/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"f_AskEffectsFiltersSupported : Setting Filters"[/font][/font][/font][font="Consolas"][font="Consolas"], &Temp_ALState);
strcpy_s(&ALFilters_Settings[0], [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]sizeof[/font][/font][/font][font="Consolas"][font="Consolas"](ALFilters_Settings), [/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"Filters supported : "[/font][/font][/font][font="Consolas"][font="Consolas"]);
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]if[/font][/font][/font][font="Consolas"][font="Consolas"](alIsFilter(uiFilters[0])) [/font][/font][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"][font="Consolas"][color="#008000"]// Double check.
[/font][/font][/font][font="Consolas"][font="Consolas"]{
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]for[/font][/font][/font][font="Consolas"][font="Consolas"]([/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][font="Consolas"] i = 1; i < ([/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]sizeof[/font][/font][/font][font="Consolas"][font="Consolas"](Filter_Table) / [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]sizeof[/font][/font][/font][font="Consolas"][font="Consolas"](Filters_Support)); i++)
{
alFilteri(uiFilters[0], AL_FILTER_TYPE, Filter_Table.Filter);
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]if[/font][/font][/font][font="Consolas"][font="Consolas"](f_checkALErrorHelper([/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]"f_AskEffectsFiltersSupported : Setting Filters"[/font][/font][/font][font="Consolas"][font="Consolas"], &Temp_ALState) == AL_NO_ERROR)
{
strcat_s(&ALFilters_Settings[0], [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]sizeof[/font][/font][/font][font="Consolas"][font="Consolas"](ALFilters_Settings), Filter_Table.FilterName);
strcat_s(&ALFilters_Settings[0], [/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]sizeof[/font][/font][/font][font="Consolas"][font="Consolas"](ALFilters_Settings), [/font][/font][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"][font="Consolas"][color="#a31515"]","[/font][/font][/font][font="Consolas"][font="Consolas"]);
}
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]else
[/font][/font][/font][font="Consolas"][font="Consolas"][/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]continue[/font][/font][/font][font="Consolas"][font="Consolas"];
}
*Buffer = &ALFilters_Settings[0];
}
[/font][/font][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"][font="Consolas"][color="#0000ff"]else
[/font][/font][/font][font="Consolas"][font="Consolas"]*Buffer = msg_ALFailedFilters;
alDeleteFilters(1, &uiFilters[0]);
};[/font][/font][/font][/font]
[/source]
Thanks in advance.
OpenAL - Error tracking
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement