From 87d05684b04b704a78298855c219888a851db5d6 Mon Sep 17 00:00:00 2001 From: David Reid Date: Sun, 25 Feb 2018 20:01:14 +1000 Subject: [PATCH] Add some device config initialization helpers. --- mini_al.h | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/mini_al.h b/mini_al.h index 287f6679..e7394ccc 100644 --- a/mini_al.h +++ b/mini_al.h @@ -1418,13 +1418,18 @@ mal_context_config mal_context_config_init(mal_log_proc onLog); // // Efficiency: HIGH // This just returns a stack allocated object and consists of just a few assignments. -mal_device_config mal_device_config_init(mal_format format, mal_uint32 channels, mal_uint32 sampleRate, mal_recv_proc onRecvCallback, mal_send_proc onSendCallback); +mal_device_config mal_device_config_init_ex(mal_format format, mal_uint32 channels, mal_uint32 sampleRate, mal_uint8 channelMap[MAL_MAX_CHANNELS], mal_recv_proc onRecvCallback, mal_send_proc onSendCallback); + +// A simplified version of mal_device_config_init_ex(). +static inline mal_device_config mal_device_config_init(mal_format format, mal_uint32 channels, mal_uint32 sampleRate, mal_recv_proc onRecvCallback, mal_send_proc onSendCallback) { return mal_device_config_init_ex(format, channels, sampleRate, NULL, onRecvCallback, onSendCallback); } // A simplified version of mal_device_config_init() for capture devices. -static inline mal_device_config mal_device_config_init_capture(mal_format format, mal_uint32 channels, mal_uint32 sampleRate, mal_recv_proc onRecvCallback) { return mal_device_config_init(format, channels, sampleRate, onRecvCallback, NULL); } +static inline mal_device_config mal_device_config_init_capture_ex(mal_format format, mal_uint32 channels, mal_uint32 sampleRate, mal_uint8 channelMap[MAL_MAX_CHANNELS], mal_recv_proc onRecvCallback) { return mal_device_config_init_ex(format, channels, sampleRate, channelMap, onRecvCallback, NULL); } +static inline mal_device_config mal_device_config_init_capture(mal_format format, mal_uint32 channels, mal_uint32 sampleRate, mal_recv_proc onRecvCallback) { return mal_device_config_init_capture_ex(format, channels, sampleRate, NULL, onRecvCallback); } // A simplified version of mal_device_config_init() for playback devices. -static inline mal_device_config mal_device_config_init_playback(mal_format format, mal_uint32 channels, mal_uint32 sampleRate, mal_send_proc onSendCallback) { return mal_device_config_init(format, channels, sampleRate, NULL, onSendCallback); } +static inline mal_device_config mal_device_config_init_playback_ex(mal_format format, mal_uint32 channels, mal_uint32 sampleRate, mal_uint8 channelMap[MAL_MAX_CHANNELS], mal_send_proc onSendCallback) { return mal_device_config_init_ex(format, channels, sampleRate, channelMap, NULL, onSendCallback); } +static inline mal_device_config mal_device_config_init_playback(mal_format format, mal_uint32 channels, mal_uint32 sampleRate, mal_send_proc onSendCallback) { return mal_device_config_init_playback_ex(format, channels, sampleRate, NULL, onSendCallback); } @@ -10348,7 +10353,7 @@ static void mal_get_default_device_config_channel_map(mal_uint32 channels, mal_u } } -mal_device_config mal_device_config_init(mal_format format, mal_uint32 channels, mal_uint32 sampleRate, mal_recv_proc onRecvCallback, mal_send_proc onSendCallback) +mal_device_config mal_device_config_init_ex(mal_format format, mal_uint32 channels, mal_uint32 sampleRate, mal_uint8 channelMap[MAL_MAX_CHANNELS], mal_recv_proc onRecvCallback, mal_send_proc onSendCallback) { mal_device_config config; mal_zero_object(&config); @@ -10358,7 +10363,13 @@ mal_device_config mal_device_config_init(mal_format format, mal_uint32 channels, config.sampleRate = sampleRate; config.onRecvCallback = onRecvCallback; config.onSendCallback = onSendCallback; - mal_get_default_device_config_channel_map(channels, config.channelMap); + + if (channelMap == NULL) { + mal_get_default_device_config_channel_map(channels, config.channelMap); + } else { + mal_copy_memory(config.channelMap, channelMap, sizeof(config.channelMap)); + } + return config; }