Fix: eliminate extra screen restarts on connection init
Two changes to reduce unnecessary CScreenSpy restarts when connecting: 1. Client (ScreenManager.cpp): Initialize CScreenSpy with bitrate from the locally-saved quality profile, so CMD_QUALITY_LEVEL arriving from the server (same bitrate as default) hits SetBitRate(3000)==3000 and skips the restart instead of comparing against the hard-coded 0. Also fixes QualityLevel init to use the already-computed `quality` variable (which honours the QUALITY_DISABLED override when algo!=NUL) rather than re-reading the cfg key a second time. 2. Server (ScreenSpyDlg.cpp): Only send CMD_SCREEN_SIZE strategy=2 when the session is in QUALITY_ADAPTIVE mode and a cached maxWidth exists. Fixed quality levels already carry resolution via CMD_QUALITY_PROFILES, so unconditionally sending CMD_SCREEN_SIZE caused a second restart when the screen spy was still rebuilding from the first one. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -856,11 +856,12 @@ BOOL CScreenSpyDlg::OnInitDialog()
|
||||
BYTE cmd[4] = { CMD_QUALITY_LEVEL, (BYTE)m_AdaptiveQuality.currentLevel, 0 };
|
||||
m_ContextObject->Send2Client(cmd, sizeof(cmd));
|
||||
|
||||
// 始终发送 CMD_SCREEN_SIZE,让客户端同步分辨率策略
|
||||
// maxWidth=0 表示使用默认分辨率(1080p 限制)
|
||||
BYTE sizeCmd[16] = { CMD_SCREEN_SIZE, 2 }; // strategy=2 表示自适应质量
|
||||
memcpy(sizeCmd + 2, &m_AdaptiveQuality.currentMaxWidth, sizeof(int));
|
||||
m_ContextObject->Send2Client(sizeCmd, 10);
|
||||
// 仅在自适应模式且有缓存宽度时同步分辨率,固定等级分辨率由 profile 决定无需重发
|
||||
if (m_Settings.QualityLevel == QUALITY_ADAPTIVE && m_AdaptiveQuality.currentMaxWidth > 0) {
|
||||
BYTE sizeCmd[16] = { CMD_SCREEN_SIZE, 2 }; // strategy=2 = 自适应质量
|
||||
memcpy(sizeCmd + 2, &m_AdaptiveQuality.currentMaxWidth, sizeof(int));
|
||||
m_ContextObject->Send2Client(sizeCmd, 10);
|
||||
}
|
||||
}
|
||||
|
||||
SendNext();
|
||||
|
||||
Reference in New Issue
Block a user