Skip to main content

Module motion

Module motion 

Source
Expand description

Motion estimation module for video encoders.

This module provides comprehensive motion estimation functionality for inter-frame prediction in video encoding. Motion estimation finds the best matching block in a reference frame for each block in the current frame, enabling efficient temporal compression.

§Architecture

The module is organized into several submodules:

  • types - Core types: MotionVector, BlockMatch, SearchRange, etc.
  • search - Motion search algorithms: full search, diamond, hexagon, UMH
  • diamond - Diamond search patterns (SDSP, LDSP)
  • hierarchical - Multi-resolution pyramid-based search
  • subpel - Sub-pixel refinement and SATD computation
  • predictor - MV prediction from spatial/temporal neighbors
  • partition - Block partitioning decisions
  • cache - MV caching for improved performance

§Usage Example

use oximedia_codec::motion::{
    MotionVector, SearchConfig, SearchRange, DiamondSearch, MotionSearch,
};

// Configure search
let config = SearchConfig::default()
    .range(SearchRange::symmetric(32))
    .early_termination(true);

// Create search algorithm
let searcher = DiamondSearch::new();

// Perform search
let result = searcher.search(&context, &config);
println!("Best MV: ({}, {}), SAD: {}", result.mv.dx, result.mv.dy, result.sad);

§Search Algorithms

The module provides several motion search algorithms with different speed/quality tradeoffs:

AlgorithmSpeedQualityUse Case
FullSearchSlowBestReference, small ranges
DiamondSearchFastGoodGeneral purpose
HexagonSearchFastGoodAlternative to diamond
UmhSearchMediumVery GoodHigh quality encoding
HierarchicalSearchMediumGoodLarge motion, HD content

§Sub-pixel Precision

Motion vectors support multiple precision levels:

  • Full-pel - Integer pixel precision
  • Half-pel - 1/2 pixel precision
  • Quarter-pel - 1/4 pixel precision (common in H.264/AV1)
  • Eighth-pel - 1/8 pixel precision (VP9)

Sub-pixel positions are interpolated using filters defined in subpel.

Re-exports§

pub use cache::CacheManager;
pub use cache::CoLocatedMvLookup;
pub use cache::MvCache;
pub use cache::MvCacheEntry;
pub use cache::RefFrameMvs;
pub use diamond::AdaptiveDiamond;
pub use diamond::CrossDiamond;
pub use diamond::ExtendedDiamond;
pub use diamond::HexagonalSearch;
pub use diamond::LargeDiamond;
pub use diamond::PredictorDiamond;
pub use diamond::SmallDiamond;
pub use diamond::UMHexSearch;
pub use hierarchical::CoarseToFineRefiner;
pub use hierarchical::HierarchicalConfig;
pub use hierarchical::HierarchicalSearch;
pub use hierarchical::ImagePyramid;
pub use hierarchical::PyramidLevel;
pub use partition::InterMode;
pub use partition::MergeCandidate;
pub use partition::MergeCandidateList;
pub use partition::PartitionContext;
pub use partition::PartitionDecider;
pub use partition::PartitionDecision;
pub use partition::PartitionType;
pub use partition::SkipDetector;
pub use partition::SplitDecision;
pub use predictor::MvCandidate;
pub use predictor::MvCostCalculator;
pub use predictor::MvPredContext;
pub use predictor::MvPredictor;
pub use predictor::MvPredictorList;
pub use predictor::MvpMode;
pub use predictor::NeighborInfo;
pub use predictor::NeighborPosition;
pub use predictor::SpatialPredictor;
pub use predictor::TemporalPredictor;
pub use search::AdaptiveSearch;
pub use search::DiamondSearch;
pub use search::FullSearch;
pub use search::HexagonSearch;
pub use search::MotionSearch;
pub use search::SearchConfig;
pub use search::SearchContext;
pub use search::ThreeStepSearch;
pub use search::UmhSearch;
pub use subpel::HadamardTransform;
pub use subpel::HalfPelFilter;
pub use subpel::HalfPelInterpolator;
pub use subpel::QuarterPelFilter;
pub use subpel::QuarterPelInterpolator;
pub use subpel::SatdCalculator;
pub use subpel::SubpelConfig;
pub use subpel::SubpelPatterns;
pub use subpel::SubpelRefiner;
pub use types::BlockMatch;
pub use types::BlockSize;
pub use types::MotionVector;
pub use types::MvCost;
pub use types::MvPrecision;
pub use types::SearchRange;

Modules§

cache
Motion vector caching for video encoding.
diamond
Diamond search patterns for motion estimation.
hierarchical
Hierarchical motion estimation using image pyramids.
partition
Block partitioning decisions for motion estimation.
predictor
Motion vector prediction for video encoding.
search
Motion search algorithms for video encoding.
subpel
Sub-pixel motion estimation refinement.
types
Core types for motion estimation.