Repository navigation
DVB lockstep 12.0.0
v12.0.0
Released 2026-10-17.
Lockstep major (dvb-si, dvb-t2mi, dvb-bbframe, dvb-conformance, dvb-tools), 11.1.0 -> 12.0.0. dvb-si brings EN 300 468 up to V1.20.1, preserves every reserved / reserved_future_use bit of every table and descriptor in typed fields (a real sender's section re-serializes byte-identically, CRC recomputed), types every PID as mpeg_ts::pid::Pid, and makes serializers reject values wider than their wire field (fit_mask, about 220 sites) instead of silently masking them. dvb-t2mi fixes the function_length framing of individual-addressing packets and types functions 0x00-0x06; dvb-bbframe's Bbheader::serialize() returns Result; dvb-conformance reports typed PIDs; dvb-tools changes t2mi --inner and its dump --json schema.
Read together with the wave overview (2026-10-wave-overview.md): broadcast-common moves 9 -> 10 in this same wave, so all five crates require broadcast-common 10, and dvb-si, dvb-t2mi (optional ts feature), dvb-conformance and dvb-tools also require mpeg-ts 0.6 (dvb-bbframe does not depend on mpeg-ts). broadcast-common-v10.0.0 and mpeg-ts-v0.6.0 must be live on crates.io before this tag is pushed.
Highlights
- Typed PIDs across the family:
mpeg_ts::pid::Pidreplacesu16indvb-si(every PID field,PatEntry::new,PmtStream::new, ...),dvb-t2mi(T2miPump::new,InnerTsRecovery::{new,new_for_plp}) anddvb-conformance(ConformanceEvent::pidisOption<Pid>; serde output is unchanged). - Reserved bits preserved in typed fields for every table and descriptor in
dvb-si: real-sender sections re-serialize byte-identically (CRC recomputed). Table and descriptor structs are#[non_exhaustive]: build them withnew()and assign fields. - Serializers reject over-range values (
Error::FieldOverflow) instead of masking them (about 220 sites indvb-si). - EN 300 468 V1.20.1: the 2038 MJD wrap rule for every time field,
CellCenter->CellCentre, typedAudioRenderingIndication. - New typed coverage in
dvb-si: the Rec. ITU-T H.222.0 (08/2023) descriptors and sections including the MPEG-2Extension_descriptorand MPEG-H 3D audio; the AIT/MHP and DSM-CC data-carousel descriptor families; INT, UNT and RNT descriptors in their own tag namespaces (these loops used to be decoded in the SI tag space and so mis-decoded); AVS2/AVS3 video and audio, China closed caption (GY/T 270-2013), T/UWA AVS3 video, and GY/T 422 multi-audio. dvb-t2mi:function_lengthof an individual-addressingfunction()counts the 2-byte tag+length header as well as the body (it used to be the body length, which made a real capture's0x21packets fail to parse); functions0x00-0x06(TS 101 191) are typed; a tag/body mismatch is a serialize error; newError::{InvalidFunctionLength, FunctionTagBodyMismatch};InnerTsRecovery::plps_seen().dvb-bbframe:Bbheader::serialize()returnsResult.dvb-tools:t2mi --innerrequires--plpon a multi-PLP capture;t2mi --pidrejects values above0x1FFF; streaming reads (19 MB peak on a 152 MB capture);dump --jsongains typedreserved*keys,"trailing": []and a typed0x3Fbody, so a consumer that rejects unknown keys must be updated.
Behaviour changes that the compiler will not flag
dvb-si: table_ids0x04-0x06,0x08and0x09have typed parsers and a malformed section returnsErr(it used to beOk(Unknown)); a malformed typedExtension_descriptor(0x3F) body fails the whole descriptor; a NIT/BAT whosetransport_stream_loop_lengthis shorter than the bytes before the CRC, and a SAT body with bytes after its last entry, are rejected; AC-3reserved_flagsnow defaults to0000; MJD dates before 1948-08-05 no longer decode.dvb-t2mi: packets built by an older version carry the body-lengthfunction_lengthand will not parse the same way.Serialize::to_bytesis gone frombroadcast-common10; usetry_to_bytes.
Crate versions
| Crate | Version |
|---|---|
dvb-si |
12.0.0 |
dvb-t2mi |
12.0.0 |
dvb-bbframe |
12.0.0 |
dvb-conformance |
12.0.0 |
dvb-tools |
12.0.0 |
Migration
See the per-crate notes: dvb-si 12.0.0, dvb-t2mi 12.0.0, dvb-bbframe 12.0.0, dvb-conformance 12.0.0, dvb-tools 12.0.0. Downstream summary: docs/migration-notes-downstream.md.
Companion releases (independent tags, same wave)
| Crate | From | To |
|---|---|---|
atsc3-route |
0.2.0 | 0.3.0 |
broadcast-auth |
0.4.0 | 0.5.0 |
broadcast-common |
9.4.0 | 10.0.0 |
broadcast-hls |
0.3.1 | 0.4.0 |
broadcast-loudness |
0.4.0 | 0.5.0 |
caption-convert |
0.2.0 | 0.3.0 |
cc-data |
0.6.0 | 0.7.0 |
compliance-probe |
0.3.0 | 0.4.0 |
container-probe |
0.1.1 | 0.2.0 |
dvb-ci |
0.9.1 | 0.10.0 |
dvb-ci-runtime |
0.17.2 | 0.18.0 |
dvb-csa |
0.3.1 | 0.4.0 |
dvb-mabr |
0.2.0 | 0.3.0 |
dvb-simulcrypt |
0.6.0 | 0.7.0 |
dvb-stream |
0.6.0 | 0.7.0 |
dvb-subtitle |
0.5.0 | 0.6.0 |
dvb-vbi |
0.4.2 | 0.5.0 |
hls-runtime |
0.8.0 | 0.9.0 |
media-doctor |
0.10.0 | 0.11.0 |
media-plane |
0.6.0 | 0.7.0 |
mp4-emsg |
0.4.1 | 0.5.0 |
mpeg-pes |
0.5.0 | 0.6.0 |
mpeg-ps |
0.5.0 | 0.6.0 |
mpeg-ts |
0.5.0 | 0.6.0 |
multimux |
0.12.0 | 0.13.0 |
multimux-cli |
0.10.0 | 0.11.0 |
playout-runtime |
0.2.1 | 0.3.0 |
rdd29 |
0.4.0 | 0.5.0 |
rist-runtime |
0.3.0 | 0.4.0 |
rmt-flute |
0.6.0 | 0.7.0 |
rtcp-packet |
0.5.0 | 0.6.0 |
rtmp-runtime |
0.7.2 | 0.8.0 |
rtp-packet |
0.4.0 | 0.5.0 |
rtsp-runtime |
0.7.1 | 0.8.0 |
scte104 |
0.5.0 | 0.6.0 |
scte35-splice |
3.0.1 | 4.0.0 |
srt-runtime |
0.5.0 | 0.6.0 |
ssai-runtime |
0.2.1 | 0.3.0 |
st12-1 |
0.3.1 | 0.4.0 |
st2022 |
0.1.0 | 0.2.0 |
st291 |
0.4.1 | 0.5.0 |
st337 |
0.3.1 | 0.4.0 |
st377-1 |
0.4.0 | 0.5.0 |
timed-metadata |
0.6.1 | 0.7.0 |
transmux |
0.26.0 | 0.27.0 |
ts-fix |
0.6.0 | 0.7.0 |
ttml-subtitle |
0.3.0 | 0.4.0 |
ule |
0.4.1 | 0.5.0 |
webrtc-runtime |
0.3.0 | 0.4.0 |