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 c186f46..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;
}