zoomvtools 1.1.0

Video motion vector analysis utilities in pure Rust
Documentation
#![allow(clippy::unwrap_used, reason = "allow in test files")]

use crate::video::Framerate;

#[test]
fn resolve_target_fps_doubles_source_when_num_or_den_is_zero() {
    let source = Framerate {
        numerator: 24_000,
        denominator: 1_001,
    };

    assert_eq!(
        super::resolve_target_fps(source, 0, 1).unwrap(),
        (48_000, 1_001)
    );
    assert_eq!(
        super::resolve_target_fps(source, 25, 0).unwrap(),
        (48_000, 1_001)
    );
}

#[test]
fn output_num_frames_matches_c_formula() {
    assert_eq!(super::output_num_frames(10, 1, 2), 19);
    assert_eq!(super::output_num_frames(20, 1, 2), 39);
}

#[test]
fn frame_window_matches_c_rounding() {
    let window = super::frame_window(3, 1, 2, 1);

    assert_eq!(window.nleft, 1);
    assert_eq!(window.nright, 2);
    assert_eq!(window.time256, 128);
}

#[test]
fn frame_window_scales_fraction_for_delta_gt_one() {
    let window = super::frame_window(1, 2, 3, 2);

    assert_eq!(window.nleft, 0);
    assert_eq!(window.nright, 2);
    assert_eq!(window.time256, 85);
}

#[test]
fn blend_plane_matches_time_weighted_average() {
    let mut dst = vec![0u8; 2];
    let src = vec![10u8, 30];
    let reference = vec![50u8, 70];

    super::blend_plane(&mut dst, &src, &reference, 2, 2, 2, 2, 1, 128);

    assert_eq!(dst, vec![30, 50]);
}