Fix settings button value mismatch

This commit is contained in:
dijunkun
2024-06-06 14:34:16 +08:00
parent 562d54090a
commit 844710af7c
4 changed files with 66 additions and 27 deletions

View File

@@ -20,6 +20,11 @@ int ConfigCenter::SetVideoEncodeFormat(
return 0; return 0;
} }
int ConfigCenter::SetHardwareVideoCodec(bool hardware_video_codec) {
hardware_video_codec_ = hardware_video_codec;
return 0;
}
ConfigCenter::LANGUAGE ConfigCenter::GetLanguage() { return language_; } ConfigCenter::LANGUAGE ConfigCenter::GetLanguage() { return language_; }
ConfigCenter::VIDEO_QUALITY ConfigCenter::GetVideoQuality() { ConfigCenter::VIDEO_QUALITY ConfigCenter::GetVideoQuality() {
@@ -29,3 +34,5 @@ ConfigCenter::VIDEO_QUALITY ConfigCenter::GetVideoQuality() {
ConfigCenter::VIDEO_ENCODE_FORMAT ConfigCenter::GetVideoEncodeFormat() { ConfigCenter::VIDEO_ENCODE_FORMAT ConfigCenter::GetVideoEncodeFormat() {
return video_encode_format_; return video_encode_format_;
} }
bool ConfigCenter::IsHardwareVideoCodec() { return hardware_video_codec_; }

View File

@@ -21,16 +21,20 @@ class ConfigCenter {
int SetLanguage(LANGUAGE language); int SetLanguage(LANGUAGE language);
int SetVideoQuality(VIDEO_QUALITY video_quality); int SetVideoQuality(VIDEO_QUALITY video_quality);
int SetVideoEncodeFormat(VIDEO_ENCODE_FORMAT video_encode_format); int SetVideoEncodeFormat(VIDEO_ENCODE_FORMAT video_encode_format);
int SetHardwareVideoCodec(bool hardware_video_codec);
public: public:
LANGUAGE GetLanguage(); LANGUAGE GetLanguage();
VIDEO_QUALITY GetVideoQuality(); VIDEO_QUALITY GetVideoQuality();
VIDEO_ENCODE_FORMAT GetVideoEncodeFormat(); VIDEO_ENCODE_FORMAT GetVideoEncodeFormat();
bool IsHardwareVideoCodec();
private: private:
// 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_ENCODE_FORMAT video_encode_format_ = VIDEO_ENCODE_FORMAT::AV1; VIDEO_ENCODE_FORMAT video_encode_format_ = VIDEO_ENCODE_FORMAT::AV1;
bool hardware_video_codec_ = false;
}; };
#endif #endif

View File

@@ -45,9 +45,10 @@ int MainWindow::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_encode_format, memcpy(&cd_cache_.video_encode_format, &video_encode_format_button_value_,
&video_video_encode_format_button_value_, sizeof(video_encode_format_button_value_));
sizeof(video_video_encode_format_button_value_)); memcpy(&cd_cache_.enable_hardware_video_codec, &enable_hardware_video_codec_,
sizeof(enable_hardware_video_codec_));
memcpy(&cd_cache_.settings_language_pos, &settings_language_pos_, memcpy(&cd_cache_.settings_language_pos, &settings_language_pos_,
sizeof(settings_language_pos_)); sizeof(settings_language_pos_));
memcpy(&cd_cache_.settings_video_quality_pos, &settings_video_quality_pos_, memcpy(&cd_cache_.settings_video_quality_pos, &settings_video_quality_pos_,
@@ -55,6 +56,9 @@ int MainWindow::SaveSettingsIntoCacheFile() {
memcpy(&cd_cache_.settings_video_encode_format_pos, memcpy(&cd_cache_.settings_video_encode_format_pos,
&settings_video_encode_format_pos_, &settings_video_encode_format_pos_,
sizeof(settings_video_encode_format_pos_)); sizeof(settings_video_encode_format_pos_));
memcpy(&cd_cache_.settings_enable_hardware_video_codec_pos,
&settings_enable_hardware_video_codec_pos_,
sizeof(settings_enable_hardware_video_codec_pos_));
fwrite(&cd_cache_, sizeof(cd_cache_), 1, cd_cache_file_); fwrite(&cd_cache_, sizeof(cd_cache_), 1, cd_cache_file_);
fclose(cd_cache_file_); fclose(cd_cache_file_);
@@ -73,11 +77,14 @@ int MainWindow::LoadSettingsIntoCacheFile() {
strncpy(input_password_, cd_cache_.password, sizeof(cd_cache_.password)); strncpy(input_password_, cd_cache_.password, sizeof(cd_cache_.password));
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_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;
settings_language_pos_ = cd_cache_.settings_language_pos; settings_language_pos_ = cd_cache_.settings_language_pos;
settings_video_quality_pos_ = cd_cache_.settings_video_quality_pos; settings_video_quality_pos_ = cd_cache_.settings_video_quality_pos;
settings_video_encode_format_pos_ = settings_video_encode_format_pos_ =
cd_cache_.settings_video_encode_format_pos; cd_cache_.settings_video_encode_format_pos;
settings_enable_hardware_video_codec_pos_ =
cd_cache_.settings_enable_hardware_video_codec_pos;
return 0; return 0;
} }
@@ -264,8 +271,11 @@ int MainWindow::Run() {
params_.turn_server_port = 3478; params_.turn_server_port = 3478;
params_.turn_server_username = "dijunkun"; params_.turn_server_username = "dijunkun";
params_.turn_server_password = "dijunkunpw"; params_.turn_server_password = "dijunkunpw";
params_.hardware_acceleration = false; params_.hardware_acceleration = config_center_.IsHardwareVideoCodec();
params_.av1_encoding = true; params_.av1_encoding = config_center_.GetVideoEncodeFormat() ==
ConfigCenter::VIDEO_ENCODE_FORMAT::AV1
? true
: false;
#endif #endif
params_.on_receive_video_buffer = OnReceiveVideoBufferCb; params_.on_receive_video_buffer = OnReceiveVideoBufferCb;
params_.on_receive_audio_buffer = OnReceiveAudioBufferCb; params_.on_receive_audio_buffer = OnReceiveAudioBufferCb;
@@ -594,7 +604,8 @@ int MainWindow::Run() {
ImGui::SetCursorPosX(settings_video_encode_format_pos_); ImGui::SetCursorPosX(settings_video_encode_format_pos_);
ImGui::SetCursorPosY(90); ImGui::SetCursorPosY(90);
ImGui::SetNextItemWidth(80); ImGui::SetNextItemWidth(80);
ImGui::Combo("##video_encode_format", &language_button_value_, ImGui::Combo("##video_encode_format",
&video_encode_format_button_value_,
video_encode_format_items, video_encode_format_items,
IM_ARRAYSIZE(video_encode_format_items)); IM_ARRAYSIZE(video_encode_format_items));
} }
@@ -606,10 +617,10 @@ int MainWindow::Run() {
ImGui::Text(localization::enable_hardware_video_codec ImGui::Text(localization::enable_hardware_video_codec
[localization_language_index_] [localization_language_index_]
.c_str()); .c_str());
ImGui::SetCursorPosX(settings_enable_video_codec_pos_); ImGui::SetCursorPosX(settings_enable_hardware_video_codec_pos_);
ImGui::SetCursorPosY(120); ImGui::SetCursorPosY(120);
ImGui::Checkbox("##enable_hardware_video_codec", ImGui::Checkbox("##enable_hardware_video_codec",
&enable_video_codec_); &enable_hardware_video_codec_);
} }
ImGui::SetCursorPosX(60.0f); ImGui::SetCursorPosX(60.0f);
@@ -627,14 +638,14 @@ int MainWindow::Run() {
settings_video_quality_pos_ = settings_video_quality_pos_default_; settings_video_quality_pos_ = settings_video_quality_pos_default_;
settings_video_encode_format_pos_ = settings_video_encode_format_pos_ =
settings_video_encode_format_pos_default_; settings_video_encode_format_pos_default_;
settings_enable_video_codec_pos_ = settings_enable_hardware_video_codec_pos_ =
settings_enable_video_codec_pos_default_; settings_enable_hardware_video_codec_pos_default_;
} else { } else {
config_center_.SetLanguage(ConfigCenter::LANGUAGE::ENGLISH); config_center_.SetLanguage(ConfigCenter::LANGUAGE::ENGLISH);
settings_language_pos_ = 140.0f; settings_language_pos_ = 140.0f;
settings_video_quality_pos_ = 140.0f; settings_video_quality_pos_ = 140.0f;
settings_video_encode_format_pos_ = 140.0f; settings_video_encode_format_pos_ = 140.0f;
settings_enable_video_codec_pos_ = 201.0f; settings_enable_hardware_video_codec_pos_ = 201.0f;
} }
language_button_value_last_ = language_button_value_; language_button_value_last_ = language_button_value_;
localization_language_ = localization_language_ =
@@ -659,15 +670,23 @@ int MainWindow::Run() {
video_quality_button_value_last_ = video_quality_button_value_; video_quality_button_value_last_ = video_quality_button_value_;
// Video encode format // Video encode format
if (video_video_encode_format_button_value_ == 0) { if (video_encode_format_button_value_ == 0) {
config_center_.SetVideoEncodeFormat( config_center_.SetVideoEncodeFormat(
ConfigCenter::VIDEO_ENCODE_FORMAT::AV1); ConfigCenter::VIDEO_ENCODE_FORMAT::AV1);
} else if (video_quality_button_value_ == 1) { } else if (video_quality_button_value_ == 1) {
config_center_.SetVideoEncodeFormat( config_center_.SetVideoEncodeFormat(
ConfigCenter::VIDEO_ENCODE_FORMAT::H264); ConfigCenter::VIDEO_ENCODE_FORMAT::H264);
} }
video_video_encode_format_button_value_last_ = video_encode_format_button_value_last_ =
video_video_encode_format_button_value_; video_encode_format_button_value_;
// Hardware video codec
if (enable_hardware_video_codec_) {
config_center_.SetHardwareVideoCodec(true);
} else {
config_center_.SetHardwareVideoCodec(false);
}
enable_hardware_video_codec_last_ = enable_hardware_video_codec_;
SaveSettingsIntoCacheFile(); SaveSettingsIntoCacheFile();
// To do: set encode resolution // To do: set encode resolution
@@ -686,11 +705,17 @@ int MainWindow::Run() {
video_quality_button_value_ = video_quality_button_value_last_; video_quality_button_value_ = video_quality_button_value_last_;
} }
if (video_video_encode_format_button_value_ != if (video_encode_format_button_value_ !=
video_video_encode_format_button_value_last_) { video_encode_format_button_value_last_) {
video_video_encode_format_button_value_ = video_encode_format_button_value_ =
video_video_encode_format_button_value_last_; video_encode_format_button_value_last_;
} }
if (enable_hardware_video_codec_ !=
enable_hardware_video_codec_last_) {
enable_hardware_video_codec_ = enable_hardware_video_codec_last_;
}
settings_window_pos_reset_ = true; settings_window_pos_reset_ = true;
} }

View File

@@ -67,9 +67,11 @@ class MainWindow {
int language; int language;
int video_quality; int video_quality;
int video_encode_format; int video_encode_format;
bool enable_hardware_video_codec;
float settings_language_pos; float settings_language_pos;
float settings_video_quality_pos; float settings_video_quality_pos;
float settings_video_encode_format_pos; float settings_video_encode_format_pos;
float settings_enable_hardware_video_codec_pos;
} CDCache; } CDCache;
private: private:
@@ -162,23 +164,24 @@ class MainWindow {
float settings_language_pos_default_ = 100.0f; float settings_language_pos_default_ = 100.0f;
float settings_video_quality_pos_default_ = 100.0f; float settings_video_quality_pos_default_ = 100.0f;
float settings_video_encode_format_pos_default_ = 100.0f; float settings_video_encode_format_pos_default_ = 100.0f;
float settings_enable_video_codec_pos_default_ = 161.0f; float settings_enable_hardware_video_codec_pos_default_ = 161.0f;
float settings_language_pos_ = settings_language_pos_default_; float settings_language_pos_ = settings_language_pos_default_;
float settings_video_quality_pos_ = settings_video_quality_pos_default_; float settings_video_quality_pos_ = settings_video_quality_pos_default_;
float settings_video_encode_format_pos_ = float settings_video_encode_format_pos_ =
settings_video_encode_format_pos_default_; settings_video_encode_format_pos_default_;
float settings_enable_video_codec_pos_ = float settings_enable_hardware_video_codec_pos_ =
settings_enable_video_codec_pos_default_; settings_enable_hardware_video_codec_pos_default_;
int language_button_value_ = 0; int language_button_value_ = 0;
int video_quality_button_value_ = 0; int video_quality_button_value_ = 0;
int video_video_encode_format_button_value_ = 0; int video_encode_format_button_value_ = 0;
bool enable_hardware_video_codec_ = false;
int language_button_value_last_ = 0; int language_button_value_last_ = 0;
int video_quality_button_value_last_ = 0; int video_quality_button_value_last_ = 0;
int video_video_encode_format_button_value_last_ = 0; int video_encode_format_button_value_last_ = 0;
bool enable_video_codec_ = false; bool enable_hardware_video_codec_last_ = false;
bool enable_video_codec_last_ = false;
private: private:
std::atomic<bool> start_screen_capture_{false}; std::atomic<bool> start_screen_capture_{false};