From a29fdbd02407d41ecbcc69d151bb4837bfba3cbc Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Wed, 19 Nov 2025 15:43:49 -0800 Subject: [PATCH] enhance dcam a bit for onboarding (#36655) --- selfdrive/ui/mici/onroad/cameraview.py | 28 +++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/selfdrive/ui/mici/onroad/cameraview.py b/selfdrive/ui/mici/onroad/cameraview.py index f962210afb..0f425b10da 100644 --- a/selfdrive/ui/mici/onroad/cameraview.py +++ b/selfdrive/ui/mici/onroad/cameraview.py @@ -47,6 +47,7 @@ if TICI: uniform samplerExternalOES texture0; out vec4 fragColor; uniform int engaged; + uniform int enhance_driver; void main() { vec4 color = texture(texture0, fragTexCoord); @@ -57,8 +58,16 @@ if TICI: color.rgb = pow(color.rgb, vec3(1.0/1.28)); fragColor = vec4(color.rgb, color.a); } else { - fragColor = vec4(color.rgb * 0.85, color.a); // 85% opacity + color.rgb *= 0.85; // 85% opacity } + if (enhance_driver == 1) { + float brightness = 1.1; + color.rgb = color.rgb + 0.15; + color.rgb = clamp((color.rgb - 0.5) * (brightness * 0.8) + 0.5, 0.0, 1.0); + color.rgb = color.rgb * color.rgb * (3.0 - 2.0 * color.rgb); + color.rgb = pow(color.rgb, vec3(0.8)); + } + fragColor = vec4(color.rgb, color.a); } """ else: @@ -68,6 +77,7 @@ else: uniform sampler2D texture1; out vec4 fragColor; uniform int engaged; + uniform int enhance_driver; void main() { float y = texture(texture0, fragTexCoord).r; @@ -77,10 +87,19 @@ else: float gray = dot(rgb, vec3(0.299, 0.587, 0.114)); rgb = mix(vec3(gray), rgb, 0.2); // 20% saturation rgb = clamp((rgb - 0.5) * 1.2 + 0.5, 0.0, 1.0); // +20% contrast - fragColor = vec4(rgb, 1.0); } else { - fragColor = vec4(rgb * 0.85, 1.0); // 85% opacity + rgb *= 0.85; // 85% opacity } + // TODO: the images out of camerad need some more correction and + // the ui should apply a gamma curve for the device display + if (enhance_driver == 1) { + float brightness = 1.1; + rgb = rgb + 0.15; + rgb = clamp((rgb - 0.5) * (brightness * 0.8) + 0.5, 0.0, 1.0); + rgb = rgb * rgb * (3.0 - 2.0 * rgb); + rgb = pow(rgb, vec3(0.8)); + } + fragColor = vec4(rgb, 1.0); } """ @@ -106,6 +125,8 @@ class CameraView(Widget): self._texture1_loc: int = rl.get_shader_location(self.shader, "texture1") if not TICI else -1 self._engaged_loc = rl.get_shader_location(self.shader, "engaged") self._engaged_val = rl.ffi.new("int[1]", [1]) + self._enhance_driver_loc = rl.get_shader_location(self.shader, "enhance_driver") + self._enhance_driver_val = rl.ffi.new("int[1]", [1 if stream_type == VisionStreamType.VISION_STREAM_DRIVER else 0]) self.frame: VisionBuf | None = None self.texture_y: rl.Texture | None = None @@ -300,6 +321,7 @@ class CameraView(Widget): def _update_texture_color_filtering(self): self._engaged_val[0] = 1 if ui_state.status != UIStatus.DISENGAGED else 0 rl.set_shader_value(self.shader, self._engaged_loc, self._engaged_val, rl.ShaderUniformDataType.SHADER_UNIFORM_INT) + rl.set_shader_value(self.shader, self._enhance_driver_loc, self._enhance_driver_val, rl.ShaderUniformDataType.SHADER_UNIFORM_INT) def _ensure_connection(self) -> bool: if not self.client.is_connected():