dav2d is the fastest AV2 decoder on all platforms :) Targeted to be small, portable and very fast; similar to dav1d, but for AV2.
  • Assembly 64.5%
  • C 34.9%
  • Meson 0.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Arpad Panyik dc4de692a4 AArch64: Optimize emu_edge_16bpc_neon
Use pointer comparisons instead of decrementing loop counters in
emu_edge_16bpc_neon. This allows the CMP + conditional branch pairs to
be fused on newer Cortex CPU cores.

Use LDP/STP pairs for the contiguous center copies instead of the
4-register LD1/ST1 pairs, which provides a small additional performance
improvement on several cores. Also duplicate edge samples directly with
STP, avoiding the extra vector register copy.

Relative run time of emu_edge_16bpc_neon after this patch on some
Cortex CPU cores:

 emu_edge_*_16bpc:   w4      w8      w16     w32     w64
 Cortex-A55:       0.771x  0.771x  0.817x  0.923x  0.862x
 Cortex-A510:      0.837x  0.849x  0.871x  0.999x  0.906x
 Cortex-A520:      0.839x  0.853x  0.895x  0.959x  0.897x
 Cortex-A76:       0.871x  0.850x  0.966x  1.000x  0.929x
 Cortex-A78:       0.789x  0.841x  0.798x  0.988x  0.806x
 Cortex-A710:      0.811x  0.811x  0.796x  0.994x  0.834x
 Cortex-A715:      0.879x  0.893x  0.864x  0.957x  0.908x
 Cortex-A720:      0.879x  0.895x  0.862x  0.978x  0.907x
 Cortex-A725:      0.884x  0.899x  0.862x  0.969x  0.913x
 Cortex-X1:        0.830x  0.872x  0.772x  1.005x  0.811x
 Cortex-X2:        0.848x  0.894x  0.788x  0.996x  0.821x
 Cortex-X3:        0.839x  0.862x  0.759x  1.001x  0.811x
 Cortex-X4:        0.824x  0.857x  0.748x  0.988x  0.819x
 Cortex-X925:      0.815x  0.855x  0.736x  0.998x  0.829x
2026-09-11 14:04:22 +02:00
doc s/dav1d/dav2d/ 2026-01-26 19:40:48 +01:00
examples dav2dplay: Print more error messages when window/context creation fails 2026-01-27 03:12:05 +01:00
include compat: Fix building with newer versions of MSVC 2026-09-09 20:27:07 +00:00
package package: Switch to loongarch64 Debian toolchain 2026-05-04 14:01:11 +00:00
patches refmvs: add support for high-priority TMVPs 2026-08-09 21:46:50 +00:00
src AArch64: Optimize emu_edge_16bpc_neon 2026-09-11 14:04:22 +02:00
subprojects subprojects: Update checkasm to v1.2.0 2026-06-08 16:56:47 +02:00
tests Remove highbd suffix from uv luma filter 2026-09-08 20:08:53 +00:00
tools ivf: update codec tag to AV02 2026-07-08 13:14:18 +00:00
.gitignore s/dav1d/dav2d/ 2026-01-26 19:40:48 +01:00
.gitlab-ci.yml avm: switch to av2-normative builds 2026-09-09 18:41:17 -04:00
CONTRIBUTING.md s/dav1d/dav2d/ 2026-01-26 19:40:48 +01:00
COPYING Prepare for the first public release of dav2d 2026-04-30 16:21:46 +02:00
gcovr.cfg gcovr: Fix config file 2024-02-22 19:13:23 +01:00
meson.build meson: Remove testing of the bundled samples via Meson 2026-06-05 15:02:03 +03:00
meson_options.txt tests/checkasm: switch to external checkasm 2026-02-12 17:39:43 +02:00
NEWS dav2d, an AV2 decoder, step 1 2025-10-24 11:19:24 -04:00
README.md README: Add Korean pun 2026-09-09 21:42:02 +09:00
THANKS.md s/dav1d/dav2d/ 2026-01-26 19:40:48 +01:00

dav2d

dav2d is an AV2 cross-platform decoder, open-source, and focused on speed and correctness. It is based on our popular dav1d decoder.

It is a quite early project, should not be used in production, notably since the AV2 specification is not final.

The canonical repository URL for this repo is https://code.videolan.org/videolan/dav2d .

This project is edited by VideoLAN as part of its membership by the Alliance for Open Media/AOM.

Goal and Features

The goal of this project is to provide a decoder for most platforms, and achieve the highest speed possible to overcome the temporary lack of AV2 hardware decoder.

It will support all features from AV2, including all subsampling and bit-depth parameters.

In the future, this project will host simple tools or simple wrappings.

License

dav2d is released under a very liberal license, a contrario from the other VideoLAN projects, so that it can be embedded anywhere, including non-open-source software; or even drivers, to allow the creation of hybrid decoders.

The reasoning behind this decision is the same as for libvorbis, see RMS on vorbis.

Please note that the license does not grant you any patents rights from AOM.

Roadmap

The plan is the following:

On-going

  1. Complete C implementation of the decoder,
  2. Provide a usable API,
  3. Port to most platforms,

After

  1. Make it fast on desktop, by writing asm for AVX2 chips.
  2. Make it fast on mobile, by writing asm for ARMv8 chips,
  3. Make it fast on older desktop, by writing asm for SSSE3+ chips,
  4. Make high bit-depth fast on mobile, by writing asm for ARMv8 chips.
  5. Make it fast on older mobile, by writing asm for ARMv7 chips,
  6. Make high bit-depth fast on older mobile, by writing asm for ARMv7 chips,
  7. Make high bit-depth fast on desktop, by writing asm for AVX2 chips,
  8. Make high bit-depth fast on older desktop, by writing asm for SSSE3+ chips,
  9. Improve threading.
  10. Improve C code base with various tweaks.
  11. Accelerate for less common architectures, like PPC, SSE2, RISC-V or AVX-512.
  12. Use more GPU decoding, when possible.

Contribute

Currently, we are looking for help from:

  • C developers,
  • asm developers,
  • platform-specific developers,
  • testers.

Our contributions guidelines are quite strict. We want to build a coherent codebase to simplify maintenance and achieve the highest possible speed.

Notably, the codebase is in pure C and asm.

We are on IRC, on the #dav2d channel on Libera.chat. If you do not have an IRC Client at hand, use IRC Web Interface.

See the contributions document.

CLA

There is no CLA.

People will keep their copyright and their authorship rights, while adhering to the BSD 2-clause license.

VideoLAN will only have the collective work rights.

CoC

The VideoLAN Code of Conduct applies to this project.

Compile

General compilation steps

  1. Install Meson (0.54 or higher), Ninja, and, for x86* targets, nasm (2.14 or higher)
  2. Run mkdir build && cd build to create a build directory and enter it
  3. Run meson setup .. to configure meson, add --default-library=static if static linking is desired
  4. Run ninja to compile

Following are modification of step 3 and 4, for specific purpose.

Cross-Compilation for 32- or 64-bit Windows, 32-bit Linux

If you're on a linux build machine trying to compile .exe for a Windows target/host machine, configure meson like this

meson setup .. --cross-file=../package/crossfiles/x86_64-w64-mingw32.meson

or, for 32-bit:

meson setup .. --cross-file=../package/crossfiles/i686-w64-mingw32.meson

mingw-w64 is a pre-requisite and should be installed on your linux machine via your preferred method or package manager. Note the binary name formats may differ between distributions. Verify the names, and use alias if certain binaries cannot be found.

For 32-bit linux, run

meson setup .. --cross-file=../package/crossfiles/i686-linux32.meson

Build documentation

  1. Make sure doxygen and graphviz are installed.
  2. Run meson setup .. -Denable_docs=true to configure meson to generate docs from the build directory.
  3. Run ninja doc/html to build the docs

The result can be found in build/doc/html/. An online version built from master can be found here.

Run tests

  1. In the root directory, run git clone https://code.videolan.org/videolan/dav2d-test-data.git tests/dav2d-test-data to fetch the test data repository
  2. During meson configuration, specify -Dtestdata_tests=true
  3. Run meson test -v after compiling

Support

This project is partially funded by members of the Alliance for Open Media/AOM - Google, Meta and Netflix, and is supported by Arm, TwoOrioles and VideoLabs.

Some of these companies may provide support and integration help, should you need it.

FAQ

Is dav2d a recursive acronym?

  • Yes, but it is less funny than dav1d :(, except in French ("deux-vid") or Korean ("dav-이-d").

Can I help?

I am not a developer. Can I help?

  • Yes. We need testers, bug reporters and documentation writers.

What about the AV2 patent license?

  • This project is an implementation of a decoder. It gives you no special rights on the AV2 patents.

Please read the AOMedia patent license that applies to the AV2 specification and codec.

Will you care about <my_arch>? <my_os>?

  • We do, but we don't have either the time or the knowledge. Therefore, patches and contributions welcome.