Revert "[Normative] Move global info to ref buffer" This reverts commit c9b6f23bc0be2327e1cb5be9391b850c2e02abcb. Reason for revert: Appears to be responsible for AV1/AVxEncoderThreadLSTest.EncoderResultTest/3 failing on the current tip of tree Change-Id: I95c9e6eee7af96700ed123f945bc6d5e3b6c348b
diff --git a/av1/common/av1_loopfilter.c b/av1/common/av1_loopfilter.c index ff57b0f..937dc5b 100644 --- a/av1/common/av1_loopfilter.c +++ b/av1/common/av1_loopfilter.c
@@ -655,6 +655,7 @@ // init limits for given sharpness update_sharpness(lfi, lf->sharpness_level); + lf->last_sharpness_level = lf->sharpness_level; // init hev threshold const vectors for (lvl = 0; lvl <= MAX_LOOP_FILTER; lvl++) @@ -672,19 +673,9 @@ const struct segmentation *const seg = &cm->seg; // update limits if sharpness has changed - int last_sharpness_level; - if (cm->primary_ref_frame == PRIMARY_REF_NONE) { - last_sharpness_level = -1; // default value - } else { - const int buf_idx = cm->frame_refs[cm->primary_ref_frame].idx; - last_sharpness_level = cm->buffer_pool->frame_bufs[buf_idx].sharpness_level; - } - if (last_sharpness_level != lf->sharpness_level) { + if (lf->last_sharpness_level != lf->sharpness_level) { update_sharpness(lfi, lf->sharpness_level); - const int buf_idx = cm->frame_refs[cm->primary_ref_frame].idx; - if (cm->primary_ref_frame != PRIMARY_REF_NONE && buf_idx >= 0) - cm->buffer_pool->frame_bufs[buf_idx].sharpness_level = - lf->sharpness_level; + lf->last_sharpness_level = lf->sharpness_level; } for (seg_id = 0; seg_id < MAX_SEGMENTS; seg_id++) {
diff --git a/av1/common/av1_loopfilter.h b/av1/common/av1_loopfilter.h index 7d17fdf..224e499 100644 --- a/av1/common/av1_loopfilter.h +++ b/av1/common/av1_loopfilter.h
@@ -27,6 +27,8 @@ #define SIMD_WIDTH 16 +#define MAX_MODE_LF_DELTAS 2 + enum lf_path { LF_PATH_420, LF_PATH_444, @@ -120,6 +122,7 @@ int filter_level_v; int sharpness_level; + int last_sharpness_level; uint8_t mode_ref_delta_enabled; uint8_t mode_ref_delta_update; @@ -127,9 +130,11 @@ // 0 = Intra, Last, Last2+Last3, // GF, BRF, ARF2, ARF int8_t ref_deltas[TOTAL_REFS_PER_FRAME]; + int8_t last_ref_deltas[TOTAL_REFS_PER_FRAME]; // 0 = ZERO_MV, MV int8_t mode_deltas[MAX_MODE_LF_DELTAS]; + int8_t last_mode_deltas[MAX_MODE_LF_DELTAS]; #if LOOP_FILTER_BITMASK LoopFilterMask *lfm;
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c index b7345c6..6d04efd 100644 --- a/av1/common/entropymode.c +++ b/av1/common/entropymode.c
@@ -1144,32 +1144,24 @@ av1_copy(fc->intrabc_cdf, default_intrabc_cdf); } -void av1_set_default_ref_deltas(int8_t *ref_deltas) { - assert(ref_deltas != NULL); - - ref_deltas[INTRA_FRAME] = 1; - ref_deltas[LAST_FRAME] = 0; - ref_deltas[LAST2_FRAME] = ref_deltas[LAST_FRAME]; - ref_deltas[LAST3_FRAME] = ref_deltas[LAST_FRAME]; - ref_deltas[BWDREF_FRAME] = ref_deltas[LAST_FRAME]; - ref_deltas[GOLDEN_FRAME] = -1; - ref_deltas[ALTREF2_FRAME] = -1; - ref_deltas[ALTREF_FRAME] = -1; -} - -void av1_set_default_mode_deltas(int8_t *mode_deltas) { - assert(mode_deltas != NULL); - - mode_deltas[0] = 0; - mode_deltas[0] = 0; -} - static void set_default_lf_deltas(struct loopfilter *lf) { lf->mode_ref_delta_enabled = 1; lf->mode_ref_delta_update = 1; - av1_set_default_ref_deltas(lf->ref_deltas); - av1_set_default_mode_deltas(lf->mode_deltas); + lf->ref_deltas[INTRA_FRAME] = 1; + lf->ref_deltas[LAST_FRAME] = 0; + lf->ref_deltas[LAST2_FRAME] = lf->ref_deltas[LAST_FRAME]; + lf->ref_deltas[LAST3_FRAME] = lf->ref_deltas[LAST_FRAME]; + lf->ref_deltas[BWDREF_FRAME] = lf->ref_deltas[LAST_FRAME]; + lf->ref_deltas[GOLDEN_FRAME] = -1; + lf->ref_deltas[ALTREF2_FRAME] = -1; + lf->ref_deltas[ALTREF_FRAME] = -1; + + lf->mode_deltas[0] = 0; + lf->mode_deltas[1] = 0; + + av1_copy(lf->last_ref_deltas, lf->ref_deltas); + av1_copy(lf->last_mode_deltas, lf->mode_deltas); } void av1_setup_frame_contexts(AV1_COMMON *cm) { @@ -1184,6 +1176,8 @@ void av1_setup_past_independence(AV1_COMMON *cm) { // Reset the segment feature data to the default stats: // Features disabled, 0, with delta coding (Default state). + struct loopfilter *const lf = &cm->lf; + av1_clearall_segfeatures(&cm->seg); #if CONFIG_SEGMENT_PRED_LAST @@ -1198,10 +1192,13 @@ if (cm->current_frame_seg_map) memset(cm->current_frame_seg_map, 0, (cm->mi_rows * cm->mi_cols)); - // reset mode ref deltas - av1_set_default_ref_deltas(cm->cur_frame->ref_deltas); - av1_set_default_mode_deltas(cm->cur_frame->mode_deltas); - set_default_lf_deltas(&cm->lf); + // Reset the mode ref deltas for loop filter + av1_zero(lf->last_ref_deltas); + av1_zero(lf->last_mode_deltas); + set_default_lf_deltas(lf); + + // To force update of the sharpness + lf->last_sharpness_level = -1; av1_default_coef_probs(cm); init_mode_probs(cm->fc);
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h index 53430c4..0905516 100644 --- a/av1/common/entropymode.h +++ b/av1/common/entropymode.h
@@ -292,8 +292,6 @@ { 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 4, 5, 3, 6, 7, 8 }, }; -void av1_set_default_ref_deltas(int8_t *ref_deltas); -void av1_set_default_mode_deltas(int8_t *mode_deltas); void av1_setup_frame_contexts(struct AV1Common *cm); void av1_setup_past_independence(struct AV1Common *cm);
diff --git a/av1/common/enums.h b/av1/common/enums.h index 400a238..d2dc31f 100644 --- a/av1/common/enums.h +++ b/av1/common/enums.h
@@ -78,8 +78,6 @@ #define II_WEDGE_IDX_ENTROPY_CODING 0 #endif -#define MAX_MODE_LF_DELTAS 2 - typedef enum COMPOUND_DIST_WEIGHT_MODE { DIST, } COMPOUND_DIST_WEIGHT_MODE;
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h index 23d1419..76c5eea 100644 --- a/av1/common/onyxc_int.h +++ b/av1/common/onyxc_int.h
@@ -156,14 +156,6 @@ // when the frame is fully decoded. int row; int col; - - // Inter frame reference frame delta for loop filter - int8_t ref_deltas[TOTAL_REFS_PER_FRAME]; - - // 0 = ZERO_MV, MV - int8_t mode_deltas[MAX_MODE_LF_DELTAS]; - - int sharpness_level; } RefCntBuffer; typedef struct BufferPool {
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c index 3a9d57e..2d107bd 100644 --- a/av1/decoder/decodeframe.c +++ b/av1/decoder/decodeframe.c
@@ -1144,10 +1144,6 @@ lf->mode_deltas[i] = aom_rb_read_inv_signed_literal(rb, 6); } } - - // write deltas to frame buffer - memcpy(cm->cur_frame->ref_deltas, lf->ref_deltas, TOTAL_REFS_PER_FRAME); - memcpy(cm->cur_frame->mode_deltas, lf->mode_deltas, MAX_MODE_LF_DELTAS); } static void setup_cdef(AV1_COMMON *cm, struct aom_read_bit_buffer *rb) {
diff --git a/av1/decoder/dthread.c b/av1/decoder/dthread.c index c186f466..20724ff 100644 --- a/av1/decoder/dthread.c +++ b/av1/decoder/dthread.c
@@ -176,7 +176,7 @@ memcpy(dst_cm->lf_info.lfthr, src_cm->lf_info.lfthr, (MAX_LOOP_FILTER + 1) * sizeof(loop_filter_thresh)); - dst_cm->lf.sharpness_level = src_cm->lf.sharpness_level; + dst_cm->lf.last_sharpness_level = src_cm->lf.sharpness_level; dst_cm->lf.filter_level[0] = src_cm->lf.filter_level[0]; dst_cm->lf.filter_level[1] = src_cm->lf.filter_level[1]; memcpy(dst_cm->lf.ref_deltas, src_cm->lf.ref_deltas, TOTAL_REFS_PER_FRAME);
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c index 6d2786c..108230d 100644 --- a/av1/encoder/bitstream.c +++ b/av1/encoder/bitstream.c
@@ -2031,38 +2031,25 @@ if (lf->mode_ref_delta_enabled) { aom_wb_write_bit(wb, lf->mode_ref_delta_update); - if (lf->mode_ref_delta_update) { - const int prime_idx = cm->primary_ref_frame; - const int buf_idx = - prime_idx == PRIMARY_REF_NONE ? -1 : cm->frame_refs[prime_idx].idx; - int8_t last_ref_deltas[TOTAL_REFS_PER_FRAME]; - if (prime_idx == PRIMARY_REF_NONE || buf_idx < 0) { - av1_set_default_ref_deltas(last_ref_deltas); - } else { - memcpy(last_ref_deltas, cm->buffer_pool->frame_bufs[buf_idx].ref_deltas, - TOTAL_REFS_PER_FRAME); - } for (i = 0; i < TOTAL_REFS_PER_FRAME; i++) { const int delta = lf->ref_deltas[i]; - const int changed = delta != last_ref_deltas[i]; + const int changed = delta != lf->last_ref_deltas[i]; aom_wb_write_bit(wb, changed); - if (changed) aom_wb_write_inv_signed_literal(wb, delta, 6); + if (changed) { + lf->last_ref_deltas[i] = delta; + aom_wb_write_inv_signed_literal(wb, delta, 6); + } } - int8_t last_mode_deltas[MAX_MODE_LF_DELTAS]; - if (prime_idx == PRIMARY_REF_NONE || buf_idx < 0) { - av1_set_default_mode_deltas(last_mode_deltas); - } else { - memcpy(last_mode_deltas, - cm->buffer_pool->frame_bufs[buf_idx].mode_deltas, - MAX_MODE_LF_DELTAS); - } for (i = 0; i < MAX_MODE_LF_DELTAS; i++) { const int delta = lf->mode_deltas[i]; - const int changed = delta != last_mode_deltas[i]; + const int changed = delta != lf->last_mode_deltas[i]; aom_wb_write_bit(wb, changed); - if (changed) aom_wb_write_inv_signed_literal(wb, delta, 6); + if (changed) { + lf->last_mode_deltas[i] = delta; + aom_wb_write_inv_signed_literal(wb, delta, 6); + } } } }
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c index b1f519d..8efcd14 100644 --- a/av1/encoder/encoder.c +++ b/av1/encoder/encoder.c
@@ -556,24 +556,8 @@ av1_copy(cc->nmv_costs, cpi->nmv_costs); av1_copy(cc->nmv_costs_hp, cpi->nmv_costs_hp); - const int prime_idx = cm->primary_ref_frame; - const int buf_idx = - prime_idx == PRIMARY_REF_NONE ? -1 : cm->frame_refs[prime_idx].idx; - int8_t last_ref_deltas[TOTAL_REFS_PER_FRAME]; - int8_t last_mode_deltas[MAX_MODE_LF_DELTAS]; - if (prime_idx == PRIMARY_REF_NONE || buf_idx < 0) { - av1_set_default_ref_deltas(last_ref_deltas); - av1_set_default_mode_deltas(last_mode_deltas); - } else { - assert(cm->buffer_pool->frame_bufs[buf_idx].ref_deltas != NULL); - memcpy(last_ref_deltas, cm->buffer_pool->frame_bufs[buf_idx].ref_deltas, - TOTAL_REFS_PER_FRAME); - assert(cm->buffer_pool->frame_bufs[buf_idx].mode_deltas != NULL); - memcpy(last_mode_deltas, cm->buffer_pool->frame_bufs[buf_idx].mode_deltas, - MAX_MODE_LF_DELTAS); - } - av1_copy(cc->last_ref_lf_deltas, last_ref_deltas); - av1_copy(cc->last_mode_lf_deltas, last_mode_deltas); + av1_copy(cc->last_ref_lf_deltas, cm->lf.last_ref_deltas); + av1_copy(cc->last_mode_lf_deltas, cm->lf.last_mode_deltas); cc->fc = *cm->fc; } @@ -588,15 +572,8 @@ av1_copy(cpi->nmv_costs, cc->nmv_costs); av1_copy(cpi->nmv_costs_hp, cc->nmv_costs_hp); - const int prime_idx = cm->primary_ref_frame; - const int buf_idx = - prime_idx == PRIMARY_REF_NONE ? -1 : cm->frame_refs[prime_idx].idx; - if (prime_idx != PRIMARY_REF_NONE && buf_idx >= 0) { - memcpy(cm->buffer_pool->frame_bufs[buf_idx].ref_deltas, - cc->last_ref_lf_deltas, TOTAL_REFS_PER_FRAME); - memcpy(cm->buffer_pool->frame_bufs[buf_idx].mode_deltas, - cc->last_mode_lf_deltas, MAX_MODE_LF_DELTAS); - } + av1_copy(cm->lf.last_ref_deltas, cc->last_ref_lf_deltas); + av1_copy(cm->lf.last_mode_deltas, cc->last_mode_lf_deltas); *cm->fc = cc->fc; }