1use super::*;
2
3use std::str::FromStr;
4
5use derive_more::{Display, From};
6
7use crate::Error;
8
9#[derive(Debug, Clone, PartialEq, Eq, Display, From)]
10pub enum VideoCodec {
11 H264(H264),
12 H265(H265),
13 VP9(VP9),
14 AV1(AV1),
15
16 #[display("vp8")]
17 VP8,
18
19 #[display("{_0}")]
20 Unknown(String),
21}
22
23impl FromStr for VideoCodec {
24 type Err = Error;
25
26 fn from_str(s: &str) -> Result<Self, Self::Err> {
27 if s.starts_with("avc1.") {
28 return H264::from_str(s).map(Into::into);
29 } else if s.starts_with("hvc1.") {
30 return H265::from_str(s).map(Into::into);
31 } else if s == "vp8" {
32 return Ok(Self::VP8);
33 } else if s.starts_with("vp09.") {
34 return VP9::from_str(s).map(Into::into);
35 } else if s.starts_with("av01.") {
36 return AV1::from_str(s).map(Into::into);
37 }
38
39 Ok(Self::Unknown(s.to_string()))
40 }
41}