1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#[allow(missing_docs)]
#[derive(Clone, Copy, Hash, Debug, Eq, PartialEq)]
/// Tunes the encoder for a certain kind of video.
pub enum Tune {
    None,
    Film,
    Animation,
    Grain,
    StillImage,
    Psnr,
    Ssim,
}

impl Tune {
    #[doc(hidden)]
    pub fn to_cstr(
        self,
        fast_decode: bool,
        zero_latency: bool,
    ) -> *const i8 {
        (if !fast_decode && !zero_latency {
            match self {
                Tune::None       => b"\0" as *const u8,
                Tune::Film       => b"film\0" as *const u8,
                Tune::Animation  => b"animation\0" as *const u8,
                Tune::Grain      => b"grain\0" as *const u8,
                Tune::StillImage => b"stillimage\0" as *const u8,
                Tune::Psnr       => b"psnr\0" as *const u8,
                Tune::Ssim       => b"ssim\0" as *const u8,
            }
        } else if fast_decode && !zero_latency {
            match self {
                Tune::None       => b"fastdecode\0" as *const u8,
                Tune::Film       => b"fastdecode,film\0" as *const u8,
                Tune::Animation  => b"fastdecode,animation\0" as *const u8,
                Tune::Grain      => b"fastdecode,grain\0" as *const u8,
                Tune::StillImage => b"fastdecode,stillimage\0" as *const u8,
                Tune::Psnr       => b"fastdecode,psnr\0" as *const u8,
                Tune::Ssim       => b"fastdecode,ssim\0" as *const u8,
            }
        } else if !fast_decode && zero_latency {
            match self {
                Tune::None       => b"zerolatency\0" as *const u8,
                Tune::Film       => b"zerolatency,film\0" as *const u8,
                Tune::Animation  => b"zerolatency,animation\0" as *const u8,
                Tune::Grain      => b"zerolatency,grain\0" as *const u8,
                Tune::StillImage => b"zerolatency,stillimage\0" as *const u8,
                Tune::Psnr       => b"zerolatency,psnr\0" as *const u8,
                Tune::Ssim       => b"zerolatency,ssim\0" as *const u8,
            }
        } else {
            match self {
                Tune::None =>
                    b"fastdecode,zerolatency\0" as *const u8,
                Tune::Film =>
                    b"fastdecode,zerolatency,film\0" as *const u8,
                Tune::Animation =>
                    b"fastdecode,zerolatency,animation\0" as *const u8,
                Tune::Grain =>
                    b"fastdecode,zerolatency,grain\0" as *const u8,
                Tune::StillImage =>
                    b"fastdecode,zerolatency,stillimage\0" as *const u8,
                Tune::Psnr =>
                    b"fastdecode,zerolatency,psnr\0" as *const u8,
                Tune::Ssim =>
                    b"fastdecode,zerolatency,ssim\0" as *const u8,
            }
        }) as *const i8
    }
}