zoomvtools 1.1.0

Video motion vector analysis utilities in pure Rust
Documentation
// Performance
#![warn(clippy::clear_with_drain)]
#![warn(clippy::format_collect)]
#![warn(clippy::format_push_string)]
#![warn(clippy::imprecise_flops)]
#![warn(clippy::inefficient_to_string)]
#![warn(clippy::iter_with_drain)]
#![warn(clippy::large_include_file)]
#![warn(clippy::large_types_passed_by_value)]
#![deny(clippy::linkedlist)]
#![deny(clippy::disallowed_methods)]
#![warn(clippy::indexing_slicing, reason = "use semisafe::slice::get instead")]
#![allow(
    clippy::manual_div_ceil,
    reason = "Can result in worse code generation: https://github.com/rust-lang/rust-clippy/issues/14944"
)]
#![warn(clippy::missing_const_for_fn)]
#![warn(clippy::missing_inline_in_public_items)]
#![warn(clippy::mutex_atomic)]
#![warn(clippy::mutex_integer)]
#![warn(clippy::naive_bytecount)]
#![warn(clippy::needless_bitwise_bool)]
#![warn(clippy::needless_collect)]
#![warn(clippy::needless_pass_by_value)]
#![warn(clippy::non_std_lazy_statics)]
#![warn(clippy::non_zero_suggestions)]
#![warn(clippy::or_fun_call)]
#![warn(clippy::rc_buffer)]
#![warn(clippy::redundant_clone)]
#![warn(clippy::ref_option)]
#![warn(clippy::set_contains_or_insert)]
#![warn(clippy::stable_sort_primitive)]
#![warn(clippy::string_lit_chars_any)]
#![warn(clippy::suboptimal_flops)]
#![warn(clippy::trivial_regex)]
#![warn(clippy::trivially_copy_pass_by_ref)]
#![warn(clippy::unnecessary_box_returns)]
#![warn(clippy::unnecessary_join)]
#![warn(clippy::unused_async)]
#![warn(clippy::verbose_file_reads)]
// Readability/Code Intention
#![warn(clippy::checked_conversions)]
#![warn(clippy::clone_on_ref_ptr)]
#![warn(clippy::cloned_instead_of_copied)]
#![warn(clippy::enum_glob_use)]
#![warn(clippy::equatable_if_let)]
#![warn(clippy::filter_map_next)]
#![warn(clippy::flat_map_option)]
#![warn(clippy::if_then_some_else_none)]
#![warn(clippy::implicit_clone)]
#![warn(clippy::inconsistent_struct_constructor)]
#![warn(clippy::invalid_upcast_comparisons)]
#![warn(clippy::iter_filter_is_ok)]
#![warn(clippy::iter_filter_is_some)]
#![warn(clippy::iter_on_empty_collections)]
#![warn(clippy::iter_on_single_items)]
#![warn(clippy::macro_use_imports)]
#![warn(clippy::manual_assert)]
#![warn(clippy::manual_instant_elapsed)]
#![warn(clippy::manual_is_power_of_two)]
#![warn(clippy::manual_is_variant_and)]
#![warn(clippy::manual_let_else)]
#![warn(clippy::manual_string_new)]
#![warn(clippy::map_unwrap_or)]
#![warn(clippy::map_with_unused_argument_over_ranges)]
#![warn(clippy::match_bool)]
#![warn(clippy::mod_module_files)]
#![warn(clippy::needless_continue)]
#![warn(clippy::needless_pass_by_ref_mut)]
#![warn(clippy::option_as_ref_cloned)]
#![warn(clippy::option_if_let_else)]
#![warn(clippy::pathbuf_init_then_push)]
#![warn(clippy::precedence_bits)]
#![warn(clippy::range_minus_one)]
#![warn(clippy::range_plus_one)]
#![warn(clippy::redundant_test_prefix)]
#![warn(clippy::ref_option_ref)]
#![warn(clippy::semicolon_if_nothing_returned)]
#![warn(clippy::tests_outside_test_module)]
#![warn(clippy::transmute_ptr_to_ptr)]
#![warn(clippy::unused_peekable)]
#![warn(clippy::unused_rounding)]
#![warn(clippy::verbose_bit_mask)]
#![warn(clippy::zero_sized_map_values)]
// Correctness/Safety
#![warn(clippy::case_sensitive_file_extension_comparisons)]
#![deny(clippy::cfg_not_test)]
#![warn(clippy::collection_is_never_read)]
#![warn(clippy::create_dir)]
#![warn(clippy::dbg_macro)]
#![deny(clippy::debug_assert_with_mut_call)]
#![deny(clippy::expl_impl_clone_on_copy)]
#![warn(clippy::filetype_is_file)]
#![warn(clippy::future_not_send)]
#![warn(clippy::ignore_without_reason)]
#![warn(clippy::infinite_loop)]
#![warn(clippy::large_futures)]
#![warn(clippy::large_stack_arrays)]
#![warn(clippy::large_stack_frames)]
#![warn(clippy::manual_midpoint)]
#![warn(clippy::maybe_infinite_iter)]
#![warn(clippy::mem_forget)]
#![warn(clippy::mismatching_type_param_order)]
#![warn(clippy::mixed_read_write_in_expression)]
#![warn(clippy::must_use_candidate)]
#![warn(clippy::mut_mut)]
#![deny(clippy::non_send_fields_in_send_ty)]
#![warn(clippy::path_buf_push_overwrite)]
#![warn(clippy::rc_mutex)]
#![warn(clippy::read_zero_byte_vec)]
#![deny(clippy::significant_drop_in_scrutinee)]
#![warn(clippy::str_split_at_newline)]
#![warn(clippy::string_slice)]
#![warn(clippy::suspicious_operation_groupings)]
#![warn(clippy::suspicious_xor_used_as_pow)]
#![warn(clippy::transmute_undefined_repr)]
#![warn(clippy::undocumented_unsafe_blocks)]
#![warn(clippy::unnecessary_debug_formatting)]
#![warn(clippy::unwrap_used)]
// Annoyances
#![allow(clippy::needless_range_loop)]
#![allow(clippy::too_many_arguments)]
#![allow(clippy::uninlined_format_args)]
#![allow(unsafe_op_in_unsafe_fn)]

#[cfg(test)]
#[macro_use]
mod tests;

pub mod analysis;
pub mod frame;
pub mod util;
pub mod video;

pub mod average;
pub mod copy;
pub mod dct;
pub mod degrain;
pub mod fake;
pub mod group_of_planes;
pub mod limit;
pub mod luma;
pub mod mv;
pub mod mv_frame;
pub mod mv_gof;
pub mod mv_plane;
pub mod overlaps;
pub mod pad;
pub mod params;
pub mod plane_of_blocks;
pub mod reduce;
pub mod refine;
pub mod resize;
pub mod sad;
pub mod satd;
pub mod simd;