From 1475f756f229ae4428178fa16de3dd6b9cd776b5 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Sat, 8 Aug 2020 01:22:05 -0700 Subject: [PATCH] image-source: Add proc handler calls to slideshow Allows manipulation of the slideshow via procedure handlers. --- plugins/image-source/obs-slideshow.c | 49 ++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/plugins/image-source/obs-slideshow.c b/plugins/image-source/obs-slideshow.c index bc60d0b5b..862916b0c 100644 --- a/plugins/image-source/obs-slideshow.c +++ b/plugins/image-source/obs-slideshow.c @@ -527,6 +527,17 @@ static void ss_previous_slide(void *data) do_transition(ss, false); } +static void get_state_proc(void *data, calldata_t *cd) +{ + struct slideshow *ss = data; + if (ss->stop) + calldata_set_string(cd, "return", "stopped"); + else if (ss->paused) + calldata_set_string(cd, "return", "paused"); + else + calldata_set_string(cd, "return", "playing"); +} + static void play_pause_hotkey(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, bool pressed) { @@ -539,6 +550,12 @@ static void play_pause_hotkey(void *data, obs_hotkey_id id, ss_play_pause(ss); } +static void play_pause_proc(void *data, calldata_t *cd) +{ + ss_play_pause(data); + UNUSED_PARAMETER(cd); +} + static void restart_hotkey(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, bool pressed) { @@ -551,6 +568,12 @@ static void restart_hotkey(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, ss_restart(ss); } +static void restart_proc(void *data, calldata_t *cd) +{ + ss_restart(data); + UNUSED_PARAMETER(cd); +} + static void stop_hotkey(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, bool pressed) { @@ -563,6 +586,12 @@ static void stop_hotkey(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, ss_stop(ss); } +static void stop_proc(void *data, calldata_t *cd) +{ + ss_stop(data); + UNUSED_PARAMETER(cd); +} + static void next_slide_hotkey(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, bool pressed) { @@ -578,6 +607,12 @@ static void next_slide_hotkey(void *data, obs_hotkey_id id, ss_next_slide(ss); } +static void next_slide_proc(void *data, calldata_t *cd) +{ + ss_next_slide(data); + UNUSED_PARAMETER(cd); +} + static void previous_slide_hotkey(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, bool pressed) { @@ -593,6 +628,12 @@ static void previous_slide_hotkey(void *data, obs_hotkey_id id, ss_previous_slide(ss); } +static void previous_slide_proc(void *data, calldata_t *cd) +{ + ss_previous_slide(data); + UNUSED_PARAMETER(cd); +} + static void ss_destroy(void *data) { struct slideshow *ss = data; @@ -605,6 +646,7 @@ static void ss_destroy(void *data) static void *ss_create(obs_data_t *settings, obs_source_t *source) { + proc_handler_t *ph = obs_source_get_proc_handler(source); struct slideshow *ss = bzalloc(sizeof(*ss)); ss->source = source; @@ -634,6 +676,13 @@ static void *ss_create(obs_data_t *settings, obs_source_t *source) obs_module_text("SlideShow.PreviousSlide"), previous_slide_hotkey, ss); + proc_handler_add(ph, "string get_state()", get_state_proc, ss); + proc_handler_add(ph, "void playpause()", play_pause_proc, ss); + proc_handler_add(ph, "void restart()", restart_proc, ss); + proc_handler_add(ph, "void stop()", stop_proc, ss); + proc_handler_add(ph, "void next_slide()", next_slide_proc, ss); + proc_handler_add(ph, "void previous_slide()", previous_slide_proc, ss); + pthread_mutex_init_value(&ss->mutex); if (pthread_mutex_init(&ss->mutex, NULL) != 0) goto error;