Enable Atmos 7.1 is a small, version-locked Rust utility that restores the retained flat-7.1 Atmos path in two tested Windows encoder binaries:
- Dolby Encoding Engine 5.2.1-5994839
dee_audio_filter_ddp_atmos.dll; - Dolby Media Encoder 3.7.0
dee_ddpjoc_encoder.exe, whose bundled backend identifies itself as DEE5.7.2.aec4fa9c-master.
The utility chooses the profile from the input's complete SHA-256, not its file name. The primary release is a native Windows x64 command-line executable and does not require Python.
This repository contains no Dolby binaries, engine payloads, or license files. It only records the patching logic, expected bytes, known hashes, and an independent Python reference implementation.
In this exact DEE 5.2.1 build, the public Blu-ray Atmos configuration is:
<encoding_backend>atmosprocessor</encoding_backend>
<encoder_mode>bluray</encoder_mode>
That route can produce 5.1.2 Atmos, but it provides no XML or command-line
selection for a flat L R C LFE Ls Rs Lb Rb JOC presentation. This is more
than a missing layout label: the current public workflow actually encodes the
extra pair as top channels.
Flat 7.1 Atmos nevertheless existed historically. A 2016 Dolby Atmos Blu-ray
demo disc contains an E-AC-3 JOC presentation reported as
L R C LFE Ls Rs Lb Rb.
The Dolby Professional Support thread Issues with channel layout when encoding Dolby Atmos documents the same discrepancy in current Dolby Media Encoder versions:
- an Atmos Master encoded as Dolby Digital Plus for Blu-ray becomes the
5.X + 2layout with a top pair; - the historical Dolby demo disc contains the requested
7.XJOC layout; - Dolby staff explain that an Atmos Master input will always use the top-channel organization in the current workflow, with the decoder rendering the rear surrounds from JOC/OAMD metadata;
- the separately mentioned Blu-ray 7.1 option uses channel-based input, so it must not be treated as proof that current tools can encode flat 7.1 Atmos.
The patch therefore asks a specific question: was the legacy flat-7.1 JOC encoder path deleted, or merely made unreachable from the public interface?
Static analysis shows that, after XML selects Blu-ray, the matching DEE
dee_audio_filter_ddp_atmos.dll constructs a private layout integer. This
repository calls it the internal layout mode; it is not the XML
encoder_mode. The wrapper writes mode 19, while the core still implements
mode 21 and the Blu-ray parameter whitelist already accepts both values.
Changing the two wrapper immediates to 21 restores that retained native flat
7.1 branch.
DME 3.7.0 statically links a later form of the same Atmos encoder into
dee_ddpjoc_encoder.exe. Its Blu-ray path also writes mode 19 at two parameter
construction points and retains the mode-21 branch. The DME profile applies
the equivalent two-byte change directly to that EXE.
| Profile | Matching original SHA-256 | Mode 21 | Mode 28 |
|---|---|---|---|
| DEE 5.2.1-5994839 Atmos DLL | 3d66bcec...e95d2 |
Yes | Yes |
| DME 3.7.0 / bundled DEE 5.7.2 encoder EXE | 4b4c624d...c8a7 |
Yes | Rejected; no verified patch |
Full hashes are recorded in KNOWN_HASHES.md.
| Internal mode | Applicable profile | Result observed in a real encode | Extra whitelist patch |
|---|---|---|---|
| 21 | DEE and DME | Flat 7.1 Atmos, dependent chanmap=0x1A00 |
No |
| 28 | DEE only | 5.1.2 Top Side Atmos, dependent chanmap=0x1804 |
Yes |
Tagged GitHub Releases
provide enable-atmos71-windows-x64.exe and SHA256SUMS.txt.
The executable is built directly from the tagged Rust source by GitHub Actions;
it is not packed or compressed and contains no Dolby software.
.\enable-atmos71-windows-x64.exe `
dee_audio_filter_ddp_atmos.dll `
dee_audio_filter_ddp_atmos.mode21.dll `
21For the matching DME encoder EXE:
.\enable-atmos71-windows-x64.exe `
dee_ddpjoc_encoder.exe `
dee_ddpjoc_encoder.mode21.exe `
21For the DEE mode-28 probe, change the DLL output name and final argument to
28. Mode 28 is not registered for DME and is rejected before any output is
written.
Release executables are currently unsigned, so Windows may still show an
unknown-publisher warning. Verify the downloaded file against SHA256SUMS.txt.
DME's public CLI help omits the Blu-ray submode. It must be selected manually
by prefixing the encoder settings with bluray::
.\dee_ddpjoc_encoder.mode21.exe `
-l license.lic `
--input-format atmos_mezz `
--input input.wav `
--output output.ec3 `
--start 10 `
--duration 5 `
--time-base file_position `
--data-rate 1664 `
--encoder bluray:preferred_downmix_mode=loro `
--cc 0Without bluray:, DME takes its Online Media/Pro route and rejects 1664 kb/s
before reaching the layout selector. The hidden bluray: route and this
utility's internal mode 21 are separate choices; both are required for the
tested flat-7.1 Blu-ray Atmos result.
cargo build --release --locked
.\target\release\enable-atmos71.exe `
dee_audio_filter_ddp_atmos.dll `
dee_audio_filter_ddp_atmos.mode21.dll `
21Rust 1.85 or newer is required. Run the full validation suite with:
cargo fmt --all --check
cargo clippy --locked --all-targets -- -D warnings
cargo test --locked --all-targetsenable_atmos71_reference.py remains in the repository as an auditable reference
implementation. It is not bundled into the Windows executable. Both
implementations enforce the same known hashes and byte-level checks.
The utility refuses to:
- accept a file whose SHA-256 differs from both known originals;
- patch an unknown instruction sequence or whitelist;
- produce an output whose SHA-256 differs from the known result;
- overwrite the input or an existing output file;
- accept an internal mode other than 21 or 28;
- apply mode 28 to the DME profile.
Both instructions change from mov eax, 19 to mov eax, 21.
| Parameter record | Instruction file offset | Original | Patched |
|---|---|---|---|
| ID 4 | 1556695 (0x17C0D7) |
B8 13 00 00 00 |
B8 15 00 00 00 |
| ID 11 | 1559016 (0x17C9E8) |
B8 13 00 00 00 |
B8 15 00 00 00 |
No whitelist change is needed because the original Blu-ray list is 19, 21.
The same two instructions change from 19 to 28. In addition, the second Blu-ray whitelist entry at file offset 8530612 changes from 21 to 28.
The two corresponding instructions in dee_ddpjoc_encoder.exe also change
from mov eax, 19 to mov eax, 21.
| Parameter record | Instruction file offset | Original | Patched |
|---|---|---|---|
| ID 4 | 2526871 (0x268E97) |
B8 13 00 00 00 |
B8 15 00 00 00 |
| ID 11 | 2529192 (0x2697A8) |
B8 13 00 00 00 |
B8 15 00 00 00 |
No DME whitelist change is needed for mode 21.
Mode 21 makes the matching DEE or DME encoder enter its native flat-7.1 branch before encoding. It is not equivalent to rewriting a completed 5.1.2 bitstream.
A 5.1.2 stream has the same total channel count and can be made to signal a
flat 7.1 layout by rewriting only its dependent chanmap. That operation is
not a conforming conversion because the original EMDF/JOC metadata remains
5.1.2-oriented. In Dolby Reference Player testing, the spoofed stream plays
through the 5.1 target path but reports an error for targets above 5.1.
The current hypothesis is that the 5.1 path does not consume the conflicting expanded-layout metadata, while 7.1 and higher render paths do. This is an inference from playback behavior, not a proven description of DRP internals.
This patch does not cause either encoder to set the Dolby Surround EX
(dsurexmod) flag automatically. If a workflow only needs inspection software
to display Dolby Surround EX, the completed bitstream can be post-processed
separately to set that flag. ETSI TS 102 366 V1.4.1, section D.1.3.8
defines dsurexmod as information not used by the decoder, although other
parts of the reproduction equipment may use it. Changing the flag therefore
should not alter core AC-3/E-AC-3 decoding, but identical behavior from every
downstream device is not guaranteed.
“UDC validation” here refers specifically to an empirical test with the Dolby
decoder component bundled in Dolby Reference Player. The test drove DRP's
dlbac3dec path, which loads libdlb_udclib, while a probe observed its
dlb_ddpi_udc_* status values. The EX-modified sample produced no state 2 or
EVO error; its single state 1 occurred while the decoder was finishing the
stream. This is an additional decoder-acceptance check, not a public Dolby
conformance test or certification. The acronym is left unexpanded because no
authoritative public expansion was found. EX post-processing itself remains
outside the scope of this utility.
All offsets and hashes are specific to the two exact files listed above. Do not weaken the hash checks or apply either profile's offsets to another DLL or EXE.
Keep proprietary engine files and licenses out of this repository. The
.gitignore intentionally blocks their common extensions.
The Windows release workflow uses an unpacked native MSVC executable. Pushing a
v* tag runs the tests, builds the binary on a GitHub-hosted Windows runner,
generates its SHA-256 manifest, and attaches both files to a GitHub Release.
The original code and documentation in this repository are released under the MIT License.
This license applies only to repository-authored material. It grants no rights to Dolby software, binaries, licenses, patents, or trademarks. This project is not affiliated with or endorsed by Dolby Laboratories.