Advertisement

OpenAL - Error tracking

Started by July 29, 2011 10:47 AM
-1 comments, last by Illasera 13 years, 4 months ago
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.





This topic is closed to new replies.

Advertisement