Skip to content

DVB lockstep 12.0.0

Choose a tag to compare

@github-actions github-actions released this 17 Oct 04:01
· 264 commits to main since this release
579ad2c

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::Pid replaces u16 in dvb-si (every PID field, PatEntry::new, PmtStream::new, ...), dvb-t2mi (T2miPump::new, InnerTsRecovery::{new,new_for_plp}) and dvb-conformance (ConformanceEvent::pid is Option<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 with new() and assign fields.
  • Serializers reject over-range values (Error::FieldOverflow) instead of masking them (about 220 sites in dvb-si).
  • EN 300 468 V1.20.1: the 2038 MJD wrap rule for every time field, CellCenter -> CellCentre, typed AudioRenderingIndication.
  • New typed coverage in dvb-si: the Rec. ITU-T H.222.0 (08/2023) descriptors and sections including the MPEG-2 Extension_descriptor and 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_length of an individual-addressing function() counts the 2-byte tag+length header as well as the body (it used to be the body length, which made a real capture's 0x21 packets fail to parse); functions 0x00-0x06 (TS 101 191) are typed; a tag/body mismatch is a serialize error; new Error::{InvalidFunctionLength, FunctionTagBodyMismatch}; InnerTsRecovery::plps_seen().
  • dvb-bbframe: Bbheader::serialize() returns Result.
  • dvb-tools: t2mi --inner requires --plp on a multi-PLP capture; t2mi --pid rejects values above 0x1FFF; streaming reads (19 MB peak on a 152 MB capture); dump --json gains typed reserved* keys, "trailing": [] and a typed 0x3F body, so a consumer that rejects unknown keys must be updated.

Behaviour changes that the compiler will not flag

  • dvb-si: table_ids 0x04-0x06, 0x08 and 0x09 have typed parsers and a malformed section returns Err (it used to be Ok(Unknown)); a malformed typed Extension_descriptor (0x3F) body fails the whole descriptor; a NIT/BAT whose transport_stream_loop_length is shorter than the bytes before the CRC, and a SAT body with bytes after its last entry, are rejected; AC-3 reserved_flags now defaults to 0000; MJD dates before 1948-08-05 no longer decode.
  • dvb-t2mi: packets built by an older version carry the body-length function_length and will not parse the same way.
  • Serialize::to_bytes is gone from broadcast-common 10; use try_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