black pink in your area2

This commit is contained in:
firestar5683
2026-06-09 16:39:07 -05:00
parent 02960fc8c2
commit da5b3f829f
6 changed files with 63 additions and 29 deletions
@@ -5,7 +5,7 @@ from openpilot.selfdrive.ui.mici.widgets.dialog import BigDialog, BigMultiOption
from openpilot.system.ui.lib.application import gui_app
from openpilot.system.ui.widgets.scroller import NavScroller
CAMERA_VIEW_LABELS = ["Auto", "Driver", "Standard", "Wide"]
CAMERA_VIEW_LABELS = ["Auto", "Driver", "Standard", "Wide", "None"]
class CameraViewBigButton(BigButton):
+34 -18
View File
@@ -40,6 +40,7 @@ CAMERA_VIEW_AUTO = 0
CAMERA_VIEW_DRIVER = 1
CAMERA_VIEW_STANDARD = 2
CAMERA_VIEW_WIDE = 3
CAMERA_VIEW_NONE = 4
class BookmarkState(IntEnum):
@@ -420,7 +421,9 @@ class AugmentedRoadView(CameraView):
def _render(self, _):
start_draw = time.monotonic()
self._switch_stream_if_needed(ui_state.sm)
camera_view = self._camera_view()
camera_view_none = camera_view == CAMERA_VIEW_NONE
self._switch_stream_if_needed(ui_state.sm, camera_view)
# Update calibration before rendering
self._update_calibration()
@@ -443,7 +446,10 @@ class AugmentedRoadView(CameraView):
)
# Render the base camera view
super()._render(self._content_rect)
if camera_view_none:
rl.draw_rectangle_rec(self._content_rect, rl.BLACK)
else:
super()._render(self._content_rect)
waiting_for_controls = ui_state.started and not self._controls_ready()
if waiting_for_controls:
@@ -462,39 +468,41 @@ class AugmentedRoadView(CameraView):
in_reverse = self._is_in_reverse()
is_driver_stream = self.stream_type == DRIVER_CAM
draw_road_overlays = not in_reverse and not is_driver_stream and not camera_view_none
draw_hud_controls = camera_view_none or (not in_reverse and not is_driver_stream)
self._hud_renderer.prepare(self._content_rect)
# Draw all UI overlays
if not in_reverse and not is_driver_stream:
if draw_road_overlays:
self._model_renderer.render(self._content_rect)
# Fade out bottom of overlays for looks
rl.draw_texture_ex(self._fade_texture, rl.Vector2(self._content_rect.x, self._content_rect.y), 0.0, 1.0, rl.WHITE)
if not in_reverse and not is_driver_stream:
if draw_hud_controls:
self._hud_renderer.render_background()
alert_to_render, not_animating_out = self._alert_renderer.will_render()
should_draw_dmoji = ui_state.is_onroad() and (
is_driver_stream or ((not in_reverse) and (not self._hud_renderer.drawing_top_icons()))
is_driver_stream or camera_view_none or ((not in_reverse) and (not self._hud_renderer.drawing_top_icons()))
)
self._driver_state_renderer.set_should_draw(should_draw_dmoji)
self._driver_state_renderer.set_position(self._rect.x + 16, self._rect.y + 10)
if is_driver_stream or not in_reverse:
if camera_view_none or is_driver_stream or not in_reverse:
self._driver_state_renderer.render()
self._hud_renderer.set_can_draw_top_icons((not in_reverse) and (not is_driver_stream) and (alert_to_render is None))
self._hud_renderer.set_wheel_critical_icon((not in_reverse) and (not is_driver_stream) and alert_to_render is not None and not not_animating_out and
self._hud_renderer.set_can_draw_top_icons(draw_hud_controls and (alert_to_render is None))
self._hud_renderer.set_wheel_critical_icon(draw_hud_controls and alert_to_render is not None and not not_animating_out and
alert_to_render.visual_alert == car.CarControl.HUDControl.VisualAlert.steerRequired)
# TODO: have alert renderer draw offroad mici label below
if ui_state.started:
self._alert_renderer.render(self._content_rect)
if not in_reverse and not is_driver_stream:
if draw_hud_controls:
self._hud_renderer.render_foreground()
rendered_standstill_timer = False
if not in_reverse and not is_driver_stream:
if draw_hud_controls:
rendered_standstill_timer = self._standstill_timer.render(self._content_rect, in_reverse)
if not in_reverse and not is_driver_stream and not rendered_standstill_timer:
if draw_hud_controls and not rendered_standstill_timer:
self._min_steer_speed_banner.render(self._content_rect)
# End clipping region
@@ -502,9 +510,9 @@ class AugmentedRoadView(CameraView):
# Custom UI extension point - add custom overlays here
# Use self._content_rect for positioning within camera bounds
if not in_reverse and not is_driver_stream:
if draw_road_overlays:
self._confidence_ball.render(self.rect)
if is_driver_stream or not in_reverse:
if camera_view_none or is_driver_stream or not in_reverse:
self._draw_border()
self._bookmark_icon.render(self.rect)
@@ -555,17 +563,25 @@ class AugmentedRoadView(CameraView):
def is_in_reverse(self) -> bool:
return self._is_in_reverse()
def _switch_stream_if_needed(self, sm):
@staticmethod
def _camera_view() -> int:
camera_view = ui_state.params.get_int("CameraView", return_default=True, default=CAMERA_VIEW_WIDE)
if camera_view not in (CAMERA_VIEW_AUTO, CAMERA_VIEW_DRIVER, CAMERA_VIEW_STANDARD, CAMERA_VIEW_WIDE, CAMERA_VIEW_NONE):
return CAMERA_VIEW_WIDE
return camera_view
def _switch_stream_if_needed(self, sm, camera_view: int):
if camera_view == CAMERA_VIEW_NONE:
self._reverse_driver_camera_frames = 0
self._reverse_driver_camera_active = False
return
if self._update_reverse_driver_camera_state():
target = DRIVER_CAM
if self.stream_type != target:
self.switch_stream(target)
return
camera_view = ui_state.params.get_int("CameraView", return_default=True, default=CAMERA_VIEW_WIDE)
if camera_view not in (CAMERA_VIEW_AUTO, CAMERA_VIEW_DRIVER, CAMERA_VIEW_STANDARD, CAMERA_VIEW_WIDE):
camera_view = CAMERA_VIEW_WIDE
if camera_view == CAMERA_VIEW_DRIVER:
target = DRIVER_CAM
elif camera_view == CAMERA_VIEW_STANDARD:
+23 -5
View File
@@ -4,11 +4,15 @@
#include <QPainter>
#include <algorithm>
#include <cmath>
#include <exception>
#include <string>
#include "common/params.h"
#include "common/swaglog.h"
#include "selfdrive/ui/qt/util.h"
constexpr int CAMERA_VIEW_NONE = 4;
// Window that shows camera view and variety of info drawn on top
AnnotatedCameraWidget::AnnotatedCameraWidget(VisionStreamType type, QWidget *parent)
: fps_filter(UI_FREQ, 3, 1. / UI_FREQ), CameraWidget("camerad", type, parent) {
@@ -139,9 +143,22 @@ void AnnotatedCameraWidget::paintEvent(QPaintEvent *event) {
const double start_draw_t = millis_since_boot();
QPainter painter(this);
static Params params;
const std::string camera_view_param = params.get("CameraView");
int camera_view = starpilot_toggles.value("camera_view").toInt();
if (!camera_view_param.empty()) {
try {
camera_view = std::stoi(camera_view_param);
} catch (const std::exception &) {
LOGW("invalid CameraView param: %s", camera_view_param.c_str());
}
}
const bool camera_view_none = camera_view == CAMERA_VIEW_NONE;
// draw camera frame
{
if (camera_view_none) {
painter.fillRect(rect(), Qt::black);
} else {
std::lock_guard lk(frame_lock);
if (frames.empty()) {
@@ -166,9 +183,8 @@ void AnnotatedCameraWidget::paintEvent(QPaintEvent *event) {
} else if (v_ego > 15) {
wide_cam_requested = false;
}
wide_cam_requested = wide_cam_requested && sm["selfdriveState"].getSelfdriveState().getExperimentalMode() && starpilot_toggles.value("camera_view").toInt() == 0;
wide_cam_requested = wide_cam_requested && sm["selfdriveState"].getSelfdriveState().getExperimentalMode() && camera_view == 0;
}
int camera_view = starpilot_toggles.value("camera_view").toInt();
CameraWidget::setStreamType(camera_view == 1 ? VISION_STREAM_DRIVER :
((camera_view == 3 && has_wide_cam) || wide_cam_requested) ? VISION_STREAM_WIDE_ROAD :
VISION_STREAM_ROAD);
@@ -194,12 +210,14 @@ void AnnotatedCameraWidget::paintEvent(QPaintEvent *event) {
hud.starpilot_toggles = starpilot_toggles;
model.starpilot_toggles = starpilot_toggles;
model.draw(painter, rect());
if (!camera_view_none) {
model.draw(painter, rect());
}
dmon.draw(painter, rect());
hud.updateState(*s);
hud.draw(painter, rect());
starpilot_nvg->paintStarPilotWidgets(painter, *s);
starpilot_nvg->paintStarPilotWidgets(painter, *s, camera_view_none);
double cur_draw_t = millis_since_boot();
double dt = cur_draw_t - prev_draw_t;
+1 -1
View File
@@ -135,7 +135,7 @@ StarPilotVisualsPanel::StarPilotVisualsPanel(StarPilotSettingsWindow *parent, bo
});
visualToggle = qolToggle;
} else if (param == "CameraView") {
std::vector<QString> cameraOptions{tr("Auto"), tr("Driver"), tr("Standard"), tr("Wide")};
std::vector<QString> cameraOptions{tr("Auto"), tr("Driver"), tr("Standard"), tr("Wide"), tr("None")};
ButtonParamControl *cameraSelection = new ButtonParamControl(param, title, desc, icon, cameraOptions);
visualToggle = cameraSelection;
@@ -297,7 +297,7 @@ void StarPilotAnnotatedCameraWidget::mousePressEvent(QMouseEvent *mouseEvent) {
mouseEvent->ignore();
}
void StarPilotAnnotatedCameraWidget::paintStarPilotWidgets(QPainter &p, UIState &s) {
void StarPilotAnnotatedCameraWidget::paintStarPilotWidgets(QPainter &p, UIState &s, bool hideCameraOverlays) {
if (cachedSimpleMode) {
cemStatusPosition = QPoint(0, 0);
compassPosition = QPoint(0, 0);
@@ -345,7 +345,7 @@ void StarPilotAnnotatedCameraWidget::paintStarPilotWidgets(QPainter &p, UIState
paintPedalIcons(p);
}
if (cachedRadarTracks) {
if (!hideCameraOverlays && cachedRadarTracks) {
paintRadarTracks(p);
}
@@ -368,7 +368,7 @@ void StarPilotAnnotatedCameraWidget::paintStarPilotWidgets(QPainter &p, UIState
paintStandstillTimer(p);
}
if (track_vertices.length() >= 1 && redLight && cachedShowStoppingPoint) {
if (!hideCameraOverlays && track_vertices.length() >= 1 && redLight && cachedShowStoppingPoint) {
paintStoppingPoint(p);
}
@@ -14,7 +14,7 @@ public:
void mousePressEvent(QMouseEvent *mouseEvent) override;
void paintAdjacentPaths(QPainter &p);
void paintBlindSpotPath(QPainter &p);
void paintStarPilotWidgets(QPainter &p, UIState &s);
void paintStarPilotWidgets(QPainter &p, UIState &s, bool hideCameraOverlays = false);
void paintLeadMetrics(QPainter &p, bool adjacent, QPointF *chevron, const cereal::RadarState::LeadData::Reader &lead_data);
void paintPathEdges(QPainter &p, int height);
void paintRainbowPath(QPainter &p, QLinearGradient &bg, float lin_grad_point);