mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-24 09:14:04 +02:00
Make mal_device_init_ex() more robust.
This commit is contained in:
@@ -1283,7 +1283,7 @@ struct mal_device
|
|||||||
//
|
//
|
||||||
// Effeciency: LOW
|
// Effeciency: LOW
|
||||||
// This will dynamically load backends DLLs/SOs (such as dsound.dll).
|
// This will dynamically load backends DLLs/SOs (such as dsound.dll).
|
||||||
mal_result mal_context_init(mal_backend backends[], mal_uint32 backendCount, const mal_context_config* pConfig, mal_context* pContext);
|
mal_result mal_context_init(const mal_backend backends[], mal_uint32 backendCount, const mal_context_config* pConfig, mal_context* pContext);
|
||||||
|
|
||||||
// Uninitializes a context.
|
// Uninitializes a context.
|
||||||
//
|
//
|
||||||
@@ -1364,7 +1364,7 @@ mal_result mal_device_init(mal_context* pContext, mal_device_type type, mal_devi
|
|||||||
// of the internal self-managed context.
|
// of the internal self-managed context.
|
||||||
//
|
//
|
||||||
// See mal_device_init().
|
// See mal_device_init().
|
||||||
mal_result mal_device_init_ex(mal_backend backends[], mal_uint32 backendCount, const mal_context_config* pContextConfig, mal_device_type type, mal_device_id* pDeviceID, const mal_device_config* pConfig, void* pUserData, mal_device* pDevice);
|
mal_result mal_device_init_ex(const mal_backend backends[], mal_uint32 backendCount, const mal_context_config* pContextConfig, mal_device_type type, mal_device_id* pDeviceID, const mal_device_config* pConfig, void* pUserData, mal_device* pDevice);
|
||||||
|
|
||||||
// Uninitializes a device.
|
// Uninitializes a device.
|
||||||
//
|
//
|
||||||
@@ -11927,7 +11927,21 @@ mal_result mal_context_uninit_backend_apis(mal_context* pContext)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
mal_result mal_context_init(mal_backend backends[], mal_uint32 backendCount, const mal_context_config* pConfig, mal_context* pContext)
|
static const mal_backend g_malDefaultBackends[] = {
|
||||||
|
mal_backend_wasapi,
|
||||||
|
mal_backend_dsound,
|
||||||
|
mal_backend_winmm,
|
||||||
|
mal_backend_alsa,
|
||||||
|
mal_backend_pulseaudio,
|
||||||
|
mal_backend_jack,
|
||||||
|
mal_backend_oss,
|
||||||
|
mal_backend_opensl,
|
||||||
|
mal_backend_openal,
|
||||||
|
mal_backend_sdl,
|
||||||
|
mal_backend_null
|
||||||
|
};
|
||||||
|
|
||||||
|
mal_result mal_context_init(const mal_backend backends[], mal_uint32 backendCount, const mal_context_config* pConfig, mal_context* pContext)
|
||||||
{
|
{
|
||||||
if (pContext == NULL) return MAL_INVALID_ARGS;
|
if (pContext == NULL) return MAL_INVALID_ARGS;
|
||||||
mal_zero_object(pContext);
|
mal_zero_object(pContext);
|
||||||
@@ -11945,23 +11959,9 @@ mal_result mal_context_init(mal_backend backends[], mal_uint32 backendCount, con
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static mal_backend defaultBackends[] = {
|
|
||||||
mal_backend_wasapi,
|
|
||||||
mal_backend_dsound,
|
|
||||||
mal_backend_winmm,
|
|
||||||
mal_backend_alsa,
|
|
||||||
mal_backend_pulseaudio,
|
|
||||||
mal_backend_jack,
|
|
||||||
mal_backend_oss,
|
|
||||||
mal_backend_opensl,
|
|
||||||
mal_backend_openal,
|
|
||||||
mal_backend_sdl,
|
|
||||||
mal_backend_null
|
|
||||||
};
|
|
||||||
|
|
||||||
if (backends == NULL) {
|
if (backends == NULL) {
|
||||||
backends = defaultBackends;
|
backends = g_malDefaultBackends;
|
||||||
backendCount = mal_countof(defaultBackends);
|
backendCount = mal_countof(g_malDefaultBackends);
|
||||||
}
|
}
|
||||||
|
|
||||||
mal_assert(backends != NULL);
|
mal_assert(backends != NULL);
|
||||||
@@ -12466,22 +12466,33 @@ mal_result mal_device_init(mal_context* pContext, mal_device_type type, mal_devi
|
|||||||
return MAL_SUCCESS;
|
return MAL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
mal_result mal_device_init_ex(mal_backend backends[], mal_uint32 backendCount, const mal_context_config* pContextConfig, mal_device_type type, mal_device_id* pDeviceID, const mal_device_config* pConfig, void* pUserData, mal_device* pDevice)
|
mal_result mal_device_init_ex(const mal_backend backends[], mal_uint32 backendCount, const mal_context_config* pContextConfig, mal_device_type type, mal_device_id* pDeviceID, const mal_device_config* pConfig, void* pUserData, mal_device* pDevice)
|
||||||
{
|
{
|
||||||
mal_context* pContext = (mal_context*)mal_malloc(sizeof(*pContext));
|
mal_context* pContext = (mal_context*)mal_malloc(sizeof(*pContext));
|
||||||
if (pContext == NULL) {
|
if (pContext == NULL) {
|
||||||
return MAL_OUT_OF_MEMORY;
|
return MAL_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
mal_result result = mal_context_init(backends, backendCount, pContextConfig, pContext);
|
if (backends == NULL) {
|
||||||
if (result != MAL_SUCCESS) {
|
backends = g_malDefaultBackends;
|
||||||
mal_free(pContext);
|
backendCount = mal_countof(g_malDefaultBackends);
|
||||||
return result;
|
}
|
||||||
|
|
||||||
|
mal_result result = MAL_NO_BACKEND;
|
||||||
|
|
||||||
|
for (mal_uint32 iBackend = 0; iBackend < backendCount; ++iBackend) {
|
||||||
|
result = mal_context_init(&backends[iBackend], 1, pContextConfig, pContext);
|
||||||
|
if (result == MAL_SUCCESS) {
|
||||||
|
result = mal_device_init(pContext, type, pDeviceID, pConfig, pUserData, pDevice);
|
||||||
|
if (result == MAL_SUCCESS) {
|
||||||
|
break; // Success.
|
||||||
|
} else {
|
||||||
|
mal_context_uninit(pContext); // Failure.
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
result = mal_device_init(pContext, type, pDeviceID, pConfig, pUserData, pDevice);
|
|
||||||
if (result != MAL_SUCCESS) {
|
if (result != MAL_SUCCESS) {
|
||||||
mal_context_uninit(pContext);
|
|
||||||
mal_free(pContext);
|
mal_free(pContext);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -15596,6 +15607,8 @@ void mal_pcm_f32_to_s32(int* pOut, const float* pIn, unsigned int count)
|
|||||||
// - Add support for JACK.
|
// - Add support for JACK.
|
||||||
// - Remove dependency on asound.h for the ALSA backend. This means the ALSA development packages are no
|
// - Remove dependency on asound.h for the ALSA backend. This means the ALSA development packages are no
|
||||||
// longer required to build mini_al.
|
// longer required to build mini_al.
|
||||||
|
// - Make mal_device_init_ex() more robust.
|
||||||
|
// - Make some APIs more const-correct.
|
||||||
// - Fix errors with OpenAL detection.
|
// - Fix errors with OpenAL detection.
|
||||||
// - Fix some memory leaks.
|
// - Fix some memory leaks.
|
||||||
// - Miscellaneous bug fixes.
|
// - Miscellaneous bug fixes.
|
||||||
|
|||||||
Reference in New Issue
Block a user