[package]
name = "blip25-mbe"
description = "Research MBE / IMBE / AMBE+2 vocoder family: P25 wire formats, multi-generation codecs, and parametric rate conversion. Educational use; see PATENT_NOTICE.md."
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
readme = "../../README.md"
repository = "https://github.com/openBLIP25/blip25-mbe"
homepage = "https://github.com/openBLIP25/blip25-mbe"
documentation = "https://docs.rs/blip25-mbe"
keywords = ["p25", "mbe", "imbe", "ambe", "vocoder"]
categories = ["multimedia::audio", "encoding"]

[features]
default = []
## Derive `Serialize` / `Deserialize` on the diagnostic types in
## [`vocoder`] (`Rate`, `FrameStats`, `AnalysisStats`,
## `AnalysisOutputKind`, `DecodeStats`) plus [`MbeParams`] and
## [`codecs::mbe_baseline::FrameDisposition`]. Lets a future RPC layer
## (gRPC / protobuf / WS) ship these over the wire without a
## hand-rolled converter. Off by default to keep the core dep-free.
serde = ["dep:serde"]
## Per-stage timing instrumentation in the analysis encoder. Wraps
## each step of `encode_with_trace` with thread-local Instant
## accumulators; disabled by default (zero overhead). When enabled,
## consumers read snapshots via [`codecs::mbe_baseline::analysis::profile`].
## See the `profile_encode` example for a usage walkthrough.
profile = []

[dependencies]
rustfft = { workspace = true }
num-complex = { workspace = true }
serde = { workspace = true, optional = true }

[dev-dependencies]
serde_json = { workspace = true }
