zoomvtools 2.0.0

Video motion vector analysis utilities in pure Rust
Documentation
#![allow(missing_docs, clippy::tests_outside_test_module, clippy::unwrap_used)]

use zoomvtools::{
    Analyse, AnalyseOptions, AnalyseResult, BlockFPS, BlockFPSOptions, ColorFamily, Compensate,
    CompensateOptions, DctMode, Degrain, DegrainOptions, DivideMode, FakeBlockData,
    FakeGroupOfPlanes, Finest, Flow, FlowBlur, FlowBlurOptions, FlowFPS, FlowFPSOptions, FlowInter,
    FlowInterExtraVectors, FlowInterOptions, FlowMode, FlowOptions, Frame, FramePlane, FramePlanes,
    FramePlanesMut, FrameView, MAX_RADIUS, MAX_REFS_SIZE, MV_DEFAULT_SCD1, MV_DEFAULT_SCD2,
    MVAnalysisData, MVPlaneSet, Mask, MaskKind, MaskOptions, MotionFlags, MotionVector, MvsOutput,
    PROP_MVANALYSISDATA, PROP_VECTORS, PenaltyScaling, Pixel, PlaneRef, PlaneSelection,
    PlaneSizeTuple, Recalculate, RecalculateOptions, RecalculateResult, ReduceFilter, Resolution,
    SCDetection, SampleType, SceneChangeBehavior, SearchType, Subpel, SubpelMethod, Super,
    SuperClipInfo, SuperOptions, SuperPelClip, VideoFormat, VideoInfo,
};

const fn assert_pixel<T: Pixel>() {}

#[test]
fn filter_api_is_available_from_crate_root() {
    assert_pixel::<u8>();
    assert_pixel::<u16>();

    let _: AnalyseOptions = Default::default();
    let _: RecalculateOptions = Default::default();
    let _: MaskOptions = Default::default();

    let _ = std::mem::size_of::<Analyse>();
    let _ = std::mem::size_of::<AnalyseResult>();
    let _ = std::mem::size_of::<BlockFPS>();
    let _ = std::mem::size_of::<BlockFPSOptions>();
    let _ = std::mem::size_of::<Compensate>();
    let _ = std::mem::size_of::<CompensateOptions>();
    let _ = std::mem::size_of::<Degrain<1>>();
    let _ = std::mem::size_of::<DegrainOptions>();
    let _ = std::mem::size_of::<Finest>();
    let _ = std::mem::size_of::<Flow>();
    let _ = std::mem::size_of::<FlowBlur>();
    let _ = std::mem::size_of::<FlowBlurOptions>();
    let _ = std::mem::size_of::<FlowFPS>();
    let _ = std::mem::size_of::<FlowFPSOptions>();
    let _ = std::mem::size_of::<FlowInter>();
    let _ = std::mem::size_of::<FlowInterExtraVectors<'static>>();
    let _ = std::mem::size_of::<FlowInterOptions>();
    let _ = std::mem::size_of::<FlowMode>();
    let _ = std::mem::size_of::<FlowOptions>();
    let _ = std::mem::size_of::<Frame<u8>>();
    let _ = std::mem::size_of::<FramePlane<u8>>();
    let _ = std::mem::size_of::<FramePlanes<'static, u8>>();
    let _ = std::mem::size_of::<FramePlanesMut<'static, u8>>();
    let _ = std::mem::size_of::<FrameView<'static, u8>>();
    let _ = std::mem::size_of::<Mask>();
    let _ = std::mem::size_of::<MVAnalysisData>();
    let _ = std::mem::size_of::<MvsOutput>();
    let _ = std::mem::size_of::<Recalculate>();
    let _ = std::mem::size_of::<RecalculateResult>();
    let _ = std::mem::size_of::<SCDetection>();
    let _ = std::mem::size_of::<Super>();
    let _ = std::mem::size_of::<SuperClipInfo>();
    let _ = std::mem::size_of::<SuperOptions>();
    let _ = std::mem::size_of::<SuperPelClip<'static, u8>>();

    let _: PlaneSizeTuple = (std::num::NonZeroUsize::new(1).unwrap(), None, None);
    let _: Option<FakeBlockData> = None;
    let _: Option<FakeGroupOfPlanes> = None;
    let _: Option<MotionVector> = None;
    let _: Option<PlaneRef<'static, u8>> = None;

    assert_eq!(PROP_MVANALYSISDATA, "MVTools_MVAnalysisData");
    assert_eq!(PROP_VECTORS, "MVTools_vectors");
    assert_eq!(MV_DEFAULT_SCD1, 400);
    assert_eq!(MV_DEFAULT_SCD2, 130);
    assert_eq!(MAX_REFS_SIZE, MAX_RADIUS * 2);

    let _ = ColorFamily::Gray;
    let _ = DivideMode::None;
    let _ = DctMode::Spatial;
    let _ = MaskKind::VectorLength;
    let _ = MotionFlags::empty();
    let _ = MVPlaneSet::YPLANE;
    let _ = PenaltyScaling::None;
    let _ = PlaneSelection::Luma;
    let _ = ReduceFilter::Average;
    let _ = SampleType::Integer;
    let _ = SceneChangeBehavior::CurrentFrame;
    let _ = SearchType::Hex2;
    let _ = Subpel::Full;
    let _ = SubpelMethod::Bilinear;
    let _ = Resolution {
        width: 1,
        height: 1,
    };
    let _ = VideoFormat {
        color_family: ColorFamily::Gray,
        sample_type: SampleType::Integer,
        bits_per_sample: std::num::NonZeroU8::new(8).unwrap(),
        bytes_per_sample: std::num::NonZeroU8::new(1).unwrap(),
        sub_sampling_w: 0,
        sub_sampling_h: 0,
    };
    let _ = VideoInfo {
        format: VideoFormat {
            color_family: ColorFamily::Gray,
            sample_type: SampleType::Integer,
            bits_per_sample: std::num::NonZeroU8::new(8).unwrap(),
            bytes_per_sample: std::num::NonZeroU8::new(1).unwrap(),
            sub_sampling_w: 0,
            sub_sampling_h: 0,
        },
        resolution: Resolution {
            width: 1,
            height: 1,
        },
        num_frames: 1,
    };
}