Why Chromium Uses dav1d Instead of libaom for AVIF
Chromium transitioned its default AVIF (AV1 Image File Format)
software decoder from libaom to dav1d to
dramatically improve image decoding performance, reduce CPU overhead,
and streamline its internal media architecture. While
libaom served as the foundational reference implementation
for the AV1 format, dav1d was built specifically for
high-speed, resource-efficient production environments, making it vastly
superior for rendering modern web content quickly.
The Limitations of libaom
The Alliance for Open Media developed libaom as the
original reference codec for AV1. While fully compliant and essential
for verifying the format specification, reference decoders prioritize
correctness and feature completeness over pure speed. In real-world
browser usage, decoding AVIF files using libaom proved
computationally heavy. Web pages with multiple high-resolution AVIF
images suffered from noticeable rendering delays, high CPU utilization,
and increased battery consumption on mobile and portable devices.
Superior Speed and Assembly Optimization
Developed by the VideoLAN and FFmpeg communities, dav1d
was engineered from scratch with a strict focus on lightweight,
high-performance decoding. It features extensive, hand-written assembly
optimizations for various processor architectures, including x86 (AVX2,
AVX-512) and ARM (NEON). These low-level optimizations allow
dav1d to decode AV1 bitstreams significantly faster than
libaom—often achieving two to five times the throughput
depending on the host hardware. For web users, this translates directly
to faster page load times and instantaneous image rendering.
Better Multithreading and Memory Management
Decoding multiple images simultaneously across modern multi-core
processors requires sophisticated thread management. dav1d
offers highly efficient multithreading models, allowing Chromium to
decode tiled AVIF images and separate image assets concurrently without
creating resource contention. Additionally, dav1d operates
with a lower memory footprint compared to libaom, reducing
memory pressure in tabs containing heavy visual assets.
Unification of the Decoding Pipeline
Before the transition for still images, Chromium had already replaced
libaom with dav1d for AV1 video playback.
Maintaining libaom solely for AVIF still-image decoding
created redundant software dependencies, increased the browser's binary
footprint, and added maintenance complexity. By routing both AV1 video
streams and AVIF images through dav1d, the Chromium team
unified its decoding infrastructure under a single, actively optimized
codebase.