From 668e4181515c00e809fe5cd0dde5be7a4c5b1ea5 Mon Sep 17 00:00:00 2001 From: David Reid Date: Sun, 15 Jul 2018 20:59:05 +1000 Subject: [PATCH] Start using the new callback system for the OpenSL backend. --- mini_al.h | 113 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 59 insertions(+), 54 deletions(-) diff --git a/mini_al.h b/mini_al.h index 6e12a96b..283ed2d3 100644 --- a/mini_al.h +++ b/mini_al.h @@ -12667,7 +12667,6 @@ mal_result mal_context_init__jack(mal_context* pContext) pContext->onDeviceIDEqual = mal_context_is_device_id_equal__jack; pContext->onEnumDevices = mal_context_enumerate_devices__jack; pContext->onGetDeviceInfo = mal_context_get_device_info__jack; - pContext->onGetDeviceInfo = mal_context_get_device_info__jack; pContext->onDeviceInit = mal_device_init__jack; pContext->onDeviceUninit = mal_device_uninit__jack; pContext->onDeviceStart = mal_device__start_backend__jack; @@ -15351,54 +15350,6 @@ return_detailed_info: return MAL_SUCCESS; } -mal_result mal_context_init__opensl(mal_context* pContext) -{ - mal_assert(pContext != NULL); - (void)pContext; - - // Initialize global data first if applicable. - if (mal_atomic_increment_32(&g_malOpenSLInitCounter) == 1) { - SLresult resultSL = slCreateEngine(&g_malEngineObjectSL, 0, NULL, 0, NULL, NULL); - if (resultSL != SL_RESULT_SUCCESS) { - mal_atomic_decrement_32(&g_malOpenSLInitCounter); - return MAL_NO_BACKEND; - } - - (*g_malEngineObjectSL)->Realize(g_malEngineObjectSL, SL_BOOLEAN_FALSE); - - resultSL = (*g_malEngineObjectSL)->GetInterface(g_malEngineObjectSL, SL_IID_ENGINE, &g_malEngineSL); - if (resultSL != SL_RESULT_SUCCESS) { - (*g_malEngineObjectSL)->Destroy(g_malEngineObjectSL); - mal_atomic_decrement_32(&g_malOpenSLInitCounter); - return MAL_NO_BACKEND; - } - } - - pContext->isBackendAsynchronous = MAL_TRUE; - - pContext->onDeviceIDEqual = mal_context_is_device_id_equal__opensl; - pContext->onEnumDevices = mal_context_enumerate_devices__opensl; - pContext->onGetDeviceInfo = mal_context_get_device_info__opensl; - - return MAL_SUCCESS; -} - -mal_result mal_context_uninit__opensl(mal_context* pContext) -{ - mal_assert(pContext != NULL); - mal_assert(pContext->backend == mal_backend_opensl); - (void)pContext; - - // Uninit global data. - if (g_malOpenSLInitCounter > 0) { - if (mal_atomic_decrement_32(&g_malOpenSLInitCounter) == 0) { - (*g_malEngineObjectSL)->Destroy(g_malEngineObjectSL); - } - } - - return MAL_SUCCESS; -} - #ifdef MAL_ANDROID //void mal_buffer_queue_callback__opensl_android(SLAndroidSimpleBufferQueueItf pBufferQueue, SLuint32 eventFlags, const void* pBuffer, SLuint32 bufferSize, SLuint32 dataUsed, void* pContext) @@ -15811,6 +15762,60 @@ mal_result mal_device__stop_backend__opensl(mal_device* pDevice) return MAL_SUCCESS; } + + +mal_result mal_context_uninit__opensl(mal_context* pContext) +{ + mal_assert(pContext != NULL); + mal_assert(pContext->backend == mal_backend_opensl); + (void)pContext; + + // Uninit global data. + if (g_malOpenSLInitCounter > 0) { + if (mal_atomic_decrement_32(&g_malOpenSLInitCounter) == 0) { + (*g_malEngineObjectSL)->Destroy(g_malEngineObjectSL); + } + } + + return MAL_SUCCESS; +} + +mal_result mal_context_init__opensl(mal_context* pContext) +{ + mal_assert(pContext != NULL); + (void)pContext; + + // Initialize global data first if applicable. + if (mal_atomic_increment_32(&g_malOpenSLInitCounter) == 1) { + SLresult resultSL = slCreateEngine(&g_malEngineObjectSL, 0, NULL, 0, NULL, NULL); + if (resultSL != SL_RESULT_SUCCESS) { + mal_atomic_decrement_32(&g_malOpenSLInitCounter); + return MAL_NO_BACKEND; + } + + (*g_malEngineObjectSL)->Realize(g_malEngineObjectSL, SL_BOOLEAN_FALSE); + + resultSL = (*g_malEngineObjectSL)->GetInterface(g_malEngineObjectSL, SL_IID_ENGINE, &g_malEngineSL); + if (resultSL != SL_RESULT_SUCCESS) { + (*g_malEngineObjectSL)->Destroy(g_malEngineObjectSL); + mal_atomic_decrement_32(&g_malOpenSLInitCounter); + return MAL_NO_BACKEND; + } + } + + pContext->isBackendAsynchronous = MAL_TRUE; + + pContext->onUninit = mal_context_uninit__opensl; + pContext->onDeviceIDEqual = mal_context_is_device_id_equal__opensl; + pContext->onEnumDevices = mal_context_enumerate_devices__opensl; + pContext->onGetDeviceInfo = mal_context_get_device_info__opensl; + pContext->onDeviceInit = mal_device_init__opensl; + pContext->onDeviceUninit = mal_device_uninit__opensl; + pContext->onDeviceStart = mal_device__start_backend__opensl; + pContext->onDeviceStop = mal_device__stop_backend__opensl; + + return MAL_SUCCESS; +} #endif // OpenSL|ES /////////////////////////////////////////////////////////////////////////////// @@ -18008,7 +18013,7 @@ mal_result mal_context_uninit(mal_context* pContext) #ifdef MAL_HAS_OPENSL case mal_backend_opensl: { - mal_context_uninit__opensl(pContext); + pContext->onUninit(pContext); } break; #endif #ifdef MAL_HAS_OPENAL @@ -18354,7 +18359,7 @@ mal_result mal_device_init(mal_context* pContext, mal_device_type type, mal_devi #ifdef MAL_HAS_OPENSL case mal_backend_opensl: { - result = mal_device_init__opensl(pContext, type, pDeviceID, &config, pDevice); + result = pContext->onDeviceInit(pContext, type, pDeviceID, &config, pDevice); } break; #endif #ifdef MAL_HAS_OPENAL @@ -18568,7 +18573,7 @@ void mal_device_uninit(mal_device* pDevice) #endif #ifdef MAL_HAS_OPENSL if (pDevice->pContext->backend == mal_backend_opensl) { - mal_device_uninit__opensl(pDevice); + pDevice->pContext->onDeviceUninit(pDevice); } #endif #ifdef MAL_HAS_OPENAL @@ -18665,7 +18670,7 @@ mal_result mal_device_start(mal_device* pDevice) #endif #ifdef MAL_HAS_OPENSL if (pDevice->pContext->backend == mal_backend_opensl) { - result = mal_device__start_backend__opensl(pDevice); + result = pDevice->pContext->onDeviceStart(pDevice); if (result == MAL_SUCCESS) { mal_device__set_state(pDevice, MAL_STATE_STARTED); } @@ -18738,7 +18743,7 @@ mal_result mal_device_stop(mal_device* pDevice) #endif #ifdef MAL_HAS_OPENSL if (pDevice->pContext->backend == mal_backend_opensl) { - mal_device__stop_backend__opensl(pDevice); + pDevice->pContext->onDeviceStop(pDevice); } #endif #ifdef MAL_HAS_SDL