4.5 KiB
4.5 KiB
Changelog
0.6.0 (2026-04-10)
API improvements
open()works on all drives — no profile match required. Unknown drives can scan, read BD/DVD at OEM speed.init()is optional and adds features (riplock removal, UHD reads, speed control).has_profile()— check if unlock parameters are available for this drivefind_drives()— returns all optical drives, not just profile-matched onesraw_gc_010conDriveId— raw GET_CONFIG 010C response bytes for profile sharing
AACS 2.0
- SCSI handshake wired end-to-end — ECDH key agreement, real Volume ID from drive, read data key for bus decryption
- Bus decryption active — UHD discs with bus encryption now decrypted transparently
- VUK derivation from Media Key + VID — works for discs not in KEYDB (processing key + device key paths)
MKV muxer
- 15 new files — EBML writer, TS demuxer, stream assembly pipeline
- Codec parsers — H.264, HEVC, AC-3, DTS, TrueHD, PGS, VC-1
MkvStream— builder pattern, wraps anyimpl Write, configurable lookahead buffer
Cleanup
- Removed orphaned
jar.rs(342 lines) — replaced bylabels/module - Error refactor: 40+ sites converted from English strings to typed error codes
0.5.0 (2026-04-09)
Read pipeline — 5x speed improvement
- Kernel transfer limit detection: auto-detect
max_hw_sectors_kbvia 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()andparse()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.
variantfield: replacesregion— language dialect codes from authoring tools, not BD spec regions- Removed: old
jarmodule (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.DiscRegionenum: 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)