Skip to content

Commit

Permalink
Support 1/2, 1/3, 1/4 vsync
Browse files Browse the repository at this point in the history
  • Loading branch information
xfangfang committed Feb 19, 2025
1 parent 6bf2a8b commit 626d1fa
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 6 deletions.
1 change: 1 addition & 0 deletions wiliwili/include/utils/config_helper.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ enum class SettingItem {
HOME_WINDOW_STATE,
SEARCH_TV_MODE,
LIMITED_FPS,
SWAP_INTERVAL,
DEACTIVATED_TIME,
DEACTIVATED_FPS,
DLNA_IP,
Expand Down
38 changes: 33 additions & 5 deletions wiliwili/source/activity/setting_activity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -317,12 +317,40 @@ void SettingActivity::onContentAvailable() {

/// Limited FPS
auto fpsOption = conf.getOptionData(SettingItem::LIMITED_FPS);
int swapInterval = conf.getSettingItem(SettingItem::SWAP_INTERVAL, 1);
int limitedFPS = conf.getSettingItem(SettingItem::LIMITED_FPS, 0);
int fpsIndex = conf.getIntOptionIndex(SettingItem::LIMITED_FPS);
if ((limitedFPS > 0 && fpsIndex == 0) || swapInterval < 0 || swapInterval > 4) {
// 用户自定义配置
selectorFPS->setVisibility(brls::Visibility::GONE);
} else if (limitedFPS == 0) {
// 垂直同步
fpsIndex = swapInterval - 1;
} else {
// 关闭垂直同步,限制帧数
fpsIndex += 3;
}
selectorFPS->init("wiliwili/setting/app/others/limited_fps"_i18n,
{"wiliwili/setting/app/others/limited_fps_vsync"_i18n, "30", "60", "90", "120"},
(size_t)conf.getIntOptionIndex(SettingItem::LIMITED_FPS), [fpsOption](int data) {
int fps = fpsOption.rawOptionList[data];
brls::Application::setLimitedFPS(fps);
ProgramConfig::instance().setSettingItem(SettingItem::LIMITED_FPS, fps);
{"wiliwili/setting/app/others/limited_fps_vsync"_i18n,
std::string{"1/2 "} + "wiliwili/setting/app/others/limited_fps_vsync"_i18n,
std::string{"1/3 "} + "wiliwili/setting/app/others/limited_fps_vsync"_i18n,
std::string{"1/4 "} + "wiliwili/setting/app/others/limited_fps_vsync"_i18n,
"30", "60", "90", "120"},
fpsIndex, [fpsOption](int data) {
if (data <= 3) {
// 垂直同步
ProgramConfig::instance().setSettingItem(SettingItem::LIMITED_FPS, 0);
ProgramConfig::instance().setSettingItem(SettingItem::SWAP_INTERVAL, data + 1);
brls::Application::setLimitedFPS(0);
brls::Application::setSwapInterval(data + 1);
} else {
// 限制帧数
int fps = fpsOption.rawOptionList[data - 3];
ProgramConfig::instance().setSettingItem(SettingItem::LIMITED_FPS, fps);
ProgramConfig::instance().setSettingItem(SettingItem::SWAP_INTERVAL, 0);
brls::Application::setLimitedFPS(fps);
brls::Application::setSwapInterval(0);
}
return true;
});

Expand Down
5 changes: 4 additions & 1 deletion wiliwili/source/utils/config_helper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,7 @@ std::unordered_map<SettingItem, ProgramOption> ProgramConfig::SETTING_MAP = {
{SettingItem::DANMAKU_RENDER_QUALITY,
{"danmaku_render_quality", {"100%", "95%", "90%", "80%", "70%", "60%", "50%"}, {100, 95, 90, 80, 70, 60, 50}, 0}},
{SettingItem::LIMITED_FPS, {"limited_fps", {"0", "30", "60", "90", "120"}, {0, 30, 60, 90, 120}, 0}},
{SettingItem::SWAP_INTERVAL, {"swap_interval", {"0", "1", "2", "3", "4"}, {0, 1, 2, 3, 4}, 1}},
{SettingItem::DEACTIVATED_TIME, {"deactivated_time", {}, {}, 0}},
{SettingItem::DEACTIVATED_FPS, {"deactivated_fps", {}, {}, 0}},
{SettingItem::DLNA_PORT, {"dlna_port", {}, {}, 0}},
Expand Down Expand Up @@ -647,7 +648,9 @@ void ProgramConfig::load() {
#endif

// 初始化FPS限制
brls::Application::setLimitedFPS(getSettingItem(SettingItem::LIMITED_FPS, 0));
int limitedFPS = getSettingItem(SettingItem::LIMITED_FPS, 0);
brls::Application::setLimitedFPS(limitedFPS);
VideoContext::swapInterval = limitedFPS == 0 ? getSettingItem(SettingItem::SWAP_INTERVAL, 1) : 0;

// 初始化进入闲置状态需要的时间 (ms);
int deactivatedTime = getSettingItem(SettingItem::DEACTIVATED_TIME, 0);
Expand Down

0 comments on commit 626d1fa

Please sign in to comment.