dvb-tools 9.2.0

Command-line DVB stream analyzer (dump / services / epg / pids / t2mi) over the rust-broadcast crates.
# Changelog

## [Unreleased]

## [9.2.0] - 2026-08-05
Lockstep minor alongside `dvb-conformance` 9.2.0; no functional changes of
this crate's own.

## [9.1.1] - 2026-07-30

### Fixed
- Floor `mpeg-ts` to `0.3.1`. The `^0.3` bucket also contains 0.3.0, which is
  built against `broadcast-common` 8, so a consumer could resolve two
  `broadcast-common` majors into one graph and hit trait-resolution errors
  pointing at this crate's internals (#858).

## [9.1.0] - 2026-07-30
Lockstep release alongside `dvb-conformance` 9.1.0; no functional changes.

## [9.0.0] - 2026-07-27
### Changed (Breaking)
- Lockstep major bump alongside `broadcast-common` 9.0.0, whose `Encrypt::encrypt`
  now takes `&mut self` instead of `&self` (needed so a stateful implementor can
  own a running per-key IV counter — see `broadcast-common`'s own CHANGELOG for
  the full rationale and the migration note for external `impl Encrypt`s).
  `dvb-tools` itself does not implement `Encrypt`/`Decrypt` and has no functional
  or public API change of its own in this release.

## [8.5.0] - 2026-07-21
### Changed
- Widen the internal `mpeg-ts` dependency to `0.3` (issue #663; private
  dependency — no public API change to `dvb-tools`).

## [8.4.0] - 2026-07-03
### Changed
- Rust **edition 2024**; MSRV raised to **1.86**; format-argument modernisation. No functional or API change.

## [8.3.0] - 2026-07-03
### Changed
- Lockstep release with the DVB core crates; no functional changes to `dvb-tools`.

## [8.2.1] — 2026-07-02

### Changed
- Lockstep release tracking `broadcast-common` 8.2.1 (mux-trait documentation). No API/behaviour change to this crate.

## [8.2.0] — 2026-07-02

### Changed
- Lockstep release tracking `broadcast-common` 8.2.0 (new `mux` container-mux
  traits). No API or behavioural change to this crate.

## [8.1.0] — 2026-06-29

### Changed
- Lockstep release. Internal dependency `dvb-common` renamed to `broadcast-common`; no API change.

## [8.0.0] — 2026-06-27

### Changed
- CLI rebuilt on `clap` (derive) per the workspace CLI standard
  (`docs/CLI-STANDARD.md`): auto-generated `--help`/`--version`, per-subcommand
  `--help`, and proper argument validation. Subcommands take a positional
  `<FILE>` plus named flags (`--json`, `--pid`, `--inner`, `--plp`).

## [7.9.0] — 2026-06-22

### Changed

- Lockstep release; no functional changes to this crate.

## [7.8.0] — 2026-06-21

### Added
- `dump` human mode now decodes and prints the descriptor loops of PMT
  (program-info + per-ES), SDT (per-service), and NIT (network + per-TS).
  Descriptors resolve through a registry with the PDS-scoped 0x83
  logical_channel enabled for the EACEM/NorDig `private_data_specifier`s, so
  LCNs show as `LOGICAL_CHANNEL` instead of `UNKNOWN(0x83)`.

## [7.7.1] — 2026-06-21

### Changed
- Lockstep release; no functional changes to this crate.

## [7.7.0] — 2026-06-20

### Changed
- Lockstep release; no functional changes to this crate.

## [7.6.0] — 2026-06-20

### Changed
- Lockstep release; no functional changes to this crate.

## [7.5.0] — 2026-06-19

### Changed
- Lockstep release; no functional changes to this crate.

## [7.4.0] — 2026-06-18

Lockstep release; no functional changes.

## [7.3.0] — 2026-06-17

### Changed
- Lockstep release; no functional changes to this crate.

## [7.2.0] — 2026-06-16

### Fixed
- `services` now resolves logical channel numbers: the NIT walk uses a
  `DescriptorRegistry` with PDS-scoped logical_channel enabled for EACEM/NorDig,
  so 0x83 decodes as `LogicalChannel` instead of `Unknown` (#211).

## [7.1.0] — 2026-06-15

### Changed
- Lockstep release; rebuilt against the dvb-* parser-hardening pass (#207). No
  functional changes.

## [7.0.0] — 2026-06-14

**BREAKING (MSRV 1.75 → 1.81).**

### Changed
- MSRV **1.81**; tracks the breaking library changes (BIOP typing, typed coded
  fields, `#[non_exhaustive]` enums). Stays a std-only application.

## [6.7.0] — 2026-06-14

### Changed
- Lockstep release with the library crates; no functional changes (consumes the
  #204 `name()`/`Display` label convention).

## [6.6.0] — 2026-06-14

Version-lockstep release with the workspace (dvb-t2mi L1-pre/L1-post signalling parser #54; dvb-si BIOP object-carousel layer #64; criterion benchmark suites #62). No changes to this crate.

## [6.5.0] — 2026-06-13

Version-lockstep release with the workspace (#47 T2 emission-time accessors; #50 SSU GroupInfoIndication + data_broadcast_id 0x000A selector; #53 S2Xv2 0x24 extension descriptor). No changes to this crate.

## [6.4.0] — 2026-06-13

Version-lockstep release with the workspace (#158 spec-table drift-guards + spec-fidelity audit; dvb-si PMT section/last-section fields; dvb-bbframe DVB-S2 BUFSTAT ISSY decode). No changes to this crate.

## [6.3.0] — 2026-06-13

### Changed
- `for_each_packet` now drives the shared `dvb_si::ts::TsResync` (188/204-byte
  resync helper) instead of ad-hoc 188-byte chunking (#61); behaviour for
  aligned input is unchanged.

## [6.2.0] — 2026-06-13

### Added
- **`dvb-tools`** (#59) — new published binary crate over the `rust-dvb`
  family. Five subcommands, all driven over aligned 188-byte `.ts` captures
  (no new dependencies — argument parsing stays on `std::env::args`):
  - `dump [--json]` — SI section dump (`SiDemux`-driven, ported from the old
    `si_dump` example).
  - `services` — SDT + NIT service tree with LCNs
    (`SectionSetCollector` + `CompleteSdt`/`CompleteNit`).
  - `epg [--json]` — EPG schedule via `EpgStore`; EIT events with service
    names attached from the SDT (`feed_sdt`).
  - `pids` — per-PID packet counts, sorted by descending packet count,
    with bitrate estimated from the first/last PCR observed.
  - `t2mi [--pid 0xNNN|raw] [--inner] [--plp N]` — T2-MI pump
    (ported from the old `t2mi_dump` example); with `--inner`, chain-unwrap
    to the inner MPEG-TS via `InnerTsRecovery` and write the recovered
    188-byte packets to stdout. `--plp` targets one baseband frame's PLP.