diff --git a/apps/cli/README.md b/apps/cli/README.md index 5a931271..522c22b7 100644 --- a/apps/cli/README.md +++ b/apps/cli/README.md @@ -59,7 +59,7 @@ crossdesk-cli 123456789 --quality balanced --fps 8 crossdesk-cli 123456789 --display 1 ``` -默认请求 `high` 画质(最高 1920 × 1080),`--display` 的索引从 `0` 开始。交互 CLI 默认本地输出目标为 30 FPS,远端供帧会随输出耗时自适应;显式 `--fps` 固定目标和相应预览请求,实际帧率仍取决于设备、终端与链路。更多参数见 [主 README](../../README.md#cli) 和 [终端使用指南](docs/terminal-client.md)。 +默认请求 `high` 画质(最高 1920 × 1080)和清晰度优先策略,`--display` 的索引从 `0` 开始。交互 CLI 默认本地输出目标为 30 FPS,远端供帧会随输出耗时自适应;显式 `--fps` 固定目标和相应预览请求,各帧率下均优先保持分辨率,实际画质与帧率仍取决于设备、终端与链路。更多参数见 [主 README](../../README.md#cli) 和 [终端使用指南](docs/terminal-client.md)。 ## 查看、控制与退出 diff --git a/apps/cli/docs/terminal-client.md b/apps/cli/docs/terminal-client.md index 4c3af6b8..03314f25 100644 --- a/apps/cli/docs/terminal-client.md +++ b/apps/cli/docs/terminal-client.md @@ -90,6 +90,8 @@ crossdesk-cli 123456789 --renderer ansi --fps 8 `--fps 1..30` 是本地输出目标。交互 CLI 的 ANSI、Sixel、内联 Kitty 和共享内存 Kitty 默认均为 30 FPS;共享内存失败回退时保持该目标。bridge 仍按宿主协议默认使用 8 FPS。 +独立 CLI 与 bridge 的远端预览统一请求清晰度优先(保持分辨率),包括默认 30 FPS、显式 `--fps` 和自动切换预览帧率。提高帧率不会将编码策略切回帧率优先;实际分辨率仍受画质上限、源画面尺寸、被控端支持及编码/传输条件限制。 + 未显式指定 `--fps` 时,远端预览从 30 FPS 开始,根据完整一帧从转换开始到输出完成的耗时自动选择 8/15/30 FPS 请求;共享内存的上传确认等待也计入,等待源帧的空闲时间不计入。使用平滑估计、不同升降档阈值和至少 8 个新帧样本,持续变慢 2 秒才降档、持续恢复 4 秒才升档,保留供帧余量。15 FPS 仅在对端声明支持时使用;预览未获接受时不追加自动调节。视口变化、显示器切换和共享内存回退会重置耗时估计。显式 `--fps` 固定本地目标和对应的远端预览请求,关闭自动调节;例如 `--fps 30` 可用于与自动策略对比。 本地调度只在有新帧或需要重绘时消耗刷新时隙;短暂迟到保持原刷新节奏,长时间阻塞后跳过旧时隙,不连续补画过时帧。目标帧率不代表终端实际显示帧率。 diff --git a/apps/cli/main.cpp b/apps/cli/main.cpp index 2b2cf01d..7a7d66a3 100644 --- a/apps/cli/main.cpp +++ b/apps/cli/main.cpp @@ -1042,6 +1042,7 @@ View keys: click/d native detail, wheel/+/- zoom, arrows/ijkl pan (i up, j left, Local mode stays active after commands, paste or focus loss; remote input remains paused. Ctrl+T and Ctrl+C pass through in control mode; another Ctrl+] leaves local mode and forwards Ctrl+] if control is enabled. Default ANSI detail: quadrant. Default quality: high (1920x1080); ultra requests up to 3840x2160. +Remote previews prioritize resolution at every frame rate. Cell aspect is character width/height: auto detects terminal geometry; use --cell-aspect to calibrate. Display index is zero-based. ANSI cannot reproduce full desktop text at fit scale. Auto rendering prefers Kitty, then Sixel, then ANSI. Explicit pixel renderers require a successful probe. diff --git a/libs/controller/src/controller_session.cpp b/libs/controller/src/controller_session.cpp index 7473351b..6e532ea5 100644 --- a/libs/controller/src/controller_session.cpp +++ b/libs/controller/src/controller_session.cpp @@ -342,6 +342,9 @@ void ControllerSession::Preview() { // 60 is the existing interactive-mode sentinel, not a 60 FPS request. // The encoder cadence is independently specified by frame_rate. s.frame_rate = 30; + // Preserve desktop text detail at every cadence, including 30 FPS previews. + s.preference = + static_cast(VideoDegradationPreference::MaintainResolution); s.audio = false; s.quality = options_.quality; if (resolution_) {