From ea3f4f3ffdcc69df467d256b13364d31acab3588 Mon Sep 17 00:00:00 2001 From: David Reid Date: Sat, 24 Aug 2019 07:12:51 +1000 Subject: [PATCH] Add APIs for checking for loopback support. --- miniaudio.h | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/miniaudio.h b/miniaudio.h index 75f26d26..28a53467 100644 --- a/miniaudio.h +++ b/miniaudio.h @@ -2713,6 +2713,11 @@ Thread Safety: SAFE */ ma_result ma_context_get_device_info(ma_context* pContext, ma_device_type deviceType, const ma_device_id* pDeviceID, ma_share_mode shareMode, ma_device_info* pDeviceInfo); +/* +Determines if the given context supports loopback mode. +*/ +ma_bool32 ma_context_is_loopback_supported(ma_context* pContext); + /* Initializes a device. @@ -2950,6 +2955,12 @@ Retrieves a friendly name for a backend. */ const char* ma_get_backend_name(ma_backend backend); +/* +Determines whether or not loopback mode is support by a backend. +*/ +ma_bool32 ma_is_loopback_supported(ma_backend backend); + + /* Adjust buffer size based on a scaling factor. @@ -4368,7 +4379,29 @@ const char* ma_get_backend_name(ma_backend backend) case ma_backend_opensl: return "OpenSL|ES"; case ma_backend_webaudio: return "Web Audio"; case ma_backend_null: return "Null"; - default: return "Unknown"; + default: return "Unknown"; + } +} + +ma_bool32 ma_is_loopback_supported(ma_backend backend) +{ + switch (backend) + { + case ma_backend_wasapi: return MA_TRUE; + case ma_backend_dsound: return MA_FALSE; + case ma_backend_winmm: return MA_FALSE; + case ma_backend_coreaudio: return MA_FALSE; + case ma_backend_sndio: return MA_FALSE; + case ma_backend_audio4: return MA_FALSE; + case ma_backend_oss: return MA_FALSE; + case ma_backend_pulseaudio: return MA_FALSE; + case ma_backend_alsa: return MA_FALSE; + case ma_backend_jack: return MA_FALSE; + case ma_backend_aaudio: return MA_FALSE; + case ma_backend_opensl: return MA_FALSE; + case ma_backend_webaudio: return MA_FALSE; + case ma_backend_null: return MA_FALSE; + default: return MA_FALSE; } } @@ -24235,6 +24268,15 @@ ma_result ma_context_get_device_info(ma_context* pContext, ma_device_type device return MA_ERROR; } +ma_bool32 ma_context_is_loopback_supported(ma_context* pContext) +{ + if (pContext == NULL) { + return MA_FALSE; + } + + return ma_is_loopback_supported(pContext->backend); +} + ma_result ma_device_init(ma_context* pContext, const ma_device_config* pConfig, ma_device* pDevice) {