changelog: 1.6.0 section (layering API, mux fixes, engine relocation, stream selection); date 1.5.2
This commit is contained in:
+51
-1
@@ -1,6 +1,56 @@
|
||||
# Changelog
|
||||
|
||||
## [1.5.2] — UNRELEASED
|
||||
## [1.6.0] — UNRELEASED
|
||||
|
||||
### Added
|
||||
|
||||
- **High-level orchestration API — a single mux driver and a disc session.**
|
||||
`mux_stream` drives the whole read → decrypt → demux → write pipeline for any
|
||||
source (`MuxInput::Url` / `Iso` / `Session` / `Live`), so consumers stop
|
||||
hand-rolling the frame pump. `DiscSession` hoists drive open + SCSI bring-up +
|
||||
scan + key resolution behind one type; `scan_iso` does the same for a
|
||||
file-backed ISO; `resolve_keys` / `resolve_keys_for` resolve base AACS keys.
|
||||
These let the CLI and autorip shrink to thin front-ends (and back the new
|
||||
`freemkv-engine` crate).
|
||||
- **Per-title stream selection (`StreamSelection`).** A pure primitive that
|
||||
prunes a `DiscTitle`'s audio/subtitle streams to a chosen set of PIDs (video
|
||||
is always kept) before the mux builds its demux state — so track headers,
|
||||
`codec_privates`, and frame routing all follow the pruned list, with no
|
||||
demux-internal filter. Carried on `MuxOptions.selection` /
|
||||
`InputOptions.selection` (both default to keep-everything, a no-op).
|
||||
Languages are the caller's concern; the library speaks PIDs.
|
||||
- `DiscTitle::audio_streams()` / `subtitle_streams()` / `video_streams()` —
|
||||
typed iterators over each stream class.
|
||||
- `MuxOptions` gains a per-call write-pipeline `send_deadline` and derives
|
||||
`Default`.
|
||||
|
||||
### Changed
|
||||
|
||||
- **The recovery strategy moved to the new `freemkv-engine` crate.** Sweep,
|
||||
patch, the retry-decision state machine, mapfile bookkeeping, and damage
|
||||
classification are freemkv's specific recovery *philosophy*, not disc-access
|
||||
primitives — they now live in `freemkv-engine`, which composes libfreemkv's
|
||||
public API. The library keeps the raw single-shot read, SCSI-sense-fact
|
||||
translation (`SenseFamily`, now in `scsi`), decrypt, and the mux highway.
|
||||
- Small deliberate `pub` promotions to support the engine as an external
|
||||
consumer: `Disc::resolve_content_key_map` / `encrypted_content_ranges`,
|
||||
`io::WritebackFile`, `drive::extract_scsi_context`, `disc::locate_ranges`.
|
||||
- New typed error classifiers re-exported at the crate root — `is_halt`,
|
||||
`is_skippable_title_stub`, `is_disc_level_no_key` — and a new error variant
|
||||
`SelectionPidUnknown` (E6014).
|
||||
|
||||
### Fixed
|
||||
|
||||
- **Mux correctness pass** (the `v1.4.0..HEAD` 10-phase audit): DTS core-header
|
||||
false-drops that dropped good DTS frames; the TrueHD channel-correction probe
|
||||
now runs correctly on AACS discs (7.1/Atmos no longer understated as 5.1);
|
||||
an FMTS phase-probe read fault is distinguished from a wrong key; multi-CPS
|
||||
and orphan-clip keying; the AACS key map is now a *positive* map (a sector
|
||||
with no key passes through rather than failing), with fail-loud on genuinely
|
||||
unresolvable keys; a user Stop mid-read is reported as `completed = false`
|
||||
(a stop is not a failure), not a spurious error.
|
||||
|
||||
## [1.5.2] — 2026-07-22
|
||||
|
||||
### Fixed
|
||||
|
||||
|
||||
Reference in New Issue
Block a user