From 0360926962ead2b08158b2d4a975ae688ab1190a Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Thu, 5 Jun 2025 05:08:29 +0800 Subject: [PATCH] ui: fill the bg with disengaged color if no frame (#35451) fill the bg with disengaged color if no frame Co-authored-by: Shane Smiskol --- selfdrive/ui/onroad/augmented_road_view.py | 1 + selfdrive/ui/onroad/cameraview.py | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/selfdrive/ui/onroad/augmented_road_view.py b/selfdrive/ui/onroad/augmented_road_view.py index fa7469d2d..d727337e3 100644 --- a/selfdrive/ui/onroad/augmented_road_view.py +++ b/selfdrive/ui/onroad/augmented_road_view.py @@ -28,6 +28,7 @@ BORDER_COLORS = { class AugmentedRoadView(CameraView): def __init__(self, stream_type: VisionStreamType = VisionStreamType.VISION_STREAM_ROAD): super().__init__("camerad", stream_type) + self._set_placeholder_color(BORDER_COLORS[UIStatus.DISENGAGED]) self.device_camera: DeviceCameraConfig | None = None self.view_from_calib = view_frame_from_device_frame.copy() diff --git a/selfdrive/ui/onroad/cameraview.py b/selfdrive/ui/onroad/cameraview.py index d59e7b0a4..2bc49fec0 100644 --- a/selfdrive/ui/onroad/cameraview.py +++ b/selfdrive/ui/onroad/cameraview.py @@ -74,6 +74,8 @@ class CameraView: self.egl_images: dict[int, EGLImage] = {} self.egl_texture: rl.Texture | None = None + self._placeholder_color : rl.Color | None = None + # Initialize EGL for zero-copy rendering on TICI if TICI: if not init_egl(): @@ -84,6 +86,10 @@ class CameraView: self.egl_texture = rl.load_texture_from_image(temp_image) rl.unload_image(temp_image) + def _set_placeholder_color(self, color: rl.Color): + """Set a placeholder color to be drawn when no frame is available.""" + self._placeholder_color = color + def switch_stream(self, stream_type: VisionStreamType) -> None: if self._stream_type != stream_type: cloudlog.debug(f'switching stream from {self._stream_type} to {stream_type}') @@ -130,6 +136,7 @@ class CameraView: def render(self, rect: rl.Rectangle): if not self._ensure_connection(): + self._draw_placeholder(rect) return # Try to get a new buffer without blocking @@ -139,6 +146,7 @@ class CameraView: self.frame = buffer if not self.frame: + self._draw_placeholder(rect) return transform = self._calc_frame_matrix(rect) @@ -163,6 +171,10 @@ class CameraView: else: self._render_textures(src_rect, dst_rect) + def _draw_placeholder(self, rect: rl.Rectangle): + if self._placeholder_color: + rl.draw_rectangle_rec(rect, self._placeholder_color) + def _render_egl(self, src_rect: rl.Rectangle, dst_rect: rl.Rectangle) -> None: """Render using EGL for direct buffer access""" if self.frame is None or self.egl_texture is None: