tree: 8637c503eef80d723e4f5844e3f90b286a86fac1 [search]
  1. animated-zero-delay.gif
  2. audio-data-copyto-offset.any.js
  3. audio-data-copyto-oversized.any.js
  4. audio-data-copyTo.any.js
  5. audio-data-serialization.any.js
  6. audio-data.any.js
  7. audio-data.crossOriginIsolated.https.any.js
  8. audio-data.crossOriginIsolated.https.any.js.headers
  9. audio-decoder.crossOriginIsolated.https.any.js
  10. audio-decoder.crossOriginIsolated.https.any.js.headers
  11. audio-decoder.https.any.js
  12. audio-encoder-codec-specific.https.any.js
  13. audio-encoder-config.https.any.js
  14. audio-encoder.https.any.js
  15. audio-serialization.crossAgentCluster.helper.html
  16. audio-serialization.crossAgentCluster.https.html
  17. audioDecoder-codec-specific.https.any.js
  18. av1.mp4
  19. chunk-serialization.any.js
  20. encoded-audio-chunk.any.js
  21. encoded-audio-chunk.crossOriginIsolated.https.any.js
  22. encoded-audio-chunk.crossOriginIsolated.https.any.js.headers
  23. encoded-video-chunk.any.js
  24. encoded-video-chunk.crossOriginIsolated.https.any.js
  25. encoded-video-chunk.crossOriginIsolated.https.any.js.headers
  26. encodedVideoChunk-serialization.crossAgentCluster.helper.html
  27. encodedVideoChunk-serialization.crossAgentCluster.https.html
  28. four-colors-flip.avif
  29. four-colors-flip.gif
  30. four-colors-full-range-bt2020-pq-444-10bpc.avif
  31. four-colors-full-range-hlg-420-10bpc.avif
  32. four-colors-full-range-hlg-420-12bpc.avif
  33. four-colors-full-range-hlg-422-10bpc.avif
  34. four-colors-full-range-hlg-422-12bpc.avif
  35. four-colors-full-range-hlg-444-10bpc.avif
  36. four-colors-full-range-hlg-444-12bpc.avif
  37. four-colors-limited-range-420-8bpc.avif
  38. four-colors-limited-range-420-8bpc.jpg
  39. four-colors-limited-range-420-8bpc.webp
  40. four-colors-limited-range-422-8bpc.avif
  41. four-colors-limited-range-444-8bpc.avif
  42. four-colors.avif
  43. four-colors.gif
  44. four-colors.jpg
  45. four-colors.mp4
  46. four-colors.png
  47. four-colors.webp
  48. full-cycle-test.https.any.js
  49. h264.annexb
  50. h264.mp4
  51. h264_444.mp4
  52. h264_interlaced.mp4
  53. h264_sei.annexb
  54. h264_sei.mp4
  55. h265.annexb
  56. h265.mp4
  57. idlharness.https.any.js
  58. image-decoder-animated-zero-delay.https.any.js
  59. image-decoder-disconnect-readable-stream-crash.https.html
  60. image-decoder-image-orientation-none.https.html
  61. image-decoder-transfer-nondetachable-crash.https.html
  62. image-decoder-utils.js
  63. image-decoder.crossOriginIsolated.https.any.js
  64. image-decoder.crossOriginIsolated.https.any.js.headers
  65. image-decoder.https.any.js
  66. imagedecoder-bmp-in-ico-crash.https.html
  67. imagedecoder-zero-length-crash.https.html
  68. META.yml
  69. opus-multichannel.https.any.js
  70. pattern.png
  71. per-frame-qp-encoding.https.any.js
  72. README.md
  73. reconfiguring-encoder.https.any.js
  74. serialization-to-shared-and-service-workers-helper.js
  75. serialization-to-shared-and-service-workers.https.html
  76. serialization.crossAgentCluster.serviceworker.js
  77. sfx-aac.mp4
  78. sfx-alaw.wav
  79. sfx-opus.ogg
  80. sfx-pcm-f32.wav
  81. sfx-pcm-s16.wav
  82. sfx-pcm-s24.wav
  83. sfx-pcm-s32.wav
  84. sfx-pcm-u8.wav
  85. sfx-ulaw.wav
  86. sfx-vorbis.ogg
  87. sfx.adts
  88. sfx.flac
  89. sfx.mp3
  90. temporal-svc-encoding.https.any.js
  91. transfering.https.any.js
  92. utils.js
  93. video-decoder-no-size-in-configure.https.any.js
  94. video-decoder.crossOriginIsolated.https.any.js
  95. video-decoder.crossOriginIsolated.https.any.js.headers
  96. video-decoder.https.any.js
  97. video-encoder-canvasImageSource.https.html
  98. video-encoder-config.https.any.js
  99. video-encoder-content-hint.https.any.js
  100. video-encoder-flush.https.any.js
  101. video-encoder-h264.https.any.js
  102. video-encoder-h26x-annexb.https.any.js
  103. video-encoder-hbd.https.any.js
  104. video-encoder-orientation.https.any.js
  105. video-encoder-rescaling.https.any.js
  106. video-encoder-utils.js
  107. video-encoder.https.any.js
  108. video-frame-serialization.any.js
  109. videoColorSpace.any.js
  110. videoDecoder-444-h264.https.any.js
  111. videoDecoder-codec-specific-orientation.https.any.js
  112. videoDecoder-codec-specific-setup.js
  113. videoDecoder-codec-specific.https.any.js
  114. videoDecoder-h264-sei.https.any.js
  115. videoDecoder-interlaced-h264.https.any.js
  116. videoFrame-alpha-discard-utils.js
  117. videoFrame-alpha-discard.any.js
  118. videoFrame-alpha-discard.window.js
  119. videoFrame-alpha.any.js
  120. videoFrame-canvasImageSource.html
  121. videoFrame-construction.any.js
  122. videoFrame-construction.crossOriginIsolated.https.any.js
  123. videoFrame-construction.crossOriginIsolated.https.any.js.headers
  124. videoFrame-construction.crossOriginSource.sub.html
  125. videoFrame-construction.window.js
  126. videoFrame-copyTo-canvas.window.js
  127. videoFrame-copyTo-chroma-subsampling.any.js
  128. videoFrame-copyTo-opaque-swizzle.https.any.js
  129. videoFrame-copyTo-rgb.any.js
  130. videoFrame-copyTo-rgbx.any.js
  131. videoFrame-copyTo.any.js
  132. videoFrame-copyTo.crossOriginIsolated.https.any.js
  133. videoFrame-copyTo.crossOriginIsolated.https.any.js.headers
  134. videoFrame-createImageBitmap.any.js
  135. videoFrame-createImageBitmap.https.any.js
  136. videoFrame-drawImage-hbd.any.js
  137. videoFrame-drawImage-rgbx.any.js
  138. videoFrame-drawImage.any.js
  139. videoFrame-metadata-rtpTimestamp.https.html
  140. videoFrame-odd-size.any.js
  141. videoFrame-orientation.any.js
  142. videoFrame-rgbx-imageBitmap.any.js
  143. videoFrame-rgbx-utils.js
  144. videoFrame-rgbx-webgl.window.js
  145. videoFrame-serialization.crossAgentCluster.helper.html
  146. videoFrame-serialization.crossAgentCluster.https.html
  147. videoFrame-serialization.https.html
  148. videoFrame-texImage.any.js
  149. videoFrame-utils.js
  150. vp8.webm
  151. vp9-codec-string-profile-constraints.https.any.js
  152. vp9.mp4
  153. WEB_FEATURES.yml
  154. webgl-test-utils.js
webcodecs/README.md

WebCodecs Test Files

Instructions

To add, update or remove a test file, please update the list below.

Please provide full reference and steps to generate the test file so that anybody can regenerate or update the file in the future.

Notes

  • When updating the sample offsets and descriptions for tests using mp4 files, it's easiest to use mp4box.js.
    • Sample offsets can be copied from the “Sample View” tab after unchecking all but offset and size. Use a multi-line edit mode and clang-format to quickly format entries.
    • Description entries can be found under moov.trak.mdia.minf.stbl.stsd in box view.
      • avc1.avcC or hvc1.hvcC has an offset, size in the same view. Add 8 to offset and subtract 8 from the size to get the values the tests want.
    • If you use ffprobe -show_packets to get sample offsets, you may need to add 4 to each pos value. You can tell if you need to by whether or not tests pass.

List of Test Files

four-colors.png

Generated using MSPaint like a true professional.

four-colors.avif

Lossless encoding must be used to ensure colors are perfect.

avifenc -l four-colors.png -o four-colors.avif

four-colors.webp

Lossless encoding must be used to ensure colors are perfect.

ffmpeg -i four-colors.png -lossless 1 -y four-colors.webp

four-colors-limited-range-420-8bpc.webp

ffmpeg -i four-colors.png -pix_fmt yuv420p four-colors-limited-range-420-8bpc.webp

four-colors.gif

High quality encoding must be used to ensure colors are perfect.

cp four-colors.png four-colors2.png
gifski -o four-colors.gif four-colors*.png

four-colors-flip.gif

High quality encoding must be used to ensure colors are perfect.

ffmpeg -i four-colors.png -vf "rotate=PI" four-colors2.png
gifski -o four-colors-flip.gif four-colors*.png

four-colors-flip.avif

ffmpeg -i four-colors-flip.gif -crf 16 four-colors-flip.avif

four-colors-limited-range-(420|422|444)-8bpc.avif

avifenc -r l -d 8 -y 420 -s 0 four-colors.png four-colors-limited-range-420-8bpc.avif
avifenc -r l -d 8 -y 422 -s 0 four-colors.png four-colors-limited-range-422-8bpc.avif
avifenc -r l -d 8 -y 444 -s 0 four-colors.png four-colors-limited-range-444-8bpc.avif

four-colors-full-range-bt2020-pq-444-10bpc.avif

avifenc -r f -d 10 -y 444 -s 0 --nclx 9/16/9 four-colors.png four-colors-full-range-bt2020-pq-444-10bpc.avif

four-colors-full-range-(420|422|444)-hlg-(10|12)bpc.avif

avifenc -r f -d 10 -y 420 -s 0 --nclx 9/18/9 four-colors.png four-colors-full-range-hlg-420-10bpc.avif
avifenc -r f -d 10 -y 422 -s 0 --nclx 9/18/9 four-colors.png four-colors-full-range-hlg-422-10bpc.avif
avifenc -r f -d 10 -y 444 -s 0 --nclx 9/18/9 four-colors.png four-colors-full-range-hlg-444-10bpc.avif
avifenc -r f -d 12 -y 420 -s 0 --nclx 9/18/9 four-colors.png four-colors-full-range-hlg-420-12bpc.avif
avifenc -r f -d 12 -y 422 -s 0 --nclx 9/18/9 four-colors.png four-colors-full-range-hlg-422-12bpc.avif
avifenc -r f -d 12 -y 444 -s 0 --nclx 9/18/9 four-colors.png four-colors-full-range-hlg-444-12bpc.avif

four-colors.jpg

Used Sqoosh.app with MozJPEG compression and RGB channels. exiftool was then used to add an orientation marker.

exiftool -Orientation=1 -n four-colors.jpg

four-colors-limited-range-420-8bpc.jpg

Used Sqoosh.app with MozJPEG compression and YUV channels. exiftool was then used to add an orientation marker.

exiftool -Orientation=1 -n four-colors-limited-range-420-8bpc.jpg

four-colors.mp4

Used a custom tool to convert four-colors.avif into a .mp4 file.

h264.mp4

ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec h264 -tune zerolatency h264.mp4

h264_interlaced.mp4

ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -vcodec h264 -vf "setfield=tff,format=yuv420p" -flags +ilme+ildct -top 1 h264_interlaced.mp4

h264_444.mp4

ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv444p -vcodec h264 h264_444.mp4

h264_sei.mp4

Similar to the construction of h264.mp4, but produces a file where the 5th frame is an SEI recovery point with a recovery_frame_cnt=0.

ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec h264 -tune zerolatency -x264-params "open-gop=1:keyint=5:bframes=3" h264_sei.mp4

h264.annexb

ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec h264 -tune zerolatency -f h264 h264.annexb

h264_sei.annexb

ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec h264 -tune zerolatency -x264-params "open-gop=1:keyint=5:bframes=3" -f h264 h264_sei.annexb

h265.mp4

ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec hevc -tag:v hvc1 -tune zerolatency h265.mp4

h265.annexb

ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec hevc -tag:v hvc1 -tune zerolatency -f hevc h265.annexb

sfx.adts

sox -n -r 48000 sfx.wav synth 1 sine 480
ffmpeg -i sfx.wav -frames:a 10 -acodec aac -b:a 96K sfx.adts

sfx.mp3

sox -n -r 48000 sfx.wav synth 1 sine 480
ffmpeg -i sfx.wav -frames:a 10 -acodec libmp3lame -b:a 96K sfx.mp3

sfx.flac

sox -n -r 48000 sfx.wav synth 1 sine 480
ffmpeg -i sfx.wav -frames:a 10 sfx.flac

sfx-aac.mp4

sox -n -r 48000 sfx.wav synth 1 sine 480
ffmpeg -i sfx.wav -frames:a 10 -acodec aac -b:a 96K sfx-aac.mp4

sfx-*.wav

sox -n -r 48000 sfx.wav synth 1 sine 480
for codec in s16 s24 s32 f32
do
  # Add "le" suffix
  ffmpeg -i sfx.wav -frames:a 10 -acodec pcm_"$codec"le sfx-pcm-$codec.wav
done
ffmpeg -i sfx.wav -frames:a 10 -acodec pcm_u8 sfx-pcm-u8.wav
for codec in alaw mulaw
do
  ffmpeg -i sfx.wav -frames:a 10 -acodec pcm_$codec sfx-$codec.wav
done

sfx-opus.ogg

sox -n -r 48000 sfx.wav synth 1 sine 480
ffmpeg -i sfx.wav -frames:a 10 -acodec libopus -b:a 96K sfx-opus.ogg

### sfx-vorbis.ogg

sox -n -r 48000 sfx.wav synth 1 sine 480 ffmpeg -i sfx.wav -frames:a 10 -acodec libvorbis -b:a 96K sfx-vorbis.ogg


### av1.mp4

ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec libaom-av1 av1.mp4


### vp8.webm

ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec vp8 vp8.webm


### vp9.mp4

ffmpeg -f lavfi -i testsrc=rate=10:n=1 -t 1 -pix_fmt yuv420p -vcodec vp9 vp9.mp4