Add vulkan video encoding option, improve translation strings

This commit is contained in:
dec05eba
2026-04-18 20:45:45 +02:00
parent 0c6d887def
commit 532c50ce6d
15 changed files with 184 additions and 50 deletions

2
TODO
View File

@@ -259,4 +259,4 @@ Keep replay turned on when opening a fullscreen application and alt-tabbing. Onl
Show vulkan codec options. Show vulkan codec options.
Use game information to save video under the game title if available, fallback to window title. Use wlroots protocol for region selection, if the protocol is available.

View File

@@ -57,6 +57,7 @@ namespace gsr {
bool record_cursor = true; bool record_cursor = true;
bool restore_portal_session = true; bool restore_portal_session = true;
bool low_power_mode = false; bool low_power_mode = false;
bool enable_vulkan_video_encoding = false;
std::string webcam_source = ""; std::string webcam_source = "";
bool webcam_flip_horizontally = false; bool webcam_flip_horizontally = false;

View File

@@ -18,6 +18,13 @@ namespace gsr {
bool av1_10bit = false; bool av1_10bit = false;
bool vp8 = false; bool vp8 = false;
bool vp9 = false; bool vp9 = false;
bool h264_vulkan = false;
bool hevc_vulkan = false;
bool hevc_hdr_vulkan = false;
bool hevc_10bit_vulkan = false;
bool av1_vulkan = false;
bool av1_hdr_vulkan = false;
bool av1_10bit_vulkan = false;
}; };
struct SupportedImageFormats { struct SupportedImageFormats {

View File

@@ -109,6 +109,7 @@ namespace gsr {
std::unique_ptr<List> create_framerate_mode(); std::unique_ptr<List> create_framerate_mode();
std::unique_ptr<List> create_framerate_section(); std::unique_ptr<List> create_framerate_section();
std::unique_ptr<Widget> create_record_cursor_section(); std::unique_ptr<Widget> create_record_cursor_section();
std::unique_ptr<Widget> create_enable_vulkan_video_encoding_section();
std::unique_ptr<Widget> create_video_section(); std::unique_ptr<Widget> create_video_section();
std::unique_ptr<Widget> create_settings(); std::unique_ptr<Widget> create_settings();
void add_widgets(); void add_widgets();
@@ -131,9 +132,9 @@ namespace gsr {
std::unique_ptr<CheckBox> create_save_recording_in_game_folder(); std::unique_ptr<CheckBox> create_save_recording_in_game_folder();
std::unique_ptr<Label> create_estimated_record_file_size(); std::unique_ptr<Label> create_estimated_record_file_size();
void update_estimated_record_file_size(); void update_estimated_record_file_size();
std::unique_ptr<CheckBox> create_led_indicator(const char *type); std::unique_ptr<CheckBox> create_led_indicator();
std::unique_ptr<CheckBox> create_notifications(const char *type); std::unique_ptr<CheckBox> create_notifications();
std::unique_ptr<List> create_indicator(const char *type); std::unique_ptr<List> create_indicator();
std::unique_ptr<Widget> create_low_power_mode(); std::unique_ptr<Widget> create_low_power_mode();
void add_replay_widgets(); void add_replay_widgets();
void add_record_widgets(); void add_record_widgets();
@@ -232,6 +233,7 @@ namespace gsr {
CheckBox *flip_camera_horizontally_checkbox_ptr = nullptr; CheckBox *flip_camera_horizontally_checkbox_ptr = nullptr;
CheckBox *low_power_mode_checkbox_ptr = nullptr; CheckBox *low_power_mode_checkbox_ptr = nullptr;
CheckBox *replay_power_supply_checkbox_ptr = nullptr; CheckBox *replay_power_supply_checkbox_ptr = nullptr;
CheckBox *enable_vulkan_checkbox_ptr = nullptr;
PageStack *page_stack = nullptr; PageStack *page_stack = nullptr;

View File

@@ -198,6 +198,7 @@ namespace gsr {
{"streaming.record_options.record_cursor", &config.streaming_config.record_options.record_cursor}, {"streaming.record_options.record_cursor", &config.streaming_config.record_options.record_cursor},
{"streaming.record_options.restore_portal_session", &config.streaming_config.record_options.restore_portal_session}, {"streaming.record_options.restore_portal_session", &config.streaming_config.record_options.restore_portal_session},
{"streaming.record_options.low_power_mode", &config.streaming_config.record_options.low_power_mode}, {"streaming.record_options.low_power_mode", &config.streaming_config.record_options.low_power_mode},
{"streaming.record_options.enable_vulkan_video_encoding", &config.streaming_config.record_options.enable_vulkan_video_encoding},
{"streaming.record_options.webcam_source", &config.streaming_config.record_options.webcam_source}, {"streaming.record_options.webcam_source", &config.streaming_config.record_options.webcam_source},
{"streaming.record_options.webcam_flip_horizontally", &config.streaming_config.record_options.webcam_flip_horizontally}, {"streaming.record_options.webcam_flip_horizontally", &config.streaming_config.record_options.webcam_flip_horizontally},
{"streaming.record_options.webcam_video_format", &config.streaming_config.record_options.webcam_video_format}, {"streaming.record_options.webcam_video_format", &config.streaming_config.record_options.webcam_video_format},
@@ -240,6 +241,7 @@ namespace gsr {
{"record.record_options.record_cursor", &config.record_config.record_options.record_cursor}, {"record.record_options.record_cursor", &config.record_config.record_options.record_cursor},
{"record.record_options.restore_portal_session", &config.record_config.record_options.restore_portal_session}, {"record.record_options.restore_portal_session", &config.record_config.record_options.restore_portal_session},
{"record.record_options.low_power_mode", &config.record_config.record_options.low_power_mode}, {"record.record_options.low_power_mode", &config.record_config.record_options.low_power_mode},
{"record.record_options.enable_vulkan_video_encoding", &config.record_config.record_options.enable_vulkan_video_encoding},
{"record.record_options.webcam_source", &config.record_config.record_options.webcam_source}, {"record.record_options.webcam_source", &config.record_config.record_options.webcam_source},
{"record.record_options.webcam_flip_horizontally", &config.record_config.record_options.webcam_flip_horizontally}, {"record.record_options.webcam_flip_horizontally", &config.record_config.record_options.webcam_flip_horizontally},
{"record.record_options.webcam_video_format", &config.record_config.record_options.webcam_video_format}, {"record.record_options.webcam_video_format", &config.record_config.record_options.webcam_video_format},
@@ -279,6 +281,7 @@ namespace gsr {
{"replay.record_options.record_cursor", &config.replay_config.record_options.record_cursor}, {"replay.record_options.record_cursor", &config.replay_config.record_options.record_cursor},
{"replay.record_options.restore_portal_session", &config.replay_config.record_options.restore_portal_session}, {"replay.record_options.restore_portal_session", &config.replay_config.record_options.restore_portal_session},
{"replay.record_options.low_power_mode", &config.replay_config.record_options.low_power_mode}, {"replay.record_options.low_power_mode", &config.replay_config.record_options.low_power_mode},
{"replay.record_options.enable_vulkan_video_encoding", &config.replay_config.record_options.enable_vulkan_video_encoding},
{"replay.record_options.webcam_source", &config.replay_config.record_options.webcam_source}, {"replay.record_options.webcam_source", &config.replay_config.record_options.webcam_source},
{"replay.record_options.webcam_flip_horizontally", &config.replay_config.record_options.webcam_flip_horizontally}, {"replay.record_options.webcam_flip_horizontally", &config.replay_config.record_options.webcam_flip_horizontally},
{"replay.record_options.webcam_video_format", &config.replay_config.record_options.webcam_video_format}, {"replay.record_options.webcam_video_format", &config.replay_config.record_options.webcam_video_format},

View File

@@ -157,6 +157,20 @@ namespace gsr {
gsr_info->supported_video_codecs.vp8 = true; gsr_info->supported_video_codecs.vp8 = true;
else if(line == "vp9") else if(line == "vp9")
gsr_info->supported_video_codecs.vp9 = true; gsr_info->supported_video_codecs.vp9 = true;
else if(line == "h264_vulkan")
gsr_info->supported_video_codecs.h264_vulkan = true;
else if(line == "hevc_vulkan")
gsr_info->supported_video_codecs.hevc_vulkan = true;
else if(line == "hevc_hdr_vulkan")
gsr_info->supported_video_codecs.hevc_hdr_vulkan = true;
else if(line == "hevc_10bit_vulkan")
gsr_info->supported_video_codecs.hevc_10bit_vulkan = true;
else if(line == "av1_vulkan")
gsr_info->supported_video_codecs.av1_vulkan = true;
else if(line == "av1_hdr_vulkan")
gsr_info->supported_video_codecs.av1_hdr_vulkan = true;
else if(line == "av1_10bit_vulkan")
gsr_info->supported_video_codecs.av1_10bit_vulkan = true;
} }
static void parse_image_formats_line(GsrInfo *gsr_info, std::string_view line) { static void parse_image_formats_line(GsrInfo *gsr_info, std::string_view line) {

View File

@@ -2812,7 +2812,7 @@ namespace gsr {
return container; return container;
} }
static void choose_video_codec_and_container_with_fallback(const GsrInfo &gsr_info, const char **video_codec, const char **container, const char **encoder) { static void choose_video_codec_and_container_with_fallback(const GsrInfo &gsr_info, const RecordOptions &record_options, const char **video_codec, const char **container, const char **encoder) {
*encoder = "gpu"; *encoder = "gpu";
if(strcmp(*video_codec, "h264_software") == 0) { if(strcmp(*video_codec, "h264_software") == 0) {
*video_codec = "h264"; *video_codec = "h264";
@@ -2824,6 +2824,23 @@ namespace gsr {
} }
} }
*container = change_container_if_codec_not_supported(*video_codec, *container); *container = change_container_if_codec_not_supported(*video_codec, *container);
if(record_options.enable_vulkan_video_encoding && strcmp(*encoder, "gpu") == 0) {
if(strcmp(*video_codec, "h264") == 0)
*video_codec = "h264_vulkan";
else if(strcmp(*video_codec, "hevc") == 0)
*video_codec = "hevc_vulkan";
else if(strcmp(*video_codec, "hevc_hdr") == 0)
*video_codec = "hevc_hdr_vulkan";
else if(strcmp(*video_codec, "hevc_10bit") == 0)
*video_codec = "hevc_10bit_vulkan";
else if(strcmp(*video_codec, "av1") == 0)
*video_codec = "av1_vulkan";
else if(strcmp(*video_codec, "av1_hdr") == 0)
*video_codec = "av1_hdr_vulkan";
else if(strcmp(*video_codec, "av1_10bit") == 0)
*video_codec = "av1_10bit_vulkan";
}
} }
static std::string get_framerate_mode_validate(const RecordOptions &record_options, const GsrInfo &gsr_info) { static std::string get_framerate_mode_validate(const RecordOptions &record_options, const GsrInfo &gsr_info) {
@@ -2976,7 +2993,7 @@ namespace gsr {
const char *container = config.replay_config.container.c_str(); const char *container = config.replay_config.container.c_str();
const char *video_codec = config.replay_config.record_options.video_codec.c_str(); const char *video_codec = config.replay_config.record_options.video_codec.c_str();
const char *encoder = "gpu"; const char *encoder = "gpu";
choose_video_codec_and_container_with_fallback(gsr_info, &video_codec, &container, &encoder); choose_video_codec_and_container_with_fallback(gsr_info, config.replay_config.record_options, &video_codec, &container, &encoder);
char size[64]; char size[64];
size[0] = '\0'; size[0] = '\0';
@@ -3217,7 +3234,7 @@ namespace gsr {
const char *container = config.record_config.container.c_str(); const char *container = config.record_config.container.c_str();
const char *video_codec = config.record_config.record_options.video_codec.c_str(); const char *video_codec = config.record_config.record_options.video_codec.c_str();
const char *encoder = "gpu"; const char *encoder = "gpu";
choose_video_codec_and_container_with_fallback(gsr_info, &video_codec, &container, &encoder); choose_video_codec_and_container_with_fallback(gsr_info, config.record_config.record_options, &video_codec, &container, &encoder);
char size[64]; char size[64];
size[0] = '\0'; size[0] = '\0';
@@ -3418,12 +3435,12 @@ namespace gsr {
container = config.streaming_config.custom.container.c_str(); container = config.streaming_config.custom.container.c_str();
const char *video_codec = config.streaming_config.record_options.video_codec.c_str(); const char *video_codec = config.streaming_config.record_options.video_codec.c_str();
const char *encoder = "gpu"; const char *encoder = "gpu";
choose_video_codec_and_container_with_fallback(gsr_info, &video_codec, &container, &encoder); choose_video_codec_and_container_with_fallback(gsr_info, config.streaming_config.record_options, &video_codec, &container, &encoder);
const std::string url = streaming_get_url(config); const std::string url = streaming_get_url(config);
if(config.streaming_config.streaming_service == "rumble" || config.streaming_config.streaming_service == "kick") { if(config.streaming_config.streaming_service == "rumble" || config.streaming_config.streaming_service == "kick") {
fprintf(stderr, "Info: forcing video codec to h264 as rumble/kick supports only h264\n"); fprintf(stderr, "Info: forcing video codec to h264 as rumble/kick supports only h264\n");
video_codec = "h264"; video_codec = "h264"; // TODO: Vulkan
} }
char size[64]; char size[64];

View File

@@ -45,6 +45,16 @@ namespace gsr {
return result; return result;
} }
static bool supports_vulkan_video_encoding(const SupportedVideoCodecs &supported_video_codecs) {
return supported_video_codecs.h264_vulkan
|| supported_video_codecs.hevc_vulkan
|| supported_video_codecs.hevc_hdr_vulkan
|| supported_video_codecs.hevc_10bit_vulkan
|| supported_video_codecs.av1_vulkan
|| supported_video_codecs.av1_hdr_vulkan
|| supported_video_codecs.av1_10bit_vulkan;
}
SettingsPage::SettingsPage(Type type, const GsrInfo *gsr_info, Config &config, PageStack *page_stack, bool supports_window_title) : SettingsPage::SettingsPage(Type type, const GsrInfo *gsr_info, Config &config, PageStack *page_stack, bool supports_window_title) :
StaticPage(mgl::vec2f(get_theme().window_width, get_theme().window_height).floor()), StaticPage(mgl::vec2f(get_theme().window_width, get_theme().window_height).floor()),
type(type), type(type),
@@ -968,12 +978,39 @@ namespace gsr {
return record_cursor_checkbox; return record_cursor_checkbox;
} }
std::unique_ptr<Widget> SettingsPage::create_enable_vulkan_video_encoding_section() {
auto list = std::make_unique<List>(List::Orientation::HORIZONTAL, List::Alignment::CENTER);
auto enable_vulkan_checkbox = std::make_unique<CheckBox>(get_theme().body_font_desc.c_str(), TR("Enable vulkan video encoding (experimental)"));
enable_vulkan_checkbox_ptr = enable_vulkan_checkbox.get();
list->add_widget(std::move(enable_vulkan_checkbox));
auto info = std::make_unique<Image>(&get_theme().question_mark_texture, enable_vulkan_checkbox_ptr->get_size(), Image::ScaleBehavior::SCALE);
info->set_tooltip_text(
TR("Use vulkan video encoding instead of VAAPI/NVENC.\n"
"Enabling this may result in better game performance while recording, especially on NVIDIA.\n"
"Note that this option is experimental. There may be GPU driver issues that causes issues when this is enabled.")
);
Image *info_ptr = info.get();
info->on_mouse_move = [info_ptr](bool inside) {
if(inside)
set_current_tooltip(info_ptr);
else
remove_as_current_tooltip(info_ptr);
};
list->add_widget(std::move(info));
return list;
}
std::unique_ptr<Widget> SettingsPage::create_video_section() { std::unique_ptr<Widget> SettingsPage::create_video_section() {
auto video_section_list = std::make_unique<List>(List::Orientation::VERTICAL); auto video_section_list = std::make_unique<List>(List::Orientation::VERTICAL);
video_section_list->add_widget(create_video_quality_section()); video_section_list->add_widget(create_video_quality_section());
video_section_list->add_widget(create_video_codec()); video_section_list->add_widget(create_video_codec());
video_section_list->add_widget(create_framerate_section()); video_section_list->add_widget(create_framerate_section());
video_section_list->add_widget(create_record_cursor_section()); video_section_list->add_widget(create_record_cursor_section());
video_section_list->add_widget(create_enable_vulkan_video_encoding_section());
return std::make_unique<Subsection>(TR("Video"), std::move(video_section_list), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f)); return std::make_unique<Subsection>(TR("Video"), std::move(video_section_list), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f));
} }
@@ -1204,6 +1241,7 @@ namespace gsr {
audio_codec_ptr->set_visible(advanced_view); audio_codec_ptr->set_visible(advanced_view);
video_codec_ptr->set_visible(advanced_view); video_codec_ptr->set_visible(advanced_view);
framerate_mode_list_ptr->set_visible(advanced_view); framerate_mode_list_ptr->set_visible(advanced_view);
enable_vulkan_checkbox_ptr->set_visible(advanced_view && supports_vulkan_video_encoding(gsr_info->supported_video_codecs));
set_application_audio_options_visible(audio_track_section_list_ptr, advanced_view, *gsr_info); set_application_audio_options_visible(audio_track_section_list_ptr, advanced_view, *gsr_info);
settings_scrollable_page_ptr->reset_scroll(); settings_scrollable_page_ptr->reset_scroll();
} }
@@ -1218,9 +1256,20 @@ namespace gsr {
} }
} }
std::unique_ptr<CheckBox> SettingsPage::create_led_indicator(const char *type) { std::unique_ptr<CheckBox> SettingsPage::create_led_indicator() {
char label_str[256]; char label_str[256];
snprintf(label_str, sizeof(label_str), TR("Show %s status with scroll lock LED"), type); label_str[0] = '\0';
switch(type) {
case Type::REPLAY:
snprintf(label_str, sizeof(label_str), "%s", TR("Show replay status with scroll lock LED"));
break;
case Type::RECORD:
snprintf(label_str, sizeof(label_str), "%s", TR("Show recording status with scroll lock LED"));
break;
case Type::STREAM:
snprintf(label_str, sizeof(label_str), "%s", TR("Show streaming status with scroll lock LED"));
break;
}
auto checkbox = std::make_unique<CheckBox>(get_theme().body_font_desc.c_str(), label_str); auto checkbox = std::make_unique<CheckBox>(get_theme().body_font_desc.c_str(), label_str);
checkbox->set_checked(false); checkbox->set_checked(false);
@@ -1228,19 +1277,31 @@ namespace gsr {
return checkbox; return checkbox;
} }
std::unique_ptr<CheckBox> SettingsPage::create_notifications(const char *type) { std::unique_ptr<CheckBox> SettingsPage::create_notifications() {
char label_str[256]; char label_str[256];
snprintf(label_str, sizeof(label_str), TR("Show %s notifications"), type); label_str[0] = '\0';
switch(type) {
case Type::REPLAY:
snprintf(label_str, sizeof(label_str), "%s", TR("Show replay notifications"));
break;
case Type::RECORD:
snprintf(label_str, sizeof(label_str), "%s", TR("Show recording notifications"));
break;
case Type::STREAM:
snprintf(label_str, sizeof(label_str), "%s", TR("Show streaming notifications"));
break;
}
auto checkbox = std::make_unique<CheckBox>(get_theme().body_font_desc.c_str(), label_str); auto checkbox = std::make_unique<CheckBox>(get_theme().body_font_desc.c_str(), label_str);
checkbox->set_checked(true); checkbox->set_checked(true);
show_notification_checkbox_ptr = checkbox.get(); show_notification_checkbox_ptr = checkbox.get();
return checkbox; return checkbox;
} }
std::unique_ptr<List> SettingsPage::create_indicator(const char *type) { std::unique_ptr<List> SettingsPage::create_indicator() {
auto list = std::make_unique<List>(List::Orientation::VERTICAL); auto list = std::make_unique<List>(List::Orientation::VERTICAL);
list->add_widget(create_notifications(type)); list->add_widget(create_notifications());
list->add_widget(create_led_indicator(type)); list->add_widget(create_led_indicator());
return list; return list;
} }
@@ -1289,7 +1350,7 @@ namespace gsr {
general_list->add_widget(create_low_power_mode()); general_list->add_widget(create_low_power_mode());
settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("General"), std::move(general_list), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f))); settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("General"), std::move(general_list), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f)));
settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("Replay indicator"), create_indicator(TR("replay")), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f))); settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("Replay indicator"), create_indicator(), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f)));
settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("Autostart"), create_start_replay_automatically_section(), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f))); settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("Autostart"), create_start_replay_automatically_section(), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f)));
view_radio_button_ptr->on_selection_changed = [this](std::string_view, std::string_view id) { view_radio_button_ptr->on_selection_changed = [this](std::string_view, std::string_view id) {
@@ -1346,7 +1407,7 @@ namespace gsr {
general_list->add_widget(create_low_power_mode()); general_list->add_widget(create_low_power_mode());
settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("General"), std::move(general_list), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f))); settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("General"), std::move(general_list), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f)));
settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("Recording indicator"), create_indicator(TR("recording")), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f))); settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("Recording indicator"), create_indicator(), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f)));
view_radio_button_ptr->on_selection_changed = [this](std::string_view, std::string_view id) { view_radio_button_ptr->on_selection_changed = [this](std::string_view, std::string_view id) {
view_changed(id == "advanced"); view_changed(id == "advanced");
@@ -1512,7 +1573,7 @@ namespace gsr {
general_list->add_widget(create_low_power_mode()); general_list->add_widget(create_low_power_mode());
settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("General"), std::move(general_list), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f))); settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("General"), std::move(general_list), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f)));
settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("Streaming indicator"), create_indicator(TR("streaming")), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f))); settings_list_ptr->add_widget(std::make_unique<Subsection>(TR("Streaming indicator"), create_indicator(), mgl::vec2f(settings_scrollable_page_ptr->get_inner_size().x, 0.0f)));
streaming_service_box_ptr->on_selection_changed = [this](std::string_view, std::string_view id) { streaming_service_box_ptr->on_selection_changed = [this](std::string_view, std::string_view id) {
const bool twitch_option = id == "twitch"; const bool twitch_option = id == "twitch";
@@ -1657,6 +1718,7 @@ namespace gsr {
show_notification_checkbox_ptr->set_checked(record_options.show_notifications); show_notification_checkbox_ptr->set_checked(record_options.show_notifications);
led_indicator_checkbox_ptr->set_checked(record_options.use_led_indicator); led_indicator_checkbox_ptr->set_checked(record_options.use_led_indicator);
low_power_mode_checkbox_ptr->set_checked(record_options.low_power_mode); low_power_mode_checkbox_ptr->set_checked(record_options.low_power_mode);
enable_vulkan_checkbox_ptr->set_checked(record_options.enable_vulkan_video_encoding);
char webcam_setup_str[256]; char webcam_setup_str[256];
snprintf(webcam_setup_str, sizeof(webcam_setup_str), "%dx%d@%dhz", record_options.webcam_camera_width, record_options.webcam_camera_height, record_options.webcam_camera_fps); snprintf(webcam_setup_str, sizeof(webcam_setup_str), "%dx%d@%dhz", record_options.webcam_camera_width, record_options.webcam_camera_height, record_options.webcam_camera_fps);
@@ -1809,6 +1871,7 @@ namespace gsr {
record_options.show_notifications = show_notification_checkbox_ptr->is_checked(); record_options.show_notifications = show_notification_checkbox_ptr->is_checked();
record_options.use_led_indicator = led_indicator_checkbox_ptr->is_checked(); record_options.use_led_indicator = led_indicator_checkbox_ptr->is_checked();
record_options.low_power_mode = low_power_mode_checkbox_ptr->is_checked(); record_options.low_power_mode = low_power_mode_checkbox_ptr->is_checked();
record_options.enable_vulkan_video_encoding = enable_vulkan_checkbox_ptr->is_checked();
// TODO: Set selected_camera_setup properly when updating and shit // TODO: Set selected_camera_setup properly when updating and shit

View File

@@ -372,11 +372,16 @@ Record in low-power mode=Grabar en modo de bajo consumo
Record cursor=Grabar cursor Record cursor=Grabar cursor
Do not force the GPU to go into high performance mode when recording.\nMay affect recording performance, especially when playing a video at the same time.\nIf enabled then it's recommended to use sync to content frame rate mode to reduce power usage when idle.=No forzar a la GPU a entrar en modo de alto rendimiento al grabar.\nPuede afectar al rendimiento de la grabación, especialmente al reproducir un vídeo al mismo tiempo.\nSi se activa, se recomienda usar el modo de sincronización con la velocidad de fotogramas del contenido para reducir el consumo de energía cuando está inactiva. Do not force the GPU to go into high performance mode when recording.\nMay affect recording performance, especially when playing a video at the same time.\nIf enabled then it's recommended to use sync to content frame rate mode to reduce power usage when idle.=No forzar a la GPU a entrar en modo de alto rendimiento al grabar.\nPuede afectar al rendimiento de la grabación, especialmente al reproducir un vídeo al mismo tiempo.\nSi se activa, se recomienda usar el modo de sincronización con la velocidad de fotogramas del contenido para reducir el consumo de energía cuando está inactiva.
Use vulkan video encoding instead of VAAPI/NVENC.\nEnabling this may result in better game performance while recording, especially on NVIDIA.\nNote that this option is experimental. There may be GPU driver issues that causes issues when this is enabled.=Utiliza la codificación de vídeo Vulkan en lugar de VAAPI/NVENC.\nHabilitar esta opción puede mejorar el rendimiento de los juegos durante la grabación, especialmente en tarjetas NVIDIA.\nTen en cuenta que esta opción es experimental. Podría haber problemas con los controladores de la GPU al activarla.
Enable vulkan video encoding (experimental)=Habilitar la codificación de vídeo Vulkan (experimental)
Show %s notifications=Mostrar notificación de %s Show replay notifications=Mostrar notificaciones de repetición
Show %s status with scroll lock LED=Mostrar estado de %s con el LED de Bloq Despl Show recording notifications=Mostrar notificaciones de grabación
Show streaming notifications=Mostrar notificaciones de transmisión
Show replay status with scroll lock LED=Mostrar estado de repetición con LED de bloqueo de desplazamiento
Show recording status with scroll lock LED=Mostrar estado de grabación con LED de bloqueo de desplazamiento
Show streaming status with scroll lock LED=Mostrar estado de transmisión con LED de bloqueo de desplazamiento
Recording indicator=Indicador de grabación Recording indicator=Indicador de grabación
recording=grabando
Simple=Simple Simple=Simple
Audio track #%d=Pista de sonido #%d Audio track #%d=Pista de sonido #%d
@@ -387,7 +392,6 @@ Estimated video file size per minute (excluding audio): %.2fMB=Tamaño estimado
# Replay settings # Replay settings
Directory to save replays:=Directorio para guardar las repeticiones: Directory to save replays:=Directorio para guardar las repeticiones:
Replay indicator=Indicador de repetición Replay indicator=Indicador de repetición
replay=repetición
Turn on replay when starting a game=Activa la repetición al iniciar un juego Turn on replay when starting a game=Activa la repetición al iniciar un juego
Autostart=Inicio automático Autostart=Inicio automático
in RAM=en RAM in RAM=en RAM
@@ -413,4 +417,3 @@ Stream URL:=URL de la transmisión
Stream key:=Clave de transmisión Stream key:=Clave de transmisión
Streaming info=Información de transmisión Streaming info=Información de transmisión
Streaming indicator=Indicador de transmisión Streaming indicator=Indicador de transmisión
streaming=transmisión

View File

@@ -385,11 +385,16 @@ Record in low-power mode=Enregistrer en mode basse consommation
Record cursor=Enregistrer le curseur Record cursor=Enregistrer le curseur
Do not force the GPU to go into high performance mode when recording.\nMay affect recording performance, especially when playing a video at the same time.\nIf enabled then it's recommended to use sync to content frame rate mode to reduce power usage when idle.=Ne forcez pas le GPU en mode haute performance lors de lenregistrement.\nPeut affecter les performances, surtout en lisant une vidéo en parallèle.\nSi activé, il est recommandé dutiliser le mode “Synchroniser au contenu” pour réduire la consommation dénergie au repos. Do not force the GPU to go into high performance mode when recording.\nMay affect recording performance, especially when playing a video at the same time.\nIf enabled then it's recommended to use sync to content frame rate mode to reduce power usage when idle.=Ne forcez pas le GPU en mode haute performance lors de lenregistrement.\nPeut affecter les performances, surtout en lisant une vidéo en parallèle.\nSi activé, il est recommandé dutiliser le mode “Synchroniser au contenu” pour réduire la consommation dénergie au repos.
Use vulkan video encoding instead of VAAPI/NVENC.\nEnabling this may result in better game performance while recording, especially on NVIDIA.\nNote that this option is experimental. There may be GPU driver issues that causes issues when this is enabled.=Utilisez l'encodage vidéo Vulkan au lieu de VAAPI/NVENC.\nL'activation de cette option peut améliorer les performances de jeu lors de l'enregistrement, notamment sur les cartes graphiques NVIDIA.\nNotez que cette option est expérimentale. Des problèmes de pilotes GPU peuvent survenir lorsqu'elle est activée.
Enable vulkan video encoding (experimental)=Activer l'encodage vidéo Vulkan (expérimental)
Show %s notifications=Afficher les notifications %s Show replay notifications=Afficher les notifications de relecture
Show %s status with scroll lock LED=Afficher le statut %s via la LED Arrêt Défil Show recording notifications=Afficher les notifications d'enregistrement
Show streaming notifications=Afficher les notifications de diffusion
Show replay status with scroll lock LED=Afficher l'état de relecture avec la LED de verrouillage du défilement
Show recording status with scroll lock LED=Afficher l'état d'enregistrement avec la LED de verrouillage du défilement
Show streaming status with scroll lock LED=Afficher l'état de diffusion avec la LED de verrouillage du défilement
Recording indicator=Indicateur denregistrement Recording indicator=Indicateur denregistrement
recording=Enregistrement
Simple=Simple Simple=Simple
Audio track #%d=Piste audio #%d Audio track #%d=Piste audio #%d
@@ -400,7 +405,6 @@ Estimated video file size per minute (excluding audio): %.2fMB=Taille estimée d
# Replay settings # Replay settings
Directory to save replays:=Répertoire pour sauvegarder les replays Directory to save replays:=Répertoire pour sauvegarder les replays
Replay indicator=Indicateur de replay Replay indicator=Indicateur de replay
replay=replay
Turn on replay when starting a game=Activez la rediffusion au début d'une partie Turn on replay when starting a game=Activez la rediffusion au début d'une partie
Autostart=Démarrage automatique Autostart=Démarrage automatique
in RAM=En RAM in RAM=En RAM
@@ -426,4 +430,3 @@ Stream URL:=URL du flux
Stream key:=Clé de diffusion Stream key:=Clé de diffusion
Streaming info=Infos diffusion Streaming info=Infos diffusion
Streaming indicator=Indicateur de diffusion Streaming indicator=Indicateur de diffusion
streaming=Diffusion

View File

@@ -377,11 +377,16 @@ Record in low-power mode=Felvétel energiatakarékos módban
Record cursor=Egérmutató felvétele Record cursor=Egérmutató felvétele
Do not force the GPU to go into high performance mode when recording.\nMay affect recording performance, especially when playing a video at the same time.\nIf enabled then it's recommended to use sync to content frame rate mode to reduce power usage when idle.=Ne kényszerítse a GPU-t nagy teljesítményű módba felvétel közben.\nEz befolyásolhatja a felvétel teljesítményét, különösen videólejátszás közben.\nHa engedélyezve van, ajánlott a tartalomhoz igazított képkockasebesség mód használata az energiafogyasztás csökkentésére üresjáratban. Do not force the GPU to go into high performance mode when recording.\nMay affect recording performance, especially when playing a video at the same time.\nIf enabled then it's recommended to use sync to content frame rate mode to reduce power usage when idle.=Ne kényszerítse a GPU-t nagy teljesítményű módba felvétel közben.\nEz befolyásolhatja a felvétel teljesítményét, különösen videólejátszás közben.\nHa engedélyezve van, ajánlott a tartalomhoz igazított képkockasebesség mód használata az energiafogyasztás csökkentésére üresjáratban.
Use vulkan video encoding instead of VAAPI/NVENC.\nEnabling this may result in better game performance while recording, especially on NVIDIA.\nNote that this option is experimental. There may be GPU driver issues that causes issues when this is enabled.=Vulkan videokódolás használata VAAPI/NVENC helyett.\nEnnek engedélyezése jobb játékteljesítményt eredményezhet felvétel közben, különösen NVIDIA-n.\nVegye figyelembe, hogy ez a beállítás kísérleti jellegű. Engedélyezése esetén előfordulhatnak GPU-illesztőprogram problémák.
Enable vulkan video encoding (experimental)=Vulkan videókódolás engedélyezése (kísérleti)
Show %s notifications=%s értesítések megjelenítése Show replay notifications=Visszajátszási értesítések megjelenítése
Show %s status with scroll lock LED=%s állapot jelzése Scroll Lock LED-del Show recording notifications=Felvételi értesítések megjelenítése
Show streaming notifications=Streamelési értesítések megjelenítése
Show replay status with scroll lock LED=Visszajátszás állapotának megjelenítése a Scroll Lock LED-del
Show recording status with scroll lock LED=Felvétel állapotának megjelenítése a Scroll Lock LED-del
Show streaming status with scroll lock LED=Streamelés állapotának megjelenítése a Scroll Lock LED-del
Recording indicator=Felvétel-jelző Recording indicator=Felvétel-jelző
recording=felvétel
Simple=Egyszerű Simple=Egyszerű
Audio track #%d=Hangsáv #%d Audio track #%d=Hangsáv #%d
@@ -392,7 +397,6 @@ Estimated video file size per minute (excluding audio): %.2fMB=Várható videóf
# Replay settings # Replay settings
Directory to save replays:=Visszajátszások mentési mappája: Directory to save replays:=Visszajátszások mentési mappája:
Replay indicator=Visszajátszás-jelző Replay indicator=Visszajátszás-jelző
replay=visszajátszás
Turn on replay when starting a game=Kapcsolja be az újrajátszást játék indításakor Turn on replay when starting a game=Kapcsolja be az újrajátszást játék indításakor
Autostart=Automatikus indítás Autostart=Automatikus indítás
in RAM=RAM-ban in RAM=RAM-ban
@@ -418,4 +422,3 @@ Stream URL:=Közvetítési URL:
Stream key:=Közvetítési kulcs: Stream key:=Közvetítési kulcs:
Streaming info=Közvetítési információk Streaming info=Közvetítési információk
Streaming indicator=Közvetítés-jelző Streaming indicator=Közvetítés-jelző
streaming=közvetítés

View File

@@ -389,11 +389,16 @@ Record in low-power mode=省電力モードで録画
Record cursor=カーソルを記録 Record cursor=カーソルを記録
Do not force the GPU to go into high performance mode when recording.\nMay affect recording performance, especially when playing a video at the same time.\nIf enabled then it's recommended to use sync to content frame rate mode to reduce power usage when idle.=録画時に GPU を高パフォーマンスモードへ強制しません\n特に動画再生と同時に使うと録画性能に影響する場合があります\n有効時は アイドル時の消費電力削減のため コンテンツ同期フレームレートモードの使用を推奨します Do not force the GPU to go into high performance mode when recording.\nMay affect recording performance, especially when playing a video at the same time.\nIf enabled then it's recommended to use sync to content frame rate mode to reduce power usage when idle.=録画時に GPU を高パフォーマンスモードへ強制しません\n特に動画再生と同時に使うと録画性能に影響する場合があります\n有効時は アイドル時の消費電力削減のため コンテンツ同期フレームレートモードの使用を推奨します
Use vulkan video encoding instead of VAAPI/NVENC.\nEnabling this may result in better game performance while recording, especially on NVIDIA.\nNote that this option is experimental. There may be GPU driver issues that causes issues when this is enabled.=VAAPI/NVENCの代わりにVulkanビデオエンコーディングを使用します。\nこれを有効にすると、特にNVIDIA環境で、録画中のゲームパフォーマンスが向上する可能性があります。\nただし、このオプションは実験的なものであり、有効にするとGPUドライバの問題が発生する場合がありますのでご注意ください。
Enable vulkan video encoding (experimental)=Vulkanビデオエンコードを有効にする実験的機能
Show %s notifications=%s の通知を表示 Show replay notifications=リプレイ通知を表示
Show %s status with scroll lock LED=Scroll Lock LED で %s の状態を表示 Show recording notifications=録画通知を表示
Show streaming notifications=配信通知を表示
Show replay status with scroll lock LED=スクロールロックLEDでリプレイ状態を表示
Show recording status with scroll lock LED=スクロールロックLEDで録画状態を表示
Show streaming status with scroll lock LED=スクロールロックLEDで配信状態を表示
Recording indicator=録画インジケータ Recording indicator=録画インジケータ
recording=録画
Simple=シンプル Simple=シンプル
Audio track #%d=音声トラック #%d Audio track #%d=音声トラック #%d
@@ -404,7 +409,6 @@ Estimated video file size per minute (excluding audio): %.2fMB=推定動画サ
# Replay settings # Replay settings
Directory to save replays:=リプレイの保存先: Directory to save replays:=リプレイの保存先:
Replay indicator=リプレイインジケータ Replay indicator=リプレイインジケータ
replay=リプレイ
Turn on replay when starting a game=ゲーム開始時にリプレイをオンにする Turn on replay when starting a game=ゲーム開始時にリプレイをオンにする
Autostart=自動開始 Autostart=自動開始
in RAM=RAM 内 in RAM=RAM 内
@@ -430,4 +434,3 @@ Stream URL:=配信 URL:
Stream key:=ストリームキー: Stream key:=ストリームキー:
Streaming info=配信情報 Streaming info=配信情報
Streaming indicator=配信インジケータ Streaming indicator=配信インジケータ
streaming=配信

View File

@@ -374,9 +374,15 @@ Record in low-power mode=Записывать в режиме низкого э
Record cursor=Записывать курсор Record cursor=Записывать курсор
Do not force the GPU to go into high performance mode when recording.\nMay affect recording performance, especially when playing a video at the same time.\nIf enabled then it's recommended to use sync to content frame rate mode to reduce power usage when idle.=Не заставлять GPU переходить в режим высокой производительности при записи.\nМожет повлиять на производительность записи, особенно при одновременном воспроизведении видео.\nЕсли включено, рекомендуется использовать режим частоты кадров синхронизации с контентом\nдля снижения энергопотребления в режиме ожидания. Do not force the GPU to go into high performance mode when recording.\nMay affect recording performance, especially when playing a video at the same time.\nIf enabled then it's recommended to use sync to content frame rate mode to reduce power usage when idle.=Не заставлять GPU переходить в режим высокой производительности при записи.\nМожет повлиять на производительность записи, особенно при одновременном воспроизведении видео.\nЕсли включено, рекомендуется использовать режим частоты кадров синхронизации с контентом\nдля снижения энергопотребления в режиме ожидания.
Use vulkan video encoding instead of VAAPI/NVENC.\nEnabling this may result in better game performance while recording, especially on NVIDIA.\nNote that this option is experimental. There may be GPU driver issues that causes issues when this is enabled.=Используйте кодирование видео Vulkan вместо VAAPI/NVENC.\nВключение этой опции может улучшить производительность игр во время записи, особенно на видеокартах NVIDIA.\nОбратите внимание, что эта опция является экспериментальной. При её включении могут возникать проблемы с драйверами\nвидеокарт.
Enable vulkan video encoding (experimental)=Включить кодирование видео Vulkan (экспериментально)
Show %s notifications=Показывать уведомления %s Show replay notifications=Показывать уведомления повтора
Show %s status with scroll lock LED=Показывать статус %s с помощью индикатора Scroll Lock Show recording notifications=Показывать уведомления записи
Show streaming notifications=Показывать уведомления трансляции
Show replay status with scroll lock LED=Показывать статус повтора с помощью индикатора Scroll Lock
Show recording status with scroll lock LED=Показывать статус записи с помощью индикатора Scroll Lock
Show streaming status with scroll lock LED=Показывать статус трансляции с помощью индикатора Scroll Lock
Recording indicator=Индикатор записи Recording indicator=Индикатор записи
Simple=Простой Simple=Простой

View File

@@ -388,11 +388,16 @@ Record in low-power mode=
Record cursor= Record cursor=
Do not force the GPU to go into high performance mode when recording.\nMay affect recording performance, especially when playing a video at the same time.\nIf enabled then it's recommended to use sync to content frame rate mode to reduce power usage when idle.= Do not force the GPU to go into high performance mode when recording.\nMay affect recording performance, especially when playing a video at the same time.\nIf enabled then it's recommended to use sync to content frame rate mode to reduce power usage when idle.=
Use vulkan video encoding instead of VAAPI/NVENC.\nEnabling this may result in better game performance while recording, especially on NVIDIA.\nNote that this option is experimental. There may be GPU driver issues that causes issues when this is enabled.=
Enable vulkan video encoding (experimental)=
Show %s notifications= Show replay notifications=
Show %s status with scroll lock LED= Show recording notifications=
Show streaming notifications=
Show replay status with scroll lock LED=
Show recording status with scroll lock LED=
Show streaming status with scroll lock LED=
Recording indicator= Recording indicator=
recording=
Simple= Simple=
Audio track #%d= Audio track #%d=
@@ -403,7 +408,6 @@ Estimated video file size per minute (excluding audio): %.2fMB=
# Replay settings # Replay settings
Directory to save replays:= Directory to save replays:=
Replay indicator= Replay indicator=
replay=
Turn on replay when starting a game= Turn on replay when starting a game=
Autostart= Autostart=
in RAM= in RAM=
@@ -429,4 +433,3 @@ Stream URL:=
Stream key:= Stream key:=
Streaming info= Streaming info=
Streaming indicator= Streaming indicator=
streaming=

View File

@@ -372,9 +372,15 @@ Record in low-power mode=Записувати в режимі низького
Record cursor=Записувати курсор Record cursor=Записувати курсор
Do not force the GPU to go into high performance mode when recording.\nMay affect recording performance, especially when playing a video at the same time.\nIf enabled then it's recommended to use sync to content frame rate mode to reduce power usage when idle.=Не змушувати GPU переходити в режим високої продуктивності при записі.\nМоже вплинути на продуктивність запису, особливо при одночасному відтворенні відео.\nЯкщо увімкнено, рекомендується використовувати режим частоти кадрів синхронізації з контентом\nдля зниження енергоспоживання в режимі очікування. Do not force the GPU to go into high performance mode when recording.\nMay affect recording performance, especially when playing a video at the same time.\nIf enabled then it's recommended to use sync to content frame rate mode to reduce power usage when idle.=Не змушувати GPU переходити в режим високої продуктивності при записі.\nМоже вплинути на продуктивність запису, особливо при одночасному відтворенні відео.\nЯкщо увімкнено, рекомендується використовувати режим частоти кадрів синхронізації з контентом\nдля зниження енергоспоживання в режимі очікування.
Use vulkan video encoding instead of VAAPI/NVENC.\nEnabling this may result in better game performance while recording, especially on NVIDIA.\nNote that this option is experimental. There may be GPU driver issues that causes issues when this is enabled.=Використовуйте відеокодування Vulkan замість VAAPI/NVENC.\nУвімкнення цієї опції може призвести до кращої продуктивності гри під час запису, особливо на NVIDIA.\nЗверніть увагу, що ця опція є експериментальною. Можливі проблеми з драйвером графічного процесора, які можуть спричиняти проблеми, коли ця опція ввімкнена.
Enable vulkan video encoding (experimental)=Увімкнути кодування відео Vulkan (експериментально)
Show %s notifications=Показувати сповіщення %s Show replay notifications=Показувати сповіщення повтору
Show %s status with scroll lock LED=Показувати статус %s за допомогою індикатора Scroll Lock Show recording notifications=Показувати сповіщення запису
Show streaming notifications=Показувати сповіщення трансляції
Show replay status with scroll lock LED=Показувати статус повтору за допомогою індикатора Scroll Lock
Show recording status with scroll lock LED=Показувати статус запису за допомогою індикатора Scroll Lock
Show streaming status with scroll lock LED=Показувати статус трансляції за допомогою індикатора Scroll Lock
Recording indicator=Індикатор запису Recording indicator=Індикатор запису
Simple=Простий Simple=Простий