设置一下

This commit is contained in:
i
2026-04-22 16:53:51 +08:00
parent 2ddc4de70a
commit d102e1d51b
+29 -5
View File
@@ -652,7 +652,7 @@ class CameraWorker(QThread):
config.enable_stream(color_profile)
config.enable_stream(depth_profile)
# 要求所有启用的流都到齐才输出帧集,避免不同时刻的帧被混合返回
# 要求所有启用的流都到齐才输出帧集,保证每帧同步
try:
config.set_frame_aggregate_output_mode(
OBFrameAggregateOutputMode.FULL_FRAME_REQUIRE)
@@ -724,7 +724,8 @@ class CameraWorker(QThread):
OBPermissionType.PERMISSION_READ_WRITE)
if hdr_supported:
hdr_use_interleave = dev.isFrameInterleaveSupported()
hdr_filter = HDRMergeFilter()
if not hdr_use_interleave:
hdr_filter = HDRMergeFilter()
except Exception as exc:
self.log_msg.emit(f"HDR 检测警告:{exc}")
@@ -834,7 +835,7 @@ class CameraWorker(QThread):
# 预览
# HDR merge:用 merged 帧集替换深度帧
display_frames = frames
if self._hdr_enabled and hdr_filter is not None:
if self._hdr_enabled and (not hdr_use_interleave) and hdr_filter is not None:
try:
merged = hdr_filter.process(frames)
if merged:
@@ -877,7 +878,7 @@ class CameraWorker(QThread):
depth_vis = depth_to_vis(depth_data, depth_scale)
self._last_emit_ts = time.monotonic()
self.preview_ready.emit(color_bgr.copy(), depth_vis.copy())
self.preview_ready.emit(color_bgr, depth_vis)
except Exception as exc:
if self._running:
@@ -1250,6 +1251,8 @@ class MainWindow(QMainWindow):
self._hotplug_pending = False
self._pending_stream_cfg: tuple[dict, dict] | None = None
self._closing = False
self._latest_preview: tuple[np.ndarray, np.ndarray] | None = None
self._preview_flush_scheduled = False
self._session_dir: Path | None = None
self._params_filename = "camera_params.json"
self._color_profiles_data: list[dict] = []
@@ -2001,7 +2004,7 @@ class MainWindow(QMainWindow):
self._worker.set_splat(self.capture_splat_combo.currentData())
if self.hdr_check.isChecked():
self._worker.set_hdr(True)
self._worker.preview_ready.connect(self._update_preview)
self._worker.preview_ready.connect(self._on_preview_ready)
self._worker.capture_done.connect(self._on_capture_done)
self._worker.params_ready.connect(self._on_params_ready)
self._worker.log_msg.connect(self._append_d2c_log)
@@ -2014,6 +2017,8 @@ class MainWindow(QMainWindow):
def _stop_stream(self):
self._pending_stream_cfg = None
self._latest_preview = None
self._preview_flush_scheduled = False
if self._worker:
self._retire_worker(self._worker)
self._worker = None
@@ -2035,6 +2040,8 @@ class MainWindow(QMainWindow):
def _on_camera_disconnected(self):
"""相机断开:静默关闭流,不弹窗。"""
self._pending_stream_cfg = None
self._latest_preview = None
self._preview_flush_scheduled = False
if self._worker:
self._retire_worker(self._worker)
self._worker = None
@@ -2052,6 +2059,23 @@ class MainWindow(QMainWindow):
# Preview
# ─────────────────────────────────
def _on_preview_ready(self, color_bgr: np.ndarray, depth_vis: np.ndarray):
self._latest_preview = (color_bgr, depth_vis)
if self._preview_flush_scheduled:
return
self._preview_flush_scheduled = True
QTimer.singleShot(0, self._flush_preview)
def _flush_preview(self):
frame = self._latest_preview
self._latest_preview = None
if frame is not None:
self._update_preview(*frame)
if self._latest_preview is not None:
QTimer.singleShot(0, self._flush_preview)
else:
self._preview_flush_scheduled = False
def _update_preview(self, color_bgr: np.ndarray, depth_vis: np.ndarray):
w, h = self.color_lbl.width(), self.color_lbl.height()
self.color_lbl.setPixmap(ndarray_to_pixmap(color_bgr, w, h))