use std::path::Path;
use unbundle::{MediaFile, UnbundleError};
fn sample_video_path() -> &'static str {
"tests/fixtures/sample_video.mp4"
}
#[test]
fn frame_with_filter_scale_changes_dimensions() {
let path = sample_video_path();
if !Path::new(path).exists() {
return;
}
let mut unbundler = MediaFile::open(path).expect("Failed to open test video");
let frame = unbundler
.video()
.frame_with_filter(0, "scale=320:240")
.expect("Failed to extract filtered frame");
assert_eq!(frame.width(), 320);
assert_eq!(frame.height(), 240);
}
#[test]
fn frame_with_complex_filter_chain_changes_dimensions() {
let path = sample_video_path();
if !Path::new(path).exists() {
return;
}
let mut unbundler = MediaFile::open(path).expect("Failed to open test video");
let frame = unbundler
.video()
.frame_with_filter(5, "scale=640:480,crop=320:240:10:20,hflip,transpose=1")
.expect("Failed to extract frame with complex filter chain");
assert_eq!(frame.width(), 240);
assert_eq!(frame.height(), 320);
}
#[test]
fn chainable_filter_api_changes_dimensions() {
let path = sample_video_path();
if !Path::new(path).exists() {
return;
}
let mut unbundler = MediaFile::open(path).expect("Failed to open test video");
let frame = unbundler
.video()
.filter("scale=320:240")
.filter("transpose=1")
.frame(0)
.expect("Failed to extract frame with chainable filter API");
assert_eq!(frame.width(), 240);
assert_eq!(frame.height(), 320);
}
#[test]
fn frame_with_filter_invalid_spec_returns_error() {
let path = sample_video_path();
if !Path::new(path).exists() {
return;
}
let mut unbundler = MediaFile::open(path).expect("Failed to open test video");
let result = unbundler
.video()
.frame_with_filter(0, "this_filter_does_not_exist");
assert!(result.is_err(), "Expected filter graph error");
assert!(
matches!(result.unwrap_err(), UnbundleError::FilterGraphError(_)),
"Expected FilterGraphError variant"
);
}