Browse Source

image-source: Add proc handler calls to slideshow

Allows manipulation of the slideshow via procedure handlers.
jp9000 5 years ago
parent
commit
1475f756f2
1 changed files with 49 additions and 0 deletions
  1. 49 0
      plugins/image-source/obs-slideshow.c

+ 49 - 0
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;