48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
import sys
|
|
|
|
from PySide6.QtCore import QTimer
|
|
from PySide6.QtMultimedia import QVideoSink
|
|
from PySide6.QtWidgets import QApplication
|
|
|
|
from duck_preview.camera.service import CameraService
|
|
from duck_preview.dispatcher.frame_dispatcher import FrameDispatcher
|
|
from duck_preview.main_window import MainWindow
|
|
from duck_preview.rendering.overlay import OverlayWidget
|
|
from duck_preview.rendering.video_widget import VideoWidget
|
|
from duck_preview.telemetry.collector import TelemetryCollector
|
|
|
|
|
|
def main() -> None:
|
|
app = QApplication(sys.argv)
|
|
app.setApplicationName("Duck Preview")
|
|
|
|
camera = CameraService()
|
|
video_sink = QVideoSink()
|
|
dispatcher = FrameDispatcher()
|
|
telemetry = TelemetryCollector()
|
|
video_widget = VideoWidget()
|
|
overlay = OverlayWidget()
|
|
|
|
camera.set_video_widget(video_widget)
|
|
camera.set_video_sink(video_sink)
|
|
|
|
video_sink.videoFrameChanged.connect(dispatcher.on_frame)
|
|
dispatcher.subscribe(telemetry.on_frame)
|
|
|
|
window = MainWindow(camera, video_widget, overlay)
|
|
|
|
camera.error_occurred.connect(lambda msg: overlay.set_metrics({"error": msg}))
|
|
|
|
metrics_timer = QTimer()
|
|
metrics_timer.timeout.connect(lambda: overlay.set_metrics(telemetry.metrics()))
|
|
metrics_timer.start(200)
|
|
|
|
window.show()
|
|
sys.exit(app.exec())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|