use std::fmt;
use std::str::FromStr;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Backend {
Vulkan,
Nvdec,
Vaapi,
Software,
}
impl Backend {
pub const ALL: [Backend; 4] =
[Backend::Vulkan, Backend::Nvdec, Backend::Vaapi, Backend::Software];
pub const ENCODE_ALL: [Backend; 4] = [Backend::Vulkan, Backend::Nvdec, Backend::Vaapi, Backend::Software];
pub fn name(self) -> &'static str {
match self {
Backend::Vulkan => "vulkan",
Backend::Nvdec => "nvdec",
Backend::Vaapi => "vaapi",
Backend::Software => "software",
}
}
pub fn parse(s: &str) -> Option<Backend> {
match s.trim().to_ascii_lowercase().as_str() {
"vulkan" => Some(Backend::Vulkan),
"nvdec" | "cuda" => Some(Backend::Nvdec),
"vaapi" => Some(Backend::Vaapi),
"software" | "sw" | "cpu" => Some(Backend::Software),
_ => None,
}
}
}
impl fmt::Display for Backend {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.name())
}
}
impl FromStr for Backend {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Self::parse(s).ok_or_else(|| format!("unknown backend '{}' (expected vulkan|nvdec|vaapi|software)", s))
}
}