From 2af7bdd1dd91a693fdac05812436e82a5c80fb60 Mon Sep 17 00:00:00 2001 From: dirwin31 <83434411+dirwin31@users.noreply.github.com> Date: Sun, 1 Nov 2026 14:05:38 -0800 Subject: [PATCH] Add opt-in H.265 for a head unit that offers no H.264 mode Allow H.265 video (Developer > StarPort, off by default) lets a car that offers only H.265 get H.265. A car with an H.264 mode is chosen exactly as before whatever the setting; this is replay-tested over several offers. The hardware encoder library is ABI 4: an HEVC option selects H.265 Main profile at high-tier level 5 and allows up to 1920x1080 (H.264 stays at 1280x720). The Python side keeps H.265 apart from the H.264 code: its own codec-config and wire-frame functions for the two-byte NAL header, its own access unit check, and an encoder subclass. If the car is told H.265 and the hardware encoder cannot open, the session fails with the reason; there is no fallback to another codec. Measured on a parked comma with a scratch copy of the library: H.265 1080p costs about 13 ms per frame on the NV12 path (30 ms from RGBA), mid-stream keyframes carry VPS/SPS/PPS, and the H.264 session is unchanged. The encoder splits every H.265 picture into two slices, which the check allows. --- .../system/starport/bugsink_report.py | 1 + .../system/starport/hw/libstarport_encoder.so | Bin 244696 -> 247280 bytes .../system/starport/hw/starport_encoder.cc | 37 ++++-- .../starpilot/system/starport/hw_encoder.py | 96 +++++++++++++-- .../starpilot/system/starport/session.py | 64 ++++++++-- .../starpilot/system/starport/supervisor.py | 21 ++-- .../system/starport/tests/test_hevc.py | 113 ++++++++++++++++++ 7 files changed, 294 insertions(+), 38 deletions(-) create mode 100644 openpilot/starpilot/system/starport/tests/test_hevc.py diff --git a/openpilot/starpilot/system/starport/bugsink_report.py b/openpilot/starpilot/system/starport/bugsink_report.py index dfc3aebbd8..c739af77e6 100644 --- a/openpilot/starpilot/system/starport/bugsink_report.py +++ b/openpilot/starpilot/system/starport/bugsink_report.py @@ -103,6 +103,7 @@ def video_summary(events: list[dict]) -> dict: "screen": f"{mode['width'] - (mode.get('margin_width') or 0)}x{mode['height'] - (mode.get('margin_height') or 0)}" if mode.get("width") and mode.get("height") else None, "density_dpi": mode.get("density") or None, + "codec": mode.get("codec"), # present only for H.265; H.264 reports are unchanged "target_fps": pipeline.get("target_fps"), "encoder": pipeline.get("encoder"), "nv12": pipeline.get("nv12"), diff --git a/openpilot/starpilot/system/starport/hw/libstarport_encoder.so b/openpilot/starpilot/system/starport/hw/libstarport_encoder.so index 1b8e37108cd075b75f70a40d443f2e49b49cfe13..791e7ae260cccb410c180906cc90a37fac2572d6 100755 GIT binary patch literal 247280 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 BX{P`H literal 244696 zcmeFZdstM}9zVR++Ixm!21n3Q(NRIv5;PS>yvyJv@2N;?S42c16^4tZnTcX%Y9}en zN>j1R0m_c2VnA^G@&3SVM^4nX?)KcC!|U(;FhjT{Tt~x&D z%|-2Zzx0>MvmdYCw&po|<;zP$*KDbM_}1sAeLnYxAtgDjXMpv8el!-!%B0nXY#M9J zdT=8UgA@m_RYNujJq<^j!e5I(n!->J~A$ z8h=hSlZQ{6iECyv{yzo9P5FPI8GLdx`X6hCzh5(U&o`szu4eeJMTcq1&u5yk`+hTe zCNz_`ADhA7(~O?9X8f7h4F9EO;-&r^jjQozOEY>NXhzR<@TZ9`#D+G*5A{vjrM?~A z*crebA<&fm7BX)R7T!$>g#o6|!??#V2RqVV!OyB2i#PbAuTluIN1y9)wE};18woPs zczhmqNsniM!n+VBeQv`={Cy4njuNZJJK`@&P>6j7ezn0r)!^R~rU>=O5An|)tl+t@ zN1qpQC;grn1s^u>EG=#RqTHOcg2MFt!n8D&Ha>N7+T6_i%=y^`g_-%OlSeJg&B;tn zpR+Ji(VC{DWh_lko0pxFzA*caOh(GQxzLxHlaUK$Y3XyauS6DRFUroDeFA7@H8_&KPNYBVQxlxVRmi~Ta>w|AhQsRa~Dosg4^`Metpx@ z3bXQaZ%+7#%+b4oDNyyiuN)pV`2aWSE20=A zCJM+?WM?3yVrhJQe7`yA1=$&BT!?c1_zWa7J|inVKdmr7J-e`Ae8!mR>G&Ems^9qO z{nN%!(o-g)B;)liY+j&w8>wljebZ9op=`?ZL1|MbP9Km4m-A({D(9}O>y(Mj>uc8M zF>GE&4qD}+Md@C$fCl$}7yRI~$!Y0cH1oL>|DykUC923r?6V{@XGtGe=;K{hn3bE;zju7UJ_U&68gF{W zg7o>B1%2ktTjb50-zPfAot4#PF zCVXFxwBbYR<8CJWAQQf`2~RnpkAVM}V*MYR2_NUjQvC(^jnqkMqzP}{KSrDIr~v<` zhY26z$I^Z!px?K)Ao3s+KGekTG2!hd{5TUH4bA_VYQh^!3rU-0!kg=Hwh8a_Yhf(Q zgl}oWdrf$1>%PxY6W+W&D>C8D>*jSPd~2T)+&7u#evn(&b(e0LK*+Jrav>!@h$le*=vmDg#kWCvrL z>z2P>wqHy8^ek{^89Ng3$JpBN<4GmaBI;A(^#3;dcgi#z%eFx zJ>Zch_%DFxnBWHhuU2ps+8V1KTkBzLZ*6^jJ8FZzwnlf*(Znnz$8hh0JC4mx?`JF( z@R2Sj#@41o?ySZu7}_bxHsUun2mf)%jyyBAc8-)4ep#|t zxBOqSPn>tK+VikETZ|d(;cOuE9%26(TU!JfX=AgeHoLxl%jdYFSy9StVHteh;i;`# z{)X&Fz8L<4n0#fr&jznK#{JMⅈJ!G0fJ{Q`^JFYN2nqkEd?=Kg%!Y^72dbMR`q{ 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 diff --git a/openpilot/starpilot/system/starport/hw/starport_encoder.cc b/openpilot/starpilot/system/starport/hw/starport_encoder.cc index 2001e43a0c..e28c322f66 100644 --- a/openpilot/starpilot/system/starport/hw/starport_encoder.cc +++ b/openpilot/starpilot/system/starport/hw/starport_encoder.cc @@ -3,11 +3,12 @@ // Altering them can degrade video smoothness or introduce lag on Android Auto. // Do not change them autonomously; require an explicit user request specifically // for these video optimizations. -// Isolated Qualcomm H.264 session for Android Auto projection. No cereal publisher, +// Isolated Qualcomm H.264 (or, with AA_ENCODER_HEVC, H.265) session for Android Auto projection. No cereal publisher, // camera buffers, realtime priority, or background thread. Exactly one input in flight. // Input is RGBA (converted here with NEON) or NV12 already converted on the GPU by the // car renderer (copied into the encoder's padded layout). ABI 3 adds the NV12 entry -// point and create() options (AA_ENCODER_CBR). +// point and create() options (AA_ENCODER_CBR). ABI 4 adds AA_ENCODER_HEVC for a head unit that offers only H.265; +// the H.264 path is untouched. HEVC controls follow system/loggerd/encoder/v4l_encoder.cc. // Buffer/ioctl conventions follow system/loggerd/encoder/v4l_encoder.cc and // msgq/visionipc/visionbuf_ion.cc. Built for comma_arm64 by this directory's SConscript. // @@ -38,6 +39,7 @@ namespace { using Clock = std::chrono::steady_clock; constexpr unsigned CODECCONFIG = 0x00020000; constexpr int AA_ENCODER_CBR = 1; // hold the configured bitrate instead of letting it float with scene complexity +constexpr int AA_ENCODER_HEVC = 2; // encode H.265 (Main profile) instead of H.264 baseline constexpr size_t MAX_PACKET = 2 * 1024 * 1024 - 10; void check(bool ok, const char *what) { @@ -142,8 +144,9 @@ struct Encoder { strcmp(reinterpret_cast(cap.card), "msm_vidc_venc")) throw std::runtime_error("Unsupported encoder driver"); v4l2_format out = {}; out.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; out.fmt.pix_mp.width = width; out.fmt.pix_mp.height = height; - out.fmt.pix_mp.pixelformat = V4L2_PIX_FMT_H264; - call(fd, VIDIOC_S_FMT, &out, "H264 format"); + const bool hevc = options & AA_ENCODER_HEVC; + out.fmt.pix_mp.pixelformat = hevc ? V4L2_PIX_FMT_HEVC : V4L2_PIX_FMT_H264; + call(fd, VIDIOC_S_FMT, &out, hevc ? "HEVC format" : "H264 format"); v4l2_streamparm parm = {}; parm.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; parm.parm.output.timeperframe.numerator = 1; parm.parm.output.timeperframe.denominator = fps; call(fd, VIDIOC_S_PARM, &parm, "frame rate"); @@ -167,10 +170,15 @@ struct Encoder { : V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_VBR_CFR); control(V4L2_CID_MPEG_VIDC_VIDEO_PRIORITY, V4L2_MPEG_VIDC_VIDEO_PRIORITY_REALTIME_DISABLE); control(V4L2_CID_MPEG_VIDC_VIDEO_IDR_PERIOD, 1); - control(V4L2_CID_MPEG_VIDEO_H264_PROFILE, V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE); - control(V4L2_CID_MPEG_VIDEO_H264_LEVEL, V4L2_MPEG_VIDEO_H264_LEVEL_3_1); - control(V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE, V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC); - control(V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE, V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED); + if (hevc) { + control(V4L2_CID_MPEG_VIDC_VIDEO_HEVC_PROFILE, V4L2_MPEG_VIDC_VIDEO_HEVC_PROFILE_MAIN); + control(V4L2_CID_MPEG_VIDC_VIDEO_HEVC_TIER_LEVEL, V4L2_MPEG_VIDC_VIDEO_HEVC_LEVEL_HIGH_TIER_LEVEL_5); + } else { + control(V4L2_CID_MPEG_VIDEO_H264_PROFILE, V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE); + control(V4L2_CID_MPEG_VIDEO_H264_LEVEL, V4L2_MPEG_VIDEO_H264_LEVEL_3_1); + control(V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE, V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC); + control(V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE, V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED); + } control(V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE, 0); unsigned count = buffers(V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, 6); buffers(V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, 9); @@ -257,7 +265,7 @@ struct Encoder { auto &buffer = *outputs[b.index]; buffer.sync(true); auto *bytes = static_cast(buffer.addr); if (b.flags & CODECCONFIG) { - if (plane.bytesused > 65536) throw std::runtime_error("Oversized H264 header"); + if (plane.bytesused > 65536) throw std::runtime_error("Oversized codec header"); header.assign(bytes, bytes + plane.bytesused); } else { if (b.timestamp.tv_sec * 1000000LL + b.timestamp.tv_usec != timestamp || frame_done) @@ -281,15 +289,20 @@ struct Encoder { } extern "C" { -int starport_encoder_abi() { return 3; } +int starport_encoder_abi() { return 4; } void starport_encoder_timing(void *ptr, double *output) { if (ptr && output) std::copy_n(static_cast(ptr)->timing, 3, output); } void *starport_encoder_create(int width, int height, int fps, int bitrate, int margin_height, int options, char *error, size_t size) { try { - if (width < 2 || width > 1280 || height < 2 || height > 720 || width % 2 || height % 2 || + // H.264 baseline level 3.1 is a 720p30 session; HEVC Main at high-tier level 5 carries 1080p30 for a head unit + // that offers nothing else. + const bool hevc = options & AA_ENCODER_HEVC; + const int max_width = hevc ? 1920 : 1280, max_height = hevc ? 1080 : 720; + if (width < 2 || width > max_width || height < 2 || height > max_height || width % 2 || height % 2 || fps != 30 || bitrate < 1000000 || bitrate > 20000000 || margin_height < 0 || - margin_height >= height || margin_height % 4 || (options & ~AA_ENCODER_CBR)) throw std::runtime_error("Unsupported encoder configuration"); + margin_height >= height || margin_height % 4 || (options & ~(AA_ENCODER_CBR | AA_ENCODER_HEVC))) + throw std::runtime_error("Unsupported encoder configuration"); auto encoder = std::make_unique(width, height, fps, margin_height, options); encoder->init(bitrate); return encoder.release(); } catch (const std::exception &e) { error_text(error, size, e); return nullptr; } diff --git a/openpilot/starpilot/system/starport/hw_encoder.py b/openpilot/starpilot/system/starport/hw_encoder.py index ad79cc4b3c..279fd56d1d 100644 --- a/openpilot/starpilot/system/starport/hw_encoder.py +++ b/openpilot/starpilot/system/starport/hw_encoder.py @@ -23,11 +23,14 @@ from pathlib import Path from openpilot.starpilot.system.starport.encoder import MAX_ACCESS_UNIT, START_CODE, H264Encoder, nal_types LIBRARY = Path(__file__).with_name("hw") / "libstarport_encoder.so" -ABI = 3 -SUPPORTED_ABIS = (2, 3) +ABI = 4 +SUPPORTED_ABIS = (2, 3, 4) OPTION_CBR = 1 +OPTION_HEVC = 2 # ABI 4: H.265 Main profile instead of H.264 baseline MAX_WIDTH, MAX_HEIGHT, HW_FPS = 1280, 720, 30 +HEVC_MAX_WIDTH, HEVC_MAX_HEIGHT = 1920, 1080 AUD = b"\x00\x00\x00\x01\x09\xf0" +HEVC_AUD = b"\x00\x00\x00\x01\x46\x01\x50" def normalize_access_unit(data: bytes, *, keyframe: bool) -> bytes: @@ -52,16 +55,51 @@ def normalize_access_unit(data: bytes, *, keyframe: bool) -> bytes: return result +def hevc_nal_kinds(data: bytes) -> list[int]: + return [(data[match.end()] >> 1) & 0x3F for match in START_CODE.finditer(data) if match.end() < len(data)] + + +def normalize_access_unit_hevc(data: bytes, *, keyframe: bool) -> bytes: + """H.265 counterpart of normalize_access_unit: exactly one leading AUD, one picture, VPS/SPS/PPS on keyframes. + + A picture NAL is a VCL unit (types 0-9 and 16-21); an IDR is type 19 or 20. The comma's encoder splits every H.265 + picture into two slices (measured on the device: [19, 19] and [1, 1]), so one or more VCL units make a picture. + Separate from the H.264 function so that path is unchanged.""" + if not data.startswith((b"\x00\x00\x01", b"\x00\x00\x00\x01")) or len(data) > MAX_ACCESS_UNIT: + raise RuntimeError("Expected a bounded Annex B hardware frame") + starts = list(START_CODE.finditer(data)) + units = [] + for index, match in enumerate(starts): + end = starts[index + 1].start() if index + 1 < len(starts) else len(data) + if match.end() + 1 >= end: + raise RuntimeError("Empty hardware NAL unit") + units.append(((data[match.end()] >> 1) & 0x3F, data[match.start():end])) + kinds = [kind for kind, _ in units] + pictures = [kind for kind in kinds if kind <= 9 or 16 <= kind <= 21] + if not pictures or len({kind in (19, 20) for kind in pictures}) != 1: # slices of one picture are all IDR or none are + raise RuntimeError("Hardware encoder did not produce one picture") + if keyframe and not ({19, 20} & set(kinds) and {32, 33, 34}.issubset(kinds)): + raise RuntimeError("Hardware encoder did not produce an independently decodable keyframe") + result = HEVC_AUD + b"".join(unit for kind, unit in units if kind != 35) + if len(result) > MAX_ACCESS_UNIT: + raise RuntimeError("Hardware access unit too large") + return result + + # ANDROID AUTO VIDEO PERFORMANCE GUARDRAIL: Hardware encoding and bounded frame submission avoid CPU stalls and encoder backlog. # Altering this can degrade video smoothness or introduce lag on Android Auto. # Do not change it autonomously; require an explicit user request specifically for this video optimization. class HardwareH264Encoder: backend = "qcom-v4l2" + codec = "h264" + max_width, max_height = MAX_WIDTH, MAX_HEIGHT # level 3.1 baseline is a 720p30 session + codec_options = 0 + required_abi = 2 def __init__(self, width: int, height: int, fps: int = HW_FPS, bitrate_kbps: int = 6000, margin_height: int = 0, library: Path = LIBRARY, rate_control: str = "cbr"): - if not (0 < width <= MAX_WIDTH and 0 < height <= MAX_HEIGHT) or width % 2 or height % 2 or fps != HW_FPS: - raise ValueError("Hardware encoder supports even sizes up to 1280x720 at 30 fps") + if not (0 < width <= self.max_width and 0 < height <= self.max_height) or width % 2 or height % 2 or fps != HW_FPS: + raise ValueError(f"Hardware encoder supports even sizes up to {self.max_width}x{self.max_height} at 30 fps") if margin_height % 4: margin_height = 0 # only chroma-aligned black margins may be skipped self.width, self.height, self.fps = width, height, fps @@ -71,7 +109,7 @@ class HardwareH264Encoder: self.lib = ctypes.CDLL(str(library)) self.lib.starport_encoder_abi.restype = ctypes.c_int self.abi = self.lib.starport_encoder_abi() - if self.abi not in SUPPORTED_ABIS: + if self.abi not in SUPPORTED_ABIS or self.abi < self.required_abi: raise RuntimeError("libstarport_encoder.so ABI mismatch; rebuild") pointer = ctypes.c_void_p encode_args = [pointer, pointer, ctypes.c_size_t, ctypes.c_int, pointer, ctypes.c_size_t, pointer, ctypes.c_size_t] @@ -88,7 +126,7 @@ class HardwareH264Encoder: self.lib.starport_encoder_destroy.restype = None self.error = ctypes.create_string_buffer(512) self.output = ctypes.create_string_buffer(MAX_ACCESS_UNIT) - options = (OPTION_CBR if self.rate_control == "cbr" else 0,) if self.abi >= 3 else () + options = ((OPTION_CBR if self.rate_control == "cbr" else 0) | self.codec_options,) if self.abi >= 3 else () self._create_args = (width, height, fps, int(bitrate_kbps) * 1000, margin_height, *options) self._open() @@ -127,10 +165,16 @@ class HardwareH264Encoder: if size > len(self.output): raise RuntimeError("Hardware access unit too large") # .raw copies the entire 2 MiB capacity, even for a small inter frame. - data = normalize_access_unit(ctypes.string_at(self.output, size), keyframe=force) + data = self.normalize(ctypes.string_at(self.output, size), keyframe=force) self.frame_index += 1 self.last_encode_ms = (time.monotonic() - started) * 1000 - return data, {5, 7, 8}.issubset(nal_types(data)) + return data, self.is_keyframe(data) + + def normalize(self, data: bytes, *, keyframe: bool) -> bytes: + return normalize_access_unit(data, keyframe=keyframe) + + def is_keyframe(self, data: bytes) -> bool: + return {5, 7, 8}.issubset(nal_types(data)) def close(self) -> None: handle, self.handle = self.handle, None @@ -138,6 +182,42 @@ class HardwareH264Encoder: self.lib.starport_encoder_destroy(handle) +class HardwareHevcEncoder(HardwareH264Encoder): + """H.265 for a head unit that offers nothing else (Allow H.265 video). Hardware only: there is no software fallback.""" + backend = "qcom-v4l2-hevc" + codec = "h265" + max_width, max_height = HEVC_MAX_WIDTH, HEVC_MAX_HEIGHT + codec_options = OPTION_HEVC + required_abi = 4 + + def normalize(self, data: bytes, *, keyframe: bool) -> bytes: + return normalize_access_unit_hevc(data, keyframe=keyframe) + + def is_keyframe(self, data: bytes) -> bool: + kinds = set(hevc_nal_kinds(data)) + return bool({19, 20} & kinds) and {32, 33, 34}.issubset(kinds) + + +def create_hevc_encoder(width: int, height: int, *, bitrate_kbps: int, margin_height: int, log, + rate_control: str = "cbr") -> tuple[object, int]: + """Return ``(encoder, fps)`` for an H.265 session. The car was told H.265, so a stand-in codec would send it a stream it + cannot decode: if the hardware encoder cannot open, the session fails with the reason.""" + encoder = None + try: + if not LIBRARY.is_file(): + raise RuntimeError(f"{LIBRARY.name} not built") + encoder = HardwareHevcEncoder(width, height, bitrate_kbps=max(bitrate_kbps, 4000), margin_height=margin_height, + rate_control=rate_control) + encoder.encode_rgba(bytes(width * height * 4), keyframe=True) # exercise the driver and the keyframe contract + except Exception as error: + if encoder is not None: + encoder.close() + raise RuntimeError(f"The car needs H.265 and the hardware encoder could not start it: {error}") from error + log("encoder", backend=encoder.backend, codec=encoder.codec, fps=HW_FPS, abi=encoder.abi, rate_control=encoder.rate_control, + nv12=encoder.supports_nv12) + return encoder, HW_FPS + + # ANDROID AUTO VIDEO PERFORMANCE GUARDRAIL: Backend selection and frame-rate budgets are part of the low-latency video pipeline. # Altering this can degrade video smoothness or introduce lag on Android Auto. # Do not change it autonomously; require an explicit user request specifically for this video optimization. diff --git a/openpilot/starpilot/system/starport/session.py b/openpilot/starpilot/system/starport/session.py index c1002d2e49..9042b765cb 100644 --- a/openpilot/starpilot/system/starport/session.py +++ b/openpilot/starpilot/system/starport/session.py @@ -80,6 +80,7 @@ BLUETOOTH_AUTH_DATA = 0x8003 SENSOR_NIGHT, SENSOR_DRIVING_STATUS = 10, 13 CODEC_H264_BP = 3 +CODEC_H265 = 7 # MediaCodecType VIDEO_H265, offered by some head units instead of H.264 SETUP_STATUS_READY = 2 FOCUS_PROJECTED = 1 FOCUS_NATIVE = 2 @@ -141,6 +142,39 @@ def wire_frame(access_unit: bytes, *, drop_config: bool) -> bytes: return b"".join(units) or access_unit +# H.265 handling is kept apart from the H.264 functions above so the H.264 path stays byte-for-byte what it was. +# A NAL header is two bytes; the type is bits 1-6 of the first (ITU-T H.265 7.3.1.2). +HEVC_PARAMETER_SETS = (32, 33, 34) # VPS, SPS, PPS +HEVC_AUD = 35 + + +def hevc_nal_type(first_byte: int) -> int: + return (first_byte >> 1) & 0x3F + + +def codec_config_hevc(access_unit: bytes) -> bytes: + """The VPS, SPS and PPS NAL units of an H.265 keyframe, as the codec-config buffer carries them.""" + starts = list(START_CODE.finditer(access_unit)) + units = [] + for index, match in enumerate(starts): + end = starts[index + 1].start() if index + 1 < len(starts) else len(access_unit) + if match.end() < end and hevc_nal_type(access_unit[match.end()]) in HEVC_PARAMETER_SETS: + units.append(b"\x00\x00\x00\x01" + access_unit[match.end():end]) + return b"".join(units) + + +def wire_frame_hevc(access_unit: bytes, *, drop_config: bool) -> bytes: + """The H.265 picture NAL units without the access unit delimiter, and without parameter sets once they went separately.""" + starts = list(START_CODE.finditer(access_unit)) + drop = {HEVC_AUD, *HEVC_PARAMETER_SETS} if drop_config else {HEVC_AUD} + units = [] + for index, match in enumerate(starts): + end = starts[index + 1].start() if index + 1 < len(starts) else len(access_unit) + if match.end() < end and hevc_nal_type(access_unit[match.end()]) not in drop: + units.append(b"\x00\x00\x00\x01" + access_unit[match.end():end]) + return b"".join(units) or access_unit + + @dataclass(frozen=True) class VideoMode: channel: int @@ -153,6 +187,7 @@ class VideoMode: content_left: int | None = None content_top: int | None = None density: int = 0 # dpi the head unit reports; 0 when it does not say + codec: int = CODEC_H264_BP @property def content_width(self) -> int: @@ -166,6 +201,7 @@ class VideoMode: return {"channel": self.channel, "config_index": self.config_index, "width": self.width, "height": self.height, "fps": self.fps, "margin_width": self.margin_width, "margin_height": self.margin_height, "density": self.density, + **({"codec": CODEC_NAMES[self.codec]} if self.codec != CODEC_H264_BP else {}), **({"content_left": self.content_left, "content_top": self.content_top} if self.content_left is not None else {})} @@ -188,14 +224,18 @@ def describe_video_configs(channels: list[dict]) -> str: return ", ".join(offered) or "no video" -def choose_video_mode(channels: list[dict]) -> VideoMode: - """Pick a negotiated H.264 mode the software encoder can sustain.""" +def choose_video_mode(channels: list[dict], allow_hevc: bool = False) -> VideoMode: + """Pick a negotiated H.264 mode the software encoder can sustain. + + H.265 is considered only when the owner allows it and the car offered no usable H.264 mode, so a car that works on + H.264 is never changed.""" candidates = [] + hevc_candidates = [] for channel in channels: for index, config in enumerate(channel.get("video_configs", [])): resolution = one(config, 1) codec = one(config, 10, CODEC_H264_BP) - if resolution not in RESOLUTIONS or codec != CODEC_H264_BP: + if resolution not in RESOLUTIONS or codec not in (CODEC_H264_BP, CODEC_H265): continue width, height = RESOLUTIONS[resolution] margin_width, margin_height = int(one(config, 3, 0) or 0), int(one(config, 4, 0) or 0) @@ -215,10 +255,13 @@ def choose_video_mode(channels: list[dict]) -> VideoMode: top_edge + bottom == margin_height and left_edge + right == margin_width): left, top = left_edge, top_edge mode = VideoMode(int(channel["id"]), index, width, height, fps, margin_width, margin_height, left, top, - int(one(config, 5, 0) or 0)) - candidates.append((RESOLUTION_PREFERENCE.index(resolution), fps != 30, index, mode)) + int(one(config, 5, 0) or 0), codec) + (candidates if codec == CODEC_H264_BP else hevc_candidates).append((RESOLUTION_PREFERENCE.index(resolution), fps != 30, index, mode)) + if not candidates and allow_hevc: + candidates = hevc_candidates if not candidates: - raise ValueError(f"Head unit did not advertise a supported H.264 video mode (offered {describe_video_configs(channels)})") + hint = "; this car offers H.265, which can be turned on in Developer > StarPort" if hevc_candidates else "" + raise ValueError(f"Head unit did not advertise a supported H.264 video mode (offered {describe_video_configs(channels)}){hint}") return min(candidates, key=lambda item: item[:3])[3] @@ -631,6 +674,7 @@ class ProjectionSession(Session): self.video_confirmed = False self.input_channel: int | None = None self.max_window = self.MAX_WINDOW # raised by the supervisor for adapters that need the car's full window + self.allow_hevc = False # the owner's Allow H.265 video setting; used only when the car offers no H.264 mode self.phone_services = False # open the car-data and Bluetooth channels like a phone (adapter profile) self.phone_frames = False # send picture NAL units only (adapter profile) self.phone_address = "" # this comma's Bluetooth address, for the pairing request @@ -652,7 +696,7 @@ class ProjectionSession(Session): def start(self, device_name: str, device_brand: str) -> VideoMode: self.channels = self.discover(device_name, device_brand) - self.mode = choose_video_mode(self.channels) + self.mode = choose_video_mode(self.channels, self.allow_hevc) self.open_video() self.open_input() if self.phone_services: @@ -667,7 +711,7 @@ class ProjectionSession(Session): opened = parse_fields(self.wait_for(mode.channel, MSG_CHANNEL_OPEN_RESPONSE)) if signed(one(opened, 1)) != 0: raise ValueError(f"Head unit rejected opening the video channel: {json_fields(opened)}") - self.send(mode.channel, AV_SETUP_REQUEST, field(1, CODEC_H264_BP)) + self.send(mode.channel, AV_SETUP_REQUEST, field(1, mode.codec)) setup = parse_fields(self.wait_for(mode.channel, AV_SETUP_RESPONSE)) window = int(one(setup, 2, 0) or 0) if one(setup, 1) != SETUP_STATUS_READY or window < 1: # the window is capped to MAX_WINDOW below; MIB3 offers 100 @@ -944,13 +988,13 @@ class ProjectionSession(Session): fragments = 0 config = b"" if self.needs_keyframe: - config = codec_config(data) + config = codec_config_hevc(data) if self.mode.codec == CODEC_H265 else codec_config(data) if config: fragments += self.send(self.mode.channel, AV_MEDIA_CODEC_CONFIG, config) if not self.fragment_acks: self.config_ack_slack += 1 if self.phone_frames: - data = wire_frame(data, drop_config=bool(config)) + data = (wire_frame_hevc if self.mode.codec == CODEC_H265 else wire_frame)(data, drop_config=bool(config)) fragments += self.send(self.mode.channel, AV_MEDIA_WITH_TIMESTAMP, struct.pack(">Q", timestamp_us) + data) if self.fragment_acks: self.frame_fragments.append(fragments) diff --git a/openpilot/starpilot/system/starport/supervisor.py b/openpilot/starpilot/system/starport/supervisor.py index 74d286563f..6e7d94c581 100644 --- a/openpilot/starpilot/system/starport/supervisor.py +++ b/openpilot/starpilot/system/starport/supervisor.py @@ -42,7 +42,7 @@ from openpilot.starpilot.system.starport.frame_source import (DEFAULT_PATH as DE from openpilot.starpilot.system.starport.projection_control import DEFAULT_CONTROL_SOCKET, NATIVE_FOCUS from openpilot.starpilot.system.starport.touch import DEFAULT_TOUCH_SOCKET from openpilot.starpilot.system.starport.view import CAR_FRAME_PATH, ViewSource, renderer_available -from openpilot.starpilot.system.starport.session import AuthenticationRejected, PeerRequestedStop, ProjectionSession +from openpilot.starpilot.system.starport.session import CODEC_H265, AuthenticationRejected, PeerRequestedStop, ProjectionSession BACKOFF_SECONDS = (2.0, 4.0, 8.0, 15.0, 30.0) STABLE_SESSION_SECONDS = 30.0 @@ -769,7 +769,7 @@ class Supervisor: paired in Bluetooth settings) becomes the chosen car when it is the only one. Never during a pairing window or session.""" config = self.config if (config["receiver_address"] or config["connection"] != "wireless" or self.car_type() == "adapter" - or self._pairing_active() or self._session_alive() or now - getattr(self, "_adopt_at", -ADOPT_INTERVAL) < ADOPT_INTERVAL): + or not self._projection_enabled() or self._pairing_active() or self._session_alive() or now - getattr(self, "_adopt_at", -ADOPT_INTERVAL) < ADOPT_INTERVAL): if config["receiver_address"]: self._candidates = [] return @@ -1568,6 +1568,7 @@ class Supervisor: tuning = car_profiles.tuning(config) session.max_window = tuning["max_window"] session.phone_frames = tuning["phone_frames"] + session.allow_hevc = bool(config["allow_hevc"]) if tuning["phone_services"]: session.phone_services = True session.phone_address = self._adapter_address() @@ -1583,16 +1584,20 @@ class Supervisor: except (OSError, ValueError, TypeError, KeyError) as error: self.log("screen_profile_error", error=str(error)) - from openpilot.starpilot.system.starport.hw_encoder import create_encoder + from openpilot.starpilot.system.starport.hw_encoder import create_encoder, create_hevc_encoder # ANDROID AUTO VIDEO PERFORMANCE GUARDRAIL: Encoder cadence and pipeline flags are tuned together for Android Auto video. # Altering this can degrade video smoothness or introduce lag on Android Auto. # Do not change it autonomously; require an explicit user request specifically for this video optimization. software_fps = min(SOFTWARE_FPS, config["fps"]) if config["fps"] else SOFTWARE_FPS - encoder, fps = create_encoder(mode.width, mode.height, preference=encoder_preference(config["encoder"]), - bitrate_kbps=config["bitrate_kbps"], - margin_height=mode.margin_height if mode.content_top in (None, mode.margin_height // 2) else 0, - software_fps=software_fps, log=self.log, - rate_control=config["rate_control"]) + margin_height = mode.margin_height if mode.content_top in (None, mode.margin_height // 2) else 0 + if mode.codec == CODEC_H265: # only a car with no H.264 mode, and only with Allow H.265 video on + encoder, fps = create_hevc_encoder(mode.width, mode.height, bitrate_kbps=config["bitrate_kbps"], margin_height=margin_height, + log=self.log, rate_control=config["rate_control"]) + else: + encoder, fps = create_encoder(mode.width, mode.height, preference=encoder_preference(config["encoder"]), + bitrate_kbps=config["bitrate_kbps"], margin_height=margin_height, + software_fps=software_fps, log=self.log, + rate_control=config["rate_control"]) fps = min(fps, mode.fps, config["fps"] or fps) interval = 1.0 / fps flags = (FLAG_NV12 if config["gpu_nv12"] and getattr(encoder, "supports_nv12", False) else 0) | \ diff --git a/openpilot/starpilot/system/starport/tests/test_hevc.py b/openpilot/starpilot/system/starport/tests/test_hevc.py new file mode 100644 index 0000000000..8e4e916447 --- /dev/null +++ b/openpilot/starpilot/system/starport/tests/test_hevc.py @@ -0,0 +1,113 @@ +"""H.265 is an opt-in for a car that offers nothing else; every car with an H.264 mode is chosen exactly as before.""" +import itertools + +import pytest + +from openpilot.starpilot.system.starport import hw_encoder +from openpilot.starpilot.system.starport.hw_encoder import HEVC_AUD, normalize_access_unit_hevc +from openpilot.starpilot.system.starport.session import (CODEC_H264_BP, CODEC_H265, START_CODE, VideoMode, choose_video_mode, + codec_config, codec_config_hevc, wire_frame, wire_frame_hevc) + +SC = b"\x00\x00\x00\x01" + + +def config(resolution, codec, margin_w=0, margin_h=0, fps=2): + return {1: [resolution], 2: [fps], 3: [margin_w], 4: [margin_h], 10: [codec]} + + +def channels(*configs): + return [{"id": 3, "video_configs": list(configs), "display_type": 0}] + + +# What Bugsink showed one "AndroidAuto" unit offering: every mode H.265, none H.264 (enums 8, 7, 6 are portrait). +H265_ONLY = channels(config(8, 7, 288, 1378), config(7, 7, 0, 811), config(6, 7, 0, 541), config(3, 7, 0, 360)) +H264_OFFERS = [ + channels(config(2, 3, 0, 240)), + channels(config(1, 3), config(2, 3, 0, 240), config(3, 3, 0, 360)), + channels(config(3, 3, 0, 360), config(2, 3, 0, 240, fps=1)), + channels(config(1, 3)), +] + + +def test_without_the_setting_an_h265_only_car_is_refused_with_a_hint(): + with pytest.raises(ValueError, match="supported H.264 video mode.*Developer > StarPort"): + choose_video_mode(H265_ONLY) + with pytest.raises(ValueError, match="supported H.264 video mode.*Developer > StarPort"): + choose_video_mode(H265_ONLY, False) + + +def test_with_the_setting_an_h265_only_car_gets_the_1080p_h265_mode_inside_the_known_resolutions(): + mode = choose_video_mode(H265_ONLY, True) + assert (mode.codec, mode.width, mode.height, mode.margin_height) == (CODEC_H265, 1920, 1080, 360) + assert mode.as_dict()["codec"] == "H.265" + + +@pytest.mark.parametrize("offer", H264_OFFERS) +def test_a_car_with_an_h264_mode_is_chosen_identically_whatever_the_setting(offer): + without, with_setting = choose_video_mode(offer), choose_video_mode(offer, True) + assert without == with_setting and without.codec == CODEC_H264_BP + assert "codec" not in without.as_dict() # H.264 reports and screen files are unchanged + + +def test_mixed_offers_never_prefer_h265_over_h264(): + for h264, h265 in itertools.product(H264_OFFERS, [H265_ONLY, channels(config(2, 7, 0, 240))]): + mixed = [{"id": 3, "video_configs": h264[0]["video_configs"] + h265[0]["video_configs"]}] + assert choose_video_mode(mixed, True) == choose_video_mode(h264) + + +def test_h265_prefers_the_smaller_known_resolution_like_h264(): + mode = choose_video_mode(channels(config(3, 7, 0, 360), config(2, 7, 0, 240)), True) + assert (mode.codec, mode.width, mode.height) == (CODEC_H265, 1280, 720) + + +def au(*kinds): + """An Annex B H.265 access unit with the given NAL types.""" + return b"".join(SC + bytes([kind << 1, 1]) + b"\x42" * 6 for kind in kinds) + + +def test_hevc_codec_config_and_wire_frame_use_the_two_byte_header(): + frame = au(35, 32, 33, 34, 19) + assert START_CODE.findall(codec_config_hevc(frame)) == [SC] * 3 + assert b"".join(bytes([kind << 1, 1]) + b"\x42" * 6 for kind in (32, 33, 34)) == codec_config_hevc(frame).replace(SC, b"") + assert wire_frame_hevc(frame, drop_config=True) == SC + bytes([19 << 1, 1]) + b"\x42" * 6 + assert wire_frame_hevc(frame, drop_config=False) == au(32, 33, 34, 19) # the AUD is always dropped + assert codec_config_hevc(au(35, 1)) == b"" + + +def test_h264_functions_are_unchanged_by_the_h265_ones(): + h264 = SC + b"\x09\xf0" + SC + b"\x67" + b"\x01" * 5 + SC + b"\x68" + b"\x02" * 3 + SC + b"\x65" + b"\x03" * 9 + assert codec_config(h264) == SC + b"\x67" + b"\x01" * 5 + SC + b"\x68" + b"\x02" * 3 + assert wire_frame(h264, drop_config=True) == SC + b"\x65" + b"\x03" * 9 + + +def test_hevc_access_units_are_checked_like_the_h264_ones(): + keyframe = normalize_access_unit_hevc(au(32, 33, 34, 20), keyframe=True) + assert keyframe.startswith(HEVC_AUD) and keyframe.count(SC) == 5 + assert normalize_access_unit_hevc(au(35, 1), keyframe=False).startswith(HEVC_AUD) + # The comma's encoder emits two slices per picture; both belong to the same picture. + assert normalize_access_unit_hevc(au(32, 33, 34, 19, 19), keyframe=True).count(SC) == 6 + assert normalize_access_unit_hevc(au(1, 1), keyframe=False).count(SC) == 3 + for bad, key in ((au(32, 33, 34), True), (au(35), False), (au(33, 34, 19), True), (au(32, 33, 34, 1), True), (au(19, 1), False)): + with pytest.raises(RuntimeError): + normalize_access_unit_hevc(bad, keyframe=key) + with pytest.raises(RuntimeError): + normalize_access_unit_hevc(b"not annex b", keyframe=False) + + +def test_the_hevc_encoder_class_only_changes_what_h265_needs(): + h264, hevc = hw_encoder.HardwareH264Encoder, hw_encoder.HardwareHevcEncoder + assert (h264.max_width, h264.max_height, h264.codec_options, h264.required_abi) == (1280, 720, 0, 2) + assert (hevc.max_width, hevc.max_height, hevc.codec_options, hevc.required_abi) == (1920, 1080, hw_encoder.OPTION_HEVC, 4) + assert hw_encoder.OPTION_HEVC & hw_encoder.OPTION_CBR == 0 + + +def test_h265_never_falls_back_to_another_codec(monkeypatch, tmp_path): + monkeypatch.setattr(hw_encoder, "LIBRARY", tmp_path / "missing.so") + events = [] + with pytest.raises(RuntimeError, match="needs H.265 and the hardware encoder could not start it"): + hw_encoder.create_hevc_encoder(1920, 1080, bitrate_kbps=6000, margin_height=360, log=lambda *a, **k: events.append(a)) + assert events == [] # nothing was announced as started + + +def test_video_mode_defaults_to_h264(): + assert VideoMode(3, 0, 1280, 720, 30, 0, 240).codec == CODEC_H264_BP