open-standards/wai/encode-conformance
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 5df961d526
Some checks failed
wai-quantum energy-landscape jobs / does this change touch it (push) Successful in 15s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 24s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Failing after 48s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Failing after 2m9s
wai-quantum energy-landscape jobs / the module under wasm32-wasip2 (wasmtime) (push) Successful in 3m5s
wai-quantum energy-landscape jobs / the same bits · macos (push) Successful in 4m6s
wai-quantum energy-landscape jobs / native against WebAssembly, over many seeds (push) Successful in 5m9s
wai-quantum energy-landscape jobs / reader, kernels, answers and the stated result · linux, release (push) Successful in 7m44s
wai-audit collector and player integration / does this change touch it (push) Has been cancelled
wai-audit collector and player integration / collector · linux (push) Has been cancelled
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Has been cancelled
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Has been cancelled
WAI operation catalogue / does this change touch it (push) Has been cancelled
WAI operation catalogue / the catalogue and every door · linux (push) Has been cancelled
wai-quantum for JavaScript / does this change touch it (push) Has been cancelled
wai-quantum for JavaScript / javascript · linux (push) Has been cancelled
wai-quantum energy-landscape jobs / the same bits · linux-arm64 (push) Has been cancelled
wai-quantum studio and desktop / does this change touch it (push) Has been cancelled
wai-quantum studio and desktop / studio · browser (push) Has been cancelled
wai-quantum studio and desktop / desktop app · macos (push) Has been cancelled
wai-quantum studio and desktop / desktop app · linux (push) Has been cancelled
wai-quantum studio and desktop / desktop app · windows (push) Has been cancelled
wai-sink-android native sink library / does this change touch it (push) Has been cancelled
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Has been cancelled
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Has been cancelled
wai-sink-swift native sink package / does this change touch it (push) Has been cancelled
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Has been cancelled
WAI Studio / does this change touch it (push) Has been cancelled
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Has been cancelled
WAI Studio / Studio in Chromium and Firefox · macos (push) Has been cancelled
WAI Studio / Studio in WebKit · linux (push) Has been cancelled
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Has been cancelled
joule-moq-room room service / joule-moq-room · does this change touch it (push) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (push) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Has been cancelled
wai-app and Create / wai-app · does this change touch it (push) Has been cancelled
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Has been cancelled
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Has been cancelled
wai-fleet service / does this change touch it (push) Has been cancelled
wai-fleet service / service · linux (push) Has been cancelled
wai-fleet service / service · macos (push) Has been cancelled
wai-key-proxy / does this change touch it (push) Has been cancelled
wai-key-proxy / proxy · linux (push) Has been cancelled
wai-ledger service / does this change touch it (push) Has been cancelled
wai-ledger service / service · linux (push) Has been cancelled
wai-ledger service / service · macos (push) Has been cancelled
wai-vector vector graphics / does this change touch it (push) Successful in 16s
wai-vector vector graphics / macos-arm64 (push) Successful in 2m15s
wai-vector vector graphics / wasm32 under Node (push) Successful in 30s
wai-vector vector graphics / wasm32-wasip2 (wasmtime) (push) Successful in 1m13s
wai-vector vector graphics / fuzz, peak allocation, comparison count (push) Successful in 28s
wai-vector vector graphics / linux-x86_64 (push) Successful in 3m19s
wai-vector vector graphics / wasm32 in three browser engines (push) Successful in 3m11s
wai-vector vector graphics / linux-aarch64 (push) Successful in 5m19s
wai-vector vector graphics / independent checker (Python) (push) Successful in 4m42s
wai-pack: packages of several components, and the composing sink's package packed by it
packaging §5.8: a package leads with its video component and carries
beside it up to seven more on one presentation timeline, each cut at the
lead's piece starts and each piece one object of the capability that
suits it: audio as FLAC from a WAV, a score with a FLAC floor of its
mixdown, vector graphics (wai.graphics.vector), timed text
(wai.text.timed, each piece the WebVTT segment of its span, its target
naming its language) and a feed (wai.feed.state, each piece sealed by
the package's key and starting from the state the one before seals).
Every decode-equivalent base states its piece's decoded-output digest
in the stage index the receipt signs: the SHA-256 of interleaved s16le
samples for audio and a score's mixdown, the clip digest of the
overlay's RGBA8P frames for graphics, the SHA-256 of the segment its
cues write back to for text. wai-pack packs, lists, signs and verifies
them, and refuses by name what it does not pack.

The policy takes the media graphics and text and a text component's
lang; the stage index the media classes 7 and 8. wai.graphics.vector
is read as its pending registration states and wai.text.timed, a
record, as a text component's base whose payload is a segment, each
with no licence class. wai-rs adds codecs::audio::flac_encode_i16 and
flac_decode_i16, FLAC of 16-bit mono or stereo samples in pure Rust
(feature flac); the mono f32 encoder is unchanged.

pack-conformance/multi/: three goldens and multi_verify.py, which
recomputes every digest and payload from the sources. The composing
sink's reference package (wai-web/compose/package/, browser-sink §14)
is now wai-pack's, from compose/policy.toml, the fixture compose-01,
committed sources and a supplied AV1 floor, held byte for byte by the
corpus check, which also writes the forged receipt; wai-compose-package,
its own policy schema and native.json are gone. The page plays each
component piece by piece and holds every overlay piece and caption
segment to its signed digest too; run.mjs exits non-zero on any
failure, page error, missing engine or missing check.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-09 12:58:33 -05:00
..
decoded An encode record states the quality its stream decodes to, and a verifier recomputes it 2026-11-07 03:01:50 -05:00
handed A verdict on an encode record names what its quality figures rest on 2026-11-07 03:01:50 -05:00
mutated encode corpus: a stream with no picture parameter set, which only the every-parameter-set rule refuses 2026-10-26 03:20:26 -04:00
records An encode record states null when nothing was measured, and run keeps its record then 2026-11-07 03:01:50 -05:00
rendition wai platform-encode: the source's frame rate as its header writes it, and corpus cases for a trailing access unit, a second SPS, the source's rate and range, and a misnamed object 2026-10-26 03:17:04 -04:00
streams wai: platform-encode extension text, the encode corpus (fixture streams from each interface, generated records and negative controls), the stream checks in the text's order 2026-10-26 02:30:52 -04:00
.gitattributes The encode corpus's pictures are never converted on checkout, and its verifier's heading says step 11 2026-11-07 03:01:50 -05:00
cases.json An encode record states null when nothing was measured, and run keeps its record then 2026-11-07 03:01:50 -05:00
decoded.json An encode record states the quality its stream decodes to, and a verifier recomputes it 2026-11-07 03:01:50 -05:00
encode_verify.py wai-pack: packages of several components, and the composing sink's package packed by it 2026-11-09 12:58:33 -05:00
plan.txt wai: platform-encode extension text, the encode corpus (fixture streams from each interface, generated records and negative controls), the stream checks in the text's order 2026-10-26 02:30:52 -04:00
README.md An encode record states null when nothing was measured, and run keeps its record then 2026-11-07 03:01:50 -05:00
source.y4m wai: platform-encode extension text, the encode corpus (fixture streams from each interface, generated records and negative controls), the stream checks in the text's order 2026-10-26 02:30:52 -04:00
streams.json wai: platform-encode extension text, the encode corpus (fixture streams from each interface, generated records and negative controls), the stream checks in the text's order 2026-10-26 02:30:52 -04:00

encode-conformance/: the corpus of wai.video.encode

The corpus of platform-encode §10.1.

path what how it is made
streams/ AVC and HEVC elementary streams made through each encoder interface (§3): platform-* by the media framework's hardware engine, va-1-* and va-2-* by two GPUs' encode engines through the video acceleration API, gpu-driver-* by a GPU driver's encode interface, software-* by the runtime-loaded software library fixtures: made once by `wai encode avc
streams.json each fixture's SHA-256 wai_encode_vectors gen
decoded/ the pictures a conforming decoder made from a fixture stream (software-avc-128x72.yuv, from streams/software-avc-128x72.h264): each picture's luma, Cb and Cr planes, one picture after another (§8.3) a fixture: decoded once by the platform's decoder (wai_encode_measure quality --decoded-out); every conforming decoder outputs these pictures from that stream, so they are kept, not decoded again
decoded.json each decoded fixture's SHA-256 wai_encode_vectors gen
handed/ for each decoded fixture, the pictures its stream's encoder was handed (the source resampled to the rung), in the same layout: a perfect score no decode of the stream gives, for the case that hands them over (§7) generated
source.y4m, plan.txt the source every fixture was made from (256×144, 12 frames, 30 fps) and its IDR plan generated
mutated/ streams derived from a fixture by one edit, each breaking one rule of §4.3 generated
records/, cases.json a record per case, signed with the corpus key (32 bytes of 0x45), and every case's files and outcome; the quality cases state their figures over the source resampled to the 128×72 rung, hold pictures too (decoded, the file; pictures, how the verifier came by them, decoded or handed), and, where accepted, give §7's verdict (quality: decoded, handed or stated) generated
rendition/ encoded renditions (§9) of the packaging golden pack-conformance/packs/video-base-01: streams/ fixtures made from its source with its plan, cases/ and cases.json, accepted and mutated wai-pack rendition-vectors gen (key: 32 bytes of 0x46)
encode_verify.py the second implementation, written from the extension's text —

Provenance. Generated here, as the table states: source.y4m and plan.txt are generated; each fixture under streams/ and rendition/streams/ was made once from that source by wai encode through the encoder interface its name gives, and is kept, not regenerated; the pictures under decoded/ were decoded once from their fixture stream by the platform's decoder, and are kept; streams.json, decoded.json, mutated/, records/ and cases.json are written by wai_encode_vectors gen, as is handed/, and rendition/'s cases by wai-pack rendition-vectors gen. Every input is generated in this repository.

A case's decoded pictures stand in for a verifier's own decode, because every conforming decoder outputs them from that stream (§10.2): neither wai-rs on a host with no platform decoder nor encode_verify.py decodes anything, and a verifier with a decoder may decode the stream instead. On accept-quality-own-pictures-* the figures hold over pictures handed over and say nothing of the stream, which quality-own-pictures-decoded-* shows. On accept-quality-null-* nothing was measured, so the pictures held have no figures to hold to and the case gives no verdict; a record with no quality member reads the same.

The identities in the records are the corpus's, not the encoders' that made the streams. The software library made the same bytes on three hosts of two architectures; nothing here relies on that.

Check:

cd wai/wai-rs && cargo run --locked -q --no-default-features --features platform_encode --bin wai_encode_vectors -- verify ../encode-conformance
cd wai/wai-pack && cargo run --locked -q --bin wai-pack -- rendition-vectors check ../encode-conformance/rendition
python3 -I wai/encode-conformance/encode_verify.py wai/encode-conformance