Library-wide review-and-fix pass: tightened AACS keydb/handshake/variant handling and trailing-partial-unit policy, corrected MPLS mark offset and added UDF allocation bounds, hardened the mux/codec framing and M2TS paths, guarded SCSI READ CAPACITY short transfers and unified error mapping, added overflow guards on untrusted disc input, and made prefetch shutdown deterministic. Release profile now builds with thin LTO + single codegen unit.
67 lines
2.1 KiB
TOML
67 lines
2.1 KiB
TOML
[package]
|
|
name = "libfreemkv"
|
|
version = "0.31.0"
|
|
edition = "2024"
|
|
rust-version = "1.86"
|
|
license = "AGPL-3.0-only"
|
|
description = "Open source raw disc access library for optical drives"
|
|
repository = "https://github.com/freemkv/libfreemkv"
|
|
keywords = ["bluray", "uhd", "optical", "scsi", "disc"]
|
|
categories = ["hardware-support", "multimedia"]
|
|
# Keep internal AI-instruction / private notes out of the published crate.
|
|
exclude = ["CLAUDE.md"]
|
|
|
|
[profile.release]
|
|
lto = "thin"
|
|
codegen-units = 1
|
|
|
|
[dependencies]
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
sha1 = "0.10"
|
|
sha2 = "0.10"
|
|
aes = "0.8"
|
|
cbc = "0.1"
|
|
flate2 = "1"
|
|
num-bigint = "0.4"
|
|
num-traits = "0.2"
|
|
num-integer = "0.1"
|
|
rand = "0.8"
|
|
cmac = "0.7"
|
|
zip = { version = "2", default-features = false, features = ["deflate"] }
|
|
base64 = "0.22.1"
|
|
# Trace-level instrumentation for Disc::copy + SgIoTransport::execute. Permitted
|
|
# under CLAUDE.md ("Acceptable strings: debug/trace logging"). Consumers (autorip)
|
|
# wire a tracing subscriber and pipe events into the JSONL debug log.
|
|
tracing = "0.1"
|
|
# Bounded MPSC channel with kernel-wakeup send_timeout. Used by `io::pipeline`
|
|
# so the halt-aware send/finish loops can BLOCK on consumer drain instead of
|
|
# polling — the 50 ms poll cadence of the previous mpsc-based impl capped mux
|
|
# throughput at ~1 MB/s (0.21.7).
|
|
crossbeam-channel = "0.5"
|
|
# Persistent work-stealing thread pool for parallel AACS unit
|
|
# decryption. Per-call std::thread::scope spawned fresh OS threads
|
|
# and that overhead dominated for typical batch sizes (60 units).
|
|
# rayon's global pool initialises once on first use.
|
|
rayon = "1"
|
|
# SIMD-accelerated bytestring search. Drives the HEVC/H.264 start-code
|
|
# scan in `mux::codec::h264::find_start_code` — naive byte-by-byte
|
|
# walk is ~500 MB/s single-thread on x86_64; memchr's vectorised
|
|
# `memmem::find` for the 3-byte `00 00 01` needle hits ~5 GB/s on
|
|
# AVX2-capable hosts.
|
|
memchr = "2"
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies]
|
|
libc = "0.2"
|
|
|
|
[target.'cfg(target_os = "macos")'.dependencies]
|
|
libc = "0.2"
|
|
|
|
[dev-dependencies]
|
|
tempfile = "3"
|
|
|
|
[[bench]]
|
|
name = "sgio_read"
|
|
harness = false
|
|
|