diff options
Diffstat (limited to 'plugins/motion_capture/device.py')
| -rw-r--r-- | plugins/motion_capture/device.py | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/plugins/motion_capture/device.py b/plugins/motion_capture/device.py index 3369962..fc1c588 100644 --- a/plugins/motion_capture/device.py +++ b/plugins/motion_capture/device.py @@ -69,17 +69,21 @@ class CameraDevice(BaseDevice): def connect(self) -> bool: from tracker import CameraTracker self._tracker = CameraTracker() + self.status = DeviceStatus.CONNECTING + # Camera opens on the tracker's background thread (cv2.VideoCapture + # can block for seconds) — status flips to CONNECTED/SIMULATED once + # the outcome is known, via this callback, instead of blocking here. self._tracker.start( -1 if self._simulate else self._camera_index, resolution=self._resolution, fps=self._fps, + on_result=self._on_tracker_result, ) - if self._tracker.simulated: - self.status = DeviceStatus.SIMULATED - else: - self.status = DeviceStatus.CONNECTED return True + def _on_tracker_result(self, simulated: bool) -> None: + self.status = DeviceStatus.SIMULATED if simulated else DeviceStatus.CONNECTED + def disconnect(self) -> None: if self._tracking_win is not None: self._tracking_win.close() |
