summaryrefslogtreecommitdiff
path: root/third_party/aom/av1/common/onyxc_int.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/aom/av1/common/onyxc_int.h')
-rw-r--r--third_party/aom/av1/common/onyxc_int.h112
1 files changed, 56 insertions, 56 deletions
diff --git a/third_party/aom/av1/common/onyxc_int.h b/third_party/aom/av1/common/onyxc_int.h
index 7980bde394..38750c4756 100644
--- a/third_party/aom/av1/common/onyxc_int.h
+++ b/third_party/aom/av1/common/onyxc_int.h
@@ -100,9 +100,7 @@ typedef enum {
typedef struct {
int_mv mv[2];
-#if CONFIG_REF_MV
int_mv pred_mv[2];
-#endif
MV_REFERENCE_FRAME ref_frame[2];
} MV_REF;
@@ -163,12 +161,6 @@ typedef struct AV1Common {
int last_width;
int last_height;
-#if CONFIG_FRAME_SUPERRES
- // The numerator of the superres scale, the denominator is fixed
- uint8_t superres_scale_numerator;
- int superres_width, superres_height;
-#endif // CONFIG_FRAME_SUPERRES
-
// TODO(jkoleszar): this implies chroma ss right now, but could vary per
// plane. Revisit as part of the future change to YV12_BUFFER_CONFIG to
// support additional planes.
@@ -216,9 +208,17 @@ typedef struct AV1Common {
int allow_high_precision_mv;
-#if CONFIG_PALETTE
+#if CONFIG_PALETTE || CONFIG_INTRABC
int allow_screen_content_tools;
-#endif // CONFIG_PALETTE
+#endif // CONFIG_PALETTE || CONFIG_INTRABC
+#if CONFIG_EXT_INTER
+#if CONFIG_INTERINTRA
+ int allow_interintra_compound;
+#endif // CONFIG_INTERINTRA
+#if CONFIG_WEDGE || CONFIG_COMPOUND_SEGMENT
+ int allow_masked_compound;
+#endif // CONFIG_WEDGE || CONFIG_COMPOUND_SEGMENT
+#endif // CONFIG_EXT_INTER
// Flag signaling which frame contexts should be reset to default values.
RESET_FRAME_CONTEXT_MODE reset_frame_context;
@@ -242,15 +242,15 @@ typedef struct AV1Common {
#if CONFIG_AOM_QM
// Global quant matrix tables
- qm_val_t *giqmatrix[NUM_QM_LEVELS][2][2][TX_SIZES];
- qm_val_t *gqmatrix[NUM_QM_LEVELS][2][2][TX_SIZES];
+ qm_val_t *giqmatrix[NUM_QM_LEVELS][2][2][TX_SIZES_ALL];
+ qm_val_t *gqmatrix[NUM_QM_LEVELS][2][2][TX_SIZES_ALL];
// Local quant matrix tables for each frame
- qm_val_t *y_iqmatrix[MAX_SEGMENTS][2][TX_SIZES];
- qm_val_t *uv_iqmatrix[MAX_SEGMENTS][2][TX_SIZES];
+ qm_val_t *y_iqmatrix[MAX_SEGMENTS][2][TX_SIZES_ALL];
+ qm_val_t *uv_iqmatrix[MAX_SEGMENTS][2][TX_SIZES_ALL];
// Encoder
- qm_val_t *y_qmatrix[MAX_SEGMENTS][2][TX_SIZES];
- qm_val_t *uv_qmatrix[MAX_SEGMENTS][2][TX_SIZES];
+ qm_val_t *y_qmatrix[MAX_SEGMENTS][2][TX_SIZES_ALL];
+ qm_val_t *uv_qmatrix[MAX_SEGMENTS][2][TX_SIZES_ALL];
int using_qmatrix;
int min_qmlevel;
@@ -299,6 +299,10 @@ typedef struct AV1Common {
InterpFilter interp_filter;
loop_filter_info_n lf_info;
+#if CONFIG_FRAME_SUPERRES
+ // The numerator of the superres scale; the denominator is fixed.
+ uint8_t superres_scale_numerator;
+#endif // CONFIG_FRAME_SUPERRES
#if CONFIG_LOOP_RESTORATION
RestorationInfo rst_info[MAX_MB_PLANE];
RestorationInternal rst_internal;
@@ -331,21 +335,10 @@ typedef struct AV1Common {
FRAME_CONTEXT *fc; /* this frame entropy */
FRAME_CONTEXT *frame_contexts; // FRAME_CONTEXTS
+ FRAME_CONTEXT *pre_fc; // Context referenced in this frame
unsigned int frame_context_idx; /* Context to use/update */
FRAME_COUNTS counts;
-#if CONFIG_SUBFRAME_PROB_UPDATE
- // The initial probabilities for a frame, before any subframe backward update,
- // and after forward update.
- av1_coeff_probs_model starting_coef_probs[TX_SIZES][PLANE_TYPES];
- // Number of subframe backward updates already done
- uint8_t coef_probs_update_idx;
- // Signal if the backward update is subframe or end-of-frame
- uint8_t partial_prob_update;
- // Frame level flag to turn on/off subframe backward update
- uint8_t do_subframe_update;
-#endif // CONFIG_SUBFRAME_PROB_UPDATE
-
unsigned int current_video_frame;
BITSTREAM_PROFILE profile;
@@ -393,7 +386,8 @@ typedef struct AV1Common {
ENTROPY_CONTEXT *above_context[MAX_MB_PLANE];
#if CONFIG_VAR_TX
TXFM_CONTEXT *above_txfm_context;
- TXFM_CONTEXT left_txfm_context[MAX_MIB_SIZE];
+ TXFM_CONTEXT *top_txfm_context[MAX_MB_PLANE];
+ TXFM_CONTEXT left_txfm_context[MAX_MB_PLANE][2 * MAX_MIB_SIZE];
#endif
int above_context_alloc_cols;
@@ -576,17 +570,20 @@ static INLINE void av1_init_macroblockd(AV1_COMMON *cm, MACROBLOCKD *xd,
static INLINE void set_skip_context(MACROBLOCKD *xd, int mi_row, int mi_col) {
int i;
+ int row_offset = mi_row;
+ int col_offset = mi_col;
for (i = 0; i < MAX_MB_PLANE; ++i) {
struct macroblockd_plane *const pd = &xd->plane[i];
#if CONFIG_CHROMA_SUB8X8
if (xd->mi[0]->mbmi.sb_type < BLOCK_8X8) {
// Offset the buffer pointer
- if (pd->subsampling_y && (mi_row & 0x01)) mi_row -= 1;
- if (pd->subsampling_x && (mi_col & 0x01)) mi_col -= 1;
+ if (pd->subsampling_y && (mi_row & 0x01)) row_offset = mi_row - 1;
+ if (pd->subsampling_x && (mi_col & 0x01)) col_offset = mi_col - 1;
}
#endif
- int above_idx = mi_col * 2;
- int left_idx = (mi_row * 2) & MAX_MIB_MASK_2;
+ int above_idx = col_offset << (MI_SIZE_LOG2 - tx_size_wide_log2[0]);
+ int left_idx = (row_offset & MAX_MIB_MASK)
+ << (MI_SIZE_LOG2 - tx_size_high_log2[0]);
pd->above_context = &xd->above_context[i][above_idx >> pd->subsampling_x];
pd->left_context = &xd->left_context[i][left_idx >> pd->subsampling_y];
}
@@ -668,14 +665,12 @@ static INLINE void set_mi_row_col(MACROBLOCKD *xd, const TileInfo *const tile,
xd->n8_h = bh;
xd->n8_w = bw;
-#if CONFIG_REF_MV
xd->is_sec_rect = 0;
if (xd->n8_w < xd->n8_h)
if (mi_col & (xd->n8_h - 1)) xd->is_sec_rect = 1;
if (xd->n8_w > xd->n8_h)
if (mi_row & (xd->n8_w - 1)) xd->is_sec_rect = 1;
-#endif // CONFIG_REF_MV
}
static INLINE const aom_prob *get_y_mode_probs(const AV1_COMMON *cm,
@@ -688,7 +683,6 @@ static INLINE const aom_prob *get_y_mode_probs(const AV1_COMMON *cm,
return cm->kf_y_prob[above][left];
}
-#if CONFIG_EC_MULTISYMBOL
static INLINE aom_cdf_prob *get_y_mode_cdf(FRAME_CONTEXT *tile_ctx,
const MODE_INFO *mi,
const MODE_INFO *above_mi,
@@ -698,7 +692,6 @@ static INLINE aom_cdf_prob *get_y_mode_cdf(FRAME_CONTEXT *tile_ctx,
const PREDICTION_MODE left = av1_left_block_mode(mi, left_mi, block);
return tile_ctx->kf_y_cdf[above][left];
}
-#endif
static INLINE void update_partition_context(MACROBLOCKD *xd, int mi_row,
int mi_col, BLOCK_SIZE subsize,
@@ -873,8 +866,8 @@ static INLINE void av1_zero_above_context(AV1_COMMON *const cm,
const int width = mi_col_end - mi_col_start;
const int aligned_width = ALIGN_POWER_OF_TWO(width, cm->mib_size_log2);
- const int offset_y = 2 * mi_col_start;
- const int width_y = 2 * aligned_width;
+ const int offset_y = mi_col_start << (MI_SIZE_LOG2 - tx_size_wide_log2[0]);
+ const int width_y = aligned_width << (MI_SIZE_LOG2 - tx_size_wide_log2[0]);
const int offset_uv = offset_y >> cm->subsampling_x;
const int width_uv = width_y >> cm->subsampling_x;
@@ -885,7 +878,8 @@ static INLINE void av1_zero_above_context(AV1_COMMON *const cm,
av1_zero_array(cm->above_seg_context + mi_col_start, aligned_width);
#if CONFIG_VAR_TX
- av1_zero_array(cm->above_txfm_context + mi_col_start, aligned_width);
+ av1_zero_array(cm->above_txfm_context + (mi_col_start << TX_UNIT_WIDE_LOG2),
+ aligned_width << TX_UNIT_WIDE_LOG2);
#endif // CONFIG_VAR_TX
}
@@ -899,7 +893,7 @@ static INLINE void av1_zero_left_context(MACROBLOCKD *const xd) {
#if CONFIG_VAR_TX
static INLINE TX_SIZE get_min_tx_size(TX_SIZE tx_size) {
- if (tx_size >= TX_SIZES_ALL) assert(0);
+ assert(tx_size < TX_SIZES_ALL);
return txsize_sqr_map[tx_size];
}
@@ -918,16 +912,16 @@ static INLINE void set_txfm_ctxs(TX_SIZE tx_size, int n8_w, int n8_h, int skip,
bh = n8_h * MI_SIZE;
}
- set_txfm_ctx(xd->above_txfm_context, bw, n8_w);
- set_txfm_ctx(xd->left_txfm_context, bh, n8_h);
+ set_txfm_ctx(xd->above_txfm_context, bw, n8_w << TX_UNIT_WIDE_LOG2);
+ set_txfm_ctx(xd->left_txfm_context, bh, n8_h << TX_UNIT_HIGH_LOG2);
}
static INLINE void txfm_partition_update(TXFM_CONTEXT *above_ctx,
TXFM_CONTEXT *left_ctx,
TX_SIZE tx_size, TX_SIZE txb_size) {
BLOCK_SIZE bsize = txsize_to_bsize[txb_size];
- int bh = mi_size_high[bsize];
- int bw = mi_size_wide[bsize];
+ int bh = mi_size_high[bsize] << TX_UNIT_HIGH_LOG2;
+ int bw = mi_size_wide[bsize] << TX_UNIT_WIDE_LOG2;
uint8_t txw = tx_size_wide[tx_size];
uint8_t txh = tx_size_high[tx_size];
int i;
@@ -935,6 +929,21 @@ static INLINE void txfm_partition_update(TXFM_CONTEXT *above_ctx,
for (i = 0; i < bw; ++i) above_ctx[i] = txw;
}
+static INLINE TX_SIZE get_sqr_tx_size(int tx_dim) {
+ TX_SIZE tx_size;
+ switch (tx_dim) {
+#if CONFIG_EXT_PARTITION
+ case 128:
+#endif
+ case 64:
+ case 32: tx_size = TX_32X32; break;
+ case 16: tx_size = TX_16X16; break;
+ case 8: tx_size = TX_8X8; break;
+ default: tx_size = TX_4X4;
+ }
+ return tx_size;
+}
+
static INLINE int txfm_partition_context(TXFM_CONTEXT *above_ctx,
TXFM_CONTEXT *left_ctx,
BLOCK_SIZE bsize, TX_SIZE tx_size) {
@@ -942,22 +951,13 @@ static INLINE int txfm_partition_context(TXFM_CONTEXT *above_ctx,
const uint8_t txh = tx_size_high[tx_size];
const int above = *above_ctx < txw;
const int left = *left_ctx < txh;
- TX_SIZE max_tx_size = max_txsize_lookup[bsize];
int category = TXFM_PARTITION_CONTEXTS - 1;
// dummy return, not used by others.
if (tx_size <= TX_4X4) return 0;
- switch (AOMMAX(block_size_wide[bsize], block_size_high[bsize])) {
-#if CONFIG_EXT_PARTITION
- case 128:
-#endif
- case 64:
- case 32: max_tx_size = TX_32X32; break;
- case 16: max_tx_size = TX_16X16; break;
- case 8: max_tx_size = TX_8X8; break;
- default: assert(0);
- }
+ TX_SIZE max_tx_size =
+ get_sqr_tx_size(AOMMAX(block_size_wide[bsize], block_size_high[bsize]));
if (max_tx_size >= TX_8X8) {
category = (tx_size != max_tx_size && max_tx_size > TX_8X8) +