- 12-23 MB/s read speeds, kernel transfer limit auto-detection - Full custom firmware init pipeline (all 10 handlers) - MPLS parser fixes (PGS language offset, secondary streams) - 206 profiles with full per-drive data
64 lines
3.3 KiB
Markdown
64 lines
3.3 KiB
Markdown
# Changelog
|
|
|
|
## 0.5.0 (2026-04-09)
|
|
|
|
### Read pipeline — 5x speed improvement
|
|
|
|
- **Kernel transfer limit detection**: auto-detect `max_hw_sectors_kb` via sysfs, resolve sg→block device. Previously hardcoded to 510 sectors (1MB) which exceeded the 120KB kernel limit, causing all reads to error and fall back to 6KB reads at 4.8 MB/s. Now auto-tunes to 48 sectors (96KB) or whatever the device supports.
|
|
- **Result: 12.5 MB/s sustained, 23 MB/s peak** (was 4.8 MB/s)
|
|
|
|
### LibreDrive — full init pipeline
|
|
|
|
- **All 10 ARM handlers translated**: unlock, firmware upload (A: WRITE_BUFFER, B: MODE SELECT), calibrate (256 zones), register reads, status, probe, set_read_speed, keepalive, timing
|
|
- **Cold boot firmware upload**: WRITE_BUFFER 1888B (A variant) or MODE SELECT 2496B (B variant) proven on hardware
|
|
- **Speed calibration**: 256+ disc surface probes, 64-entry speed table, triple SET_CD_SPEED
|
|
- **Platform trait locked down**: `pub(crate)`, 3 methods only (init, set_read_speed, is_ready)
|
|
- **Init guard**: prevents double-init, signature mismatch aborts early
|
|
|
|
### MPLS parser fixes
|
|
|
|
- **PGS in audio slots**: subtitle language read at correct offset (was truncated: "ng " → "eng")
|
|
- **Secondary PG entries**: n_pip_pg loop added for correct STN position tracking
|
|
- **Secondary stream types**: stream_type 5 (sec audio), 6 (sec video), 7 (DV EL) attribute parsing
|
|
- **Empty stream filter**: coding_type 0x00 entries (padding) no longer appear as "Unknown(0)"
|
|
|
|
### Profiles
|
|
|
|
- **206 profiles with full per-drive data**: ld_microcode (base64), all CDBs, speed tables, signatures
|
|
- **Automated pipeline**: `sdf_unpack --profiles` → profiles.json (no manual merging)
|
|
|
|
## 0.4.0 (2026-04-07)
|
|
|
|
### Labels — complete rewrite
|
|
|
|
- **Detect-then-parse architecture**: each BD-J authoring format has its own parser module with `detect()` and `parse()` functions. Drop in a new parser with one line in the registry.
|
|
- **5 format parsers**: Paramount (`playlists.xml`), Criterion (`streamproperties.xml`), Pixelogic (`bluray_project.bin`), Warner CTRM (`menu_base.prop` / `language_streams.txt`), shared label vocabulary (`vocab.rs`)
|
|
- **Raw disc data principle**: label data passes through as-is from disc. Only BD-standard codec identifiers (MLP, AC3, DTS) are mapped to display names. Unknown authoring tool codes (csp, eda, cf) pass through raw.
|
|
- **`variant` field**: replaces `region` — language dialect codes from authoring tools, not BD spec regions
|
|
- Removed: old `jar` module (superseded by labels)
|
|
- Removed: dead label apply functions from disc.rs
|
|
|
|
### Drive
|
|
|
|
- **`DriveSession::eject()`**: sends PREVENT ALLOW MEDIUM REMOVAL then START STOP UNIT. Works reliably after raw mode unlock.
|
|
- **`DiscRegion` enum**: Free, BluRay(A/B/C), Dvd(1-8). UHD always region-free.
|
|
|
|
### Capture
|
|
|
|
- **Fixed sector range collection**: captures ALL files on disc (only skips STREAM/ video files and >50MB). Previously skipped BACKUP/, DUPLICATE/, and files >10MB which missed JAR content.
|
|
|
|
## 0.3.1
|
|
|
|
- Labels module: 4 disc file parsers for stream labels
|
|
- Simplified labels API
|
|
|
|
## 0.3.0
|
|
|
|
- Initial public release
|
|
- SCSI transport (Linux SG_IO, macOS IOKit)
|
|
- UDF 2.50 filesystem reader
|
|
- MPLS/CLPI parsers with full STN support
|
|
- Drive identification + profile matching
|
|
- 206 bundled drive profiles
|
|
- AACS 1.0 decryption (VUK + unit keys)
|