| 207 | } |
| 208 | |
| 209 | void preview_output_init() |
| 210 | { |
| 211 | obs_log(LOG_DEBUG, "+preview_output_init()"); |
| 212 | |
| 213 | auto config = Config::Current(); |
| 214 | auto output_name = config->PreviewOutputName; |
| 215 | auto output_groups = config->PreviewOutputGroups; |
| 216 | auto is_enabled = config->PreviewOutputEnabled; |
| 217 | |
| 218 | preview_output_deinit(); |
| 219 | |
| 220 | if (is_enabled && !output_name.isEmpty()) { |
| 221 | obs_log(LOG_DEBUG, "preview_output_init: creating NDI Preview Output '%s'", QT_TO_UTF8(output_name)); |
| 222 | obs_data_t *output_settings = obs_data_create(); |
| 223 | obs_data_set_string(output_settings, "ndi_name", QT_TO_UTF8(output_name)); |
| 224 | obs_data_set_string(output_settings, "ndi_groups", QT_TO_UTF8(output_groups)); |
| 225 | |
| 226 | obs_data_set_bool(output_settings, "uses_audio", |
| 227 | false); // Preview has no audio |
| 228 | |
| 229 | context.output = obs_output_create("ndi_output", "NDI Preview Output", output_settings, nullptr); |
| 230 | obs_data_release(output_settings); |
| 231 | if (context.output) { |
| 232 | obs_log(LOG_DEBUG, "preview_output_init: Successfully created NDI Preview Output '%s'", |
| 233 | QT_TO_UTF8(output_name)); |
| 234 | |
| 235 | // Start handling "remote" start/stop events (ex: from obs-websocket) |
| 236 | auto sh = obs_output_get_signal_handler(context.output); |
| 237 | signal_handler_connect(sh, "start", on_preview_output_started, nullptr); |
| 238 | signal_handler_connect(sh, "stop", on_preview_output_stopped, nullptr); |
| 239 | |
| 240 | context.ndi_name = output_name; |
| 241 | context.ndi_groups = output_groups; |
| 242 | } else { |
| 243 | obs_log(LOG_WARNING, "WARN-423 - Failed to create NDI Preview Output '%s'", |
| 244 | QT_TO_UTF8(output_name)); |
| 245 | obs_log(LOG_DEBUG, "preview_output_init: failed to create NDI Preview Output '%s'", |
| 246 | QT_TO_UTF8(output_name)); |
| 247 | } |
| 248 | preview_output_start(); |
| 249 | } |
| 250 | |
| 251 | obs_log(LOG_DEBUG, "-preview_output_init()"); |
| 252 | } |
| 253 | |
| 254 | void on_preview_scene_changed(enum obs_frontend_event event, void *param) |
| 255 | { |
no test coverage detected