Fixed crash on Android 8, due to bugs in AAudio implementation

This commit is contained in:
Sam Lantinga 2021-11-02 15:59:26 -07:00
parent c948b9366c
commit 6d5edfa733
1 changed files with 12 additions and 3 deletions

View File

@ -65,7 +65,7 @@ static int aaudio_LoadFunctions(AAUDIO_Data *data)
void aaudio_errorCallback( AAudioStream *stream, void *userData, aaudio_result_t error ); void aaudio_errorCallback( AAudioStream *stream, void *userData, aaudio_result_t error );
void aaudio_errorCallback( AAudioStream *stream, void *userData, aaudio_result_t error ) void aaudio_errorCallback( AAudioStream *stream, void *userData, aaudio_result_t error )
{ {
LOGI( "SDL aaudio_errorCallback: %d - %s", error, ctx.AAudio_convertResultToText( error ) ); LOGI( "SDL aaudio_errorCallback: %d - %s", error, ctx.AAudio_convertResultToText( error ) );
} }
#define LIB_AAUDIO_SO "libaaudio.so" #define LIB_AAUDIO_SO "libaaudio.so"
@ -115,7 +115,7 @@ aaudio_OpenDevice(_THIS, void *handle, const char *devname, int iscapture)
ctx.AAudioStreamBuilder_setFormat(ctx.builder, format); ctx.AAudioStreamBuilder_setFormat(ctx.builder, format);
} }
ctx.AAudioStreamBuilder_setErrorCallback( ctx.builder, aaudio_errorCallback, private ); ctx.AAudioStreamBuilder_setErrorCallback( ctx.builder, aaudio_errorCallback, private );
LOGI("AAudio Try to open %u hz %u bit chan %u %s samples %u", LOGI("AAudio Try to open %u hz %u bit chan %u %s samples %u",
this->spec.freq, SDL_AUDIO_BITSIZE(this->spec.format), this->spec.freq, SDL_AUDIO_BITSIZE(this->spec.format),
@ -274,11 +274,20 @@ aaudio_Init(SDL_AudioDriverImpl *impl)
aaudio_result_t res; aaudio_result_t res;
LOGI(__func__); LOGI(__func__);
/* AAudio was introduced in Android 8.0, but has reference counting crash issues in that release,
* so don't use it until 8.1.
*
* See https://github.com/google/oboe/issues/40 for more information.
*/
if (SDL_GetAndroidSDKVersion() < 27) {
return 0;
}
SDL_zero(ctx); SDL_zero(ctx);
ctx.handle = SDL_LoadObject(LIB_AAUDIO_SO); ctx.handle = SDL_LoadObject(LIB_AAUDIO_SO);
if (ctx.handle == NULL) { if (ctx.handle == NULL) {
LOGI("SDL Failed to found " LIB_AAUDIO_SO); LOGI("SDL couldn't find " LIB_AAUDIO_SO);
goto failure; goto failure;
} }