From 2448d0f2291d7950d4b86daa087d2370f12022a4 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Thu, 6 Mar 2014 07:02:25 -0700 Subject: [PATCH] Load up the lists of audio devices in settings It will now load up a the list of audio input/output devices in the combo boxes in audio settings. --- libobs/obs-properties.c | 2 +- obs/forms/OBSBasicSettings.ui | 10 +++--- obs/window-basic-settings.cpp | 51 ++++++++++++++++++++++++++++++ obs/window-basic-settings.hpp | 3 ++ plugins/win-wasapi/enum-wasapi.cpp | 2 ++ plugins/win-wasapi/win-wasapi.cpp | 15 +++++---- 6 files changed, 71 insertions(+), 12 deletions(-) diff --git a/libobs/obs-properties.c b/libobs/obs-properties.c index a30b2c9d3..d09ff7a2e 100644 --- a/libobs/obs-properties.c +++ b/libobs/obs-properties.c @@ -289,7 +289,7 @@ void obs_property_list_add_item(obs_property_t p, .value = bstrdup(value) }; - da_insert(data->items, data->items.num-1, &item); + da_push_back(data->items, &item); } } diff --git a/obs/forms/OBSBasicSettings.ui b/obs/forms/OBSBasicSettings.ui index da96f7081..9400fcb7a 100644 --- a/obs/forms/OBSBasicSettings.ui +++ b/obs/forms/OBSBasicSettings.ui @@ -205,7 +205,7 @@ - false + true @@ -222,7 +222,7 @@ - false + true @@ -236,7 +236,7 @@ - false + true @@ -250,7 +250,7 @@ - false + true @@ -264,7 +264,7 @@ - false + true diff --git a/obs/window-basic-settings.cpp b/obs/window-basic-settings.cpp index 24c6e201a..ca6cff691 100644 --- a/obs/window-basic-settings.cpp +++ b/obs/window-basic-settings.cpp @@ -271,6 +271,55 @@ void OBSBasicSettings::LoadVideoSettings() loading = false; } +static inline void LoadListValue(QComboBox *widget, const char *text, + const char *val) +{ + widget->addItem(QT_UTF8(text), QT_UTF8(val)); +} + +static void LoadListValues(QComboBox *widget, obs_property_t prop) +{ + size_t count = obs_property_list_item_count(prop); + + widget->addItem(QTStr("Disabled"), "disabled"); + + for (size_t i = 0; i < count; i++) { + const char *name = obs_property_list_item_name(prop, i); + const char *val = obs_property_list_item_value(prop, i); + LoadListValue(widget, name, val); + } +} + +void OBSBasicSettings::LoadAudioDevices() +{ +#ifdef __APPLE__ + const char *input_id = "coreaudio_input_capture"; + const char *output_id = "coreaudio_output_capture"; +#elif _WIN32 + const char *input_id = "wasapi_input_capture"; + const char *output_id = "wasapi_output_capture"; +#else + return; +#endif + + obs_properties_t input_props = obs_source_properties( + OBS_SOURCE_TYPE_INPUT, input_id, App()->GetLocale()); + obs_properties_t output_props = obs_source_properties( + OBS_SOURCE_TYPE_INPUT, output_id, App()->GetLocale()); + + obs_property_t inputs = obs_properties_get(input_props, "device_id"); + obs_property_t outputs = obs_properties_get(output_props, "device_id"); + + LoadListValues(ui->desktopAudioDevice1, outputs); + LoadListValues(ui->desktopAudioDevice2, outputs); + LoadListValues(ui->auxAudioDevice1, inputs); + LoadListValues(ui->auxAudioDevice2, inputs); + LoadListValues(ui->auxAudioDevice3, inputs); + + obs_properties_destroy(input_props); + obs_properties_destroy(output_props); +} + void OBSBasicSettings::LoadAudioSettings() { uint32_t sampleRate = config_get_uint(GetGlobalConfig(), "Audio", @@ -301,6 +350,8 @@ void OBSBasicSettings::LoadAudioSettings() ui->audioBufferingTime->setValue(bufferingTime); + LoadAudioDevices(); + loading = false; } diff --git a/obs/window-basic-settings.hpp b/obs/window-basic-settings.hpp index 4e9dd8f6d..d20c9bdb9 100644 --- a/obs/window-basic-settings.hpp +++ b/obs/window-basic-settings.hpp @@ -63,6 +63,9 @@ private: /* general */ void LoadLanguageList(); + /* audio */ + void LoadAudioDevices(); + /* video */ void LoadRendererList(); void ResetDownscales(uint32_t cx, uint32_t cy); diff --git a/plugins/win-wasapi/enum-wasapi.cpp b/plugins/win-wasapi/enum-wasapi.cpp index 79a295ef1..09ca2c4ab 100644 --- a/plugins/win-wasapi/enum-wasapi.cpp +++ b/plugins/win-wasapi/enum-wasapi.cpp @@ -76,6 +76,8 @@ void GetWASAPIAudioDevices_(vector &devices, bool input) size = os_wcs_to_utf8(w_id, 0, nullptr); info.id.resize(size); os_wcs_to_utf8(w_id, size, &info.id[0]); + + devices.push_back(info); } } diff --git a/plugins/win-wasapi/win-wasapi.cpp b/plugins/win-wasapi/win-wasapi.cpp index 8dcd27bbd..8957036d1 100644 --- a/plugins/win-wasapi/win-wasapi.cpp +++ b/plugins/win-wasapi/win-wasapi.cpp @@ -431,6 +431,9 @@ static obs_properties_t GetWASAPIProperties(const char *locale, bool input) GetWASAPIAudioDevices(devices, input); + if (devices.size()) + obs_property_list_add_item(device_prop, "Default", "default"); + for (size_t i = 0; i < devices.size(); i++) { AudioDeviceInfo &device = devices[i]; obs_property_list_add_item(device_prop, @@ -461,9 +464,9 @@ struct obs_source_info wasapiInput { CreateWASAPIInput, DestroyWASAPISource, GetWASAPIPropertiesInput, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, + nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, }; struct obs_source_info wasapiOutput { @@ -474,7 +477,7 @@ struct obs_source_info wasapiOutput { CreateWASAPIOutput, DestroyWASAPISource, GetWASAPIPropertiesOutput, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, + nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, nullptr, };