Compatibility (FATE)

Live decode compatibility — measured against FFmpeg's own FATE suite on two axes, coverage and byte-for-byte correctness, charted per codec.

wasmpeg is tracked against FFmpeg’s FATE regression suite — the same samples FFmpeg uses to test itself — on two axes:

  • Coverage — does a sample decode without erroring? (tests/compat.mjsCOMPAT.md)
  • Correctness — does every decoded frame match FFmpeg’s reference output byte-for-byte? (tests/fate.mjsCORRECTNESS.md)

Correctness is the number that matters: not “does it run,” but “does it produce the exact right pixels.” The figures below are read from those reports at build time, so they track the repository.

86.9%
1079 of 1242 tests
Last run 2026-08-29
commit a52b07f0d9
CodecTypePassTotalRate
othervideo271364 74.5%
h264video209212 98.6%
aacaudio9495 98.9%
exrvideo7474 100%
pcmvideo3663 57.1%
wavpackvideo3030 100%
ac3audio2526 96.2%
utvideovideo2323 100%
vorbisaudio2323 100%
amraudio1818 100%
mpeg2video417 23.5%
jpeg2000video1616 100%
hevcvideo1515 100%
bmpvideo1414 100%
hapvideo1313 100%
proresvideo1212 100%
vc1video511 45.5%
pngvideo1010 100%
dnxhdvideo39 33.3%
lagarithvideo99 100%
mpeg4video89 88.9%
qtrlevideo99 100%
vp6video99 100%
canopusvideo88 100%
g723video88 100%
tiffvideo58 62.5%
dtsaudio67 85.7%
magicyuvvideo77 100%
psdvideo77 100%
webpvideo77 100%
binkaudio66 100%
gifvideo66 100%
jpeglsvideo46 66.7%
mss2video66 100%
apevideo55 100%
mjpegvideo55 100%
truehdvideo55 100%
musepackaudio24 50%
sipraudio44 100%
vp8video44 100%
cfhdvideo33 100%
svq3video33 100%
theoravideo33 100%
vp9video33 100%
wmavaudio33 100%
atracaudio22 100%
dolby_eaudio22 100%
dpxvideo22 100%
flacvideo22 100%
gsmvideo22 100%
mp3video22 100%
msvideo1video22 100%
svq1video22 100%
ttaaudio12 50%
vp7video22 100%
wmaproaudio22 100%
wmv3video22 100%
alacvideo11 100%
av1video01 0%
cinepakvideo11 100%
cookaudio11 100%
dsfaudio01 0%
g722video11 100%
g728audio11 100%
imcaudio11 100%
nellymoseraudio11 100%
opusvideo11 100%
qcelpaudio11 100%
qdm2audio11 100%
ra_288audio11 100%
ra4audio11 100%
shortenvideo11 100%
tgavideo01 0%
truespeechaudio11 100%
twinvqaudio11 100%
vp3video11 100%

Why FATE

FATE is FFmpeg’s own regression suite — the set of real-world and synthetic samples its maintainers use to catch decode regressions. Testing wasmpeg against the same samples means the bar is FFmpeg’s bar, not one we picked to flatter the numbers. The vendored reference output that correctness compares against comes straight from FFmpeg, so a passing correctness test means wasmpeg agrees with upstream FFmpeg on that exact file.

What “coverage” means

A coverage test passes if the sample decodes without erroring — the demuxer opens it, the decoder accepts every packet, and frames come out. It says nothing about whether those frames are correct; it’s the “does it run” bar. High coverage means you can throw real-world files at wasmpeg and expect them to play.

What “correctness” means

A correctness test is far stricter: every decoded frame’s checksum must be byte-identical to FFmpeg’s own reference output. One off-by-one pixel anywhere in the clip fails the whole test. This is the bar that tells you wasmpeg produces the same image FFmpeg would — the number that actually matters for anything pixel-sensitive (thumbnails, frame extraction, visual diffing).

Correctness is only measured on pure-decode video tests, so its codec list is smaller than coverage (which includes audio and container handling too).

Why the two bars differ

A codec can sit at 100% coverage but lower correctness. That’s expected and not a red flag — it usually means the decoder runs end-to-end but diverges on something subtle: chroma rounding, an uncommon bit-depth, or a profile/feature that isn’t fully implemented. The clip still decodes and looks right to the eye; it just isn’t bit-exact.

Reading the chart

Each bar is a codec’s pass rate, colored by how high it is:

  • Emerald (≥95%) — effectively complete.
  • Sky (≥80%) — solid, with a few edge cases.
  • Amber (≥50%) — partial; works for common files, gaps on specific profiles.
  • Rose (below 50%) — early or limited support.

A low bar almost always points at a specific feature, not the whole codec — e.g. one interlaced profile or a rare pixel format among many that pass. The pass/total count next to each bar shows how many samples that represents.

Choosing wasmpeg for your codec

  1. Find your codec in the coverage chart — green or sky means everyday files will decode.
  2. If you need exact pixels, check the correctness chart for the same codec.
  3. A low or missing bar isn’t a dead end: try a real sample, and if it fails, open an issue with the file — many gaps are narrow and quick to close.

For the full per-test breakdown see COMPAT.md and CORRECTNESS.md in the repo, and the list of compiled codecs for what’s in the build at all.