moq_karp/video/
codec.rs

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}