| 212 | } |
| 213 | |
| 214 | obs_properties_t *ndi_source_getproperties(void *data) |
| 215 | { |
| 216 | auto s = (ndi_source_t *)data; |
| 217 | obs_log(LOG_DEBUG, "+ndi_source_getproperties(…)"); |
| 218 | |
| 219 | obs_properties_t *props = obs_properties_create(); |
| 220 | |
| 221 | obs_property_t *source_list = obs_properties_add_list(props, PROP_SOURCE, |
| 222 | obs_module_text("NDIPlugin.SourceProps.SourceName"), |
| 223 | OBS_COMBO_TYPE_EDITABLE, OBS_COMBO_FORMAT_STRING); |
| 224 | NDIFinder finder; |
| 225 | // Create a callback that is called when the NDI source list is complete |
| 226 | auto finder_callback = [source_list, s](void *ndi_names) { |
| 227 | auto ndi_sources = (std::vector<std::string> *)ndi_names; |
| 228 | for (auto &source : *ndi_sources) { |
| 229 | obs_property_list_add_string(source_list, source.c_str(), source.c_str()); |
| 230 | } |
| 231 | obs_source_update_properties(s->obs_source); |
| 232 | }; |
| 233 | auto ndi_sources = finder.getNDISourceList(finder_callback); |
| 234 | for (auto &source : ndi_sources) { |
| 235 | obs_property_list_add_string(source_list, source.c_str(), source.c_str()); |
| 236 | } |
| 237 | |
| 238 | obs_property_t *behavior_list = obs_properties_add_list(props, PROP_BEHAVIOR, |
| 239 | obs_module_text("NDIPlugin.SourceProps.Behavior"), |
| 240 | OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); |
| 241 | obs_property_list_add_int(behavior_list, obs_module_text("NDIPlugin.SourceProps.Behavior.KeepActive"), |
| 242 | PROP_BEHAVIOR_KEEP_ACTIVE); |
| 243 | obs_property_list_add_int(behavior_list, obs_module_text("NDIPlugin.SourceProps.Behavior.StopResumeBlank"), |
| 244 | PROP_BEHAVIOR_STOP_RESUME_BLANK); |
| 245 | obs_property_list_add_int(behavior_list, obs_module_text("NDIPlugin.SourceProps.Behavior.StopResumeLastFrame"), |
| 246 | PROP_BEHAVIOR_STOP_RESUME_LAST_FRAME); |
| 247 | |
| 248 | obs_property_t *timeout_list = obs_properties_add_list(props, PROP_TIMEOUT, |
| 249 | obs_module_text("NDIPlugin.SourceProps.Timeout"), |
| 250 | OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); |
| 251 | obs_property_list_add_int(timeout_list, obs_module_text("NDIPlugin.SourceProps.Timeout.KeepContent"), |
| 252 | PROP_TIMEOUT_KEEP_CONTENT); |
| 253 | obs_property_list_add_int(timeout_list, obs_module_text("NDIPlugin.SourceProps.Timeout.ClearContent"), |
| 254 | PROP_TIMEOUT_CLEAR_CONTENT); |
| 255 | |
| 256 | obs_property_t *bw_modes = obs_properties_add_list(props, PROP_BANDWIDTH, |
| 257 | obs_module_text("NDIPlugin.SourceProps.Bandwidth"), |
| 258 | OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); |
| 259 | obs_property_list_add_int(bw_modes, obs_module_text("NDIPlugin.BWMode.Highest"), PROP_BW_HIGHEST); |
| 260 | obs_property_list_add_int(bw_modes, obs_module_text("NDIPlugin.BWMode.Lowest"), PROP_BW_LOWEST); |
| 261 | obs_property_list_add_int(bw_modes, obs_module_text("NDIPlugin.BWMode.AudioOnly"), PROP_BW_AUDIO_ONLY); |
| 262 | obs_property_set_modified_callback(bw_modes, [](obs_properties_t *props_, obs_property_t *, |
| 263 | obs_data_t *settings_) { |
| 264 | bool is_audio_only = (obs_data_get_int(settings_, PROP_BANDWIDTH) == PROP_BW_AUDIO_ONLY); |
| 265 | |
| 266 | obs_property_t *yuv_range = obs_properties_get(props_, PROP_YUV_RANGE); |
| 267 | obs_property_t *yuv_colorspace = obs_properties_get(props_, PROP_YUV_COLORSPACE); |
| 268 | |
| 269 | obs_property_set_visible(yuv_range, !is_audio_only); |
| 270 | obs_property_set_visible(yuv_colorspace, !is_audio_only); |
| 271 |
nothing calls this directly
no test coverage detected