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}