AOMedia AV1 Codec
|
Encoder's parameters related to the current coding block. More...
#include <block.h>
Data Fields | |
int | try_merge_partition |
Prediction for ML based partition. | |
Block4x4VarInfo * | src_var_info_of_4x4_sub_blocks |
Pointer to buffer which caches sub-block variances in a superblock. | |
SetOffsetsLoc | last_set_offsets_loc |
A hash to make sure av1_set_offsets is called. | |
int | palette_pixels |
Number of pixels in current thread that choose palette mode in the fast encoding stage for screen content tool detemination. | |
struct SB_FIRST_PASS_STATS * | sb_stats_cache |
Pointer to the structure which stores the statistics used by sb-level multi-pass encoding. | |
struct SB_FIRST_PASS_STATS * | sb_fp_stats |
Pointer to the structure which stores the statistics used by first-pass when superblock is searched twice consecutively. | |
Source, Buffers and Decoder | |
struct macroblock_plane | plane [3] |
Each of the encoding plane. | |
MACROBLOCKD | e_mbd |
Decoder's view of current coding block. | |
MB_MODE_INFO_EXT | mbmi_ext |
Derived coding information. | |
MB_MODE_INFO_EXT_FRAME * | mbmi_ext_frame |
Finalized mbmi_ext for the whole frame. | |
FRAME_CONTEXT * | row_ctx |
Entropy context for the current row. | |
FRAME_CONTEXT * | tile_pb_ctx |
Entropy context for the current tile. | |
CB_COEFF_BUFFER * | cb_coef_buff |
Buffer of transformed coefficients. | |
uint16_t | cb_offset [PLANE_TYPES] |
Offset of current coding block's coeff buffer relative to the sb. | |
OBMCBuffer | obmc_buffer |
Modified source and masks used for fast OBMC search. | |
PALETTE_BUFFER * | palette_buffer |
Buffer to store the best palette map. | |
CompoundTypeRdBuffers | comp_rd_buffer |
Buffer used for compound_type_rd(). | |
CONV_BUF_TYPE * | tmp_conv_dst |
Buffer to store convolution during averaging process in compound mode. | |
uint8_t * | tmp_pred_bufs [2] |
Temporary buffer to hold prediction. | |
Rdopt Costs | |
int | qindex |
Quantization index for the current partition block. | |
int | delta_qindex |
Difference between frame-level qindex and current qindex. | |
int | rdmult_delta_qindex |
Difference between frame-level qindex and qindex used to compute rdmult (lambda). | |
int | rdmult_cur_qindex |
Current qindex (before being adjusted by delta_q_res) used to derive rdmult_delta_qindex. | |
int | rdmult |
Rate-distortion multiplier. | |
int | intra_sb_rdmult_modifier |
Intra only, per sb rd adjustment. | |
double | rb |
Superblock level distortion propagation factor. | |
int | mb_energy |
Energy in the current source coding block. Used to calculate rdmult. | |
int | sb_energy_level |
Energy in the current source superblock. Used to calculate rdmult. | |
ModeCosts | mode_costs |
The rate needed to signal a mode to the bitstream. | |
MvCosts * | mv_costs |
IntraBCMVCosts * | dv_costs |
CoeffCosts | coeff_costs |
The rate needed to signal the txfm coefficients to the bitstream. | |
Rate to Distortion Multipliers | |
int | errorperbit |
A multiplier that converts mv cost to l2 error. | |
int | sadperbit |
A multiplier that converts mv cost to l1 error. | |
Segmentation | |
int | seg_skip_block |
Skip mode for the segment. | |
int | actual_num_seg1_blocks |
Number of segment 1 blocks Actual number of (4x4) blocks that were applied delta-q, for segment 1. | |
int | actual_num_seg2_blocks |
Number of segment 2 blocks Actual number of (4x4) blocks that were applied delta-q, for segment 2. | |
int | cnt_zeromv |
Number of zero motion vectors. | |
int | force_zeromv_skip_for_sb |
Flag to force zeromv-skip at superblock level, for nonrd path. | |
int | force_zeromv_skip_for_blk |
Flag to force zeromv-skip at block level, for nonrd path. | |
int | prev_segment_id |
Previous segment id for which qmatrices were updated. This is used to bypass setting of qmatrices if no change in qindex. | |
Superblock | |
SuperBlockEnc | sb_enc |
Information on a whole superblock level. | |
CONTENT_STATE_SB | content_state_sb |
Characteristics of the current superblock. | |
Reference Frame Search | |
int | pred_mv_sad [REF_FRAMES] |
Sum absolute distortion of the predicted mv for each ref frame. | |
int | best_pred_mv_sad [2] |
The minimum of pred_mv_sad. | |
int | pred_mv0_sad [REF_FRAMES] |
The sad of the 1st mv ref (nearest). | |
int | pred_mv1_sad [REF_FRAMES] |
The sad of the 2nd mv ref (near). | |
uint8_t | tpl_keep_ref_frame [REF_FRAMES] |
Disables certain ref frame pruning based on tpl. | |
WARP_SAMPLE_INFO | warp_sample_info [REF_FRAMES] |
Warp motion samples buffer. | |
int | picked_ref_frames_mask [MAX_MIB_SIZE *MAX_MIB_SIZE] |
Reference frames picked by the square subblocks in a superblock. | |
int | nonrd_prune_ref_frame_search |
Prune ref frames in real-time mode. | |
Partition Search | |
PartitionSearchInfo | part_search_info |
Stores some partition-search related buffers. | |
int | must_find_valid_partition |
Whether to disable some features to force a mode in current block. | |
Prediction Mode Search | |
int | skip_mode |
Inter skip mode. | |
int | thresh_freq_fact [BLOCK_SIZES_ALL][MAX_MODES] |
Factors used for rd-thresholding. | |
WinnerModeStats * | winner_mode_stats |
Tracks the winner modes in the current coding block. | |
int | winner_mode_count |
Tracks how many winner modes there are. | |
TXFM_RD_MODEL | rd_model |
The model used for rd-estimation to avoid txfm. | |
struct inter_modes_info * | inter_modes_info |
Stores the inter mode information needed to build an rd model. | |
uint8_t | compound_idx |
How to blend the compound predictions. | |
COMP_RD_STATS | comp_rd_stats [64] |
A caches of results of compound type search so they can be reused later. | |
int | comp_rd_stats_idx |
The idx for the latest compound mode in the cache comp_rd_stats. | |
int | recalc_luma_mc_data |
Whether to recompute the luma prediction. | |
IntraBCHashInfo | intrabc_hash_info |
Data structure to speed up intrabc search. | |
int | use_mb_mode_cache |
Whether to reuse the mode stored in mb_mode_cache. | |
const MB_MODE_INFO * | mb_mode_cache |
The mode to reuse during av1_rd_pick_intra_mode_sb and av1_rd_pick_inter_mode. | |
PixelLevelGradientInfo * | pixel_gradient_info |
Pointer to the buffer which caches gradient information. | |
bool | is_sb_gradient_cached [PLANE_TYPES] |
Flags indicating the availability of cached gradient info. | |
bool | reuse_inter_pred |
Flag to reuse predicted samples of inter block. | |
MV Search | |
unsigned int | max_mv_context [REF_FRAMES] |
Context used to determine the initial step size in motion search. | |
FullMvLimits | mv_limits |
Limit for the range of motion vectors. | |
search_site_config | search_site_cfg_buf [NUM_DISTINCT_SEARCH_METHODS] |
Buffer for storing the search site config. | |
Txfm Search | |
TxfmSearchParams | txfm_search_params |
Parameters that control how motion search is done. | |
TxfmSearchInfo | txfm_search_info |
Results of the txfm searches that have been done. | |
uint8_t | color_sensitivity_sb [3 - 1] |
Whether there is a strong color activity. | |
uint8_t | color_sensitivity_sb_g [3 - 1] |
Color sensitivity flag for the superblock for golden reference. | |
uint8_t | color_sensitivity_sb_alt [3 - 1] |
Color sensitivity flag for the superblock for altref reference. | |
uint8_t | color_sensitivity [3 - 1] |
Color sensitivity flag for the coding block. | |
int64_t | min_dist_inter_uv |
Coding block distortion value for uv/color, minimum over the inter modes. | |
int | color_palette_thresh |
Threshold on the number of colors for testing palette mode. | |
tran_low_t * | dqcoeff_buf |
The buffer used by search_tx_type() to swap dqcoeff in macroblockd_plane. | |
Misc | |
unsigned int | source_variance |
Variance of the source frame. | |
int | block_is_zero_sad |
Flag to indicate coding block is zero sad. | |
int | sb_me_partition |
Flag to indicate superblock ME in variance partition is determined to be. | |
int | sb_me_block |
Flag to indicate to test the superblock MV for the coding block in the. | |
int_mv | sb_me_mv |
Motion vector from superblock MV derived from int_pro_motion() in. | |
int | sb_force_fixed_part |
Flag to indicate if a fixed partition should be used, only if the. | |
unsigned int | pred_sse [REF_FRAMES] |
SSE of the current predictor. | |
Encoder's parameters related to the current coding block.
This struct contains most of the information the encoder needs to encode the current coding block. This includes the src and pred buffer, a copy of the decoder's view of the current block, the txfm coefficients. This struct also contains various buffers and data used to speed up the encoding process.
struct macroblock_plane macroblock::plane[3] |
Each of the encoding plane.
An array holding the src buffer for each of plane of the current block. It also contains the txfm and quantized txfm coefficients.
Referenced by av1_rd_pick_partition(), pick_sb_modes(), pick_sb_modes_nonrd(), prune_zero_mv_with_sse(), and tf_motion_search().
MACROBLOCKD macroblock::e_mbd |
Decoder's view of current coding block.
Contains the encoder's copy of what the decoder sees in the current block. Most importantly, this struct contains pointers to mbmi that is used in final bitstream packing.
Referenced by av1_handle_intra_y_mode(), av1_interpolation_filter_search(), av1_nonrd_pick_inter_mode_sb(), av1_nonrd_pick_intra_mode(), av1_nonrd_use_partition(), av1_rd_pick_inter_mode(), av1_rd_pick_intra_mode_sb(), av1_rd_pick_intra_sbuv_mode(), av1_rd_pick_intra_sby_mode(), av1_rd_pick_partition(), av1_rd_use_partition(), av1_search_intra_uv_modes_in_interframe(), av1_search_palette_mode(), av1_search_palette_mode_luma(), av1_tf_do_filtering_row(), cfl_rd_pick_alpha(), combined_motion_search(), encode_b(), encode_frame_internal(), encode_rd_sb(), encode_sb(), encode_sb_row(), fast_interp_search(), find_predictors(), handle_filter_intra_mode(), handle_inter_mode(), intra_block_yrd(), intra_mode_info_cost_uv(), intra_mode_info_cost_y(), motion_mode_rd(), palette_rd_y(), pick_sb_modes(), pick_sb_modes_nonrd(), process_compound_inter_mode(), prune_zero_mv_with_sse(), rd_pick_filter_intra_sby(), rd_pick_intra_angle_sbuv(), rd_pick_intrabc_mode_sb(), search_filter_ref(), search_intra_modes_in_interframe(), search_new_mv(), setup_delta_q(), and tf_motion_search().
MB_MODE_INFO_EXT macroblock::mbmi_ext |
Derived coding information.
Contains extra information not transmitted in the bitstream but are derived. For example, this contains the stack of ref_mvs.
Referenced by av1_nonrd_pick_inter_mode_sb(), av1_rd_pick_intra_mode_sb(), encode_b(), find_predictors(), handle_inter_mode(), rd_pick_intrabc_mode_sb(), and search_new_mv().
MB_MODE_INFO_EXT_FRAME* macroblock::mbmi_ext_frame |
Finalized mbmi_ext for the whole frame.
Contains the finalized info in mbmi_ext that gets used at the frame level for bitstream packing.
Referenced by encode_b().
FRAME_CONTEXT* macroblock::tile_pb_ctx |
Entropy context for the current tile.
This context will be used to update color_map_cdf pointer which would be used during pack bitstream. For single thread and tile-multithreading case this pointer will be same as xd->tile_ctx, but for the case of row-mt: xd->tile_ctx will point to a temporary context while tile_pb_ctx will point to the accurate tile context.
CB_COEFF_BUFFER* macroblock::cb_coef_buff |
Buffer of transformed coefficients.
Points to cb_coef_buff in the AV1_COMP struct, which contains the finalized coefficients. This is here to conveniently copy the best coefficients to frame level for bitstream packing. Since CB_COEFF_BUFFER is allocated on a superblock level, we need to combine it with cb_offset to get the proper position for the current coding block.
uint8_t* macroblock::tmp_pred_bufs[2] |
Temporary buffer to hold prediction.
Points to a buffer that is used to hold temporary prediction results. This is used in two ways:
Referenced by av1_rd_pick_inter_mode(), and fast_interp_search().
int macroblock::qindex |
Quantization index for the current partition block.
This is used to as the index to find quantization parameter for luma and chroma transformed coefficients.
Referenced by av1_rd_pick_inter_mode(), and av1_rd_pick_partition().
int macroblock::delta_qindex |
Difference between frame-level qindex and current qindex.
This is used to track whether a non-zero delta for qindex is used at least once in the current frame.
Referenced by encode_rd_sb(), and setup_delta_q().
int macroblock::rdmult_delta_qindex |
Difference between frame-level qindex and qindex used to compute rdmult (lambda).
rdmult_delta_qindex is assigned the same as delta_qindex before qp sweep. During qp sweep, delta_qindex is changed and used to calculate the actual quant params, while rdmult_delta_qindex remains the same, and is used to calculate the rdmult in "set_deltaq_rdmult".
Referenced by encode_rd_sb(), and setup_delta_q().
int macroblock::rdmult |
Rate-distortion multiplier.
The rd multiplier used to determine the rate-distortion trade-off. This is roughly proportional to the inverse of q-index for a given frame, but this can be manipulated for better rate-control. For example, in tune_ssim mode, this is scaled by a factor related to the variance of the current block.
Referenced by av1_handle_intra_y_mode(), av1_interpolation_filter_search(), av1_nonrd_pick_intra_mode(), av1_rd_pick_inter_mode(), av1_rd_pick_intra_mode_sb(), av1_rd_pick_intra_sbuv_mode(), av1_rd_pick_intra_sby_mode(), av1_rd_pick_partition(), av1_rd_use_partition(), av1_search_intra_uv_modes_in_interframe(), av1_search_palette_mode(), av1_search_palette_mode_luma(), cfl_rd_pick_alpha(), combined_motion_search(), encode_b(), encode_rd_sb(), handle_filter_intra_mode(), handle_inter_mode(), intra_block_yrd(), motion_mode_rd(), palette_rd_y(), pick_sb_modes(), pick_sb_modes_nonrd(), rd_pick_filter_intra_sby(), rd_pick_intrabc_mode_sb(), search_filter_ref(), and search_intra_modes_in_interframe().
MvCosts* macroblock::mv_costs |
The rate needed to encode a new motion vector to the bitstream and some multipliers for motion search.
Referenced by combined_motion_search(), motion_mode_rd(), and search_new_mv().
IntraBCMVCosts* macroblock::dv_costs |
The rate needed to encode a new motion vector to the bitstream in intrabc mode.
Referenced by rd_pick_intrabc_mode_sb().
int macroblock::seg_skip_block |
Skip mode for the segment.
A syntax element of the segmentation mode. In skip_block mode, all mvs are set 0 and all txfms are skipped.
int macroblock::force_zeromv_skip_for_sb |
Flag to force zeromv-skip at superblock level, for nonrd path.
0/1 imply zeromv-skip is disabled/enabled. 2 implies that the blocks in the superblock may be marked as zeromv-skip at block level.
Referenced by encode_sb_row().
CONTENT_STATE_SB macroblock::content_state_sb |
Characteristics of the current superblock.
Characteristics like whether the block has high sad, low sad, etc. This is only used by av1 realtime mode.
Referenced by av1_nonrd_pick_inter_mode_sb(), encode_nonrd_sb(), encode_sb_row(), grade_source_content_sb(), and is_calc_src_content_needed().
int macroblock::pred_mv_sad[REF_FRAMES] |
Sum absolute distortion of the predicted mv for each ref frame.
This is used to measure how viable a reference frame is.
Referenced by av1_nonrd_pick_inter_mode_sb(), find_predictors(), and search_new_mv().
int macroblock::best_pred_mv_sad[2] |
The minimum of pred_mv_sad.
Index 0 stores the minimum pred_mv_sad across past reference frames. Index 1 stores the minimum pred_mv_sad across future reference frames.
uint8_t macroblock::tpl_keep_ref_frame[REF_FRAMES] |
Disables certain ref frame pruning based on tpl.
Determines whether a given ref frame is "good" based on data from the TPL model. If so, this stops selective_ref frame from pruning the given ref frame at block level.
Referenced by av1_rd_pick_inter_mode().
WARP_SAMPLE_INFO macroblock::warp_sample_info[REF_FRAMES] |
Warp motion samples buffer.
Store the motion samples used for warp motion.
Referenced by av1_rd_pick_inter_mode(), and motion_mode_rd().
int macroblock::picked_ref_frames_mask[MAX_MIB_SIZE *MAX_MIB_SIZE] |
Reference frames picked by the square subblocks in a superblock.
Keeps track of ref frames that are selected by square partition blocks within a superblock, in MI resolution. They can be used to prune ref frames for rectangular blocks.
int macroblock::nonrd_prune_ref_frame_search |
Prune ref frames in real-time mode.
Determines whether to prune reference frames in real-time mode. For the most part, this is the same as nonrd_prune_ref_frame_search in cpi->sf.rt_sf.nonrd_prune_ref_frame_search, but this can be selectively turned off if the only frame available is GOLDEN_FRAME.
Referenced by encode_sb_row().
int macroblock::must_find_valid_partition |
Whether to disable some features to force a mode in current block.
In some cases, our speed features can be overly aggressive and remove all modes search in the superblock. When this happens, we set must_find_valid_partition to 1 to reduce the number of speed features, and recode the superblock again.
Referenced by av1_rd_pick_partition().
int macroblock::skip_mode |
Inter skip mode.
Skip mode tries to use the closest forward and backward references for inter prediction. Skip here means to skip transmitting the reference frames, not to be confused with skip_txfm.
int macroblock::thresh_freq_fact[BLOCK_SIZES_ALL][MAX_MODES] |
Factors used for rd-thresholding.
Determines a rd threshold to determine whether to continue searching the current mode. If the current best rd is already <= threshold, then we skip the current mode.
Referenced by av1_rd_pick_inter_mode().
WinnerModeStats* macroblock::winner_mode_stats |
Tracks the winner modes in the current coding block.
Winner mode is a two-pass strategy to find the best prediction mode. In the first pass, we search the prediction modes with a limited set of txfm options, and keep the top modes. These modes are called the winner modes. In the second pass, we retry the winner modes with more thorough txfm options.
Referenced by av1_rd_pick_inter_mode(), and av1_rd_pick_intra_sby_mode().
TXFM_RD_MODEL macroblock::rd_model |
The model used for rd-estimation to avoid txfm.
These are for inter_mode_rd_model_estimation, which is another two pass approach. In this speed feature, we collect data in the first couple frames to build an rd model to estimate the rdcost of a prediction model based on the residue error. Once enough data is collected, this speed feature uses the estimated rdcost to find the most performant prediction mode. Then we follow up with a second pass find the best transform for the mode. Determines if one would go with reduced complexity transform block search model to select prediction modes, or full complexity model to select transform kernel.
struct inter_modes_info* macroblock::inter_modes_info |
Stores the inter mode information needed to build an rd model.
These are for inter_mode_rd_model_estimation, which is another two pass approach. In this speed feature, we collect data in the first couple frames to build an rd model to estimate the rdcost of a prediction model based on the residue error. Once enough data is collected, this speed feature uses the estimated rdcost to find the most performant prediction mode. Then we follow up with a second pass find the best transform for the mode.
Referenced by av1_rd_pick_inter_mode().
int macroblock::recalc_luma_mc_data |
Whether to recompute the luma prediction.
In interpolation search, we can usually skip recalculating the luma prediction because it is already calculated by a previous predictor. This flag signifies that some modes might have been skipped, so we need to rebuild the prediction.
Referenced by av1_interpolation_filter_search().
IntraBCHashInfo macroblock::intrabc_hash_info |
Data structure to speed up intrabc search.
Contains the hash table, hash function, and buffer used for intrabc.
Referenced by encode_frame_internal(), and rd_pick_intrabc_mode_sb().
PixelLevelGradientInfo* macroblock::pixel_gradient_info |
Pointer to the buffer which caches gradient information.
Pointer to the array of structures to store gradient information of each pixel in a superblock. The buffer constitutes of MAX_SB_SQUARE pixel level structures for each of the plane types (PLANE_TYPE_Y and PLANE_TYPE_UV).
unsigned int macroblock::max_mv_context[REF_FRAMES] |
Context used to determine the initial step size in motion search.
This context is defined as the \(l_\inf\) norm of the best ref_mvs for each frame.
FullMvLimits macroblock::mv_limits |
Limit for the range of motion vectors.
These define limits to motion vector components to prevent them from extending outside the UMV borders
Referenced by av1_tf_do_filtering_row().
search_site_config macroblock::search_site_cfg_buf[NUM_DISTINCT_SEARCH_METHODS] |
Buffer for storing the search site config.
When resize mode or super resolution mode is on, the stride of the reference frame does not always match what's specified in MotionVectorSearchParams::search_site_cfg. When his happens, we update the search_sine_config buffer here and use it for motion search.
TxfmSearchParams macroblock::txfm_search_params |
Parameters that control how motion search is done.
Stores various txfm search related parameters such as txfm_type, txfm_size, trellis eob search, etc.
Referenced by av1_nonrd_pick_inter_mode_sb(), and av1_nonrd_pick_intra_mode().
TxfmSearchInfo macroblock::txfm_search_info |
Results of the txfm searches that have been done.
Caches old txfm search results and keeps the current txfm decisions to facilitate rdopt.
Referenced by av1_nonrd_pick_inter_mode_sb(), av1_nonrd_pick_intra_mode(), av1_rd_pick_inter_mode(), av1_rd_pick_intra_mode_sb(), av1_rd_pick_intra_sby_mode(), av1_rd_pick_partition(), av1_search_palette_mode(), av1_search_palette_mode_luma(), encode_frame_internal(), handle_filter_intra_mode(), handle_inter_mode(), intra_block_yrd(), motion_mode_rd(), palette_rd_y(), pick_sb_modes(), pick_sb_modes_nonrd(), rd_pick_filter_intra_sby(), rd_pick_intrabc_mode_sb(), and search_intra_modes_in_interframe().
uint8_t macroblock::color_sensitivity_sb[3 - 1] |
Whether there is a strong color activity.
Used in REALTIME coding mode to enhance the visual quality at the boundary of moving color objects.
Referenced by encode_sb_row().
int macroblock::try_merge_partition |
Prediction for ML based partition.
NONE partition evaluated for merge.
In variance based partitioning scheme, NONE & SPLIT partitions are evaluated to check the SPLIT can be merged as NONE. This flag signifies the partition is evaluated in the scheme.
Referenced by av1_rd_use_partition().
Block4x4VarInfo* macroblock::src_var_info_of_4x4_sub_blocks |
Pointer to buffer which caches sub-block variances in a superblock.
Pointer to the array of structures to store source variance information of each 4x4 sub-block in a superblock. Block4x4VarInfo structure is used to store source variance and log of source variance of each 4x4 sub-block.
Referenced by encode_sb_row().