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