Skip to main content

ff_encode/video/codec_options/
vp9.rs

1//! VP9 (libvpx-vp9) per-codec encoding options.
2
3/// VP9 (libvpx-vp9) per-codec options.
4#[derive(Debug, Clone, Default)]
5pub struct Vp9Options {
6    /// Encoder speed/quality trade-off: -8 = best quality / slowest, 8 = fastest.
7    pub cpu_used: i8,
8    /// Constrained Quality level (0–63).
9    ///
10    /// `Some(q)` enables CQ mode: sets `bit_rate = 0` and applies `q` as the `crf`
11    /// option, producing variable-bitrate output governed by perceptual quality.
12    /// `None` uses the bitrate mode configured on the builder.
13    pub cq_level: Option<u8>,
14    /// Log2 number of tile columns (0–6).
15    pub tile_columns: u8,
16    /// Log2 number of tile rows (0–6).
17    pub tile_rows: u8,
18    /// Enable row-based multithreading for better CPU utilisation.
19    pub row_mt: bool,
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25
26    #[test]
27    fn vp9_options_default_should_have_cpu_used_0() {
28        let opts = Vp9Options::default();
29        assert_eq!(opts.cpu_used, 0);
30        assert_eq!(opts.tile_columns, 0);
31        assert_eq!(opts.tile_rows, 0);
32        assert!(!opts.row_mt);
33    }
34
35    #[test]
36    fn vp9_options_default_should_have_no_cq_level() {
37        let opts = Vp9Options::default();
38        assert!(opts.cq_level.is_none());
39    }
40}