Resubmit change mask of adaptive_interp_filter_search
Change skip mask used by adaptive_interp_filter_search
speed feature similar to allowed_interp_mask for
consistency
BUG=aomedia:2442
Change-Id: I81396835567194ad451944d482984fbd0ec6c4cf
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 1afb923..9e23c55 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -4618,12 +4618,13 @@
return buf->interp_filter_selected[ifilter];
}
-static int setup_interp_filter_search_mask(AV1_COMP *cpi) {
+static uint16_t setup_interp_filter_search_mask(AV1_COMP *cpi) {
const AV1_COMMON *const cm = &cpi->common;
int ref_total[REF_FRAMES] = { 0 };
+ uint16_t mask = ALLOW_ALL_INTERP_FILT_MASK;
if (cpi->common.last_frame_type == KEY_FRAME || cpi->refresh_alt_ref_frame)
- return 0;
+ return mask;
for (MV_REFERENCE_FRAME ref = LAST_FRAME; ref <= ALTREF_FRAME; ++ref) {
for (InterpFilter ifilter = EIGHTTAP_REGULAR; ifilter <= MULTITAP_SHARP;
@@ -4635,7 +4636,6 @@
ref_total[GOLDEN_FRAME] + ref_total[BWDREF_FRAME] +
ref_total[ALTREF2_FRAME] + ref_total[ALTREF_FRAME]);
- int mask = 0;
for (InterpFilter ifilter = EIGHTTAP_REGULAR; ifilter <= MULTITAP_SHARP;
++ifilter) {
int last_score = get_interp_filter_selected(cm, LAST_FRAME, ifilter) * 30;
@@ -4647,7 +4647,10 @@
get_interp_filter_selected(cm, BWDREF_FRAME, ifilter) * 10 +
get_interp_filter_selected(cm, ALTREF2_FRAME, ifilter) * 10 +
get_interp_filter_selected(cm, ALTREF_FRAME, ifilter) * 10;
- if (filter_score < ref_total_total) mask |= 1 << ifilter;
+ if (filter_score < ref_total_total) {
+ DUAL_FILTER_TYPE filt_type = ifilter + SWITCHABLE_FILTERS * ifilter;
+ reset_interp_filter_allowed_mask(&mask, filt_type);
+ }
}
}
return mask;
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 4cc4f82..9df0f75 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -8434,7 +8434,7 @@
RD_STATS *rd_stats, int *const switchable_rate,
const BUFFER_SET *dst_bufs[2], const int switchable_ctx[2],
const int skip_ver, const int skip_hor, int filter_set_size) {
- int16_t i;
+ int8_t i;
MACROBLOCKD *const xd = &x->e_mbd;
MB_MODE_INFO *const mbmi = xd->mi[0];
@@ -8456,7 +8456,8 @@
assert(filter_sets[filter_idx].as_filters.x_filter ==
filter_sets[filter_idx].as_filters.y_filter);
if (cpi->sf.adaptive_interp_filter_search &&
- (cpi->sf.interp_filter_search_mask & (1 << (filter_idx >> 2)))) {
+ !(get_interp_filter_allowed_mask(cpi->sf.interp_filter_search_mask,
+ filter_idx))) {
return;
}
if (filter_idx) {
@@ -8489,7 +8490,8 @@
assert(filter_sets[i].as_filters.x_filter ==
filter_sets[i].as_filters.y_filter);
if (cpi->sf.adaptive_interp_filter_search &&
- (cpi->sf.interp_filter_search_mask & (1 << (i >> 2)))) {
+ !(get_interp_filter_allowed_mask(cpi->sf.interp_filter_search_mask,
+ i))) {
skip_pred = (skip_hor & skip_ver);
continue;
}
@@ -8506,7 +8508,8 @@
assert(filter_sets[i].as_filters.x_filter ==
filter_sets[i].as_filters.y_filter);
if (cpi->sf.adaptive_interp_filter_search &&
- (cpi->sf.interp_filter_search_mask & (1 << (i >> 2)))) {
+ !(get_interp_filter_allowed_mask(cpi->sf.interp_filter_search_mask,
+ i))) {
continue;
}
interpolation_filter_rd(
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index e178323..05ae18b 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -756,6 +756,7 @@
sf->skip_obmc_in_uniform_mv_field = 0;
sf->skip_wm_in_uniform_mv_field = 0;
sf->adaptive_interp_filter_search = 0;
+ sf->interp_filter_search_mask = ALLOW_ALL_INTERP_FILT_MASK;
for (i = 0; i < TX_SIZES; i++) {
sf->intra_y_mode_mask[i] = INTRA_ALL;
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index d66db76..e64cc86 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -652,9 +652,6 @@
// adaptive interp_filter search to allow skip of certain filter types.
int adaptive_interp_filter_search;
- // mask for skip evaluation of certain interp_filter type.
- INTERP_FILTER_MASK interp_filter_search_mask;
-
// Flag used to control the ref_best_rd based gating for chroma
int perform_best_rd_based_gating_for_chroma;
@@ -727,6 +724,9 @@
// Use modeled (currently CurvFit model) RDCost for fast non-RD mode
int use_modeled_non_rd_cost;
+
+ // Filter mask to allow certain interp_filter type.
+ uint16_t interp_filter_search_mask;
} SPEED_FEATURES;
struct AV1_COMP;