diff --git a/CHANGELOG.md b/CHANGELOG.md index 269eca5..ff9ba84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## 0.10.10 (2026-04-18) + +### Dual-layer disc fix +- **UDF extent allocation** — use actual UDF allocation descriptors (`file_extents()`) instead of assuming m2ts files are contiguous from `file_start_lba`. Dual-layer UHD discs split large files across many extents (~1 GB each). The old single-extent assumption truncated rips at ~37% on affected discs. +- **Read error propagation** — `fill_extents()` returns `io::Result` so SCSI read errors propagate to the caller instead of being silently treated as EOF. + +## 0.10.9 (2026-04-17) + +### Fast disc identification +- **Disc::identify()** — reads UDF filesystem only (name, format, layers, encrypted). ~3s on USB vs 18s for full scan. No AACS handshake or playlist parsing. +- **KEYDB path fix** — added `~/.config/freemkv/keydb.cfg` to search paths. Fixes silent rip hang when KEYDB exists but isn't found by `resolve_keydb()`. + +## 0.10.8 (2026-04-17) + +### Buffered UDF reads +- **BufferedSectorReader** — prefetches batch sectors on single-sector reads. USB drives have ~500ms per SCSI command; this eliminates scan hangs. +- **Metadata partition pre-read** — loads entire UDF metadata partition into memory after initial parse. +- Scan time reduced from 10+ minutes to ~18 seconds on USB. + ## 0.10.7 (2026-04-17) ### DiscStream::new() diff --git a/Cargo.toml b/Cargo.toml index 6565f30..96ddc00 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "libfreemkv" -version = "0.10.9" +version = "0.10.10" edition = "2021" rust-version = "1.86" license = "AGPL-3.0-only" diff --git a/FEATURES.md b/FEATURES.md index 121580a..fc02d97 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -1,6 +1,6 @@ # libfreemkv — Feature List -## v0.10.4 (current) +## v0.10.10 (current) ### Done - [x] Drive access: open, identify, unlock, firmware upload, speed calibration, eject