from PySide6.QtCore import QObject, QThread, Signal from ..core.base import BaseImageSource, BaseControlSource class CameraController(QObject): new_frame = Signal(object) errorOccurred = Signal(str) def __init__(self, image_source: BaseImageSource, control_source: BaseControlSource, parent=None): super().__init__(parent) self.image_source = image_source self.control_source = control_source self.camera_thread = QThread() self.moveToThread(self.camera_thread) self.image_source.moveToThread(self.camera_thread) self.control_source.moveToThread(self.camera_thread) self.image_source.new_frame.connect(self.new_frame) self.image_source.errorOccurred.connect(self.errorOccurred) self.control_source.errorOccurred.connect(self.errorOccurred) def start(self): self.camera_thread.start() self.image_source.start() def stop(self): self.image_source.stop() self.camera_thread.quit() self.camera_thread.wait()