/* * Copyright (c) 2016, Alliance for Open Media. All rights reserved. * * This source code is subject to the terms of the BSD 2 Clause License and * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License * was not distributed with this source code in the LICENSE file, you can * obtain it at www.aomedia.org/license/software. If the Alliance for Open * Media Patent License 1.0 was not distributed with this source code in the * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
*/
enum {
MV_COST_ENTROPY, // Use the entropy rate of the mv as the cost
MV_COST_L1_LOWRES, // Use the l1 norm of the mv as the cost (<480p)
MV_COST_L1_MIDRES, // Use the l1 norm of the mv as the cost (>=480p)
MV_COST_L1_HDRES, // Use the l1 norm of the mv as the cost (>=720p)
MV_COST_NONE // Use 0 as as cost irrespective of the current mv
} UENUM1BYTE(MV_COST_TYPE);
typedefstruct { // The reference mv used to compute the mv cost const MV *ref_mv;
FULLPEL_MV full_ref_mv;
MV_COST_TYPE mv_cost_type; constint *mvjcost; constint *mvcost[2]; int error_per_bit; // A multiplier used to convert rate to sad cost int sad_per_bit;
} MV_COST_PARAMS;
int av1_mv_bit_cost(const MV *mv, const MV *ref_mv, constint *mvjcost, int *const mvcost[2], int weight);
// The source and predictors/mask used by translational search conststruct buf_2d *src; const uint8_t *second_pred; const uint8_t *mask; int mask_stride; int inv_mask;
// The weighted source and mask used by OBMC const int32_t *wsrc; const int32_t *obmc_mask;
} MSBuffers;
// ============================================================================= // Fullpixel Motion Search // ============================================================================= // This struct holds fullpixel motion search parameters that should be constant // during the search typedefstruct {
BLOCK_SIZE bsize; // A function pointer to the simd function for fast computation const aom_variance_fn_ptr_t *vfp;
MSBuffers ms_buffers;
// WARNING: search_method should be regarded as a private variable and should // not be modified directly so it is in sync with search_sites. To modify it, // use av1_set_mv_search_method.
SEARCH_METHODS search_method; const search_site_config *search_sites;
FullMvLimits mv_limits;
int run_mesh_search; // Sets mesh search unless it got pruned by // prune_mesh_search. int prune_mesh_search; // Disables mesh search if the best_mv after a normal // search if close to the start_mv. int mesh_search_mv_diff_threshold; // mv diff threshold to enable // prune_mesh_search int force_mesh_thresh; // Forces mesh search if the residue variance is // higher than the threshold. conststruct MESH_PATTERN *mesh_patterns[2];
// Use maximum search interval of 4 if true. This helps motion search to find // the best motion vector for screen content types. int fine_search_interval;
int is_intra_mode;
int fast_obmc_search;
// For calculating mv cost
MV_COST_PARAMS mv_cost_params;
// Stores the function used to compute the sad. This can be different from the // sdf in vfp (e.g. downsampled sad and not sad) to allow speed up.
aom_sad_fn_t sdf;
aom_sad_multi_d_fn_t sdx4df;
aom_sad_multi_d_fn_t sdx3df;
} FULLPEL_MOTION_SEARCH_PARAMS;
typedefstruct { int err_cost; unsignedint distortion; unsignedint sse;
} FULLPEL_MV_STATS;
/*! Sets the \ref FULLPEL_MOTION_SEARCH_PARAMS to intra mode. */ void av1_set_ms_to_intra_mode(FULLPEL_MOTION_SEARCH_PARAMS *ms_params, const IntraBCMVCosts *dv_costs);
// Sets up configs for firstpass motion search. void av1_init_motion_fpf(search_site_config *cfg, int stride);
/*! Function pointer to search site config initialization of different search
* method functions. */ typedefvoid (*av1_init_search_site_config)(search_site_config *cfg, int stride, int level);
/*! Array of function pointers used to set the motion search config. */ externconst av1_init_search_site_config
av1_init_motion_compensation[NUM_DISTINCT_SEARCH_METHODS];
// Array to inform which all search methods are having // same candidates and different in number of search steps. staticconst SEARCH_METHODS search_method_lookup[NUM_SEARCH_METHODS] = {
DIAMOND, // DIAMOND
NSTEP, // NSTEP
NSTEP_8PT, // NSTEP_8PT
CLAMPED_DIAMOND, // CLAMPED_DIAMOND
HEX, // HEX
BIGDIA, // BIGDIA
SQUARE, // SQUARE
HEX, // FAST_HEX
BIGDIA, // FAST_DIAMOND
BIGDIA, // FAST_BIGDIA
BIGDIA // VFAST_DIAMOND
};
typedefstruct { const aom_variance_fn_ptr_t *vfp;
SUBPEL_SEARCH_TYPE subpel_search_type; // Source and reference buffers
MSBuffers ms_buffers; int w, h;
} SUBPEL_SEARCH_VAR_PARAMS;
// This struct holds subpixel motion search parameters that should be constant // during the search typedefstruct { // High level motion search settings int allow_hp; constint *cost_list;
SUBPEL_FORCE_STOP forced_stop; int iters_per_step;
SubpelMvLimits mv_limits;
// For calculating mv cost
MV_COST_PARAMS mv_cost_params;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.