Files
hyperframes/packages/producer/tests/hdr-hlg-regression/README.md
T
Vance Ingalls d7c1050e44 test(producer): add hdr-regression and hdr-hlg-regression test suites (#365)
## Summary

Replace the trivial `hdr-pq` and `hdr-image-only` tests with two consolidated, time-windowed regression suites that exercise the full HDR pipeline. These goldens are the safety net for every other PR in this stack.

## Why

The pre-existing HDR tests covered only a single full-bleed video or image with a static text label — none of the features that the HDR pipeline has to handle differently from SDR (opacity animation, z-ordered multi-layer compositing, transforms, border-radius clipping, shader transitions, multiple HDR sources, object-fit modes, mixed HDR+SDR layering, HLG transfer). This PR builds the missing safety net first so every subsequent fix can be proven correct.

## What changed

- New `packages/producer/tests/hdr-regression/` (PQ, BT.2020, ~20 s, 1080p, 8 windows A–H):
  - A: static baseline (HDR video + DOM overlay)
  - B: wrapper-opacity fade
  - C: direct-on-`<video>` opacity tween (documents the Chunk 1 bug)
  - D: z-order sandwich (DOM → HDR → DOM)
  - E: two HDR videos side-by-side (pins PR #289)
  - F: rotation + scale + border-radius (documents the Chunk 4 bug)
  - G: `object-fit: contain`
  - H: shader crossfade between HDR video and HDR image
- New `packages/producer/tests/hdr-hlg-regression/` (HLG, ARIB STD-B67, ~5 s, 2 windows A–B) — exercises the separate HLG LUT/OETF code path that previously had **zero** coverage.
- New `scripts/generate-hdr-photo-pq.py` synthesizes `hdr-photo-pq.png` with a cICP chunk for BT.2020/PQ/full.
- Removed `tests/hdr-pq/` and `tests/hdr-image-only/`.
- Updated `.github/workflows/regression.yml` HDR shard to run the new pair sequentially.
- All compositions follow the documented timed-element pattern (`data-start`, `data-duration`, `class="clip"` directly on each timed leaf — no wrapper inheritance).

## Test plan

- [x] Goldens generated with `bun run test:update --sequential`.
- [x] `ffprobe` confirms HEVC/yuv420p10le/bt2020nc/smpte2084 (PQ) and arib-std-b67 (HLG).
- [x] Suite green with `maxFrameFailures` budgets that absorb the documented Chunk 1 / Chunk 4 known-fails — tightened in follow-up PRs in this stack.

## Stack

Foundational PR for the HDR follow-ups stack (Chunk 0 of `plans/hdr-followups.md`). Every subsequent PR builds on this safety net.
2026-04-22 15:43:04 -07:00

2.0 KiB
Raw Blame History

hdr-hlg-regression

Regression test that locks down end-to-end HDR HLG (BT.2020 ARIB STD-B67) video rendering. Companion to hdr-regression (PQ), kept as a separate suite so the HLG-specific encoder/metadata path stays tested in isolation.

What it covers

Window Time Shape Expected
A 0.0 2.5 s Baseline HLG video + DOM overlay pass
B 2.5 5.0 s Wrapper opacity fade around HLG video pass

The test pins the contract that:

  • extractVideoMetadata reports bt2020/arib-std-b67/limited for the HLG source (i.e. HLG is detected and not silently coerced to PQ).
  • isHdrColorSpace flips the orchestrator into the layered HDR path on the HLG signal.
  • The HLG source is decoded into rgb48le and blitted under the SDR DOM overlay on every frame.
  • Wrapper-opacity composition (window B) does not break HLG pass-through.
  • hdrEncoder writes HEVC Main10 / yuv420p10le / BT.2020 HLG with the correct color tags (no PQ mastering display metadata for HLG).

The suite is intentionally short (5 s, two windows) — it exists to detect regressions in the HLG-specific code path, not to enumerate every composition shape (those live in hdr-regression).

Tolerance

maxFrameFailures is 0 here. HLG is a pure pass-through path — no known failures, no transcoder workarounds — and HEVC encoding against the rendered rgb48le buffer is byte-deterministic on the same fixture. Any drift is a real regression, not codec noise, so the budget is the strictest possible.

Fixture

src/hdr-hlg-clip.mp4 — last 5 seconds of a user-recorded HEVC HLG clip, remuxed (no re-encode) so the HLG color tags survive verbatim.

Running

cd packages/producer
bun run test hdr-hlg-regression

bun run test:update hdr-hlg-regression

In CI it runs in the hdr shard alongside hdr-regression (see .github/workflows/regression.yml).