diff --git a/src/config_center/config_center.cpp b/src/config_center/config_center.cpp index 05e9a9c..399fadc 100644 --- a/src/config_center/config_center.cpp +++ b/src/config_center/config_center.cpp @@ -20,6 +20,11 @@ int ConfigCenter::SetVideoEncodeFormat( return 0; } +int ConfigCenter::SetHardwareVideoCodec(bool hardware_video_codec) { + hardware_video_codec_ = hardware_video_codec; + return 0; +} + ConfigCenter::LANGUAGE ConfigCenter::GetLanguage() { return language_; } ConfigCenter::VIDEO_QUALITY ConfigCenter::GetVideoQuality() { @@ -28,4 +33,6 @@ ConfigCenter::VIDEO_QUALITY ConfigCenter::GetVideoQuality() { ConfigCenter::VIDEO_ENCODE_FORMAT ConfigCenter::GetVideoEncodeFormat() { return video_encode_format_; -} \ No newline at end of file +} + +bool ConfigCenter::IsHardwareVideoCodec() { return hardware_video_codec_; } \ No newline at end of file diff --git a/src/config_center/config_center.h b/src/config_center/config_center.h index ab17177..20e6475 100644 --- a/src/config_center/config_center.h +++ b/src/config_center/config_center.h @@ -21,16 +21,20 @@ class ConfigCenter { int SetLanguage(LANGUAGE language); int SetVideoQuality(VIDEO_QUALITY video_quality); int SetVideoEncodeFormat(VIDEO_ENCODE_FORMAT video_encode_format); + int SetHardwareVideoCodec(bool hardware_video_codec); public: LANGUAGE GetLanguage(); VIDEO_QUALITY GetVideoQuality(); VIDEO_ENCODE_FORMAT GetVideoEncodeFormat(); + bool IsHardwareVideoCodec(); private: + // Default value should be same with parameters in localization.h LANGUAGE language_ = LANGUAGE::CHINESE; VIDEO_QUALITY video_quality_ = VIDEO_QUALITY::MEDIUM; VIDEO_ENCODE_FORMAT video_encode_format_ = VIDEO_ENCODE_FORMAT::AV1; + bool hardware_video_codec_ = false; }; #endif \ No newline at end of file diff --git a/src/main_window/main_window.cpp b/src/main_window/main_window.cpp index a7f59e4..6ef439a 100644 --- a/src/main_window/main_window.cpp +++ b/src/main_window/main_window.cpp @@ -45,9 +45,10 @@ int MainWindow::SaveSettingsIntoCacheFile() { sizeof(language_button_value_)); memcpy(&cd_cache_.video_quality, &video_quality_button_value_, sizeof(video_quality_button_value_)); - memcpy(&cd_cache_.video_encode_format, - &video_video_encode_format_button_value_, - sizeof(video_video_encode_format_button_value_)); + memcpy(&cd_cache_.video_encode_format, &video_encode_format_button_value_, + sizeof(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_, sizeof(settings_language_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, &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_); fclose(cd_cache_file_); @@ -73,11 +77,14 @@ int MainWindow::LoadSettingsIntoCacheFile() { strncpy(input_password_, cd_cache_.password, sizeof(cd_cache_.password)); language_button_value_ = cd_cache_.language; 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_video_quality_pos_ = cd_cache_.settings_video_quality_pos; 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; } @@ -264,8 +271,11 @@ int MainWindow::Run() { params_.turn_server_port = 3478; params_.turn_server_username = "dijunkun"; params_.turn_server_password = "dijunkunpw"; - params_.hardware_acceleration = false; - params_.av1_encoding = true; + params_.hardware_acceleration = config_center_.IsHardwareVideoCodec(); + params_.av1_encoding = config_center_.GetVideoEncodeFormat() == + ConfigCenter::VIDEO_ENCODE_FORMAT::AV1 + ? true + : false; #endif params_.on_receive_video_buffer = OnReceiveVideoBufferCb; params_.on_receive_audio_buffer = OnReceiveAudioBufferCb; @@ -594,7 +604,8 @@ int MainWindow::Run() { ImGui::SetCursorPosX(settings_video_encode_format_pos_); ImGui::SetCursorPosY(90); 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, IM_ARRAYSIZE(video_encode_format_items)); } @@ -606,10 +617,10 @@ int MainWindow::Run() { ImGui::Text(localization::enable_hardware_video_codec [localization_language_index_] .c_str()); - ImGui::SetCursorPosX(settings_enable_video_codec_pos_); + ImGui::SetCursorPosX(settings_enable_hardware_video_codec_pos_); ImGui::SetCursorPosY(120); ImGui::Checkbox("##enable_hardware_video_codec", - &enable_video_codec_); + &enable_hardware_video_codec_); } ImGui::SetCursorPosX(60.0f); @@ -627,14 +638,14 @@ int MainWindow::Run() { settings_video_quality_pos_ = settings_video_quality_pos_default_; settings_video_encode_format_pos_ = settings_video_encode_format_pos_default_; - settings_enable_video_codec_pos_ = - settings_enable_video_codec_pos_default_; + settings_enable_hardware_video_codec_pos_ = + settings_enable_hardware_video_codec_pos_default_; } else { config_center_.SetLanguage(ConfigCenter::LANGUAGE::ENGLISH); settings_language_pos_ = 140.0f; settings_video_quality_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_; localization_language_ = @@ -659,15 +670,23 @@ int MainWindow::Run() { video_quality_button_value_last_ = video_quality_button_value_; // Video encode format - if (video_video_encode_format_button_value_ == 0) { + if (video_encode_format_button_value_ == 0) { config_center_.SetVideoEncodeFormat( ConfigCenter::VIDEO_ENCODE_FORMAT::AV1); } else if (video_quality_button_value_ == 1) { config_center_.SetVideoEncodeFormat( ConfigCenter::VIDEO_ENCODE_FORMAT::H264); } - video_video_encode_format_button_value_last_ = - video_video_encode_format_button_value_; + video_encode_format_button_value_last_ = + 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(); // To do: set encode resolution @@ -686,11 +705,17 @@ int MainWindow::Run() { video_quality_button_value_ = video_quality_button_value_last_; } - if (video_video_encode_format_button_value_ != - video_video_encode_format_button_value_last_) { - video_video_encode_format_button_value_ = - video_video_encode_format_button_value_last_; + if (video_encode_format_button_value_ != + video_encode_format_button_value_last_) { + video_encode_format_button_value_ = + 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; } diff --git a/src/main_window/main_window.h b/src/main_window/main_window.h index f81a979..bbaf90c 100644 --- a/src/main_window/main_window.h +++ b/src/main_window/main_window.h @@ -67,9 +67,11 @@ class MainWindow { int language; int video_quality; int video_encode_format; + bool enable_hardware_video_codec; float settings_language_pos; float settings_video_quality_pos; float settings_video_encode_format_pos; + float settings_enable_hardware_video_codec_pos; } CDCache; private: @@ -162,23 +164,24 @@ class MainWindow { float settings_language_pos_default_ = 100.0f; float settings_video_quality_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_video_quality_pos_ = settings_video_quality_pos_default_; float settings_video_encode_format_pos_ = settings_video_encode_format_pos_default_; - float settings_enable_video_codec_pos_ = - settings_enable_video_codec_pos_default_; + float settings_enable_hardware_video_codec_pos_ = + settings_enable_hardware_video_codec_pos_default_; int language_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 video_quality_button_value_last_ = 0; - int video_video_encode_format_button_value_last_ = 0; - bool enable_video_codec_ = false; - bool enable_video_codec_last_ = false; + int video_encode_format_button_value_last_ = 0; + bool enable_hardware_video_codec_last_ = false; private: std::atomic start_screen_capture_{false};