diff --git a/plugins/image-source/obs-slideshow.c b/plugins/image-source/obs-slideshow.c index dc6536d92..992236b46 100644 --- a/plugins/image-source/obs-slideshow.c +++ b/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;