use std::path::PathBuf;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum HwKind {
VideoToolbox,
Vaapi,
Cuda,
}
#[derive(Debug, Clone)]
pub struct HwAccelDevice {
pub kind: HwKind,
pub driver: Option<String>,
pub render_node: Option<PathBuf>,
pub supported_codecs: Vec<String>,
pub max_width: u32,
pub max_height: u32,
pub supports_hdr: bool,
}
impl HwAccelDevice {
#[must_use]
pub fn supports_codec(&self, codec: &str) -> bool {
let lower = codec.to_lowercase();
self.supported_codecs
.iter()
.any(|c| c.to_lowercase() == lower)
}
}
#[derive(Debug, Clone, Default)]
pub struct HwAccelCapabilities {
pub devices: Vec<HwAccelDevice>,
}
impl HwAccelCapabilities {
#[must_use]
pub fn none() -> Self {
Self::default()
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.devices.is_empty()
}
#[must_use]
pub fn device_for_codec(&self, codec: &str) -> Option<&HwAccelDevice> {
self.devices.iter().find(|d| d.supports_codec(codec))
}
}