Skip to main content

ff_encode/
preset.rs

1//! Encoding preset definitions.
2
3/// Encoding preset (speed vs quality tradeoff).
4///
5/// Presets control the speed/quality balance during encoding:
6/// - Faster presets = faster encoding, lower quality, larger file size
7/// - Slower presets = slower encoding, higher quality, smaller file size
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
9#[non_exhaustive]
10pub enum Preset {
11    /// Ultra fast (low quality)
12    Ultrafast,
13
14    /// Faster
15    Faster,
16
17    /// Fast
18    Fast,
19
20    /// Medium (balanced)
21    #[default]
22    Medium,
23
24    /// Slow (high quality)
25    Slow,
26
27    /// Slower
28    Slower,
29
30    /// Very slow (highest quality)
31    Veryslow,
32}
33
34impl Preset {
35    /// Convert to `FFmpeg` preset string.
36    #[must_use]
37    pub const fn as_str(self) -> &'static str {
38        match self {
39            Self::Ultrafast => "ultrafast",
40            Self::Faster => "faster",
41            Self::Fast => "fast",
42            Self::Medium => "medium",
43            Self::Slow => "slow",
44            Self::Slower => "slower",
45            Self::Veryslow => "veryslow",
46        }
47    }
48}
49
50#[cfg(test)]
51mod tests {
52    use super::*;
53
54    #[test]
55    fn test_preset_as_str() {
56        assert_eq!(Preset::Ultrafast.as_str(), "ultrafast");
57        assert_eq!(Preset::Medium.as_str(), "medium");
58        assert_eq!(Preset::Veryslow.as_str(), "veryslow");
59    }
60
61    #[test]
62    fn test_default_preset() {
63        assert_eq!(Preset::default(), Preset::Medium);
64    }
65}