Revert "Change mask of adaptive_interp_filter_search for consistency"
This reverts commit 3307d834f4de6b52357510067e7e5444585c148f.
Reason for revert: SEGV in get_inliers_from_indices in 32-bit x86
AddressSanitizer build
Note: The third change in av1/encoder/rdopt.c cannot be reverted
because that get_interp_filter_allowed_mask() was deleted in
commit cece1aed472253e144077b721a3dc2caa428bab1. I am not sure if
anything needs to be done there.
BUG=aomedia:2442
Change-Id: I9536fc039a1265ff9f8a625ef863124163edd39e
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 8b7cbb1..707f9ea 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -4864,13 +4864,12 @@
return buf->interp_filter_selected[ifilter];
}
-static uint16_t setup_interp_filter_search_mask(AV1_COMP *cpi) {
+static int 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 mask;
+ return 0;
for (MV_REFERENCE_FRAME ref = LAST_FRAME; ref <= ALTREF_FRAME; ++ref) {
for (InterpFilter ifilter = EIGHTTAP_REGULAR; ifilter <= MULTITAP_SHARP;
@@ -4882,6 +4881,7 @@
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;
@@ -4893,10 +4893,7 @@
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) {
- DUAL_FILTER_TYPE filt_type = ifilter + SWITCHABLE_FILTERS * ifilter;
- reset_interp_filter_allowed_mask(&mask, filt_type);
- }
+ if (filter_score < ref_total_total) mask |= 1 << ifilter;
}
}
return mask;
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 63a1e82..87a0045 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) {
- int8_t i;
+ int16_t i;
MACROBLOCKD *const xd = &x->e_mbd;
MB_MODE_INFO *const mbmi = xd->mi[0];
@@ -8456,8 +8456,7 @@
assert(filter_sets[filter_idx].as_filters.x_filter ==
filter_sets[filter_idx].as_filters.y_filter);
if (cpi->sf.adaptive_interp_filter_search &&
- !(get_interp_filter_allowed_mask(cpi->sf.interp_filter_search_mask,
- filter_idx))) {
+ (cpi->sf.interp_filter_search_mask & (1 << (filter_idx >> 2)))) {
return;
}
if (filter_idx) {
@@ -8505,8 +8504,7 @@
assert(filter_sets[i].as_filters.x_filter ==
filter_sets[i].as_filters.y_filter);
if (cpi->sf.adaptive_interp_filter_search &&
- !(get_interp_filter_allowed_mask(cpi->sf.interp_filter_search_mask,
- i))) {
+ (cpi->sf.interp_filter_search_mask & (1 << (i >> 2)))) {
continue;
}
interpolation_filter_rd(
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 86dbe80..c449c8d 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -652,6 +652,9 @@
// 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;
@@ -724,9 +727,6 @@
// 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;