mirror of https://github.com/bjornbytes/lovr.git
Simplify enumeration more;
This commit is contained in:
parent
d1801cfcde
commit
1995aae7e9
|
@ -19,15 +19,15 @@ StringEntry lovrTimeUnit[] = {
|
|||
{ 0 }
|
||||
};
|
||||
|
||||
static void onDevice(AudioDevice* device, void* userdata) {
|
||||
static void onDevice(const void* id, size_t size, const char* name, bool isDefault, void* userdata) {
|
||||
lua_State* L = userdata;
|
||||
lua_createtable(L, 0, 3);
|
||||
void* id = lua_newuserdata(L, device->idSize);
|
||||
memcpy(id, device->id, device->idSize);
|
||||
void* p = lua_newuserdata(L, size);
|
||||
memcpy(p, id, size);
|
||||
lua_setfield(L, -2, "id");
|
||||
lua_pushstring(L, device->name);
|
||||
lua_pushstring(L, name);
|
||||
lua_setfield(L, -2, "name");
|
||||
lua_pushboolean(L, device->isDefault);
|
||||
lua_pushboolean(L, isDefault);
|
||||
lua_setfield(L, -2, "default");
|
||||
lua_rawseti(L, -2, luax_len(L, -2) + 1);
|
||||
}
|
||||
|
|
|
@ -228,30 +228,21 @@ const char* lovrAudioGetSpatializer() {
|
|||
return state.spatializer->name;
|
||||
}
|
||||
|
||||
static LOVR_THREAD_LOCAL struct {
|
||||
AudioType type;
|
||||
AudioDeviceCallback* callback;
|
||||
} enumerateContext;
|
||||
static AudioDeviceCallback* enumerateCallback;
|
||||
|
||||
static ma_bool32 enumerateCallback(ma_context* context, ma_device_type type, const ma_device_info* info, void* userdata) {
|
||||
if (type == (enumerateContext.type == AUDIO_PLAYBACK ? ma_device_type_playback : ma_device_type_capture)) {
|
||||
AudioDevice device = {
|
||||
.id = &info->id,
|
||||
.idSize = sizeof(info->id),
|
||||
.name = info->name,
|
||||
.isDefault = info->isDefault
|
||||
};
|
||||
|
||||
enumerateContext.callback(&device, userdata);
|
||||
}
|
||||
static ma_bool32 enumPlayback(ma_context* context, ma_device_type type, const ma_device_info* info, void* userdata) {
|
||||
if (type == ma_device_type_playback) enumerateCallback(&info->id, sizeof(info->id), info->name, info->isDefault, userdata);
|
||||
return MA_TRUE;
|
||||
}
|
||||
|
||||
static ma_bool32 enumCapture(ma_context* context, ma_device_type type, const ma_device_info* info, void* userdata) {
|
||||
if (type == ma_device_type_capture) enumerateCallback(&info->id, sizeof(info->id), info->name, info->isDefault, userdata);
|
||||
return MA_TRUE;
|
||||
}
|
||||
|
||||
void lovrAudioEnumerateDevices(AudioType type, AudioDeviceCallback* callback, void* userdata) {
|
||||
enumerateContext.type = type;
|
||||
enumerateContext.callback = callback;
|
||||
ma_context_enumerate_devices(&state.context, enumerateCallback, userdata);
|
||||
enumerateCallback = callback;
|
||||
ma_context_enumerate_devices(&state.context, type == AUDIO_PLAYBACK ? enumPlayback : enumCapture, userdata);
|
||||
}
|
||||
|
||||
bool lovrAudioSetDevice(AudioType type, void* id, size_t size, uint32_t sampleRate, SampleFormat format, bool exclusive) {
|
||||
|
|
|
@ -20,14 +20,7 @@ typedef enum {
|
|||
UNIT_FRAMES
|
||||
} TimeUnit;
|
||||
|
||||
typedef struct {
|
||||
size_t idSize;
|
||||
const void* id;
|
||||
const char* name;
|
||||
bool isDefault;
|
||||
} AudioDevice;
|
||||
|
||||
typedef void AudioDeviceCallback(AudioDevice* device, void* userdata);
|
||||
typedef void AudioDeviceCallback(const void* id, size_t size, const char* name, bool isDefault, void* userdata);
|
||||
|
||||
bool lovrAudioInit(const char* spatializer);
|
||||
void lovrAudioDestroy(void);
|
||||
|
|
Loading…
Reference in New Issue