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
use crate::ffi::AVMediaType::*;
use crate::ffi::*;

#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum Type {
    Unknown,
    Video,
    Audio,
    Data,
    Subtitle,
    Attachment,
}

impl From<AVMediaType> for Type {
    #[inline(always)]
    fn from(value: AVMediaType) -> Self {
        match value {
            AVMEDIA_TYPE_UNKNOWN => Type::Unknown,
            AVMEDIA_TYPE_VIDEO => Type::Video,
            AVMEDIA_TYPE_AUDIO => Type::Audio,
            AVMEDIA_TYPE_DATA => Type::Data,
            AVMEDIA_TYPE_SUBTITLE => Type::Subtitle,
            AVMEDIA_TYPE_ATTACHMENT => Type::Attachment,
            AVMEDIA_TYPE_NB => Type::Unknown,
        }
    }
}

impl Into<AVMediaType> for Type {
    #[inline(always)]
    fn into(self) -> AVMediaType {
        match self {
            Type::Unknown => AVMEDIA_TYPE_UNKNOWN,
            Type::Video => AVMEDIA_TYPE_VIDEO,
            Type::Audio => AVMEDIA_TYPE_AUDIO,
            Type::Data => AVMEDIA_TYPE_DATA,
            Type::Subtitle => AVMEDIA_TYPE_SUBTITLE,
            Type::Attachment => AVMEDIA_TYPE_ATTACHMENT,
        }
    }
}