|
@@ -2723,3 +2723,31 @@ const char *obs_output_get_protocols(const obs_output_t *output)
|
|
|
? output->info.protocols
|
|
|
: NULL;
|
|
|
}
|
|
|
+
|
|
|
+void obs_enum_output_types_with_protocol(const char *protocol, void *data,
|
|
|
+ bool (*enum_cb)(void *data,
|
|
|
+ const char *id))
|
|
|
+{
|
|
|
+ if (!obs_is_output_protocol_registered(protocol))
|
|
|
+ return;
|
|
|
+
|
|
|
+ size_t protocol_len = strlen(protocol);
|
|
|
+ for (size_t i = 0; i < obs->output_types.num; i++) {
|
|
|
+ if (!(obs->output_types.array[i].flags & OBS_OUTPUT_SERVICE))
|
|
|
+ continue;
|
|
|
+
|
|
|
+ const char *substr = obs->output_types.array[i].protocols;
|
|
|
+ while (substr && substr[0] != '\0') {
|
|
|
+ const char *next = strchr(substr, ';');
|
|
|
+ size_t len = next ? (size_t)(next - substr)
|
|
|
+ : strlen(substr);
|
|
|
+ if (protocol_len == len &&
|
|
|
+ strncmp(substr, protocol, len) == 0) {
|
|
|
+ if (!enum_cb(data,
|
|
|
+ obs->output_types.array[i].id))
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ substr = next ? next + 1 : NULL;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|