Better replay recording handling. Add gsr-ui-cli command to save shorter replay

This commit is contained in:
dec05eba
2025-04-23 19:27:57 +02:00
parent 736f2f3095
commit 41412db704
5 changed files with 31 additions and 6 deletions

View File

@@ -27,8 +27,7 @@ These are the dependencies needed to build GPU Screen Recorder UI:
* linux-api-headers * linux-api-headers
* libpulse (libpulse-simple) * libpulse (libpulse-simple)
* libdrm * libdrm
* wayland-client * wayland (wayland-client, wayland-egl, wayland-scanner)
* wayland-scanner
## Runtime dependencies ## Runtime dependencies
There are also additional dependencies needed at runtime: There are also additional dependencies needed at runtime:

View File

@@ -209,6 +209,7 @@ namespace gsr {
bool replay_save_show_notification = false; bool replay_save_show_notification = false;
ReplayStartupMode replay_startup_mode = ReplayStartupMode::TURN_ON_AT_SYSTEM_STARTUP; ReplayStartupMode replay_startup_mode = ReplayStartupMode::TURN_ON_AT_SYSTEM_STARTUP;
bool try_replay_startup = true; bool try_replay_startup = true;
bool replay_recording = false;
AudioPlayer audio_player; AudioPlayer audio_player;
RegionSelector region_selector; RegionSelector region_selector;

View File

@@ -1912,6 +1912,7 @@ namespace gsr {
show_notification("Failed to start/save recording. Verify if settings are correct", notification_timeout_seconds, mgl::Color(255, 0, 0), mgl::Color(255, 0, 0), NotificationType::RECORD); show_notification("Failed to start/save recording. Verify if settings are correct", notification_timeout_seconds, mgl::Color(255, 0, 0), mgl::Color(255, 0, 0), NotificationType::RECORD);
} }
update_ui_recording_stopped(); update_ui_recording_stopped();
replay_recording = false;
} }
void Overlay::update_ui_recording_paused() { void Overlay::update_ui_recording_paused() {
@@ -2321,26 +2322,34 @@ namespace gsr {
case RecordingStatus::RECORD: case RecordingStatus::RECORD:
break; break;
case RecordingStatus::REPLAY: { case RecordingStatus::REPLAY: {
if(gpu_screen_recorder_process <= 0)
return;
if(gsr_info.system_info.gsr_version >= GsrVersion{5, 4, 0}) { if(gsr_info.system_info.gsr_version >= GsrVersion{5, 4, 0}) {
if(gpu_screen_recorder_process > 0) { if(!replay_recording) {
if(config.record_config.show_recording_started_notifications) if(config.record_config.show_recording_started_notifications)
show_notification("Started recording in the replay session", notification_timeout_seconds, get_color_theme().tint_color, get_color_theme().tint_color, NotificationType::RECORD); show_notification("Started recording in the replay session", notification_timeout_seconds, get_color_theme().tint_color, get_color_theme().tint_color, NotificationType::RECORD);
update_ui_recording_started(); update_ui_recording_started();
kill(gpu_screen_recorder_process, SIGRTMIN);
} }
replay_recording = true;
kill(gpu_screen_recorder_process, SIGRTMIN);
} else { } else {
show_notification("Unable to start recording when replay is turned on.\nTurn off replay before starting recording.", notification_error_timeout_seconds, mgl::Color(255, 0, 0), get_color_theme().tint_color, NotificationType::REPLAY); show_notification("Unable to start recording when replay is turned on.\nTurn off replay before starting recording.", notification_error_timeout_seconds, mgl::Color(255, 0, 0), get_color_theme().tint_color, NotificationType::REPLAY);
} }
return; return;
} }
case RecordingStatus::STREAM: { case RecordingStatus::STREAM: {
if(gpu_screen_recorder_process <= 0)
return;
if(gsr_info.system_info.gsr_version >= GsrVersion{5, 4, 0}) { if(gsr_info.system_info.gsr_version >= GsrVersion{5, 4, 0}) {
if(gpu_screen_recorder_process > 0) { if(!replay_recording) {
if(config.record_config.show_recording_started_notifications) if(config.record_config.show_recording_started_notifications)
show_notification("Started recording in the streaming session", notification_timeout_seconds, get_color_theme().tint_color, get_color_theme().tint_color, NotificationType::RECORD); show_notification("Started recording in the streaming session", notification_timeout_seconds, get_color_theme().tint_color, get_color_theme().tint_color, NotificationType::RECORD);
update_ui_recording_started(); update_ui_recording_started();
kill(gpu_screen_recorder_process, SIGRTMIN);
} }
replay_recording = true;
kill(gpu_screen_recorder_process, SIGRTMIN);
} else { } else {
show_notification("Unable to start recording when streaming.\nStop streaming before starting recording.", notification_error_timeout_seconds, mgl::Color(255, 0, 0), get_color_theme().tint_color, NotificationType::STREAM); show_notification("Unable to start recording when streaming.\nStop streaming before starting recording.", notification_error_timeout_seconds, mgl::Color(255, 0, 0), get_color_theme().tint_color, NotificationType::STREAM);
} }

View File

@@ -78,6 +78,16 @@ static void rpc_add_commands(gsr::Rpc *rpc, gsr::Overlay *overlay) {
overlay->save_replay(); overlay->save_replay();
}); });
rpc->add_handler("replay-save-1-min", [overlay](const std::string &name) {
fprintf(stderr, "rpc command executed: %s\n", name.c_str());
overlay->save_replay_1_min();
});
rpc->add_handler("replay-save-10-min", [overlay](const std::string &name) {
fprintf(stderr, "rpc command executed: %s\n", name.c_str());
overlay->save_replay_10_min();
});
rpc->add_handler("take-screenshot", [overlay](const std::string &name) { rpc->add_handler("take-screenshot", [overlay](const std::string &name) {
fprintf(stderr, "rpc command executed: %s\n", name.c_str()); fprintf(stderr, "rpc command executed: %s\n", name.c_str());
overlay->take_screenshot(); overlay->take_screenshot();

View File

@@ -56,6 +56,10 @@ static void usage(void) {
printf(" Start/stop replay.\n"); printf(" Start/stop replay.\n");
printf(" replay-save\n"); printf(" replay-save\n");
printf(" Save replay.\n"); printf(" Save replay.\n");
printf(" replay-save-1-min\n");
printf(" Save 1 minute replay.\n");
printf(" replay-save-10-min\n");
printf(" Save 10 minute replay.\n");
printf(" take-screenshot\n"); printf(" take-screenshot\n");
printf(" Take a screenshot.\n"); printf(" Take a screenshot.\n");
printf(" take-screenshot-region\n"); printf(" take-screenshot-region\n");
@@ -75,6 +79,8 @@ static bool is_valid_command(const char *command) {
"toggle-stream", "toggle-stream",
"toggle-replay", "toggle-replay",
"replay-save", "replay-save",
"replay-save-1-min",
"replay-save-10-min",
"take-screenshot", "take-screenshot",
"take-screenshot-region", "take-screenshot-region",
NULL NULL