Version bump and changelog for the 1.6.3 sync. All eight crates ship the same version, so the crates with no functional change this cycle say so rather than carrying an empty section.
74 lines
2.8 KiB
TOML
74 lines
2.8 KiB
TOML
[package]
|
|
name = "libfreemkv"
|
|
version = "1.6.3"
|
|
edition = "2024"
|
|
rust-version = "1.97"
|
|
license = "MIT"
|
|
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"]
|
|
# OFF crates.io: libfreemkv git-deps freemkv-unlock (firmware, never published),
|
|
# so libfreemkv itself can only be consumed by git tag. Clients git-tag-pin it.
|
|
publish = false
|
|
|
|
[profile.release]
|
|
lto = "thin"
|
|
codegen-units = 1
|
|
|
|
[dependencies]
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
sha1 = "0.10"
|
|
aes = "0.9"
|
|
# Interim path dep for local cross-repo dev; the release script re-pins this to
|
|
# `{ git = ".../freemkv-unlock", tag = "vX.Y.Z" }` before tagging libfreemkv (so
|
|
# the released tag resolves freemkv-unlock from git, not a sibling path).
|
|
freemkv-unlock = { path = "../freemkv-unlock" }
|
|
rand = "0.10"
|
|
zip = { version = "8", default-features = false, features = ["deflate"] }
|
|
base64 = "0.23"
|
|
# Read-only XML DOM parser (pure Rust, forbid(unsafe_code), entity-expansion
|
|
# bounded). Parses the HD-DVD Advanced-Content playlist `ADV_OBJ/VPLST000.XPL`
|
|
# — untrusted disc bytes — into authoritative titles/clips/chapters. A real
|
|
# parser, not a hand-rolled scanner: the XPL is genuine XML (comments, varied
|
|
# attribute order, self-closing tags).
|
|
roxmltree = "0.20"
|
|
# Trace-level instrumentation for the read/transport path (SgIoTransport::execute
|
|
# and friends). 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
|
|
|