Browse Source

image-source: Add slide_changed signal

Allows a plugin or script to know when a slide has changed, and which
index/file it's switched to
Jim 2 years ago
parent
commit
1ea5917973
1 changed files with 15 additions and 0 deletions
  1. 15 0
      plugins/image-source/obs-slideshow.c

+ 15 - 0
plugins/image-source/obs-slideshow.c

@@ -94,6 +94,7 @@ struct slideshow {
 	uint32_t tr_speed;
 	const char *tr_name;
 	obs_source_t *transition;
+	calldata_t cd;
 
 	float elapsed;
 	size_t cur_item;
@@ -280,6 +281,16 @@ static void do_transition(void *data, bool to_null)
 		set_media_state(ss, OBS_MEDIA_STATE_ENDED);
 		obs_source_media_ended(ss->source);
 	}
+
+	if (valid && !to_null) {
+		calldata_set_int(&ss->cd, "index", ss->cur_item);
+		calldata_set_string(&ss->cd, "path",
+				    ss->files.array[ss->cur_item].path);
+
+		signal_handler_t *sh =
+			obs_source_get_signal_handler(ss->source);
+		signal_handler_signal(sh, "slide_changed", &ss->cd);
+	}
 }
 
 static void ss_update(void *data, obs_data_t *settings)
@@ -661,6 +672,7 @@ static void ss_destroy(void *data)
 	obs_source_release(ss->transition);
 	free_files(&ss->files.da);
 	pthread_mutex_destroy(&ss->mutex);
+	calldata_free(&ss->cd);
 	bfree(ss);
 }
 
@@ -699,6 +711,9 @@ static void *ss_create(obs_data_t *settings, obs_source_t *source)
 	proc_handler_add(ph, "int current_index()", current_slide_proc, ss);
 	proc_handler_add(ph, "int total_files()", total_slides_proc, ss);
 
+	signal_handler_t *sh = obs_source_get_signal_handler(ss->source);
+	signal_handler_add(sh, "void slide_changed(int index, string path)");
+
 	pthread_mutex_init_value(&ss->mutex);
 	if (pthread_mutex_init(&ss->mutex, NULL) != 0)
 		goto error;