dav1d 1.5 “Sonic”
A few days ago, we released dav1d 1.5.2, which is the latest version of the 1.5 Sonic series of releases of dav1d, the best AV1 software decoder.
These releases mark an important moment in the life of dav1d, since we have reached maturity and the main goal of the project is achieved.
The important optimizations for desktop and mobile are now all complete, the known decoding bugs all seem to be fixed, and development is naturally shifting into a quieter phase.
Indeed, the number of commits in 2025 is below 40, which is roughly ten times fewer than in 2024. But, this is good news: we’re reaching completion. :D
1.5.0 brought a lot of optimizations for ARM (NEON), the last major optimizations for x86 (SSSE3), and the beginning of RISC-V optimizations.
1.5.1 introduced a big reduction in stack usage and many more optimizations for ARM and RISC-V.
Finally, 1.5.2 focused mostly on CI and build improvements, plus a few smaller optimizations.
If you want to look back at the previous big milestone, you can read the dav1d 1.2.0 release post, which focused on the earlier waves of SIMD work.
And you can find the full changelog the VideoLAN Gitlab instance: dav1d .
What is new in the Sonic series
Yes, the series is named after Sonic, the video game character, because we could not find a faster animal than the Peregrine Falcon. So after Road Runner, here is Sonic.
On x86, the most important changes were the SSSE3 optimizations for the 6-tap filter and a rewrite of the SGR implementation, plus memory and stack reductions.
We also removed the remaining SSE2 specific code paths. This mainly affects very old systems without SSSE3 support, so users on such platforms should update carefully.
On AArch64, Sonic brings numerous improvements across both NEON and SVE2. The majority of the commits in 1.5.0 are related to NEON improvements.
Stack usage reductions, load_tmvs, 6-tap and horizontal filter optimizations, a new SVE2 code path for high bit depth subpixel filters, and rewrites of motion compensation and loop restoration make up the bulk of the changes.
RISC-V continues its progression in dav1d. Sonic includes optimizations for pal, ipred, cdef, itx, and both regular and high bit depth blend operations. Portability for non-Linux environments also improved.
Other architectures also received attention. Power9 gained new blend and ITX optimizations. LoongArch benefited from performance improvements and cleaner symbol visibility.
Beyond raw speed, Sonic brings significant reductions in stack usage, especially in loop restoration and scaled functions. dav1d now fits comfortably within roughly 60 KB of stack on mainstream platforms, which matters a lot for embedded and constrained environments. Code size also improved, notably in frame header parsing.
The releases also include build system fixes, CI improvements, and better compatibility with newer toolchains such as NASM 3.00. A few rare edge case bugs were fixed, including a possible deadlock during flush.
What is next?
The goal of dav1d has always been clear: be the best open source AV1 software decoder possible, because AV1 hardware support is not available everywhere. I think that the 1.5.x series shows that we have achieved that mission on all the important platforms.
This also explains why development is reaching maturity and has a bit less visible activity.
We still need to work on more optimizations for SVE2 on ARM, for RISC-V, and for other less common architectures. Patches welcome.
AV2
And then, maybe, comes the next chapter: AV2.
We might already be working on dav2d, now that AOM has announced AV2 for the end of the year. If this codec takes off, expect a lot of work there, and probably a new AV2 tag on this blog.
Until then, enjoy dav1d 1.5 Sonic, faster and smoother than ever, from VideoLAN with love.