summaryrefslogtreecommitdiffstats
path: root/third_party/aom/av1/encoder/block.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/aom/av1/encoder/block.h')
-rw-r--r--third_party/aom/av1/encoder/block.h452
1 files changed, 0 insertions, 452 deletions
diff --git a/third_party/aom/av1/encoder/block.h b/third_party/aom/av1/encoder/block.h
deleted file mode 100644
index 0bc5dea82..000000000
--- a/third_party/aom/av1/encoder/block.h
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- * 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.
- */
-
-#ifndef AOM_AV1_ENCODER_BLOCK_H_
-#define AOM_AV1_ENCODER_BLOCK_H_
-
-#include "av1/common/entropymv.h"
-#include "av1/common/entropy.h"
-#include "av1/common/mvref_common.h"
-#include "av1/encoder/hash.h"
-#if CONFIG_DIST_8X8
-#include "aom/aomcx.h"
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct {
- unsigned int sse;
- int sum;
- unsigned int var;
-} DIFF;
-
-typedef struct macroblock_plane {
- DECLARE_ALIGNED(16, int16_t, src_diff[MAX_SB_SQUARE]);
- tran_low_t *qcoeff;
- tran_low_t *coeff;
- uint16_t *eobs;
- uint8_t *txb_entropy_ctx;
- struct buf_2d src;
-
- // Quantizer setings
- // These are used/accessed only in the quantization process
- // RDO does not / must not depend on any of these values
- // All values below share the coefficient scale/shift used in TX
- const int16_t *quant_fp_QTX;
- const int16_t *round_fp_QTX;
- const int16_t *quant_QTX;
- const int16_t *quant_shift_QTX;
- const int16_t *zbin_QTX;
- const int16_t *round_QTX;
- const int16_t *dequant_QTX;
-} MACROBLOCK_PLANE;
-
-typedef struct {
- int txb_skip_cost[TXB_SKIP_CONTEXTS][2];
- int base_eob_cost[SIG_COEF_CONTEXTS_EOB][3];
- int base_cost[SIG_COEF_CONTEXTS][4];
- int eob_extra_cost[EOB_COEF_CONTEXTS][2];
- int dc_sign_cost[DC_SIGN_CONTEXTS][2];
- int lps_cost[LEVEL_CONTEXTS][COEFF_BASE_RANGE + 1];
-} LV_MAP_COEFF_COST;
-
-typedef struct {
- int eob_cost[2][11];
-} LV_MAP_EOB_COST;
-
-typedef struct {
- tran_low_t tcoeff[MAX_MB_PLANE][MAX_SB_SQUARE];
- uint16_t eobs[MAX_MB_PLANE][MAX_SB_SQUARE / (TX_SIZE_W_MIN * TX_SIZE_H_MIN)];
- uint8_t txb_skip_ctx[MAX_MB_PLANE]
- [MAX_SB_SQUARE / (TX_SIZE_W_MIN * TX_SIZE_H_MIN)];
- int dc_sign_ctx[MAX_MB_PLANE]
- [MAX_SB_SQUARE / (TX_SIZE_W_MIN * TX_SIZE_H_MIN)];
-} CB_COEFF_BUFFER;
-
-typedef struct {
- int16_t mode_context[MODE_CTX_REF_FRAMES];
- // TODO(angiebird): Reduce the buffer size according to sb_type
- tran_low_t *tcoeff[MAX_MB_PLANE];
- uint16_t *eobs[MAX_MB_PLANE];
- uint8_t *txb_skip_ctx[MAX_MB_PLANE];
- int *dc_sign_ctx[MAX_MB_PLANE];
- uint8_t ref_mv_count[MODE_CTX_REF_FRAMES];
- CANDIDATE_MV ref_mv_stack[MODE_CTX_REF_FRAMES][MAX_REF_MV_STACK_SIZE];
- int_mv global_mvs[REF_FRAMES];
- int16_t compound_mode_context[MODE_CTX_REF_FRAMES];
-} MB_MODE_INFO_EXT;
-
-typedef struct {
- int col_min;
- int col_max;
- int row_min;
- int row_max;
-} MvLimits;
-
-typedef struct {
- uint8_t best_palette_color_map[MAX_PALETTE_SQUARE];
- int kmeans_data_buf[2 * MAX_PALETTE_SQUARE];
-} PALETTE_BUFFER;
-
-typedef struct {
- TX_SIZE tx_size;
- TX_SIZE inter_tx_size[INTER_TX_SIZE_BUF_LEN];
- uint8_t blk_skip[MAX_MIB_SIZE * MAX_MIB_SIZE];
- TX_TYPE txk_type[TXK_TYPE_BUF_LEN];
- RD_STATS rd_stats;
- uint32_t hash_value;
-} MB_RD_INFO;
-
-#define RD_RECORD_BUFFER_LEN 8
-typedef struct {
- MB_RD_INFO tx_rd_info[RD_RECORD_BUFFER_LEN]; // Circular buffer.
- int index_start;
- int num;
- CRC32C crc_calculator; // Hash function.
-} MB_RD_RECORD;
-
-typedef struct {
- int64_t dist;
- int64_t sse;
- int rate;
- uint16_t eob;
- TX_TYPE tx_type;
- uint16_t entropy_context;
- uint8_t txb_entropy_ctx;
- uint8_t valid;
- uint8_t fast; // This is not being used now.
-} TXB_RD_INFO;
-
-#define TX_SIZE_RD_RECORD_BUFFER_LEN 256
-typedef struct {
- uint32_t hash_vals[TX_SIZE_RD_RECORD_BUFFER_LEN];
- TXB_RD_INFO tx_rd_info[TX_SIZE_RD_RECORD_BUFFER_LEN];
- int index_start;
- int num;
-} TXB_RD_RECORD;
-
-typedef struct tx_size_rd_info_node {
- TXB_RD_INFO *rd_info_array; // Points to array of size TX_TYPES.
- struct tx_size_rd_info_node *children[4];
-} TXB_RD_INFO_NODE;
-
-// Region size for mode decision sampling in the first pass of partition
-// search(two_pass_partition_search speed feature), in units of mi size(4).
-// Used by the mode_pruning_based_on_two_pass_partition_search speed feature.
-#define FIRST_PARTITION_PASS_SAMPLE_REGION 8
-#define FIRST_PARTITION_PASS_SAMPLE_REGION_LOG2 3
-#define FIRST_PARTITION_PASS_STATS_TABLES \
- (MAX_MIB_SIZE >> FIRST_PARTITION_PASS_SAMPLE_REGION_LOG2) * \
- (MAX_MIB_SIZE >> FIRST_PARTITION_PASS_SAMPLE_REGION_LOG2)
-#define FIRST_PARTITION_PASS_STATS_STRIDE \
- (MAX_MIB_SIZE_LOG2 - FIRST_PARTITION_PASS_SAMPLE_REGION_LOG2)
-
-static INLINE int av1_first_partition_pass_stats_index(int mi_row, int mi_col) {
- const int row =
- (mi_row & MAX_MIB_MASK) >> FIRST_PARTITION_PASS_SAMPLE_REGION_LOG2;
- const int col =
- (mi_col & MAX_MIB_MASK) >> FIRST_PARTITION_PASS_SAMPLE_REGION_LOG2;
- return (row << FIRST_PARTITION_PASS_STATS_STRIDE) + col;
-}
-
-typedef struct {
- uint8_t ref0_counts[REF_FRAMES]; // Counters for ref_frame[0].
- uint8_t ref1_counts[REF_FRAMES]; // Counters for ref_frame[1].
- int sample_counts; // Number of samples collected.
-} FIRST_PARTITION_PASS_STATS;
-
-#define MAX_INTERP_FILTER_STATS 64
-typedef struct {
- InterpFilters filters;
- int_mv mv[2];
- int8_t ref_frames[2];
- COMPOUND_TYPE comp_type;
-} INTERPOLATION_FILTER_STATS;
-
-typedef struct macroblock MACROBLOCK;
-struct macroblock {
- struct macroblock_plane plane[MAX_MB_PLANE];
-
- // Determine if one would go with reduced complexity transform block
- // search model to select prediction modes, or full complexity model
- // to select transform kernel.
- int rd_model;
-
- // Indicate if the encoder is running in the first pass partition search.
- // In that case, apply certain speed features therein to reduce the overhead
- // cost in the first pass search.
- int cb_partition_scan;
-
- FIRST_PARTITION_PASS_STATS
- first_partition_pass_stats[FIRST_PARTITION_PASS_STATS_TABLES];
-
- // [comp_idx][saved stat_idx]
- INTERPOLATION_FILTER_STATS interp_filter_stats[2][MAX_INTERP_FILTER_STATS];
- int interp_filter_stats_idx[2];
-
- // Activate constrained coding block partition search range.
- int use_cb_search_range;
-
- // Inter macroblock RD search info.
- MB_RD_RECORD mb_rd_record;
-
- // Inter transform block RD search info. for square TX sizes.
- TXB_RD_RECORD txb_rd_record_8X8[(MAX_MIB_SIZE >> 1) * (MAX_MIB_SIZE >> 1)];
- TXB_RD_RECORD txb_rd_record_16X16[(MAX_MIB_SIZE >> 2) * (MAX_MIB_SIZE >> 2)];
- TXB_RD_RECORD txb_rd_record_32X32[(MAX_MIB_SIZE >> 3) * (MAX_MIB_SIZE >> 3)];
- TXB_RD_RECORD txb_rd_record_64X64[(MAX_MIB_SIZE >> 4) * (MAX_MIB_SIZE >> 4)];
-
- // Intra transform block RD search info. for square TX sizes.
- TXB_RD_RECORD txb_rd_record_intra;
-
- MACROBLOCKD e_mbd;
- MB_MODE_INFO_EXT *mbmi_ext;
- int skip_block;
- int qindex;
-
- // The equivalent error at the current rdmult of one whole bit (not one
- // bitcost unit).
- int errorperbit;
- // The equivalend SAD error of one (whole) bit at the current quantizer
- // for large blocks.
- int sadperbit16;
- // The equivalend SAD error of one (whole) bit at the current quantizer
- // for sub-8x8 blocks.
- int sadperbit4;
- int rdmult;
- int mb_energy;
- int sb_energy_level;
- int *m_search_count_ptr;
- int *ex_search_count_ptr;
-
- unsigned int txb_split_count;
-
- // These are set to their default values at the beginning, and then adjusted
- // further in the encoding process.
- BLOCK_SIZE min_partition_size;
- BLOCK_SIZE max_partition_size;
-
- unsigned int max_mv_context[REF_FRAMES];
- unsigned int source_variance;
- unsigned int pred_sse[REF_FRAMES];
- int pred_mv_sad[REF_FRAMES];
-
- int *nmvjointcost;
- int nmv_vec_cost[MV_JOINTS];
- int *nmvcost[2];
- int *nmvcost_hp[2];
- int **mv_cost_stack;
- int **mvcost;
-
- int32_t *wsrc_buf;
- int32_t *mask_buf;
- uint8_t *above_pred_buf;
- uint8_t *left_pred_buf;
-
- PALETTE_BUFFER *palette_buffer;
-
- CONV_BUF_TYPE *tmp_conv_dst;
- uint8_t *tmp_obmc_bufs[2];
-
- // buffer for hash value calculation of a block
- // used only in av1_get_block_hash_value()
- // [first hash/second hash]
- // [two buffers used ping-pong]
- uint32_t *hash_value_buffer[2][2];
-
- CRC_CALCULATOR crc_calculator1;
- CRC_CALCULATOR crc_calculator2;
- int g_crc_initialized;
-
- // These define limits to motion vector components to prevent them
- // from extending outside the UMV borders
- MvLimits mv_limits;
-
- uint8_t blk_skip[MAX_MIB_SIZE * MAX_MIB_SIZE];
-
- int skip;
- int skip_chroma_rd;
- int skip_cost[SKIP_CONTEXTS][2];
-
- int skip_mode; // 0: off; 1: on
- int skip_mode_cost[SKIP_CONTEXTS][2];
-
- int compound_idx;
-
- LV_MAP_COEFF_COST coeff_costs[TX_SIZES][PLANE_TYPES];
- LV_MAP_EOB_COST eob_costs[7][2];
- uint16_t cb_offset;
-
- // mode costs
- int intra_inter_cost[INTRA_INTER_CONTEXTS][2];
-
- int mbmode_cost[BLOCK_SIZE_GROUPS][INTRA_MODES];
- int newmv_mode_cost[NEWMV_MODE_CONTEXTS][2];
- int zeromv_mode_cost[GLOBALMV_MODE_CONTEXTS][2];
- int refmv_mode_cost[REFMV_MODE_CONTEXTS][2];
- int drl_mode_cost0[DRL_MODE_CONTEXTS][2];
-
- int comp_inter_cost[COMP_INTER_CONTEXTS][2];
- int single_ref_cost[REF_CONTEXTS][SINGLE_REFS - 1][2];
- int comp_ref_type_cost[COMP_REF_TYPE_CONTEXTS]
- [CDF_SIZE(COMP_REFERENCE_TYPES)];
- int uni_comp_ref_cost[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1]
- [CDF_SIZE(2)];
- // Cost for signaling ref_frame[0] (LAST_FRAME, LAST2_FRAME, LAST3_FRAME or
- // GOLDEN_FRAME) in bidir-comp mode.
- int comp_ref_cost[REF_CONTEXTS][FWD_REFS - 1][2];
- // Cost for signaling ref_frame[1] (ALTREF_FRAME, ALTREF2_FRAME, or
- // BWDREF_FRAME) in bidir-comp mode.
- int comp_bwdref_cost[REF_CONTEXTS][BWD_REFS - 1][2];
- int inter_compound_mode_cost[INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES];
- int compound_type_cost[BLOCK_SIZES_ALL][COMPOUND_TYPES - 1];
- int wedge_idx_cost[BLOCK_SIZES_ALL][16];
- int interintra_cost[BLOCK_SIZE_GROUPS][2];
- int wedge_interintra_cost[BLOCK_SIZES_ALL][2];
- int interintra_mode_cost[BLOCK_SIZE_GROUPS][INTERINTRA_MODES];
- int motion_mode_cost[BLOCK_SIZES_ALL][MOTION_MODES];
- int motion_mode_cost1[BLOCK_SIZES_ALL][2];
- int intra_uv_mode_cost[CFL_ALLOWED_TYPES][INTRA_MODES][UV_INTRA_MODES];
- int y_mode_costs[INTRA_MODES][INTRA_MODES][INTRA_MODES];
- int filter_intra_cost[BLOCK_SIZES_ALL][2];
- int filter_intra_mode_cost[FILTER_INTRA_MODES];
- int switchable_interp_costs[SWITCHABLE_FILTER_CONTEXTS][SWITCHABLE_FILTERS];
- int partition_cost[PARTITION_CONTEXTS][EXT_PARTITION_TYPES];
- int palette_y_size_cost[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
- int palette_uv_size_cost[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
- int palette_y_color_cost[PALETTE_SIZES][PALETTE_COLOR_INDEX_CONTEXTS]
- [PALETTE_COLORS];
- int palette_uv_color_cost[PALETTE_SIZES][PALETTE_COLOR_INDEX_CONTEXTS]
- [PALETTE_COLORS];
- int palette_y_mode_cost[PALATTE_BSIZE_CTXS][PALETTE_Y_MODE_CONTEXTS][2];
- int palette_uv_mode_cost[PALETTE_UV_MODE_CONTEXTS][2];
- // The rate associated with each alpha codeword
- int cfl_cost[CFL_JOINT_SIGNS][CFL_PRED_PLANES][CFL_ALPHABET_SIZE];
- int tx_size_cost[TX_SIZES - 1][TX_SIZE_CONTEXTS][TX_SIZES];
- int txfm_partition_cost[TXFM_PARTITION_CONTEXTS][2];
- int inter_tx_type_costs[EXT_TX_SETS_INTER][EXT_TX_SIZES][TX_TYPES];
- int intra_tx_type_costs[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES]
- [TX_TYPES];
- int angle_delta_cost[DIRECTIONAL_MODES][2 * MAX_ANGLE_DELTA + 1];
- int switchable_restore_cost[RESTORE_SWITCHABLE_TYPES];
- int wiener_restore_cost[2];
- int sgrproj_restore_cost[2];
- int intrabc_cost[2];
-
- // Used to store sub partition's choices.
- MV pred_mv[REF_FRAMES];
-
- // Store the best motion vector during motion search
- int_mv best_mv;
- // Store the second best motion vector during full-pixel motion search
- int_mv second_best_mv;
-
- // use default transform and skip transform type search for intra modes
- int use_default_intra_tx_type;
- // use default transform and skip transform type search for inter modes
- int use_default_inter_tx_type;
-#if CONFIG_DIST_8X8
- int using_dist_8x8;
- aom_tune_metric tune_metric;
-#endif // CONFIG_DIST_8X8
- int comp_idx_cost[COMP_INDEX_CONTEXTS][2];
- int comp_group_idx_cost[COMP_GROUP_IDX_CONTEXTS][2];
- // Bit flags for pruning tx type search, tx split, etc.
- int tx_search_prune[EXT_TX_SET_TYPES];
- int must_find_valid_partition;
- int tx_split_prune_flag; // Flag to skip tx split RD search.
- int recalc_luma_mc_data; // Flag to indicate recalculation of MC data during
- // interpolation filter search
-};
-
-static INLINE int is_rect_tx_allowed_bsize(BLOCK_SIZE bsize) {
- static const char LUT[BLOCK_SIZES_ALL] = {
- 0, // BLOCK_4X4
- 1, // BLOCK_4X8
- 1, // BLOCK_8X4
- 0, // BLOCK_8X8
- 1, // BLOCK_8X16
- 1, // BLOCK_16X8
- 0, // BLOCK_16X16
- 1, // BLOCK_16X32
- 1, // BLOCK_32X16
- 0, // BLOCK_32X32
- 1, // BLOCK_32X64
- 1, // BLOCK_64X32
- 0, // BLOCK_64X64
- 0, // BLOCK_64X128
- 0, // BLOCK_128X64
- 0, // BLOCK_128X128
- 1, // BLOCK_4X16
- 1, // BLOCK_16X4
- 1, // BLOCK_8X32
- 1, // BLOCK_32X8
- 1, // BLOCK_16X64
- 1, // BLOCK_64X16
- };
-
- return LUT[bsize];
-}
-
-static INLINE int is_rect_tx_allowed(const MACROBLOCKD *xd,
- const MB_MODE_INFO *mbmi) {
- return is_rect_tx_allowed_bsize(mbmi->sb_type) &&
- !xd->lossless[mbmi->segment_id];
-}
-
-static INLINE int tx_size_to_depth(TX_SIZE tx_size, BLOCK_SIZE bsize) {
- TX_SIZE ctx_size = max_txsize_rect_lookup[bsize];
- int depth = 0;
- while (tx_size != ctx_size) {
- depth++;
- ctx_size = sub_tx_size_map[ctx_size];
- assert(depth <= MAX_TX_DEPTH);
- }
- return depth;
-}
-
-static INLINE void set_blk_skip(MACROBLOCK *x, int plane, int blk_idx,
- int skip) {
- if (skip)
- x->blk_skip[blk_idx] |= 1UL << plane;
- else
- x->blk_skip[blk_idx] &= ~(1UL << plane);
-#ifndef NDEBUG
- // Set chroma planes to uninitialized states when luma is set to check if
- // it will be set later
- if (plane == 0) {
- x->blk_skip[blk_idx] |= 1UL << (1 + 4);
- x->blk_skip[blk_idx] |= 1UL << (2 + 4);
- }
-
- // Clear the initialization checking bit
- x->blk_skip[blk_idx] &= ~(1UL << (plane + 4));
-#endif
-}
-
-static INLINE int is_blk_skip(MACROBLOCK *x, int plane, int blk_idx) {
-#ifndef NDEBUG
- // Check if this is initialized
- assert(!(x->blk_skip[blk_idx] & (1UL << (plane + 4))));
-
- // The magic number is 0x77, this is to test if there is garbage data
- assert((x->blk_skip[blk_idx] & 0x88) == 0);
-#endif
- return (x->blk_skip[blk_idx] >> plane) & 1;
-}
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#endif // AOM_AV1_ENCODER_BLOCK_H_