#av1 #decoder #libaom #unavif #cest-lavif

aom-decode

Minimal safe wrapper for libaom AV1 decoder

Show the crate…

11 releases

0.2.13 Oct 17, 2024
0.2.10 Jul 7, 2024
0.2.7 Nov 20, 2023
0.2.6 Jun 15, 2023
0.1.1 Nov 21, 2020

#922 in Images

Download history 190/week @ 2024-09-18 134/week @ 2024-09-25 114/week @ 2024-10-02 337/week @ 2024-10-09 495/week @ 2024-10-16 207/week @ 2024-10-23 90/week @ 2024-10-30 144/week @ 2024-11-06 144/week @ 2024-11-13 213/week @ 2024-11-20 165/week @ 2024-11-27 207/week @ 2024-12-04 168/week @ 2024-12-11 98/week @ 2024-12-18 82/week @ 2024-12-25 132/week @ 2025-01-01

558 downloads per month
Used in 8 crates (4 directly)

BSD-2-Clause

37KB
786 lines

Rust wrapper for AOMedia AV1 decoder

It's a minimal safe wrapper that allows decoding individual AV1 frames. It's meant for decoding AVIF images.

Usage

See examples/topng.rs for the full code.

You'll need the avif-parse crate to get AV1 data out of an AVIF file, and the yuv crate to convert YUV pixels into RGB.

let avif = avif_parse::read_avif(file)?;

let mut d = Decoder::new(&Config {
    threads: std::thread::available_parallelism().map(|v| v.get()).unwrap_or(4),
})?;

let img = d.decode_frame(&avif.primary_item)?;
match img.rows_iter()? {
    RowsIters::YuvPlanes8 {y,u,v,chroma_sampling} => {
        match chroma_sampling {
            color::ChromaSampling::Cs444 => {
                yuv_444(y, u, v).map(|px| {
                    // here's your YUV pixel
                });
            },
        }
    },
}

Dependencies

~210–305KB