OpenJOC is an independent, clean-room E-AC-3 JOC decoder and spatial renderer written in Rust. It decodes supported E-AC-3/JOC input, reconstructs carrier-local object signals, and renders speaker or binaural output through one platform-neutral engine.
Download the latest release. OpenJOC is not affiliated with, endorsed by, or sponsored by Dolby Laboratories.
Read the OpenJOC documentation site · 阅读简体中文文档
- E-AC-3 JOC decoding with bounded reconstruction;
- supported speaker presets from
2.0through22.2and custom geometry up to 64 output channels; - two-channel virtual-speaker binaural rendering with the bundled SADIE II D1 HRTF or a supported local SOFA file;
- reconstructed ADM BWF interoperability output with decoded JOC/OAMD binding within a documented profile;
- Rust and versioned C ABI embedding surfaces;
- project-provided FFmpeg, GStreamer, mpv, and Windows DirectShow/LAV integrations.
Read the capability matrix for the evidence boundary behind each claim.
Build or download OpenJOC, then render a JOC programme:
openjoc render-joc input.m4a --layout 7.1.4 --output output.wav
openjoc render-joc input.m4a --binaural --output headphones.wav
openjoc export-adm input.m4a --output reconstructed.wav
openjoc validate-adm reconstructed.wavUse openjoc inspect input.ec3 to inspect a carrier before rendering. The quick-start guide covers the first render and points to the detailed output contracts.
For custom geometry, use --layout-file LAYOUT.json; the documented limit is 64 output channels.
The optional Windows package provides an isolated OpenJOC-enabled LAV Audio Decoder. It installs beside stock LAV and does not change PotPlayer automatically:
- Extract the package from the OpenJOC releases page.
- Run
install.bat, then requireverify.batto report PASS. - In PotPlayer, add LAV Audio Decoder (OpenJOC) in Filter Control → Filter Priority (Overall) and set it to Prefer.
The Windows LAV / PotPlayer guide documents the seven fixed PCM policies, passthrough behavior, rollback, and hardware boundary.
Reconstructed ADM is an interoperability-oriented representation of the decoded JOC object scene. It is not recovery of the original authored Atmos master. OpenJOC does not recover original authoring identity, source-stem PCM, unquantized automation, Dolby authoring provenance, or a lossless JOC-to-ADM round trip.
The decoded Objects vs authored Objects page explains the identity boundary. The renderer-equivalence limitation explains why a generic ADM renderer is not guaranteed to localize exactly like native JOC playback.
- Rust API — serial
OpenJocSessionlifecycle and owned interleavedf32output. - C ABI — opaque handles, bounded stream decoding, custom geometry, and panic containment.
- Integration overview — current FFmpeg, GStreamer, mpv, player-bundle, and Windows contracts.
Use the Rust toolchain declared in Cargo.toml:
cargo build -p openjoc-cli --release --locked
./target/release/openjoc --versionContributors should follow CONTRIBUTING.md and run the workspace quality gates before committing.
OpenJOC is usable today, but several research and validation problems remain open. Contributions are especially welcome around native-renderer equivalence, reconstructed-PCM headroom, and physical multichannel hardware validation.
See Open Problems & Contribution Opportunities before starting work on codec or renderer semantics. For difficult research, starting a Discussion first is recommended so work does not repeat an already investigated path.
OpenJOC core code is licensed under Apache-2.0. Integration bundles may include components under additional terms; see THIRD_PARTY_NOTICES.md and package-specific notices. Dolby, Dolby Atmos, SADIE, FFmpeg, GStreamer, mpv, LAV Filters, PotPlayer, Windows, and related names are marks of their respective owners.
