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, UMHdiamond- Diamond search patterns (SDSP, LDSP)hierarchical- Multi-resolution pyramid-based searchsubpel- Sub-pixel refinement and SATD computationpredictor- MV prediction from spatial/temporal neighborspartition- Block partitioning decisionscache- 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:
| Algorithm | Speed | Quality | Use Case |
|---|---|---|---|
FullSearch | Slow | Best | Reference, small ranges |
DiamondSearch | Fast | Good | General purpose |
HexagonSearch | Fast | Good | Alternative to diamond |
UmhSearch | Medium | Very Good | High quality encoding |
HierarchicalSearch | Medium | Good | Large 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.