AetherEngine and CB1¶
At a glance
Both use BL reshaping and inverse NLQ. The inspected implementations differ before output, so the evidence does not support “the only difference is Apple TV dithering”.
Pinned revisions¶
| Project | Inspected commit | Scope |
|---|---|---|
| AetherEngine | f92b57c3ce4e5348fd137b8f88c61bbab9399b63 |
Swift/Metal composer and FEL documentation |
| CroqueMr / CB1 | 00615a5a5ea02a49acde5fa992b19ee64065ab25 |
CB1 0.5 Master Reference contract and C parameter adapter |
This is static source inspection. Upstream tests were not executed here, and no GPU/HDMI measurements were produced. Links are commit-pinned rather than pointing to moving main branches.
Concrete implementation differences¶
| Stage | AetherEngine | CB1 Master Reference | Code / contract |
|---|---|---|---|
| Polynomial | Floating-point evaluation with fma in the generic shader; specialised paths also exist |
Q20 truncation and checked accumulation described in contract | shader L226, S06 |
| MMR | Float coefficient tables and cross-products | Integer coefficients copied; Q20 described; adapter rejects luma MMR | shader L265, adapter L64 |
| Inverse NLQ | 3 × 1024 entries computed from an integer function per frame | Offset, slope, threshold and maximum copied with bound checks | composer L1398, adapter L75 |
| EL luma | Centred bilinear default; Annex B luma is a debug option | Annex B luma/chroma, vertical before horizontal | shader L428, design L896, S06 |
| EL chroma | Annex B.3 default at half size; other geometry takes other paths | Declared filters, phases, boundary handling and intermediate clipping | design L884, S06 |
| Rounding | Includes rint at denormalisation; quantisation is separate |
Shift/round/clip specified by reconstruction contract | shader L334, S06 |
| Dither | 8×8 Bayer, frame parity and chroma phase; standard 10-bit output | Master source-domain path retains 12-bit reconstruction | shader L154, S06 |
| HDMI | Extra P010 low bits are experimental and not display-validated | Admitted 12-bit 4:2:2 samples packed into RGB8 carrier | design L910, S06 |
S06: Master Reference contract. The C adapter is not the complete GPU renderer. A full audit must follow parameters into the matched rendering implementation and output driver. Contract statements and directly inspected code are not interchangeable evidence.
Integer versus floating-point arithmetic¶
Integer code is not automatically correct; its shifts, intermediate values and saturation must match the intended contract. Floating point is not automatically incorrect. FP32 represents many small integers exactly, and CB1 itself uses FP32 component planes for certain exact integer results.
AetherEngine's generic float reshaping and bilinear EL luma justify testing for differences before dither. Static differences alone do not quantify their visibility or rank movie playback.
Why matching NLQ alone would not be enough¶
Different EL filters can feed different sample values into an otherwise identical inverse NLQ function. BL prediction, clipping, chroma siting and frame pairing can also change output. Compare every intermediate stage using the same decoded inputs.
Shared origins¶
AetherEngine credits libdovi from dovi_tool. CB1 retains upstream notices and dovi-tool attribution files alongside FFmpeg/libplacebo integration. This supports a shared upstream ecosystem, not proof that one composer was copied from the other. AetherEngine comments also refer to DoViBaker as a behavioural/test reference.1
Direct code lineage requires concrete matching code, attribution and commit history. No such conclusion is established here.
What the projects could learn from each other¶
Research candidates include comparing EL-luma filters under the same device budget, testing boundary/rounding cases in both implementations and sharing a reproducible set of intermediate outputs. Any proposed change needs correctness and performance measurements on the target hardware. A theoretically closer filter is not yet a demonstrated deployable improvement.
Limits of the conclusion¶
CB1 explicitly limits exactness to its documented contract, not equality with a certified player's physical HDMI output. Annex B is informative; a reference filter should not be restated as a universally mandatory decoder choice.2
Picture fundamentals · Player matrix · Next tests
Reviewed 6 November 2026 · Source-reviewed · no local playback measurements