Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gpu-screen-recorder-gtk for openSUSE:Factory checked in at 2024-10-12 13:30:34 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gpu-screen-recorder-gtk (Old) and /work/SRC/openSUSE:Factory/.gpu-screen-recorder-gtk.new.19354 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gpu-screen-recorder-gtk" Sat Oct 12 13:30:34 2024 rev:6 rq:1207361 version:20241012 Changes: -------- --- /work/SRC/openSUSE:Factory/gpu-screen-recorder-gtk/gpu-screen-recorder-gtk.changes 2024-09-24 17:32:26.206970639 +0200 +++ /work/SRC/openSUSE:Factory/.gpu-screen-recorder-gtk.new.19354/gpu-screen-recorder-gtk.changes 2024-10-12 13:36:12.266351882 +0200 @@ -1,0 +2,8 @@ +Sat Oct 12 00:16:09 UTC 2024 - mantari...@pm.me + +- Update to version 20241012: + * Constant bitrate is recommended for live streaming + * Change default bitrate quality + * Use -q instead of -bitrate for constant bitrate quality + +------------------------------------------------------------------- Old: ---- gpu-screen-recorder-gtk-20240921.tar.zst New: ---- gpu-screen-recorder-gtk-20241012.tar.zst ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gpu-screen-recorder-gtk.spec ++++++ --- /var/tmp/diff_new_pack.fywws9/_old 2024-10-12 13:36:12.698369821 +0200 +++ /var/tmp/diff_new_pack.fywws9/_new 2024-10-12 13:36:12.702369988 +0200 @@ -19,7 +19,7 @@ %bcond_with test %define appid com.dec05eba.gpu_screen_recorder Name: gpu-screen-recorder-gtk -Version: 20240921 +Version: 20241012 Release: 0 Summary: GTK frontend for GPU Screen Recorder License: GPL-3.0-only ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.fywws9/_old 2024-10-12 13:36:12.750371981 +0200 +++ /var/tmp/diff_new_pack.fywws9/_new 2024-10-12 13:36:12.754372147 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://repo.dec05eba.com/gpu-screen-recorder-gtk.git</param> - <param name="changesrevision">7ee360b0d44956691200791746880bf704c0c0b1</param></service></servicedata> + <param name="changesrevision">48d34f51a79883f14f2715ade1e2ab998176a863</param></service></servicedata> (No newline at EOF) ++++++ gpu-screen-recorder-gtk-20240921.tar.zst -> gpu-screen-recorder-gtk-20241012.tar.zst ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpu-screen-recorder-gtk-20240921/TODO new/gpu-screen-recorder-gtk-20241012/TODO --- old/gpu-screen-recorder-gtk-20240921/TODO 2024-09-21 22:33:43.000000000 +0200 +++ new/gpu-screen-recorder-gtk-20241012/TODO 2024-10-12 01:29:52.000000000 +0200 @@ -4,7 +4,6 @@ Disable overclocking and show some kind of sign that overclocking is not possible (if coolbits not set). Button (in the field) to remove hotkey. Error if polkit agent is not running (pkexec --help may work but the agent might not be running anyways). -Fix gui crash on stop recording on sway. Re-enable wlroots based capture when it's fixed. Add translation support (using gettext, which uses .mo files and _ macro). It should be easy for non-devs to contribute. But how? maybe have a page that links to the english translation files (or translation directory) in git and give instructions, @@ -62,4 +61,4 @@ Use modprobe command. modprobe on system startup in modprobe.d directory is only available for udev, other systems need to add it to linux kernel boot parameters (is this also needed for nvidia open kernel module driver?). -Save gpu screen recorder status in $XDG_RUNTIME_DIR. +Save gpu screen recorder status in $XDG_RUNTIME_DIR. \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpu-screen-recorder-gtk-20240921/com.dec05eba.gpu_screen_recorder.appdata.xml new/gpu-screen-recorder-gtk-20241012/com.dec05eba.gpu_screen_recorder.appdata.xml --- old/gpu-screen-recorder-gtk-20240921/com.dec05eba.gpu_screen_recorder.appdata.xml 2024-09-21 22:33:43.000000000 +0200 +++ new/gpu-screen-recorder-gtk-20241012/com.dec05eba.gpu_screen_recorder.appdata.xml 2024-10-12 01:29:52.000000000 +0200 @@ -80,6 +80,14 @@ </screenshots> <releases> + <release version="4.2.0" date="2024-10-11"> + <description> + <ul> + <li>Better frame timing for smoother video, especially when recording a game that runs at the same fps as the recording or lower.</li> + <li>Add constant bitrate option, for better live streaming experience and for lower file size at the cost of quality.</li> + </ul> + </description> + </release> <release version="4.1.11" date="2024-09-21"> <description> <ul> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpu-screen-recorder-gtk-20240921/meson.build new/gpu-screen-recorder-gtk-20241012/meson.build --- old/gpu-screen-recorder-gtk-20240921/meson.build 2024-09-21 22:33:43.000000000 +0200 +++ new/gpu-screen-recorder-gtk-20241012/meson.build 2024-10-12 01:29:52.000000000 +0200 @@ -1,4 +1,4 @@ -project('gpu-screen-recorder-gtk', ['c', 'cpp'], version : '4.1.11', default_options : ['warning_level=2']) +project('gpu-screen-recorder-gtk', ['c', 'cpp'], version : '4.2.0', default_options : ['warning_level=2']) add_project_arguments('-Wshadow', language : ['c', 'cpp']) if get_option('buildtype') == 'debug' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpu-screen-recorder-gtk-20240921/project.conf new/gpu-screen-recorder-gtk-20241012/project.conf --- old/gpu-screen-recorder-gtk-20240921/project.conf 2024-09-21 22:33:43.000000000 +0200 +++ new/gpu-screen-recorder-gtk-20241012/project.conf 2024-10-12 01:29:52.000000000 +0200 @@ -1,7 +1,7 @@ [package] name = "gpu-screen-recorder-gtk" type = "executable" -version = "4.1.11" +version = "4.2.0" platforms = ["posix"] [config] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpu-screen-recorder-gtk-20240921/src/config.hpp new/gpu-screen-recorder-gtk-20241012/src/config.hpp --- old/gpu-screen-recorder-gtk-20240921/src/config.hpp 2024-09-21 22:33:43.000000000 +0200 +++ new/gpu-screen-recorder-gtk-20241012/src/config.hpp 2024-10-12 01:29:52.000000000 +0200 @@ -24,6 +24,7 @@ int32_t record_area_width = 0; int32_t record_area_height = 0; int32_t fps = 60; + int32_t video_bitrate = 5000; bool merge_audio_tracks = true; std::vector<std::string> audio_input; std::string color_range; @@ -305,6 +306,7 @@ {"main.record_area_width", {CONFIG_TYPE_I32, &config.main_config.record_area_width}}, {"main.record_area_height", {CONFIG_TYPE_I32, &config.main_config.record_area_height}}, {"main.fps", {CONFIG_TYPE_I32, &config.main_config.fps}}, + {"main.video_bitrate", {CONFIG_TYPE_I32, &config.main_config.video_bitrate}}, {"main.merge_audio_tracks", {CONFIG_TYPE_BOOL, &config.main_config.merge_audio_tracks}}, {"main.audio_input", {CONFIG_TYPE_STRING_ARRAY, &config.main_config.audio_input}}, {"main.color_range", {CONFIG_TYPE_STRING, &config.main_config.color_range}}, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpu-screen-recorder-gtk-20240921/src/main.cpp new/gpu-screen-recorder-gtk-20241012/src/main.cpp --- old/gpu-screen-recorder-gtk-20240921/src/main.cpp 2024-09-21 22:33:43.000000000 +0200 +++ new/gpu-screen-recorder-gtk-20241012/src/main.cpp 2024-10-12 01:29:52.000000000 +0200 @@ -51,6 +51,7 @@ static PageNavigationUserdata page_navigation_userdata; static Cursor crosshair_cursor; static GtkSpinButton *fps_entry; +static GtkSpinButton *video_bitrate_entry; static GtkLabel *area_size_label; static GtkGrid *area_size_grid; static GtkSpinButton *area_width_entry; @@ -103,6 +104,7 @@ static GtkGrid *audio_codec_grid; static GtkGrid *color_range_grid; static GtkGrid *framerate_mode_grid; +static GtkGrid *video_bitrate_grid; static GtkComboBoxText *view_combo_box; static GtkGrid *overclock_grid; static GtkWidget *overclock_button; @@ -854,6 +856,7 @@ config.main_config.record_area_height = gtk_spin_button_get_value_as_int(area_height_entry); } config.main_config.fps = gtk_spin_button_get_value_as_int(fps_entry); + config.main_config.video_bitrate = gtk_spin_button_get_value_as_int(video_bitrate_entry); config.main_config.merge_audio_tracks = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(merge_audio_tracks_button)); config.main_config.audio_input.clear(); @@ -1571,6 +1574,18 @@ return false; } +static void add_quality_command_line_args(std::vector<const char*> &args, const char *quality_input_str, const char *video_bitrate_str) { + if(strcmp(quality_input_str, "custom") == 0) { + args.push_back("-bm"); + args.push_back("cbr"); + args.push_back("-q"); + args.push_back(video_bitrate_str); + } else { + args.push_back("-q"); + args.push_back(quality_input_str); + } +} + static gboolean on_start_replay_button_click(GtkButton *button, gpointer userdata) { GtkApplication *app = (GtkApplication*)userdata; const gchar *dir = gtk_button_get_label(replay_file_chooser_button); @@ -1613,10 +1628,10 @@ save_configs(); - int fps = gtk_spin_button_get_value_as_int(fps_entry); - int replay_time = gtk_spin_button_get_value_as_int(replay_time_entry); - int record_width = gsr_info.system_info.display_server == DisplayServer::WAYLAND ? 0 : gtk_spin_button_get_value_as_int(area_width_entry); - int record_height = gsr_info.system_info.display_server == DisplayServer::WAYLAND ? 0 : gtk_spin_button_get_value_as_int(area_height_entry); + const int fps = gtk_spin_button_get_value_as_int(fps_entry); + const int replay_time = gtk_spin_button_get_value_as_int(replay_time_entry); + const int record_width = gsr_info.system_info.display_server == DisplayServer::WAYLAND ? 0 : gtk_spin_button_get_value_as_int(area_width_entry); + const int record_height = gsr_info.system_info.display_server == DisplayServer::WAYLAND ? 0 : gtk_spin_button_get_value_as_int(area_height_entry); char dir_tmp[PATH_MAX]; strcpy(dir_tmp, dir); @@ -1647,6 +1662,7 @@ const gchar* framerate_mode_input_str = gtk_combo_box_get_active_id(GTK_COMBO_BOX(framerate_mode_input_menu)); const bool record_cursor = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(record_cursor_button)); const bool restore_portal_session = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(restore_portal_session_button)); + const std::string video_bitrate_str = std::to_string(gtk_spin_button_get_value_as_int(video_bitrate_entry)); const char *encoder = "gpu"; std::string video_codec_input_str = video_codec_selection_menu_get_active_id(); @@ -1666,9 +1682,11 @@ snprintf(area, sizeof(area), "%dx%d", record_width, record_height); std::vector<const char*> args = { - "gpu-screen-recorder", "-w", window_str.c_str(), "-c", container_str, "-q", quality_input_str, "-k", video_codec_input_str.c_str(), "-ac", audio_codec_input_str, "-f", fps_str.c_str(), "-cursor", record_cursor ? "yes" : "no", "-restore-portal-session", restore_portal_session ? "yes" : "no", "-cr", color_range_input_str, "-r", replay_time_str.c_str(), "-encoder", encoder, "-o", dir + "gpu-screen-recorder", "-w", window_str.c_str(), "-c", container_str, "-k", video_codec_input_str.c_str(), "-ac", audio_codec_input_str, "-f", fps_str.c_str(), "-cursor", record_cursor ? "yes" : "no", "-restore-portal-session", restore_portal_session ? "yes" : "no", "-cr", color_range_input_str, "-r", replay_time_str.c_str(), "-encoder", encoder, "-o", dir }; + add_quality_command_line_args(args, quality_input_str, video_bitrate_str.c_str()); + if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(overclock_button))) args.insert(args.end(), { "-oc", "yes" }); @@ -1811,9 +1829,9 @@ save_configs(); - int fps = gtk_spin_button_get_value_as_int(fps_entry); - int record_width = gsr_info.system_info.display_server == DisplayServer::WAYLAND ? 0 : gtk_spin_button_get_value_as_int(area_width_entry); - int record_height = gsr_info.system_info.display_server == DisplayServer::WAYLAND ? 0 : gtk_spin_button_get_value_as_int(area_height_entry); + const int fps = gtk_spin_button_get_value_as_int(fps_entry); + const int record_width = gsr_info.system_info.display_server == DisplayServer::WAYLAND ? 0 : gtk_spin_button_get_value_as_int(area_width_entry); + const int record_height = gsr_info.system_info.display_server == DisplayServer::WAYLAND ? 0 : gtk_spin_button_get_value_as_int(area_height_entry); bool follow_focused = false; std::string window_str = record_area_selection_menu_get_active_id(); @@ -1837,6 +1855,7 @@ const gchar* framerate_mode_input_str = gtk_combo_box_get_active_id(GTK_COMBO_BOX(framerate_mode_input_menu)); const bool record_cursor = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(record_cursor_button)); const bool restore_portal_session = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(restore_portal_session_button)); + const std::string video_bitrate_str = std::to_string(gtk_spin_button_get_value_as_int(video_bitrate_entry)); const char *encoder = "gpu"; std::string video_codec_input_str = video_codec_selection_menu_get_active_id(); @@ -1866,9 +1885,11 @@ snprintf(area, sizeof(area), "%dx%d", record_width, record_height); std::vector<const char*> args = { - "gpu-screen-recorder", "-w", window_str.c_str(), "-c", container_str, "-q", quality_input_str, "-k", video_codec_input_str.c_str(), "-ac", audio_codec_input_str, "-f", fps_str.c_str(), "-cursor", record_cursor ? "yes" : "no", "-restore-portal-session", restore_portal_session ? "yes" : "no", "-cr", color_range_input_str, "-encoder", encoder, "-o", record_file_current_filename.c_str() + "gpu-screen-recorder", "-w", window_str.c_str(), "-c", container_str, "-k", video_codec_input_str.c_str(), "-ac", audio_codec_input_str, "-f", fps_str.c_str(), "-cursor", record_cursor ? "yes" : "no", "-restore-portal-session", restore_portal_session ? "yes" : "no", "-cr", color_range_input_str, "-encoder", encoder, "-o", record_file_current_filename.c_str() }; + add_quality_command_line_args(args, quality_input_str, video_bitrate_str.c_str()); + if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(overclock_button))) args.insert(args.end(), { "-oc", "yes" }); @@ -1966,9 +1987,9 @@ save_configs(); - int fps = gtk_spin_button_get_value_as_int(fps_entry); - int record_width = gsr_info.system_info.display_server == DisplayServer::WAYLAND ? 0 : gtk_spin_button_get_value_as_int(area_width_entry); - int record_height = gsr_info.system_info.display_server == DisplayServer::WAYLAND ? 0 : gtk_spin_button_get_value_as_int(area_height_entry); + const int fps = gtk_spin_button_get_value_as_int(fps_entry); + const int record_width = gsr_info.system_info.display_server == DisplayServer::WAYLAND ? 0 : gtk_spin_button_get_value_as_int(area_width_entry); + const int record_height = gsr_info.system_info.display_server == DisplayServer::WAYLAND ? 0 : gtk_spin_button_get_value_as_int(area_height_entry); bool follow_focused = false; std::string window_str = record_area_selection_menu_get_active_id(); @@ -2021,6 +2042,7 @@ const gchar* framerate_mode_input_str = gtk_combo_box_get_active_id(GTK_COMBO_BOX(framerate_mode_input_menu)); const bool record_cursor = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(record_cursor_button)); const bool restore_portal_session = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(restore_portal_session_button)); + const std::string video_bitrate_str = std::to_string(gtk_spin_button_get_value_as_int(video_bitrate_entry)); const char *encoder = "gpu"; std::string video_codec_input_str = video_codec_selection_menu_get_active_id(); @@ -2040,9 +2062,11 @@ snprintf(area, sizeof(area), "%dx%d", record_width, record_height); std::vector<const char*> args = { - "gpu-screen-recorder", "-w", window_str.c_str(), "-c", container_str, "-q", quality_input_str, "-k", video_codec_input_str.c_str(), "-ac", audio_codec_input_str, "-f", fps_str.c_str(), "-cursor", record_cursor ? "yes" : "no", "-restore-portal-session", restore_portal_session ? "yes" : "no", "-cr", color_range_input_str, "-encoder", encoder, "-o", stream_url.c_str() + "gpu-screen-recorder", "-w", window_str.c_str(), "-c", container_str, "-k", video_codec_input_str.c_str(), "-ac", audio_codec_input_str, "-f", fps_str.c_str(), "-cursor", record_cursor ? "yes" : "no", "-restore-portal-session", restore_portal_session ? "yes" : "no", "-cr", color_range_input_str, "-encoder", encoder, "-o", stream_url.c_str() }; + add_quality_command_line_args(args, quality_input_str, video_bitrate_str.c_str()); + if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(overclock_button))) args.insert(args.end(), { "-oc", "yes" }); @@ -2152,6 +2176,13 @@ gtk_widget_set_visible(GTK_WIDGET(show_recording_saved_notification_button), advanced_view); } +static void quality_combo_box_change_callback(GtkComboBox *widget, gpointer userdata) { + (void)userdata; + const gchar *selected_view = gtk_combo_box_get_active_id(widget); + const bool custom_selected = strcmp(selected_view, "custom") == 0; + gtk_widget_set_visible(GTK_WIDGET(video_bitrate_grid), custom_selected); +} + static void stream_service_item_change_callback(GtkComboBox *widget, gpointer userdata) { (void)userdata; @@ -2763,17 +2794,27 @@ gtk_grid_attach(color_range_grid, GTK_WIDGET(color_range_input_menu), 1, 0, 1, 1); gtk_combo_box_set_active(GTK_COMBO_BOX(color_range_input_menu), 0); - GtkGrid *quality_grid = GTK_GRID(gtk_grid_new()); - gtk_grid_attach(grid, GTK_WIDGET(quality_grid), 0, grid_row++, 2, 1); - gtk_grid_attach(quality_grid, gtk_label_new("Video quality: "), 0, 0, 1, 1); + GtkGrid *video_quality_grid = GTK_GRID(gtk_grid_new()); + gtk_grid_attach(grid, GTK_WIDGET(video_quality_grid), 0, grid_row++, 2, 1); + gtk_grid_attach(video_quality_grid, gtk_label_new("Video quality: "), 0, 0, 1, 1); quality_input_menu = GTK_COMBO_BOX_TEXT(gtk_combo_box_text_new()); + gtk_combo_box_text_append(quality_input_menu, "custom", "Custom (Constant bitrate, recommended for live streaming)"); gtk_combo_box_text_append(quality_input_menu, "medium", "Medium"); - gtk_combo_box_text_append(quality_input_menu, "high", "High (Recommended for live streaming)"); + gtk_combo_box_text_append(quality_input_menu, "high", "High"); gtk_combo_box_text_append(quality_input_menu, "very_high", "Very High (Recommended)"); gtk_combo_box_text_append(quality_input_menu, "ultra", "Ultra"); gtk_widget_set_hexpand(GTK_WIDGET(quality_input_menu), true); - gtk_grid_attach(quality_grid, GTK_WIDGET(quality_input_menu), 1, 0, 1, 1); + gtk_grid_attach(video_quality_grid, GTK_WIDGET(quality_input_menu), 1, 0, 1, 1); gtk_combo_box_set_active(GTK_COMBO_BOX(quality_input_menu), 0); + g_signal_connect(quality_input_menu, "changed", G_CALLBACK(quality_combo_box_change_callback), quality_input_menu); + + video_bitrate_grid = GTK_GRID(gtk_grid_new()); + gtk_grid_attach(grid, GTK_WIDGET(video_bitrate_grid), 0, grid_row++, 2, 1); + gtk_grid_attach(video_bitrate_grid, gtk_label_new("Video bitrate (kbps): "), 0, 0, 1, 1); + video_bitrate_entry = GTK_SPIN_BUTTON(gtk_spin_button_new_with_range(1.0, 1000000.0, 1.0)); + gtk_spin_button_set_value(video_bitrate_entry, 5000.0); + gtk_widget_set_hexpand(GTK_WIDGET(video_bitrate_entry), true); + gtk_grid_attach(video_bitrate_grid, GTK_WIDGET(video_bitrate_entry), 1, 0, 1, 1); video_codec_grid = GTK_GRID(gtk_grid_new()); gtk_grid_attach(grid, GTK_WIDGET(video_codec_grid), 0, grid_row++, 2, 1); @@ -3672,7 +3713,7 @@ if(config.main_config.color_range != "limited" && config.main_config.color_range != "full") config.main_config.color_range = "limited"; - if(config.main_config.quality != "medium" && config.main_config.quality != "high" && config.main_config.quality != "very_high" && config.main_config.quality != "ultra") + if(config.main_config.quality != "custom" && config.main_config.quality != "medium" && config.main_config.quality != "high" && config.main_config.quality != "very_high" && config.main_config.quality != "ultra") config.main_config.quality = "very_high"; if(config.main_config.audio_codec != "opus" && config.main_config.audio_codec != "aac") @@ -3701,6 +3742,7 @@ gtk_spin_button_set_value(area_height_entry, config.main_config.record_area_height); } gtk_spin_button_set_value(fps_entry, config.main_config.fps); + gtk_spin_button_set_value(video_bitrate_entry, config.main_config.video_bitrate); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(merge_audio_tracks_button), config.main_config.merge_audio_tracks); for(const std::string &audio_input : config.main_config.audio_input) { @@ -3740,6 +3782,7 @@ gtk_combo_box_set_active_id(GTK_COMBO_BOX(view_combo_box), config.main_config.advanced_view ? "advanced" : "simple"); view_combo_box_change_callback(GTK_COMBO_BOX(view_combo_box), view_combo_box); + quality_combo_box_change_callback(GTK_COMBO_BOX(quality_input_menu), quality_input_menu); if(gsr_info.system_info.display_server != DisplayServer::WAYLAND) { if(!config_empty) { for(int i = 0; i < num_hotkeys; ++i) {