Show HN: Rav2d – AV2 video decoder ported from C to Rust (47K lines, 786 tests)

stukenov1 pts0 comments

GitHub - stukenov/rav2d: AV2 video decoder in Rust — full port of dav2d C logic to memory-safe Rust. 47K lines, 786 tests. Assembly DSP stays via FFI. · GitHub

/" data-turbo-transient="true" />

Skip to content

Search or jump to...

Search code, repositories, users, issues, pull requests...

-->

Search

Clear

Search syntax tips

Provide feedback

--><br>We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Cancel

Submit feedback

Saved searches

Use saved searches to filter your results more quickly

-->

Name

Query

To see all available qualifiers, see our documentation.

Cancel

Create saved search

Sign in

/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up

Appearance settings

Resetting focus

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

stukenov

rav2d

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star

main

BranchesTags

Go to file

CodeOpen more actions menu

Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit

History<br>139 Commits<br>139 Commits

crates

crates

dav2d @ bbbf12e

dav2d @ bbbf12e

docs

docs

.gitignore

.gitignore

.gitmodules

.gitmodules

Cargo.toml

Cargo.toml

LICENSE

LICENSE

README.md

README.md

View all files

Repository files navigation

rav2d

rav2d is a Rust port of dav2d, a cross-platform AV2 video decoder focused on speed, correctness, and memory safety.

Status: Early development. The AV2 specification is not yet finalized. Do not use in production.

Goals

Bit-exact AV2 decoding, matching dav2d output

Memory safety for all parsing and decode logic (where most CVEs occur)

Shared assembly optimizations with dav2d via FFI (x86 SSE/AVX2/AVX-512, ARM Neon, RISC-V, LoongArch)

Drop-in C API compatibility for existing dav2d consumers

Native Rust API for Rust ecosystem integration

Crate Structure

Crate<br>Description

rav2d<br>Main decoder library with safe Rust API

rav2d-sys<br>Raw FFI bindings to dav2d C/asm

rav2d-cli<br>Command-line decoder tool

Approach

Following the proven rav1d strategy:

FFI bindings to dav2d's hand-optimized assembly (shared, not rewritten)

Progressive C-to-Rust port of the core decoder

Conformance testing at every step against dav2d test data

Building

Prerequisites

Rust 1.85+

dav2d installed on system (via meson/ninja), or set PKG_CONFIG_PATH

LLVM/clang (for bindgen)

Build

# First, build and install dav2d<br>cd dav2d<br>mkdir build && cd build<br>meson setup .. && ninja<br>sudo ninja install

# Then build rav2d<br>cd ../..<br>cargo build

License

BSD 2-Clause, same as dav2d.

Acknowledgments

dav2d by VideoLAN / Alliance for Open Media

rav1d by Prossimo / ISRG — the reference for this porting approach

dav1d — the AV1 predecessor

About

AV2 video decoder in Rust — full port of dav2d C logic to memory-safe Rust. 47K lines, 786 tests. Assembly DSP stays via FFI.

github.com/stukenov/rav2d/pull/1

Topics

rust

memory-safety

codec

av2

video-decoder

dav2d

Resources

Readme

License

BSD-2-Clause license

Uh oh!

There was an error while loading. Please reload this page.

Activity

Stars

stars

Watchers

watching

Forks

forks

Report repository

Releases

v0.1.0 — Complete C-to-Rust port

Latest

May 23, 2026

Packages

Uh oh!

There was an error while loading. Please reload this page.

Contributors

Uh oh!

There was an error while loading. Please reload this page.

Languages

Rust<br>100.0%

You can’t perform that action at this time.

dav2d rust rav2d decoder reload build

Related Articles