[feat] add screen capture frame rate option in settings window

This commit is contained in:
dijunkun
2025-10-15 17:28:36 +08:00
parent 22cc552e85
commit 09f34a81ad
9 changed files with 2121 additions and 1981 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,7 @@
#include "config_center.h" #include "config_center.h"
#include "rd_log.h"
ConfigCenter::ConfigCenter() {} ConfigCenter::ConfigCenter() {}
ConfigCenter::~ConfigCenter() {} ConfigCenter::~ConfigCenter() {}
@@ -14,6 +16,11 @@ int ConfigCenter::SetVideoQuality(VIDEO_QUALITY video_quality) {
return 0; return 0;
} }
int ConfigCenter::SetVideoFrameRate(VIDEO_FRAME_RATE video_frame_rate) {
video_frame_rate_ = video_frame_rate;
return 0;
}
int ConfigCenter::SetVideoEncodeFormat( int ConfigCenter::SetVideoEncodeFormat(
VIDEO_ENCODE_FORMAT video_encode_format) { VIDEO_ENCODE_FORMAT video_encode_format) {
video_encode_format_ = video_encode_format; video_encode_format_ = video_encode_format;
@@ -41,6 +48,11 @@ ConfigCenter::VIDEO_QUALITY ConfigCenter::GetVideoQuality() {
return video_quality_; return video_quality_;
} }
int ConfigCenter::GetVideoFrameRate() {
int fps = video_frame_rate_ == VIDEO_FRAME_RATE::FPS_30 ? 30 : 60;
return fps;
}
ConfigCenter::VIDEO_ENCODE_FORMAT ConfigCenter::GetVideoEncodeFormat() { ConfigCenter::VIDEO_ENCODE_FORMAT ConfigCenter::GetVideoEncodeFormat() {
return video_encode_format_; return video_encode_format_;
} }

View File

@@ -11,6 +11,7 @@ class ConfigCenter {
public: public:
enum class LANGUAGE { CHINESE = 0, ENGLISH = 1 }; enum class LANGUAGE { CHINESE = 0, ENGLISH = 1 };
enum class VIDEO_QUALITY { LOW = 0, MEDIUM = 1, HIGH = 2 }; enum class VIDEO_QUALITY { LOW = 0, MEDIUM = 1, HIGH = 2 };
enum class VIDEO_FRAME_RATE { FPS_30 = 0, FPS_60 = 1 };
enum class VIDEO_ENCODE_FORMAT { AV1 = 0, H264 = 1 }; enum class VIDEO_ENCODE_FORMAT { AV1 = 0, H264 = 1 };
public: public:
@@ -20,6 +21,7 @@ class ConfigCenter {
public: public:
int SetLanguage(LANGUAGE language); int SetLanguage(LANGUAGE language);
int SetVideoQuality(VIDEO_QUALITY video_quality); int SetVideoQuality(VIDEO_QUALITY video_quality);
int SetVideoFrameRate(VIDEO_FRAME_RATE video_frame_rate);
int SetVideoEncodeFormat(VIDEO_ENCODE_FORMAT video_encode_format); int SetVideoEncodeFormat(VIDEO_ENCODE_FORMAT video_encode_format);
int SetHardwareVideoCodec(bool hardware_video_codec); int SetHardwareVideoCodec(bool hardware_video_codec);
int SetTurn(bool enable_turn); int SetTurn(bool enable_turn);
@@ -28,6 +30,7 @@ class ConfigCenter {
public: public:
LANGUAGE GetLanguage(); LANGUAGE GetLanguage();
VIDEO_QUALITY GetVideoQuality(); VIDEO_QUALITY GetVideoQuality();
int GetVideoFrameRate();
VIDEO_ENCODE_FORMAT GetVideoEncodeFormat(); VIDEO_ENCODE_FORMAT GetVideoEncodeFormat();
bool IsHardwareVideoCodec(); bool IsHardwareVideoCodec();
bool IsEnableTurn(); bool IsEnableTurn();
@@ -37,6 +40,7 @@ class ConfigCenter {
// Default value should be same with parameters in localization.h // Default value should be same with parameters in localization.h
LANGUAGE language_ = LANGUAGE::CHINESE; LANGUAGE language_ = LANGUAGE::CHINESE;
VIDEO_QUALITY video_quality_ = VIDEO_QUALITY::MEDIUM; VIDEO_QUALITY video_quality_ = VIDEO_QUALITY::MEDIUM;
VIDEO_FRAME_RATE video_frame_rate_ = VIDEO_FRAME_RATE::FPS_30;
VIDEO_ENCODE_FORMAT video_encode_format_ = VIDEO_ENCODE_FORMAT::AV1; VIDEO_ENCODE_FORMAT video_encode_format_ = VIDEO_ENCODE_FORMAT::AV1;
bool hardware_video_codec_ = false; bool hardware_video_codec_ = false;
bool enable_turn_ = false; bool enable_turn_ = false;

View File

@@ -71,6 +71,9 @@ static std::vector<std::string> language_en = {
reinterpret_cast<const char*>(u8"英文"), "English"}; reinterpret_cast<const char*>(u8"英文"), "English"};
static std::vector<std::string> video_quality = { static std::vector<std::string> video_quality = {
reinterpret_cast<const char*>(u8"视频质量:"), "Video Quality:"}; reinterpret_cast<const char*>(u8"视频质量:"), "Video Quality:"};
static std::vector<std::string> video_frame_rate = {
reinterpret_cast<const char*>(u8"画面采集帧率:"),
"Video Capture Frame Rate:"};
static std::vector<std::string> video_quality_high = { static std::vector<std::string> video_quality_high = {
reinterpret_cast<const char*>(u8""), "High"}; reinterpret_cast<const char*>(u8""), "High"};
static std::vector<std::string> video_quality_medium = { static std::vector<std::string> video_quality_medium = {

View File

@@ -18,22 +18,24 @@
#define IPUT_WINDOW_WIDTH 160 #define IPUT_WINDOW_WIDTH 160
#define INPUT_WINDOW_PADDING_CN 66 #define INPUT_WINDOW_PADDING_CN 66
#define INPUT_WINDOW_PADDING_EN 96 #define INPUT_WINDOW_PADDING_EN 96
#define SETTINGS_WINDOW_WIDTH_CN 181 #define SETTINGS_WINDOW_WIDTH_CN 182
#define SETTINGS_WINDOW_WIDTH_EN 228 #define SETTINGS_WINDOW_WIDTH_EN 248
#define SETTINGS_WINDOW_HEIGHT_CN 250 #define SETTINGS_WINDOW_HEIGHT_CN 275
#define SETTINGS_WINDOW_HEIGHT_EN 250 #define SETTINGS_WINDOW_HEIGHT_EN 275
#define LANGUAGE_SELECT_WINDOW_PADDING_CN 100 #define LANGUAGE_SELECT_WINDOW_PADDING_CN 100
#define LANGUAGE_SELECT_WINDOW_PADDING_EN 147 #define LANGUAGE_SELECT_WINDOW_PADDING_EN 167
#define VIDEO_QUALITY_SELECT_WINDOW_PADDING_CN 100 #define VIDEO_QUALITY_SELECT_WINDOW_PADDING_CN 100
#define VIDEO_QUALITY_SELECT_WINDOW_PADDING_EN 147 #define VIDEO_QUALITY_SELECT_WINDOW_PADDING_EN 167
#define VIDEO_FRAME_RATE_SELECT_WINDOW_PADDING_CN 100
#define VIDEO_FRAME_RATE_SELECT_WINDOW_PADDING_EN 167
#define VIDEO_ENCODE_FORMAT_SELECT_WINDOW_PADDING_CN 100 #define VIDEO_ENCODE_FORMAT_SELECT_WINDOW_PADDING_CN 100
#define VIDEO_ENCODE_FORMAT_SELECT_WINDOW_PADDING_EN 147 #define VIDEO_ENCODE_FORMAT_SELECT_WINDOW_PADDING_EN 167
#define ENABLE_HARDWARE_VIDEO_CODEC_CHECKBOX_PADDING_CN 151 #define ENABLE_HARDWARE_VIDEO_CODEC_CHECKBOX_PADDING_CN 151
#define ENABLE_HARDWARE_VIDEO_CODEC_CHECKBOX_PADDING_EN 198 #define ENABLE_HARDWARE_VIDEO_CODEC_CHECKBOX_PADDING_EN 218
#define ENABLE_TURN_CHECKBOX_PADDING_CN 151 #define ENABLE_TURN_CHECKBOX_PADDING_CN 151
#define ENABLE_TURN_CHECKBOX_PADDING_EN 198 #define ENABLE_TURN_CHECKBOX_PADDING_EN 218
#define ENABLE_SRTP_CHECKBOX_PADDING_CN 151 #define ENABLE_SRTP_CHECKBOX_PADDING_CN 151
#define ENABLE_SRTP_CHECKBOX_PADDING_EN 198 #define ENABLE_SRTP_CHECKBOX_PADDING_EN 218
#define SETTINGS_SELECT_WINDOW_WIDTH 73 #define SETTINGS_SELECT_WINDOW_WIDTH 73
#define SETTINGS_OK_BUTTON_PADDING_CN 55 #define SETTINGS_OK_BUTTON_PADDING_CN 55
#define SETTINGS_OK_BUTTON_PADDING_EN 78 #define SETTINGS_OK_BUTTON_PADDING_EN 78

View File

@@ -185,6 +185,8 @@ int Render::SaveSettingsIntoCacheFile() {
sizeof(language_button_value_)); sizeof(language_button_value_));
memcpy(&cd_cache_.video_quality, &video_quality_button_value_, memcpy(&cd_cache_.video_quality, &video_quality_button_value_,
sizeof(video_quality_button_value_)); sizeof(video_quality_button_value_));
memcpy(&cd_cache_.video_frame_rate, &video_frame_rate_button_value_,
sizeof(video_frame_rate_button_value_));
memcpy(&cd_cache_.video_encode_format, &video_encode_format_button_value_, memcpy(&cd_cache_.video_encode_format, &video_encode_format_button_value_,
sizeof(video_encode_format_button_value_)); sizeof(video_encode_format_button_value_));
memcpy(&cd_cache_.enable_hardware_video_codec, &enable_hardware_video_codec_, memcpy(&cd_cache_.enable_hardware_video_codec, &enable_hardware_video_codec_,
@@ -201,6 +203,8 @@ int Render::SaveSettingsIntoCacheFile() {
config_center_.SetLanguage((ConfigCenter::LANGUAGE)language_button_value_); config_center_.SetLanguage((ConfigCenter::LANGUAGE)language_button_value_);
config_center_.SetVideoQuality( config_center_.SetVideoQuality(
(ConfigCenter::VIDEO_QUALITY)video_quality_button_value_); (ConfigCenter::VIDEO_QUALITY)video_quality_button_value_);
config_center_.SetVideoFrameRate(
(ConfigCenter::VIDEO_FRAME_RATE)video_frame_rate_button_value_);
config_center_.SetVideoEncodeFormat( config_center_.SetVideoEncodeFormat(
(ConfigCenter::VIDEO_ENCODE_FORMAT)video_encode_format_button_value_); (ConfigCenter::VIDEO_ENCODE_FORMAT)video_encode_format_button_value_);
config_center_.SetHardwareVideoCodec(enable_hardware_video_codec_); config_center_.SetHardwareVideoCodec(enable_hardware_video_codec_);
@@ -232,6 +236,8 @@ int Render::LoadSettingsFromCacheFile() {
config_center_.SetLanguage((ConfigCenter::LANGUAGE)language_button_value_); config_center_.SetLanguage((ConfigCenter::LANGUAGE)language_button_value_);
config_center_.SetVideoQuality( config_center_.SetVideoQuality(
(ConfigCenter::VIDEO_QUALITY)video_quality_button_value_); (ConfigCenter::VIDEO_QUALITY)video_quality_button_value_);
config_center_.SetVideoFrameRate(
(ConfigCenter::VIDEO_FRAME_RATE)video_frame_rate_button_value_);
config_center_.SetVideoEncodeFormat( config_center_.SetVideoEncodeFormat(
(ConfigCenter::VIDEO_ENCODE_FORMAT)video_encode_format_button_value_); (ConfigCenter::VIDEO_ENCODE_FORMAT)video_encode_format_button_value_);
config_center_.SetHardwareVideoCodec(enable_hardware_video_codec_); config_center_.SetHardwareVideoCodec(enable_hardware_video_codec_);
@@ -285,6 +291,7 @@ int Render::LoadSettingsFromCacheFile() {
language_button_value_ = cd_cache_.language; language_button_value_ = cd_cache_.language;
video_quality_button_value_ = cd_cache_.video_quality; video_quality_button_value_ = cd_cache_.video_quality;
video_frame_rate_button_value_ = cd_cache_.video_frame_rate;
video_encode_format_button_value_ = cd_cache_.video_encode_format; video_encode_format_button_value_ = cd_cache_.video_encode_format;
enable_hardware_video_codec_ = cd_cache_.enable_hardware_video_codec; enable_hardware_video_codec_ = cd_cache_.enable_hardware_video_codec;
enable_turn_ = cd_cache_.enable_turn; enable_turn_ = cd_cache_.enable_turn;
@@ -300,6 +307,8 @@ int Render::LoadSettingsFromCacheFile() {
config_center_.SetLanguage((ConfigCenter::LANGUAGE)language_button_value_); config_center_.SetLanguage((ConfigCenter::LANGUAGE)language_button_value_);
config_center_.SetVideoQuality( config_center_.SetVideoQuality(
(ConfigCenter::VIDEO_QUALITY)video_quality_button_value_); (ConfigCenter::VIDEO_QUALITY)video_quality_button_value_);
config_center_.SetVideoFrameRate(
(ConfigCenter::VIDEO_FRAME_RATE)video_frame_rate_button_value_);
config_center_.SetVideoEncodeFormat( config_center_.SetVideoEncodeFormat(
(ConfigCenter::VIDEO_ENCODE_FORMAT)video_encode_format_button_value_); (ConfigCenter::VIDEO_ENCODE_FORMAT)video_encode_format_button_value_);
config_center_.SetHardwareVideoCodec(enable_hardware_video_codec_); config_center_.SetHardwareVideoCodec(enable_hardware_video_codec_);
@@ -312,25 +321,25 @@ int Render::LoadSettingsFromCacheFile() {
} }
int Render::ScreenCapturerInit() { int Render::ScreenCapturerInit() {
if (screen_capturer_) { if (!screen_capturer_) {
LOG_INFO("Screen capturer already initialized"); screen_capturer_ = (ScreenCapturer*)screen_capturer_factory_->Create();
return 0;
} }
screen_capturer_ = (ScreenCapturer*)screen_capturer_factory_->Create();
last_frame_time_ = std::chrono::duration_cast<std::chrono::milliseconds>( last_frame_time_ = std::chrono::duration_cast<std::chrono::milliseconds>(
std::chrono::steady_clock::now().time_since_epoch()) std::chrono::steady_clock::now().time_since_epoch())
.count(); .count();
int fps = config_center_.GetVideoFrameRate();
LOG_INFO("Init screen capturer with {} fps", fps);
int screen_capturer_init_ret = screen_capturer_->Init( int screen_capturer_init_ret = screen_capturer_->Init(
60, fps,
[this](unsigned char* data, int size, int width, int height, [this](unsigned char* data, int size, int width, int height,
const char* display_name) -> void { const char* display_name) -> void {
auto now_time = std::chrono::duration_cast<std::chrono::milliseconds>( auto now_time = std::chrono::duration_cast<std::chrono::milliseconds>(
std::chrono::steady_clock::now().time_since_epoch()) std::chrono::steady_clock::now().time_since_epoch())
.count(); .count();
auto duration = now_time - last_frame_time_; auto duration = now_time - last_frame_time_;
if (duration >= 16) { // ~60 FPS if (duration * config_center_.GetVideoFrameRate() >= 1000) { // ~60 FPS
XVideoFrame frame; XVideoFrame frame;
frame.data = (const char*)data; frame.data = (const char*)data;
frame.size = size; frame.size = size;

View File

@@ -248,6 +248,7 @@ class Render {
char client_id_with_password[17]; char client_id_with_password[17];
int language; int language;
int video_quality; int video_quality;
int video_frame_rate;
int video_encode_format; int video_encode_format;
bool enable_hardware_video_codec; bool enable_hardware_video_codec;
bool enable_turn; bool enable_turn;
@@ -425,6 +426,7 @@ class Render {
char password_saved_[7] = ""; char password_saved_[7] = "";
int language_button_value_ = 0; int language_button_value_ = 0;
int video_quality_button_value_ = 0; int video_quality_button_value_ = 0;
int video_frame_rate_button_value_ = 0;
int video_encode_format_button_value_ = 0; int video_encode_format_button_value_ = 0;
bool enable_hardware_video_codec_ = false; bool enable_hardware_video_codec_ = false;
bool enable_turn_ = false; bool enable_turn_ = false;

View File

@@ -6,7 +6,7 @@
int Render::SettingWindow() { int Render::SettingWindow() {
if (show_settings_window_) { if (show_settings_window_) {
if (settings_window_pos_reset_) { if (settings_window_pos_reset_) {
const ImGuiViewport *viewport = ImGui::GetMainViewport(); const ImGuiViewport* viewport = ImGui::GetMainViewport();
if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) { if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) {
ImGui::SetNextWindowPos( ImGui::SetNextWindowPos(
ImVec2((viewport->WorkSize.x - viewport->WorkPos.x - ImVec2((viewport->WorkSize.x - viewport->WorkPos.x -
@@ -36,6 +36,9 @@ int Render::SettingWindow() {
// Settings // Settings
{ {
static int settings_items_padding = 30;
int settings_items_offset = 0;
ImGui::SetWindowFontScale(0.5f); ImGui::SetWindowFontScale(0.5f);
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 5.0f); ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 5.0f);
@@ -49,11 +52,12 @@ int Render::SettingWindow() {
ImGui::SetWindowFontScale(0.5f); ImGui::SetWindowFontScale(0.5f);
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f);
{ {
const char *language_items[] = { const char* language_items[] = {
localization::language_zh[localization_language_index_].c_str(), localization::language_zh[localization_language_index_].c_str(),
localization::language_en[localization_language_index_].c_str()}; localization::language_en[localization_language_index_].c_str()};
ImGui::SetCursorPosY(32); settings_items_offset += settings_items_padding;
ImGui::SetCursorPosY(settings_items_offset + 2);
ImGui::Text( ImGui::Text(
"%s", localization::language[localization_language_index_].c_str()); "%s", localization::language[localization_language_index_].c_str());
if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) { if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) {
@@ -61,7 +65,7 @@ int Render::SettingWindow() {
} else { } else {
ImGui::SetCursorPosX(LANGUAGE_SELECT_WINDOW_PADDING_EN); ImGui::SetCursorPosX(LANGUAGE_SELECT_WINDOW_PADDING_EN);
} }
ImGui::SetCursorPosY(30); ImGui::SetCursorPosY(settings_items_offset);
ImGui::SetNextItemWidth(SETTINGS_SELECT_WINDOW_WIDTH); ImGui::SetNextItemWidth(SETTINGS_SELECT_WINDOW_WIDTH);
ImGui::Combo("##language", &language_button_value_, language_items, ImGui::Combo("##language", &language_button_value_, language_items,
@@ -75,7 +79,7 @@ int Render::SettingWindow() {
} }
{ {
const char *video_quality_items[] = { const char* video_quality_items[] = {
localization::video_quality_high[localization_language_index_] localization::video_quality_high[localization_language_index_]
.c_str(), .c_str(),
localization::video_quality_medium[localization_language_index_] localization::video_quality_medium[localization_language_index_]
@@ -83,7 +87,8 @@ int Render::SettingWindow() {
localization::video_quality_low[localization_language_index_] localization::video_quality_low[localization_language_index_]
.c_str()}; .c_str()};
ImGui::SetCursorPosY(62); settings_items_offset += settings_items_padding;
ImGui::SetCursorPosY(settings_items_offset + 2);
ImGui::Text( ImGui::Text(
"%s", "%s",
localization::video_quality[localization_language_index_].c_str()); localization::video_quality[localization_language_index_].c_str());
@@ -93,7 +98,7 @@ int Render::SettingWindow() {
} else { } else {
ImGui::SetCursorPosX(VIDEO_QUALITY_SELECT_WINDOW_PADDING_EN); ImGui::SetCursorPosX(VIDEO_QUALITY_SELECT_WINDOW_PADDING_EN);
} }
ImGui::SetCursorPosY(60); ImGui::SetCursorPosY(settings_items_offset);
ImGui::SetNextItemWidth(SETTINGS_SELECT_WINDOW_WIDTH); ImGui::SetNextItemWidth(SETTINGS_SELECT_WINDOW_WIDTH);
ImGui::Combo("##video_quality", &video_quality_button_value_, ImGui::Combo("##video_quality", &video_quality_button_value_,
@@ -103,11 +108,36 @@ int Render::SettingWindow() {
ImGui::Separator(); ImGui::Separator();
{ {
const char *video_encode_format_items[] = { const char* video_frame_rate_items[] = {"30", "60"};
settings_items_offset += settings_items_padding;
ImGui::SetCursorPosY(settings_items_offset + 2);
ImGui::Text("%s",
localization::video_frame_rate[localization_language_index_]
.c_str());
if (ConfigCenter::LANGUAGE::CHINESE == localization_language_) {
ImGui::SetCursorPosX(VIDEO_FRAME_RATE_SELECT_WINDOW_PADDING_CN);
} else {
ImGui::SetCursorPosX(VIDEO_FRAME_RATE_SELECT_WINDOW_PADDING_EN);
}
ImGui::SetCursorPosY(settings_items_offset);
ImGui::SetNextItemWidth(SETTINGS_SELECT_WINDOW_WIDTH);
ImGui::Combo("##video_frame_rate", &video_frame_rate_button_value_,
video_frame_rate_items,
IM_ARRAYSIZE(video_frame_rate_items));
}
ImGui::Separator();
{
const char* video_encode_format_items[] = {
localization::av1[localization_language_index_].c_str(), localization::av1[localization_language_index_].c_str(),
localization::h264[localization_language_index_].c_str()}; localization::h264[localization_language_index_].c_str()};
ImGui::SetCursorPosY(92); settings_items_offset += settings_items_padding;
ImGui::SetCursorPosY(settings_items_offset + 2);
ImGui::Text( ImGui::Text(
"%s", "%s",
localization::video_encode_format[localization_language_index_] localization::video_encode_format[localization_language_index_]
@@ -118,7 +148,7 @@ int Render::SettingWindow() {
} else { } else {
ImGui::SetCursorPosX(VIDEO_ENCODE_FORMAT_SELECT_WINDOW_PADDING_EN); ImGui::SetCursorPosX(VIDEO_ENCODE_FORMAT_SELECT_WINDOW_PADDING_EN);
} }
ImGui::SetCursorPosY(90); ImGui::SetCursorPosY(settings_items_offset);
ImGui::SetNextItemWidth(SETTINGS_SELECT_WINDOW_WIDTH); ImGui::SetNextItemWidth(SETTINGS_SELECT_WINDOW_WIDTH);
ImGui::Combo( ImGui::Combo(
@@ -129,7 +159,8 @@ int Render::SettingWindow() {
ImGui::Separator(); ImGui::Separator();
{ {
ImGui::SetCursorPosY(122); settings_items_offset += settings_items_padding;
ImGui::SetCursorPosY(settings_items_offset + 2);
ImGui::Text("%s", localization::enable_hardware_video_codec ImGui::Text("%s", localization::enable_hardware_video_codec
[localization_language_index_] [localization_language_index_]
.c_str()); .c_str());
@@ -139,7 +170,7 @@ int Render::SettingWindow() {
} else { } else {
ImGui::SetCursorPosX(ENABLE_HARDWARE_VIDEO_CODEC_CHECKBOX_PADDING_EN); ImGui::SetCursorPosX(ENABLE_HARDWARE_VIDEO_CODEC_CHECKBOX_PADDING_EN);
} }
ImGui::SetCursorPosY(120); ImGui::SetCursorPosY(settings_items_offset);
ImGui::Checkbox("##enable_hardware_video_codec", ImGui::Checkbox("##enable_hardware_video_codec",
&enable_hardware_video_codec_); &enable_hardware_video_codec_);
} }
@@ -147,7 +178,8 @@ int Render::SettingWindow() {
ImGui::Separator(); ImGui::Separator();
{ {
ImGui::SetCursorPosY(152); settings_items_offset += settings_items_padding;
ImGui::SetCursorPosY(settings_items_offset + 2);
ImGui::Text( ImGui::Text(
"%s", "%s",
localization::enable_turn[localization_language_index_].c_str()); localization::enable_turn[localization_language_index_].c_str());
@@ -157,14 +189,15 @@ int Render::SettingWindow() {
} else { } else {
ImGui::SetCursorPosX(ENABLE_TURN_CHECKBOX_PADDING_EN); ImGui::SetCursorPosX(ENABLE_TURN_CHECKBOX_PADDING_EN);
} }
ImGui::SetCursorPosY(150); ImGui::SetCursorPosY(settings_items_offset);
ImGui::Checkbox("##enable_turn", &enable_turn_); ImGui::Checkbox("##enable_turn", &enable_turn_);
} }
ImGui::Separator(); ImGui::Separator();
{ {
ImGui::SetCursorPosY(182); settings_items_offset += settings_items_padding;
ImGui::SetCursorPosY(settings_items_offset + 2);
ImGui::Text( ImGui::Text(
"%s", "%s",
localization::enable_srtp[localization_language_index_].c_str()); localization::enable_srtp[localization_language_index_].c_str());
@@ -174,7 +207,7 @@ int Render::SettingWindow() {
} else { } else {
ImGui::SetCursorPosX(ENABLE_SRTP_CHECKBOX_PADDING_EN); ImGui::SetCursorPosX(ENABLE_SRTP_CHECKBOX_PADDING_EN);
} }
ImGui::SetCursorPosY(180); ImGui::SetCursorPosY(settings_items_offset);
ImGui::Checkbox("##enable_srtp", &enable_srtp_); ImGui::Checkbox("##enable_srtp", &enable_srtp_);
} }
@@ -187,7 +220,9 @@ int Render::SettingWindow() {
} else { } else {
ImGui::SetCursorPosX(SETTINGS_OK_BUTTON_PADDING_EN); ImGui::SetCursorPosX(SETTINGS_OK_BUTTON_PADDING_EN);
} }
ImGui::SetCursorPosY(220.0f);
settings_items_offset += settings_items_padding;
ImGui::SetCursorPosY(settings_items_offset);
ImGui::PopStyleVar(); ImGui::PopStyleVar();
// OK // OK