Group compound type elements in AV1EncoderConfig
This CL groups together compound type related elements from
AV1EncoderConfig into a new structure CompoundTypeCfg, changes
datatypes of flags to bool, and adds relevant documentation.
BUG=aomedia:2701
Change-Id: If00dc76a3a1c785d53906364f56b96efc173bef2
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index f0f18e4..c9addb8 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -712,6 +712,8 @@
TxfmSizeTypeCfg *const txfm_cfg = &oxcf->txfm_cfg;
+ CompoundTypeCfg *const comp_type_cfg = &oxcf->comp_type_cfg;
+
const int is_vbr = cfg->rc_end_usage == AOM_VBR;
oxcf->profile = cfg->g_profile;
oxcf->fwd_kf_enabled = cfg->fwd_kf_enabled;
@@ -929,21 +931,10 @@
oxcf->min_partition_size = extra_cfg->min_partition_size;
oxcf->max_partition_size = extra_cfg->max_partition_size;
oxcf->enable_order_hint = extra_cfg->enable_order_hint;
- oxcf->enable_dist_wtd_comp =
- extra_cfg->enable_dist_wtd_comp & extra_cfg->enable_order_hint;
oxcf->max_reference_frames = extra_cfg->max_reference_frames;
oxcf->enable_reduced_reference_set = extra_cfg->enable_reduced_reference_set;
- oxcf->enable_masked_comp = extra_cfg->enable_masked_comp;
oxcf->enable_onesided_comp = extra_cfg->enable_onesided_comp;
- oxcf->enable_diff_wtd_comp =
- extra_cfg->enable_masked_comp & extra_cfg->enable_diff_wtd_comp;
- oxcf->enable_interinter_wedge =
- extra_cfg->enable_masked_comp & extra_cfg->enable_interinter_wedge;
oxcf->enable_interintra_comp = extra_cfg->enable_interintra_comp;
- oxcf->enable_smooth_interintra =
- extra_cfg->enable_interintra_comp && extra_cfg->enable_smooth_interintra;
- oxcf->enable_interintra_wedge =
- extra_cfg->enable_interintra_comp & extra_cfg->enable_interintra_wedge;
oxcf->enable_ref_frame_mvs =
extra_cfg->enable_ref_frame_mvs & extra_cfg->enable_order_hint;
@@ -971,6 +962,19 @@
txfm_cfg->use_inter_dct_only = extra_cfg->use_inter_dct_only;
txfm_cfg->use_intra_default_tx_only = extra_cfg->use_intra_default_tx_only;
+ // Set compound type configuration.
+ comp_type_cfg->enable_dist_wtd_comp =
+ extra_cfg->enable_dist_wtd_comp & extra_cfg->enable_order_hint;
+ comp_type_cfg->enable_masked_comp = extra_cfg->enable_masked_comp;
+ comp_type_cfg->enable_diff_wtd_comp =
+ extra_cfg->enable_masked_comp & extra_cfg->enable_diff_wtd_comp;
+ comp_type_cfg->enable_interinter_wedge =
+ extra_cfg->enable_masked_comp & extra_cfg->enable_interinter_wedge;
+ comp_type_cfg->enable_smooth_interintra =
+ extra_cfg->enable_interintra_comp && extra_cfg->enable_smooth_interintra;
+ comp_type_cfg->enable_interintra_wedge =
+ extra_cfg->enable_interintra_comp & extra_cfg->enable_interintra_wedge;
+
oxcf->enable_superres =
(oxcf->superres_mode != AOM_SUPERRES_NONE) && extra_cfg->enable_superres;
if (!oxcf->enable_superres) {
diff --git a/av1/encoder/compound_type.c b/av1/encoder/compound_type.c
index 6025797..6deb4aa 100644
--- a/av1/encoder/compound_type.c
+++ b/av1/encoder/compound_type.c
@@ -107,13 +107,15 @@
static INLINE bool enable_wedge_interinter_search(MACROBLOCK *const x,
const AV1_COMP *const cpi) {
- return enable_wedge_search(x, cpi) && cpi->oxcf.enable_interinter_wedge &&
+ return enable_wedge_search(x, cpi) &&
+ cpi->oxcf.comp_type_cfg.enable_interinter_wedge &&
!cpi->sf.inter_sf.disable_interinter_wedge;
}
static INLINE bool enable_wedge_interintra_search(MACROBLOCK *const x,
const AV1_COMP *const cpi) {
- return enable_wedge_search(x, cpi) && cpi->oxcf.enable_interintra_wedge &&
+ return enable_wedge_search(x, cpi) &&
+ cpi->oxcf.comp_type_cfg.enable_interintra_wedge &&
!cpi->sf.inter_sf.disable_wedge_interintra_search;
}
@@ -548,8 +550,9 @@
HandleInterModeArgs *args, int64_t ref_best_rd,
int *rate_mv, int *tmp_rate2,
const BUFFER_SET *orig_dst) {
- const int try_smooth_interintra = cpi->oxcf.enable_smooth_interintra &&
- !cpi->sf.inter_sf.disable_smooth_interintra;
+ const int try_smooth_interintra =
+ cpi->oxcf.comp_type_cfg.enable_smooth_interintra &&
+ !cpi->sf.inter_sf.disable_smooth_interintra;
const int is_wedge_used = av1_is_wedge_used(bsize);
const int try_wedge_interintra =
is_wedge_used && enable_wedge_interintra_search(x, cpi);
@@ -606,7 +609,7 @@
}
args->inter_intra_mode[mbmi->ref_frame[0]] = best_interintra_mode;
}
- assert(IMPLIES(!cpi->oxcf.enable_smooth_interintra ||
+ assert(IMPLIES(!cpi->oxcf.comp_type_cfg.enable_smooth_interintra ||
cpi->sf.inter_sf.disable_smooth_interintra,
best_interintra_mode != II_SMOOTH_PRED));
// Recompute prediction if required
@@ -825,7 +828,7 @@
// enable_masked_type[0] corresponds to COMPOUND_WEDGE
// enable_masked_type[1] corresponds to COMPOUND_DIFFWTD
enable_masked_type[0] = enable_wedge_interinter_search(x, cpi);
- enable_masked_type[1] = cpi->oxcf.enable_diff_wtd_comp;
+ enable_masked_type[1] = cpi->oxcf.comp_type_cfg.enable_diff_wtd_comp;
for (comp_type = COMPOUND_WEDGE; comp_type <= COMPOUND_DIFFWTD;
comp_type++) {
if ((mode_search_mask & (1 << comp_type)) &&
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index cebff7a5..3b2b2a1 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -1334,7 +1334,8 @@
seq->delta_frame_id_length = DELTA_FRAME_ID_LENGTH;
seq->enable_dual_filter = oxcf->enable_dual_filter;
- seq->order_hint_info.enable_dist_wtd_comp = oxcf->enable_dist_wtd_comp;
+ seq->order_hint_info.enable_dist_wtd_comp =
+ oxcf->comp_type_cfg.enable_dist_wtd_comp;
seq->order_hint_info.enable_dist_wtd_comp &=
seq->order_hint_info.enable_order_hint;
seq->order_hint_info.enable_ref_frame_mvs = oxcf->enable_ref_frame_mvs;
@@ -1345,7 +1346,7 @@
seq->enable_restoration = oxcf->enable_restoration;
seq->enable_warped_motion = oxcf->enable_warped_motion;
seq->enable_interintra_compound = oxcf->enable_interintra_comp;
- seq->enable_masked_compound = oxcf->enable_masked_comp;
+ seq->enable_masked_compound = oxcf->comp_type_cfg.enable_masked_comp;
seq->enable_intra_edge_filter = oxcf->intra_mode_cfg.enable_intra_edge_filter;
seq->enable_filter_intra = oxcf->intra_mode_cfg.enable_filter_intra;
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 8a82b73..a6c81af 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -290,6 +290,22 @@
bool use_intra_default_tx_only;
} TxfmSizeTypeCfg;
+typedef struct {
+ // Flag to indicate if distance-weighted compound type should be enabled.
+ bool enable_dist_wtd_comp;
+ // Flag to indicate if masked (wedge/diff-wtd) compound type should be
+ // enabled.
+ bool enable_masked_comp;
+ // Flag to indicate if smooth interintra mode should be enabled.
+ bool enable_smooth_interintra;
+ // Flag to indicate if difference-weighted compound type should be enabled.
+ bool enable_diff_wtd_comp;
+ // Flag to indicate if inter-inter wedge compound type should be enabled.
+ bool enable_interinter_wedge;
+ // Flag to indicate if inter-intra wedge compound type should be enabled.
+ bool enable_interintra_wedge;
+} CompoundTypeCfg;
+
typedef struct AV1EncoderConfig {
BITSTREAM_PROFILE profile;
aom_bit_depth_t bit_depth; // Codec bit-depth.
@@ -466,18 +482,12 @@
int min_partition_size;
int max_partition_size;
int enable_order_hint;
- int enable_dist_wtd_comp;
int enable_ref_frame_mvs;
unsigned int max_reference_frames;
int enable_reduced_reference_set;
unsigned int allow_ref_frame_mvs;
- int enable_masked_comp;
int enable_onesided_comp;
int enable_interintra_comp;
- int enable_smooth_interintra;
- int enable_diff_wtd_comp;
- int enable_interinter_wedge;
- int enable_interintra_wedge;
int enable_global_motion;
int enable_warped_motion;
int allow_warped_motion;
@@ -493,6 +503,9 @@
// Flags related to transform size/type.
TxfmSizeTypeCfg txfm_cfg;
+ // Flags related to compound type.
+ CompoundTypeCfg comp_type_cfg;
+
#if CONFIG_DENOISE
float noise_level;
int noise_block_size;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index ae97045..7f7ebba 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -478,7 +478,7 @@
sf->inter_sf.selective_ref_frame = 4;
sf->inter_sf.skip_repeated_ref_mv = 1;
sf->inter_sf.skip_repeated_full_newmv = 1;
- if (cpi->oxcf.enable_smooth_interintra)
+ if (cpi->oxcf.comp_type_cfg.enable_smooth_interintra)
sf->inter_sf.disable_smooth_interintra = boosted ? 0 : 1;
sf->inter_sf.reuse_compound_type_decision = 1;
sf->inter_sf.txfm_rd_gate_level = (boosted || allow_screen_content_tools)