From 4c708a2b9afe102d6c290e674025c90c4e9791fa Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Fri, 26 Jan 2024 17:37:03 +0900 Subject: [PATCH] Version 1.3.0 Allow toggling streaming and replay-buffer. --- CMakeLists.txt | 4 ++-- src/client.c | 43 ++++++++++++++++++++++++++++++++++++++---- src/common_constants.h | 4 +++- src/socket.c | 18 ++++++++++++++++++ 4 files changed, 62 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 777163a..575cbad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.25) set(obs_usc_VERSION_MAJOR 1) -set(obs_usc_VERSION_MINOR 2) -set(obs_usc_VERSION_PATCH 1) +set(obs_usc_VERSION_MINOR 3) +set(obs_usc_VERSION_PATCH 0) set(obs_usc_VERSION_STR "${obs_usc_VERSION_MAJOR}.${obs_usc_VERSION_MINOR}.${obs_usc_VERSION_PATCH}") project(obs-studio-plugin-unix-socket-control VERSION "${obs_usc_VERSION_STR}") diff --git a/src/client.c b/src/client.c index e928717..d0623dc 100644 --- a/src/client.c +++ b/src/client.c @@ -19,8 +19,10 @@ void print_usage(char *name) { printf(" | --toggle-recording\n"); printf(" | --start-streaming\n"); printf(" | --stop-streaming\n"); + printf(" | --toggle-streaming\n"); printf(" | --start-replay-buffer\n"); printf(" | --stop-replay-buffer\n"); + printf(" | --toggle-replay-buffer\n"); printf(" | --save-replay-buffer\n"); printf(" | --get-status]\n"); } @@ -45,10 +47,14 @@ int main(int argc, char **argv) { type = UNIX_SOCKET_EVENT_TOGGLE_RECORDING; } else if (strncmp(argv[1], "--stop-streaming", 16) == 0) { type = UNIX_SOCKET_EVENT_STOP_STREAMING; + } else if (strncmp(argv[1], "--toggle-streaming", 18) == 0) { + type = UNIX_SOCKET_EVENT_TOGGLE_STREAMING; } else if (strncmp(argv[1], "--start-replay-buffer", 21) == 0) { type = UNIX_SOCKET_EVENT_START_REPLAY_BUFFER; } else if (strncmp(argv[1], "--stop-replay-buffer", 20) == 0) { type = UNIX_SOCKET_EVENT_STOP_REPLAY_BUFFER; + } else if (strncmp(argv[1], "--toggle-replay-buffer", 22) == 0) { + type = UNIX_SOCKET_EVENT_TOGGLE_REPLAY_BUFFER; } else if (strncmp(argv[1], "--save-replay-buffer", 20) == 0) { type = UNIX_SOCKET_EVENT_SAVE_REPLAY_BUFFER; } else if (strncmp(argv[1], "--get-status", 12) == 0) { @@ -110,7 +116,10 @@ int main(int argc, char **argv) { (buffer[1] & 1) != 0 ? "true" : "false", (buffer[1] & 2) != 0 ? "true" : "false", (buffer[1] & 4) != 0 ? "true" : "false"); - } else if (buffer[0] != UNIX_SOCKET_EVENT_NOP && buffer[0] != UNIX_SOCKET_EVENT_TOGGLE_RECORDING) { + } else if (buffer[0] != UNIX_SOCKET_EVENT_NOP + && buffer[0] != UNIX_SOCKET_EVENT_TOGGLE_RECORDING + && buffer[0] != UNIX_SOCKET_EVENT_TOGGLE_STREAMING + && buffer[0] != UNIX_SOCKET_EVENT_TOGGLE_REPLAY_BUFFER) { // Error. TODO handle this. return 7; } else { @@ -124,13 +133,13 @@ int main(int argc, char **argv) { case UNIX_SOCKET_EVENT_TOGGLE_RECORDING: switch(buffer[1]) { case UNIX_SOCKET_EVENT_START_RECORDING: - puts("Sent event \"toggle recording\", stream STARTED!"); + puts("Sent event \"toggle recording\", recording STARTED!"); break; case UNIX_SOCKET_EVENT_STOP_RECORDING: - puts("Sent event \"toggle recording\", stream STOPPED!"); + puts("Sent event \"toggle recording\", recording STOPPED!"); break; default: - puts("Sent event \"toggle recording\", stream status UNKNOWN!"); + puts("Sent event \"toggle recording\", recording status UNKNOWN!"); break; } break; @@ -140,12 +149,38 @@ int main(int argc, char **argv) { case UNIX_SOCKET_EVENT_STOP_STREAMING: puts("Sent event \"stop streaming\"!"); break; + case UNIX_SOCKET_EVENT_TOGGLE_STREAMING: + switch(buffer[1]) { + case UNIX_SOCKET_EVENT_START_STREAMING: + puts("Sent event \"toggle streaming\", stream STARTED!"); + break; + case UNIX_SOCKET_EVENT_STOP_STREAMING: + puts("Sent event \"toggle streaming\", stream STOPPED!"); + break; + default: + puts("Sent event \"toggle streaming\", stream status UNKNOWN!"); + break; + } + break; case UNIX_SOCKET_EVENT_START_REPLAY_BUFFER: puts("Sent event \"start replay-buffer\"!"); break; case UNIX_SOCKET_EVENT_STOP_REPLAY_BUFFER: puts("Sent event \"stop replay-buffer\"!"); break; + case UNIX_SOCKET_EVENT_TOGGLE_REPLAY_BUFFER: + switch(buffer[1]) { + case UNIX_SOCKET_EVENT_START_REPLAY_BUFFER: + puts("Sent event \"toggle replay-buffer\", replay-buffer STARTED!"); + break; + case UNIX_SOCKET_EVENT_STOP_REPLAY_BUFFER: + puts("Sent event \"toggle replay-buffer\", replay-buffer STOPPED!"); + break; + default: + puts("Sent event \"toggle replay-buffer\", replay-buffer status UNKNOWN!"); + break; + } + break; case UNIX_SOCKET_EVENT_SAVE_REPLAY_BUFFER: puts("Sent event \"save replay-buffer\"!"); break; diff --git a/src/common_constants.h b/src/common_constants.h index 99464a8..f2c3e44 100644 --- a/src/common_constants.h +++ b/src/common_constants.h @@ -13,7 +13,9 @@ typedef enum UnixSocketEventType { UNIX_SOCKET_EVENT_START_REPLAY_BUFFER, UNIX_SOCKET_EVENT_STOP_REPLAY_BUFFER, UNIX_SOCKET_EVENT_SAVE_REPLAY_BUFFER, - UNIX_SOCKET_EVENT_TOGGLE_RECORDING + UNIX_SOCKET_EVENT_TOGGLE_RECORDING, + UNIX_SOCKET_EVENT_TOGGLE_STREAMING, + UNIX_SOCKET_EVENT_TOGGLE_REPLAY_BUFFER } UnixSocketEventType; #endif diff --git a/src/socket.c b/src/socket.c index 2a8206a..70f00ba 100644 --- a/src/socket.c +++ b/src/socket.c @@ -93,6 +93,15 @@ int unix_socket_handler_thread_function(void *ud) { } else if (buffer[0] == UNIX_SOCKET_EVENT_STOP_STREAMING) { obs_frontend_streaming_stop(); ret_buffer[0] = UNIX_SOCKET_EVENT_NOP; + } else if (buffer[0] == UNIX_SOCKET_EVENT_TOGGLE_STREAMING) { + ret_buffer[0] = UNIX_SOCKET_EVENT_TOGGLE_STREAMING; + if (obs_frontend_streaming_active()) { + obs_frontend_streaming_stop(); + ret_buffer[1] = UNIX_SOCKET_EVENT_STOP_STREAMING; + } else { + obs_frontend_streaming_start(); + ret_buffer[1] = UNIX_SOCKET_EVENT_START_STREAMING; + } } else if (buffer[0] == UNIX_SOCKET_EVENT_GET_STATUS) { ret_buffer[0] = UNIX_SOCKET_EVENT_GET_STATUS; if (obs_frontend_recording_active()) { @@ -110,6 +119,15 @@ int unix_socket_handler_thread_function(void *ud) { } else if (buffer[0] == UNIX_SOCKET_EVENT_STOP_REPLAY_BUFFER) { obs_frontend_replay_buffer_stop(); ret_buffer[0] = UNIX_SOCKET_EVENT_NOP; + } else if (buffer[0] == UNIX_SOCKET_EVENT_TOGGLE_REPLAY_BUFFER) { + ret_buffer[0] = UNIX_SOCKET_EVENT_TOGGLE_REPLAY_BUFFER; + if (obs_frontend_replay_buffer_active()) { + obs_frontend_replay_buffer_stop(); + ret_buffer[1] = UNIX_SOCKET_EVENT_STOP_REPLAY_BUFFER; + } else { + obs_frontend_replay_buffer_start(); + ret_buffer[1] = UNIX_SOCKET_EVENT_START_REPLAY_BUFFER; + } } else if (buffer[0] == UNIX_SOCKET_EVENT_SAVE_REPLAY_BUFFER) { if (obs_frontend_replay_buffer_active()) { obs_frontend_replay_buffer_save();