ERR · error resilience

One error per case, applied to a clean stream after decryption

For every codec: clean streams built for error testing (5120×1024 with 2×2 tiles - AVC: 4 slices -, an 854×480 stream of 1100 frames, GOP 30, plus codec-specific extras) and a list of single-error cases. Every case says where the error goes (byte, bit 0 = MSB), what it hits - region header (independently coded headers: OBU / NAL / frame / slice headers, parameter sets, tile sizes) or region payload (entropy-coded tile / slice data) -, the frame, the tile or slice and, for header bits, the syntax field and its value. Kinds: bit flip (70 %), burst of 8-64 bytes inside its region (10 %), truncation (10 %), dropped unit / temporal unit (10 %). Start codes, filler NAL units and the IVF container are never hit.

Each case carries the reference decoder's outcome (DECODED with mismatching frames and the recovery point, ERROR, ABORT, CRASH, TIMEOUT / confirmed hang) and, for payload errors, the first damaged symbol found by comparing the symbol traces of the clean and the damaged decode. The .map.json next to each stream labels every bit of the file.

Applying a case · err_apply.py

Give a clean stream and a case id from the list: the script writes the damaged stream as <stream name>__<case id>.<ext> and appends its md5 to err_apply_manifest.csv. Python 3, standard library only. Bursts use Python's random.Random(seed), so use this script to reproduce their bytes. The case list is found by the id prefix next to the script or in ./errors/, or given with --cases.

python3 err_apply.py ERR_Long_854x480_60p_10b_P2_vbr2.5M_L3.1_buf10M_2.52Mbps.ivf VP9-ERR_Long-hbf-00012
python3 err_apply.py STREAM ID1 ID2 ... -o damaged/            # several cases
python3 err_apply.py STREAM --all --kind bitflip,burst -o damaged/   # every case of the stream (filters: --kind, --region)
python3 err_apply.py STREAM --list                              # print the cases of the stream

AV1 · 2000 cases

Listav1_err_v1.csv · .json · description (.md)
Regions / kindsheader 1000 · payload 1000 — bitflip 1400 · burst 200 · truncate 200 · drop 200
Reference (aomdec)ERROR 1450 · DECODED 550
Damaged symbol800 of 800 payload bit flips / bursts — AV1 MSAC trace of aomdec

VP9 · 2000 cases

Listvp9_err_v1.csv · .json · description (.md)
Regions / kindsheader 1000 · payload 1000 — bitflip 1500 · burst 200 · truncate 200 · drop 100
Reference (vpxdec)ERROR 1439 · DECODED 561
Damaged symbol682 of 800 payload bit flips / bursts — vpxdec tile trace

H.264 / AVC · 2000 cases

Listavc_err_v1.csv · .json · description (.md)
Regions / kindsheader 1000 · payload 1000 — bitflip 1400 · burst 200 · truncate 200 · drop 200
Reference (JM ldecod)DECODED 1008 · ERROR 862 · CRASH 64 · ABORT 51 · TIMEOUT 15 · 15 confirmed hangs (600 s)
Damaged symbol772 of 800 payload bit flips / bursts — CABAC bin trace of JM (syntax element from ctxIdx)

H.265 / HEVC · 2500 cases

Listhvc_err_v1.csv · .json · description (.md)
Regions / kindsheader 1250 · payload 1250 — bitflip 1750 · burst 250 · truncate 250 · drop 250
Reference (HM TAppDecoder)ABORT 2133 · DECODED 312 · CRASH 55
Damaged symbol992 of 1000 payload bit flips / bursts — HM symbol trace (SIG / INTRA_MODE / MPM_CAND / MDCS)