From 9738db0e392f58a78359cfa4da6727783b7ce742 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sat, 8 Aug 2026 09:32:47 -0700 Subject: [PATCH] Move camera stream types out of msgq (#38591) --- msgq_repo | 2 +- openpilot/cereal/visionipc.py | 8 ++++++++ openpilot/cereal/visionstream.h | 10 ++++++++++ openpilot/selfdrive/modeld/dmonitoringmodeld.py | 3 ++- openpilot/selfdrive/modeld/modeld.py | 3 ++- openpilot/selfdrive/selfdrived/selfdrived.py | 3 ++- openpilot/selfdrive/test/process_replay/vision_meta.py | 2 +- .../selfdrive/ui/mici/onroad/augmented_road_view.py | 2 +- openpilot/selfdrive/ui/mici/onroad/cameraview.py | 6 ++++-- .../selfdrive/ui/mici/onroad/driver_camera_dialog.py | 2 +- openpilot/selfdrive/ui/onroad/augmented_road_view.py | 2 +- openpilot/selfdrive/ui/onroad/cameraview.py | 6 ++++-- openpilot/selfdrive/ui/onroad/driver_camera_dialog.py | 2 +- openpilot/selfdrive/ui/tests/profile_onroad.py | 3 ++- openpilot/selfdrive/ui/watch3.py | 2 +- openpilot/system/camerad/cameras/hw.h | 1 + openpilot/system/camerad/snapshot.py | 3 ++- openpilot/system/camerad/webcam/camerad.py | 3 ++- openpilot/system/loggerd/loggerd.h | 1 + openpilot/system/loggerd/tests/test_loggerd.py | 3 ++- openpilot/tools/cabana/cameraview.h | 1 + openpilot/tools/camerastream/compressed_vipc.py | 3 ++- openpilot/tools/clip/run.py | 3 ++- openpilot/tools/replay/camera.h | 1 + openpilot/tools/replay/ui.py | 2 +- openpilot/tools/sim/lib/camerad.py | 3 ++- 26 files changed, 58 insertions(+), 22 deletions(-) create mode 100644 openpilot/cereal/visionipc.py create mode 100644 openpilot/cereal/visionstream.h diff --git a/msgq_repo b/msgq_repo index deecc5d246..0e266c1dbc 160000 --- a/msgq_repo +++ b/msgq_repo @@ -1 +1 @@ -Subproject commit deecc5d246e79d91b62874d08b43be0cc023b241 +Subproject commit 0e266c1dbcf7328beee3e57b4a8688555387c877 diff --git a/openpilot/cereal/visionipc.py b/openpilot/cereal/visionipc.py new file mode 100644 index 0000000000..d3c842e58e --- /dev/null +++ b/openpilot/cereal/visionipc.py @@ -0,0 +1,8 @@ +from enum import IntEnum + + +class VisionStreamType(IntEnum): + VISION_STREAM_ROAD = 0 + VISION_STREAM_DRIVER = 1 + VISION_STREAM_WIDE_ROAD = 2 + VISION_STREAM_MAP = 3 diff --git a/openpilot/cereal/visionstream.h b/openpilot/cereal/visionstream.h new file mode 100644 index 0000000000..36105ee046 --- /dev/null +++ b/openpilot/cereal/visionstream.h @@ -0,0 +1,10 @@ +#pragma once + +#include "msgq/visionipc/visionbuf.h" + +enum VisionStreamValues : VisionStreamType { + VISION_STREAM_ROAD = 0, + VISION_STREAM_DRIVER = 1, + VISION_STREAM_WIDE_ROAD = 2, + VISION_STREAM_MAP = 3, +}; diff --git a/openpilot/selfdrive/modeld/dmonitoringmodeld.py b/openpilot/selfdrive/modeld/dmonitoringmodeld.py index 554407a223..1ccc0b2a89 100755 --- a/openpilot/selfdrive/modeld/dmonitoringmodeld.py +++ b/openpilot/selfdrive/modeld/dmonitoringmodeld.py @@ -8,7 +8,8 @@ import numpy as np from openpilot.cereal import messaging from openpilot.cereal.messaging import PubMaster, SubMaster -from msgq.visionipc import VisionIpcClient, VisionStreamType, VisionBuf +from openpilot.cereal.visionipc import VisionStreamType +from msgq.visionipc import VisionIpcClient, VisionBuf from openpilot.common.swaglog import cloudlog from openpilot.common.realtime import config_realtime_process from openpilot.common.transformations.model import dmonitoringmodel_intrinsics diff --git a/openpilot/selfdrive/modeld/modeld.py b/openpilot/selfdrive/modeld/modeld.py index be08c9c4c7..ef61c58333 100755 --- a/openpilot/selfdrive/modeld/modeld.py +++ b/openpilot/selfdrive/modeld/modeld.py @@ -13,7 +13,8 @@ from openpilot.cereal import log from opendbc.car.structs import car from openpilot.cereal.messaging import PubMaster, SubMaster from openpilot.cereal.services import SERVICE_LIST -from msgq.visionipc import VisionIpcClient, VisionStreamType, VisionBuf +from openpilot.cereal.visionipc import VisionStreamType +from msgq.visionipc import VisionIpcClient, VisionBuf from opendbc.car.car_helpers import get_demo_car_params from openpilot.common.swaglog import cloudlog from openpilot.common.params import Params diff --git a/openpilot/selfdrive/selfdrived/selfdrived.py b/openpilot/selfdrive/selfdrived/selfdrived.py index 6df72666c0..2ca462a9e6 100755 --- a/openpilot/selfdrive/selfdrived/selfdrived.py +++ b/openpilot/selfdrive/selfdrived/selfdrived.py @@ -7,7 +7,8 @@ import openpilot.cereal.messaging as messaging from openpilot.cereal import log from opendbc.car.structs import car -from msgq.visionipc import VisionIpcClient, VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType +from msgq.visionipc import VisionIpcClient from openpilot.common.params import Params diff --git a/openpilot/selfdrive/test/process_replay/vision_meta.py b/openpilot/selfdrive/test/process_replay/vision_meta.py index 12deb58724..28f2829650 100644 --- a/openpilot/selfdrive/test/process_replay/vision_meta.py +++ b/openpilot/selfdrive/test/process_replay/vision_meta.py @@ -1,5 +1,5 @@ from collections import namedtuple -from msgq.visionipc import VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType from openpilot.common.realtime import DT_MDL, DT_DMON from openpilot.common.transformations.camera import DEVICE_CAMERAS diff --git a/openpilot/selfdrive/ui/mici/onroad/augmented_road_view.py b/openpilot/selfdrive/ui/mici/onroad/augmented_road_view.py index 25061f12ae..92f6b835e3 100644 --- a/openpilot/selfdrive/ui/mici/onroad/augmented_road_view.py +++ b/openpilot/selfdrive/ui/mici/onroad/augmented_road_view.py @@ -2,7 +2,7 @@ import numpy as np import pyray as rl from openpilot.cereal import log from opendbc.car.structs import car -from msgq.visionipc import VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType from openpilot.selfdrive.ui.ui_state import ui_state, UIStatus from openpilot.selfdrive.ui.mici.onroad import SIDE_PANEL_WIDTH from openpilot.selfdrive.ui.mici.onroad.alert_renderer import AlertRenderer diff --git a/openpilot/selfdrive/ui/mici/onroad/cameraview.py b/openpilot/selfdrive/ui/mici/onroad/cameraview.py index 4ccfb04687..64dd6d023d 100644 --- a/openpilot/selfdrive/ui/mici/onroad/cameraview.py +++ b/openpilot/selfdrive/ui/mici/onroad/cameraview.py @@ -2,7 +2,8 @@ import platform import numpy as np import pyray as rl -from msgq.visionipc import VisionIpcClient, VisionStreamType, VisionBuf +from openpilot.cereal.visionipc import VisionStreamType +from msgq.visionipc import VisionIpcClient, VisionBuf from openpilot.common.swaglog import cloudlog from openpilot.common.hardware import COMMA_HARDWARE from openpilot.system.ui.lib.application import gui_app @@ -110,7 +111,7 @@ class CameraView(Widget): self._name = name # Primary stream self.client = VisionIpcClient(name, stream_type, conflate=True) - self._stream_type = stream_type + self._stream_type: VisionStreamType = stream_type self.available_streams: list[VisionStreamType] = [] # Target stream for switching @@ -370,6 +371,7 @@ class CameraView(Widget): del self.client # Switch to target + assert self._target_client is not None and self._target_stream_type is not None self.client = self._target_client self._stream_type = self._target_stream_type self._texture_needs_update = True diff --git a/openpilot/selfdrive/ui/mici/onroad/driver_camera_dialog.py b/openpilot/selfdrive/ui/mici/onroad/driver_camera_dialog.py index e81877b402..24276c42b8 100644 --- a/openpilot/selfdrive/ui/mici/onroad/driver_camera_dialog.py +++ b/openpilot/selfdrive/ui/mici/onroad/driver_camera_dialog.py @@ -1,6 +1,6 @@ import pyray as rl from openpilot.cereal import log, messaging -from msgq.visionipc import VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType from openpilot.selfdrive.ui.mici.onroad.cameraview import CameraView from openpilot.selfdrive.ui.mici.onroad.driver_state import DriverStateRenderer from openpilot.selfdrive.ui.ui_state import ui_state, device diff --git a/openpilot/selfdrive/ui/onroad/augmented_road_view.py b/openpilot/selfdrive/ui/onroad/augmented_road_view.py index 1b0c84f0fe..ff0cfb5eea 100644 --- a/openpilot/selfdrive/ui/onroad/augmented_road_view.py +++ b/openpilot/selfdrive/ui/onroad/augmented_road_view.py @@ -1,7 +1,7 @@ import numpy as np import pyray as rl from openpilot.cereal import log -from msgq.visionipc import VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType from openpilot.selfdrive.ui import UI_BORDER_SIZE from openpilot.selfdrive.ui.ui_state import ui_state, UIStatus from openpilot.selfdrive.ui.onroad.alert_renderer import AlertRenderer diff --git a/openpilot/selfdrive/ui/onroad/cameraview.py b/openpilot/selfdrive/ui/onroad/cameraview.py index 1fed2dd683..3b6a2fcd30 100644 --- a/openpilot/selfdrive/ui/onroad/cameraview.py +++ b/openpilot/selfdrive/ui/onroad/cameraview.py @@ -2,7 +2,8 @@ import platform import numpy as np import pyray as rl -from msgq.visionipc import VisionIpcClient, VisionStreamType, VisionBuf +from openpilot.cereal.visionipc import VisionStreamType +from msgq.visionipc import VisionIpcClient, VisionBuf from openpilot.common.swaglog import cloudlog from openpilot.common.hardware import COMMA_HARDWARE from openpilot.system.ui.lib.application import gui_app @@ -71,7 +72,7 @@ class CameraView(Widget): self._name = name # Primary stream self.client = VisionIpcClient(name, stream_type, conflate=True) - self._stream_type = stream_type + self._stream_type: VisionStreamType = stream_type self.available_streams: list[VisionStreamType] = [] # Target stream for switching @@ -323,6 +324,7 @@ class CameraView(Widget): del self.client # Switch to target + assert self._target_client is not None and self._target_stream_type is not None self.client = self._target_client self._stream_type = self._target_stream_type self._texture_needs_update = True diff --git a/openpilot/selfdrive/ui/onroad/driver_camera_dialog.py b/openpilot/selfdrive/ui/onroad/driver_camera_dialog.py index 7e07e44210..8735774458 100644 --- a/openpilot/selfdrive/ui/onroad/driver_camera_dialog.py +++ b/openpilot/selfdrive/ui/onroad/driver_camera_dialog.py @@ -1,6 +1,6 @@ import numpy as np import pyray as rl -from msgq.visionipc import VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType from openpilot.selfdrive.ui.onroad.cameraview import CameraView from openpilot.selfdrive.ui.onroad.driver_state import DriverStateRenderer from openpilot.selfdrive.ui.ui_state import ui_state, device diff --git a/openpilot/selfdrive/ui/tests/profile_onroad.py b/openpilot/selfdrive/ui/tests/profile_onroad.py index ec15e71c35..7c73bfa97b 100755 --- a/openpilot/selfdrive/ui/tests/profile_onroad.py +++ b/openpilot/selfdrive/ui/tests/profile_onroad.py @@ -5,7 +5,8 @@ import cProfile import pyray as rl import numpy as np -from msgq.visionipc import VisionIpcServer, VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType +from msgq.visionipc import VisionIpcServer from openpilot.selfdrive.ui.ui_state import ui_state from openpilot.selfdrive.ui.mici.layouts.main import MiciMainLayout from openpilot.system.ui.lib.application import gui_app diff --git a/openpilot/selfdrive/ui/watch3.py b/openpilot/selfdrive/ui/watch3.py index bb64cdc4d5..162df82658 100755 --- a/openpilot/selfdrive/ui/watch3.py +++ b/openpilot/selfdrive/ui/watch3.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 import pyray as rl -from msgq.visionipc import VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType from openpilot.system.ui.lib.application import gui_app from openpilot.selfdrive.ui.onroad.cameraview import CameraView diff --git a/openpilot/system/camerad/cameras/hw.h b/openpilot/system/camerad/cameras/hw.h index be0bea872d..45546258a9 100644 --- a/openpilot/system/camerad/cameras/hw.h +++ b/openpilot/system/camerad/cameras/hw.h @@ -2,6 +2,7 @@ #include "common/util.h" #include "openpilot/cereal/gen/cpp/log.capnp.h" +#include "openpilot/cereal/visionstream.h" #include "msgq/visionipc/visionipc_server.h" #include "media/cam_isp_ife.h" diff --git a/openpilot/system/camerad/snapshot.py b/openpilot/system/camerad/snapshot.py index 8383865fce..f865a452ff 100755 --- a/openpilot/system/camerad/snapshot.py +++ b/openpilot/system/camerad/snapshot.py @@ -3,7 +3,8 @@ import numpy as np import openpilot.cereal.messaging as messaging -from msgq.visionipc import VisionIpcClient, VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType +from msgq.visionipc import VisionIpcClient from openpilot.common.realtime import DT_MDL diff --git a/openpilot/system/camerad/webcam/camerad.py b/openpilot/system/camerad/webcam/camerad.py index c46482360d..bba982f897 100755 --- a/openpilot/system/camerad/webcam/camerad.py +++ b/openpilot/system/camerad/webcam/camerad.py @@ -4,7 +4,8 @@ import os import platform from collections import namedtuple -from msgq.visionipc import VisionIpcServer, VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType +from msgq.visionipc import VisionIpcServer from openpilot.cereal import messaging from openpilot.system.camerad.webcam.camera import Camera diff --git a/openpilot/system/loggerd/loggerd.h b/openpilot/system/loggerd/loggerd.h index 4d33a77095..c6c7b41af1 100644 --- a/openpilot/system/loggerd/loggerd.h +++ b/openpilot/system/loggerd/loggerd.h @@ -5,6 +5,7 @@ #include "openpilot/cereal/messaging/messaging.h" #include "openpilot/cereal/services.h" +#include "openpilot/cereal/visionstream.h" #include "msgq/visionipc/visionipc_client.h" #include "common/hardware/hw.h" #include "common/params.h" diff --git a/openpilot/system/loggerd/tests/test_loggerd.py b/openpilot/system/loggerd/tests/test_loggerd.py index 039bb17064..333891ad91 100644 --- a/openpilot/system/loggerd/tests/test_loggerd.py +++ b/openpilot/system/loggerd/tests/test_loggerd.py @@ -25,7 +25,8 @@ from openpilot.system.manager.process_config import managed_processes from openpilot.common.version import get_version from openpilot.tools.lib.helpers import RE from openpilot.tools.lib.logreader import LogReader -from msgq.visionipc import VisionIpcServer, VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType +from msgq.visionipc import VisionIpcServer SentinelType = log.Sentinel.SentinelType diff --git a/openpilot/tools/cabana/cameraview.h b/openpilot/tools/cabana/cameraview.h index 40d3776005..3b55dd9ed9 100644 --- a/openpilot/tools/cabana/cameraview.h +++ b/openpilot/tools/cabana/cameraview.h @@ -10,6 +10,7 @@ #include #include +#include "openpilot/cereal/visionstream.h" #include "msgq/visionipc/visionipc_client.h" class CameraWidget : public QWidget { diff --git a/openpilot/tools/camerastream/compressed_vipc.py b/openpilot/tools/camerastream/compressed_vipc.py index 56ed12889f..2ec538981b 100755 --- a/openpilot/tools/camerastream/compressed_vipc.py +++ b/openpilot/tools/camerastream/compressed_vipc.py @@ -8,7 +8,8 @@ from collections import deque import openpilot.cereal.messaging as messaging -from msgq.visionipc import VisionIpcServer, VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType +from msgq.visionipc import VisionIpcServer from openpilot.tools.camerastream.ffmpeg_decoder import Decoder, FFmpegError V4L2_BUF_FLAG_KEYFRAME = 8 diff --git a/openpilot/tools/clip/run.py b/openpilot/tools/clip/run.py index 594383f7fd..6c847ca342 100755 --- a/openpilot/tools/clip/run.py +++ b/openpilot/tools/clip/run.py @@ -22,7 +22,8 @@ from openpilot.tools.lib.framereader import FrameReader, ffprobe from openpilot.selfdrive.test.process_replay.migration import migrate_all from openpilot.common.prefix import OpenpilotPrefix from openpilot.common.utils import Timer -from msgq.visionipc import VisionIpcServer, VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType +from msgq.visionipc import VisionIpcServer FRAMERATE = 20 DEMO_ROUTE, DEMO_START, DEMO_END = '5beb9b58bd12b691/0000010a--a51155e496', 90, 105 diff --git a/openpilot/tools/replay/camera.h b/openpilot/tools/replay/camera.h index 9433018848..35fab5f7d3 100644 --- a/openpilot/tools/replay/camera.h +++ b/openpilot/tools/replay/camera.h @@ -5,6 +5,7 @@ #include #include +#include "openpilot/cereal/visionstream.h" #include "msgq/visionipc/visionipc_server.h" #include "common/queue.h" #include "tools/replay/framereader.h" diff --git a/openpilot/tools/replay/ui.py b/openpilot/tools/replay/ui.py index 4fbede2be9..2c253a1364 100755 --- a/openpilot/tools/replay/ui.py +++ b/openpilot/tools/replay/ui.py @@ -21,7 +21,7 @@ from openpilot.tools.replay.lib.ui_helpers import ( plot_lead, plot_model, ) -from msgq.visionipc import VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType from openpilot.selfdrive.ui.mici.onroad.cameraview import CameraView os.environ['BASEDIR'] = BASEDIR diff --git a/openpilot/tools/sim/lib/camerad.py b/openpilot/tools/sim/lib/camerad.py index 8efb3e5dab..d4825eada7 100644 --- a/openpilot/tools/sim/lib/camerad.py +++ b/openpilot/tools/sim/lib/camerad.py @@ -1,6 +1,7 @@ import numpy as np -from msgq.visionipc import VisionIpcServer, VisionStreamType +from openpilot.cereal.visionipc import VisionStreamType +from msgq.visionipc import VisionIpcServer from openpilot.cereal import messaging from openpilot.tools.sim.lib.common import W, H