Reverse order of CLPF and dering
Low latency:
PSNR YCbCr: -0.15% 0.11% 0.12%
PSNRHVS: -0.25%
SSIM: -0.26%
MSSSIM: -0.26%
CIEDE2000: -0.03%
High latency:
PSNR YCbCr: -0.18% 0.18% 0.07%
PSNRHVS: -0.20%
SSIM: -0.21%
MSSSIM: -0.21%
CIEDE2000: -0.03%
Change-Id: Ieb86d9ba353220de6454bdc15cea825944b6385b
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 8bdd15e..5726896 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -684,6 +684,18 @@
(bsize == BLOCK_8X8 || partition != PARTITION_SPLIT))
dec_update_partition_context(xd, mi_row, mi_col, subsize, num_8x8_wh);
+#if CONFIG_DERING
+ if (bsize == BLOCK_64X64) {
+ if (cm->dering_level != 0 && !sb_all_skip(cm, mi_row, mi_col)) {
+ cm->mi_grid_visible[mi_row * cm->mi_stride + mi_col]->mbmi.dering_gain =
+ aom_read_literal(r, DERING_REFINEMENT_BITS, ACCT_STR);
+ } else {
+ cm->mi_grid_visible[mi_row * cm->mi_stride + mi_col]->mbmi.dering_gain =
+ 0;
+ }
+ }
+#endif
+
#if CONFIG_CLPF
if (bsize == BLOCK_64X64 && cm->clpf_strength_y &&
cm->clpf_size != CLPF_NOSIZE) {
@@ -720,18 +732,6 @@
}
}
#endif
-
-#if CONFIG_DERING
- if (bsize == BLOCK_64X64) {
- if (cm->dering_level != 0 && !sb_all_skip(cm, mi_row, mi_col)) {
- cm->mi_grid_visible[mi_row * cm->mi_stride + mi_col]->mbmi.dering_gain =
- aom_read_literal(r, DERING_REFINEMENT_BITS, ACCT_STR);
- } else {
- cm->mi_grid_visible[mi_row * cm->mi_stride + mi_col]->mbmi.dering_gain =
- 0;
- }
- }
-#endif
}
static void setup_token_decoder(const uint8_t *data, const uint8_t *data_end,
@@ -1989,12 +1989,12 @@
av1_setup_past_independence(cm);
setup_loopfilter(&cm->lf, rb);
-#if CONFIG_CLPF
- setup_clpf(pbi, rb);
-#endif
#if CONFIG_DERING
setup_dering(cm, rb);
#endif
+#if CONFIG_CLPF
+ setup_clpf(pbi, rb);
+#endif
setup_quantization(cm, rb);
#if CONFIG_AOM_HIGHBITDEPTH
xd->bd = (int)cm->bit_depth;
@@ -2405,6 +2405,12 @@
*p_data_end = decode_tiles(pbi, data, data_end);
}
+#if CONFIG_DERING
+ if (cm->dering_level && !cm->skip_loop_filter) {
+ av1_dering_frame(&pbi->cur_buf->buf, cm, &pbi->mb, cm->dering_level);
+ }
+#endif // CONFIG_DERING
+
#if CONFIG_CLPF
if (!cm->skip_loop_filter) {
const YV12_BUFFER_CONFIG *const frame = &pbi->cur_buf->buf;
@@ -2426,11 +2432,6 @@
}
if (cm->clpf_blocks) aom_free(cm->clpf_blocks);
#endif
-#if CONFIG_DERING
- if (cm->dering_level && !cm->skip_loop_filter) {
- av1_dering_frame(&pbi->cur_buf->buf, cm, &pbi->mb, cm->dering_level);
- }
-#endif // CONFIG_DERING
if (!xd->corrupted) {
if (cm->refresh_frame_context == REFRESH_FRAME_CONTEXT_BACKWARD) {
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 2734a5d..0c6e57a 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -1195,6 +1195,16 @@
(bsize == BLOCK_8X8 || partition != PARTITION_SPLIT))
update_partition_context(xd, mi_row, mi_col, subsize, bsize);
+#if CONFIG_DERING
+ if (bsize == BLOCK_64X64 && cm->dering_level != 0 &&
+ !sb_all_skip(cm, mi_row, mi_col)) {
+ aom_write_literal(
+ w,
+ cm->mi_grid_visible[mi_row * cm->mi_stride + mi_col]->mbmi.dering_gain,
+ DERING_REFINEMENT_BITS);
+ }
+#endif
+
#if CONFIG_CLPF
if (bsize == BLOCK_64X64 && cm->clpf_blocks && cm->clpf_strength_y &&
cm->clpf_size != CLPF_NOSIZE) {
@@ -1225,16 +1235,6 @@
aom_write_literal(w, cm->clpf_blocks[br], 1);
}
#endif
-
-#if CONFIG_DERING
- if (bsize == BLOCK_64X64 && cm->dering_level != 0 &&
- !sb_all_skip(cm, mi_row, mi_col)) {
- aom_write_literal(
- w,
- cm->mi_grid_visible[mi_row * cm->mi_stride + mi_col]->mbmi.dering_gain,
- DERING_REFINEMENT_BITS);
- }
-#endif
}
static void write_modes(AV1_COMP *cpi, const TileInfo *const tile,
@@ -2111,12 +2111,12 @@
aom_wb_write_literal(wb, cm->frame_context_idx, FRAME_CONTEXTS_LOG2);
encode_loopfilter(&cm->lf, wb);
-#if CONFIG_CLPF
- encode_clpf(cm, wb);
-#endif
#if CONFIG_DERING
encode_dering(cm->dering_level, wb);
#endif // CONFIG_DERING
+#if CONFIG_CLPF
+ encode_clpf(cm, wb);
+#endif
encode_quantization(cm, wb);
encode_segmentation(cm, xd, wb);
#if CONFIG_DELTA_Q
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index b4e22ea..34ca12f 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -2619,6 +2619,16 @@
av1_loop_filter_frame(cm->frame_to_show, cm, xd, lf->filter_level, 0, 0);
}
+#if CONFIG_DERING
+ if (is_lossless_requested(&cpi->oxcf)) {
+ cm->dering_level = 0;
+ } else {
+ cm->dering_level =
+ av1_dering_search(cm->frame_to_show, cpi->Source, cm, xd);
+ av1_dering_frame(cm->frame_to_show, cm, xd, cm->dering_level);
+ }
+#endif // CONFIG_DERING
+
#if CONFIG_CLPF
cm->clpf_strength_y = cm->clpf_strength_u = cm->clpf_strength_v = 0;
cm->clpf_size = CLPF_64X64;
@@ -2667,15 +2677,6 @@
}
}
#endif
-#if CONFIG_DERING
- if (is_lossless_requested(&cpi->oxcf)) {
- cm->dering_level = 0;
- } else {
- cm->dering_level =
- av1_dering_search(cm->frame_to_show, cpi->Source, cm, xd);
- av1_dering_frame(cm->frame_to_show, cm, xd, cm->dering_level);
- }
-#endif // CONFIG_DERING
aom_extend_frame_inner_borders(cm->frame_to_show);
}