fix: 完善 RK3588 HDMI RX 信号检测与自动恢复

- 统一使用 QUERY_DV_TIMINGS 判断 HDMI RX 输入状态
  - 增加 source-following 设备状态 API 与前端只读展示
  - 支持长时间无信号后的 MJPEG/WebRTC 自动恢复
  - 修复模式切换时采集设备尚未释放导致的 EBUSY
  - 取消陈旧 WebRTC 重连并统一采集恢复策略
  - 移除视频输入状态区域的冗余标题
This commit is contained in:
mofeng-git
2026-07-30 19:41:44 +08:00
parent 971c263bf8
commit 9fb23476ac
36 changed files with 1883 additions and 1492 deletions

View File

@@ -14,8 +14,30 @@ pub async fn get_video_config(State(state): State<Arc<AppState>>) -> Json<VideoC
pub async fn update_video_config(
State(state): State<Arc<AppState>>,
Json(req): Json<VideoConfigUpdate>,
Json(mut req): Json<VideoConfigUpdate>,
) -> Result<Json<VideoConfig>> {
let selected_path = req
.device
.clone()
.or_else(|| state.config.get().video.device.clone());
if let Some(path) = selected_path {
let source_following = state
.stream_manager
.list_devices()
.await
.ok()
.and_then(|devices| {
devices
.into_iter()
.find(|device| device.path.to_string_lossy() == path)
})
.is_some_and(|device| {
device.control_mode == crate::video::device::VideoControlMode::SourceFollowing
});
if source_following {
req.ignore_source_following_parameters();
}
}
req.validate()?;
let _apply_guard = try_apply_lock(&state.config_apply_locks.video, "video")?;