Update README and CHANGELOG for v0.5.0
- 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
This commit is contained in:
@@ -1,5 +1,32 @@
|
|||||||
# Changelog
|
# 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)
|
## 0.4.0 (2026-04-07)
|
||||||
|
|
||||||
### Labels — complete rewrite
|
### Labels — complete rewrite
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
Rust library for 4K UHD / Blu-ray optical drives. Drive access, disc scanning, stream labels, AACS decryption, KEYDB updates, and content reading in one crate. Bundled drive profiles — no external files needed.
|
Rust library for 4K UHD / Blu-ray optical drives. Drive access, disc scanning, stream labels, AACS decryption, KEYDB updates, and content reading in one crate. Bundled drive profiles — no external files needed.
|
||||||
|
|
||||||
|
**12-23 MB/s** read speeds on BD. Full LibreDrive init: unlock, firmware upload, speed calibration — all from pure Rust.
|
||||||
|
|
||||||
Multi-lingual by design — the library outputs structured data and numeric error codes, never English text. Build any UI or localization on top.
|
Multi-lingual by design — the library outputs structured data and numeric error codes, never English text. Build any UI or localization on top.
|
||||||
|
|
||||||
**[API Documentation](https://docs.rs/libfreemkv)** · **[Technical Docs](docs/)**
|
**[API Documentation](https://docs.rs/libfreemkv)** · **[Technical Docs](docs/)**
|
||||||
@@ -16,7 +18,7 @@ Part of the [freemkv](https://github.com/freemkv) project.
|
|||||||
|
|
||||||
```toml
|
```toml
|
||||||
[dependencies]
|
[dependencies]
|
||||||
libfreemkv = "0.4"
|
libfreemkv = "0.5"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
@@ -44,12 +46,13 @@ while let Some(unit) = reader.read_unit()? {
|
|||||||
|
|
||||||
## What It Does
|
## What It Does
|
||||||
|
|
||||||
- **Drive access** — open, identify, unlock, eject
|
- **Drive access** — open, identify, unlock, firmware upload, speed calibration, eject
|
||||||
|
- **12-23 MB/s reads** — auto-detects kernel transfer limits, full disc speed
|
||||||
- **Disc scanning** — UDF 2.50 filesystem, MPLS playlists, CLPI clip info
|
- **Disc scanning** — UDF 2.50 filesystem, MPLS playlists, CLPI clip info
|
||||||
- **Stream labels** — 5 BD-J format parsers (Paramount, Criterion, Pixelogic, CTRM, Deluxe)
|
- **Stream labels** — 5 BD-J format parsers (Paramount, Criterion, Pixelogic, CTRM, Deluxe)
|
||||||
- **AACS decryption** — transparent key resolution and content decrypt (1.0, 2.0 in progress)
|
- **AACS decryption** — transparent key resolution and content decrypt (1.0, 2.0 in progress)
|
||||||
- **KEYDB updates** — download, verify, save from any HTTP URL (zero deps, raw TCP)
|
- **KEYDB updates** — download, verify, save from any HTTP URL (zero deps, raw TCP)
|
||||||
- **Content reading** — sector reads with automatic decryption
|
- **Content reading** — adaptive batch reads with automatic decryption and error recovery
|
||||||
|
|
||||||
AACS decryption requires a KEYDB.cfg file. If available at `~/.config/aacs/KEYDB.cfg` or passed via `ScanOptions`, the library handles everything — handshake, key derivation, and per-sector decryption — without the application needing to know anything about encryption.
|
AACS decryption requires a KEYDB.cfg file. If available at `~/.config/aacs/KEYDB.cfg` or passed via `ScanOptions`, the library handles everything — handshake, key derivation, and per-sector decryption — without the application needing to know anything about encryption.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user