Skip to content

Commit 932206d

Browse files
committed
Remove separate multi-cam display signal
Simplify multi-camera frame delivery by removing the throttled `display_ready` path and relying on `frame_ready` for both processing and UI updates. The main window now marks display state dirty when `frame_ready` arrives, and the controller no longer maintains GUI FPS-based display emission logic.
1 parent efb2432 commit 932206d

2 files changed

Lines changed: 1 addition & 32 deletions

File tree

‎dlclivegui/gui/main_window.py‎

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -855,7 +855,6 @@ def _connect_signals(self) -> None:
855855

856856
# Multi-camera controller signals (used for both single and multi-camera modes)
857857
self.multi_camera_controller.frame_ready.connect(self._on_multi_frame_processing_ready)
858-
self.multi_camera_controller.display_ready.connect(self._on_multi_frame_display_ready)
859858
self.multi_camera_controller.all_started.connect(self._on_multi_camera_started)
860859
self.multi_camera_controller.all_stopped.connect(self._on_multi_camera_stopped)
861860
self.multi_camera_controller.camera_error.connect(self._on_multi_camera_error)
@@ -1702,6 +1701,7 @@ def _on_multi_frame_processing_ready(self, frame_data: MultiFrameData) -> None:
17021701
"""
17031702
self._multi_camera_frames = frame_data.frames
17041703
self._multi_camera_display_ids = frame_data.display_ids or {}
1704+
self._display_dirty = True
17051705
self._try_start_pending_recording()
17061706
src_id = frame_data.source_camera_id
17071707
if src_id:
@@ -1755,15 +1755,6 @@ def _on_multi_frame_processing_ready(self, frame_data: MultiFrameData) -> None:
17551755
self._dlc_timing.note_frame()
17561756
self._dlc_timing.maybe_log()
17571757

1758-
def _on_multi_frame_display_ready(self, frame_data: MultiFrameData) -> None:
1759-
"""Throttled UI/display path.
1760-
1761-
Called at GUI_MAX_DISPLAY_FPS, not at camera capture FPS for performance reasons.
1762-
"""
1763-
self._multi_camera_frames = frame_data.frames
1764-
self._multi_camera_display_ids = frame_data.display_ids or {}
1765-
self._display_dirty = True
1766-
17671758
def _on_multi_camera_started(self) -> None:
17681759
"""Handle all cameras started event."""
17691760
self.preview_button.setEnabled(False)

‎dlclivegui/services/multi_camera_controller.py‎

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import copy
66
import logging
7-
import time
87
from dataclasses import dataclass
98
from functools import partial
109
from threading import Lock
@@ -183,22 +182,6 @@ def set_recording_frame_is_enabled(self, enabled: bool) -> None:
183182
for worker in list(self._workers.values()):
184183
worker.set_recording_enabled(enabled)
185184

186-
def _should_emit_display_ready(self) -> bool:
187-
"""
188-
Return True if enough time has passed since the last display_ready emission, based on GUI_MAX_DISPLAY_FPS.
189-
"""
190-
if self._gui_display_max_fps <= 0:
191-
return True
192-
193-
now = time.perf_counter()
194-
min_interval = 1.0 / max(self._gui_display_max_fps, 1e-9)
195-
196-
if now - self._gui_display_last_emit < min_interval:
197-
return False
198-
199-
self._gui_display_last_emit = now
200-
return True
201-
202185
def start(self, camera_settings: list[CameraSettings]) -> None:
203186
"""Start multiple cameras."""
204187
if self._running or self._stopping:
@@ -496,11 +479,6 @@ def _on_frame_captured(
496479
with timing.measure("Multi.emit.frame_ready"):
497480
self.frame_ready.emit(frame_data)
498481

499-
# GUI-only path: throttled display updates
500-
if self._should_emit_display_ready():
501-
with timing.measure("Multi.emit.display_ready"):
502-
self.display_ready.emit(frame_data)
503-
504482
timing.note_frame()
505483
timing.maybe_log()
506484

0 commit comments

Comments
 (0)