pub use ff_format::{AudioCodec, VideoCodec};
pub trait VideoCodecEncodeExt {
fn is_lgpl_compatible(&self) -> bool;
fn default_extension(&self) -> &'static str;
}
impl VideoCodecEncodeExt for VideoCodec {
fn is_lgpl_compatible(&self) -> bool {
matches!(
self,
VideoCodec::Vp9
| VideoCodec::Av1
| VideoCodec::Av1Svt
| VideoCodec::Mpeg4
| VideoCodec::ProRes
| VideoCodec::DnxHd
| VideoCodec::Ffv1
)
}
fn default_extension(&self) -> &'static str {
match self {
VideoCodec::Vp9 | VideoCodec::Av1 => "webm",
VideoCodec::Ffv1 => "mkv",
_ => "mp4",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn video_codec_is_lgpl_compatible_should_return_true_for_open_codecs() {
assert!(VideoCodec::Vp9.is_lgpl_compatible());
assert!(VideoCodec::Av1.is_lgpl_compatible());
assert!(VideoCodec::Mpeg4.is_lgpl_compatible());
assert!(VideoCodec::ProRes.is_lgpl_compatible());
assert!(VideoCodec::DnxHd.is_lgpl_compatible());
}
#[test]
fn video_codec_is_lgpl_compatible_should_return_false_for_gpl_codecs() {
assert!(!VideoCodec::H264.is_lgpl_compatible());
assert!(!VideoCodec::H265.is_lgpl_compatible());
}
#[test]
fn video_codec_default_extension_should_return_webm_for_web_codecs() {
assert_eq!(VideoCodec::H264.default_extension(), "mp4");
assert_eq!(VideoCodec::Vp9.default_extension(), "webm");
assert_eq!(VideoCodec::Av1.default_extension(), "webm");
}
#[test]
fn video_and_audio_codec_default_should_be_accessible() {
assert_eq!(VideoCodec::default(), VideoCodec::H264);
assert_eq!(AudioCodec::default(), AudioCodec::Aac);
}
}