summaryrefslogtreecommitdiff
path: root/plugins/motion_capture/device.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/motion_capture/device.py')
-rw-r--r--plugins/motion_capture/device.py12
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()