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.