Adjust encoder rate allocations for ext-refs
This CL is targeted to improve the objective/subjective quality of the
"ext-refs" coding tool.
Tuned the frame rate factors as follows:
(1) BRF_UPDATE:
Decreased from INTER_HIGH (1.5) to GF_ARF_LOW (1.25);
(2) Both LAST_BIPRED_UPDATE and BIPRED_UPDATE:
Increased from INTER_LOW (0.80) to INTER_NORMAL (1.00)
, which is to reduce the bits allocated to the BWEDREF frame whereas
to increase the bits allocated to the bi-directionally predicted
frames.
Obtained a coding gain in overall PSNR as follows, compared against
the original ext-refs:
lowres: BDRate -0.181%
midres: BDRate -0.090%
hdres: BDRate -0.701%
Change-Id: Id001f3b124d833da9f80eba4cdec2ca3f6ba9d82
diff --git a/av1/encoder/firstpass.c b/av1/encoder/firstpass.c
index fa116d7..1fe4e53 100644
--- a/av1/encoder/firstpass.c
+++ b/av1/encoder/firstpass.c
@@ -1905,12 +1905,12 @@
#if CONFIG_EXT_REFS
if (gf_group->update_type[frame_index] == BRF_UPDATE) {
// Boost up the allocated bits on BWDREF_FRAME
- gf_group->rf_level[frame_index] = INTER_HIGH;
+ gf_group->rf_level[frame_index] = GF_ARF_LOW;
gf_group->bit_allocation[frame_index] =
target_frame_size + (target_frame_size >> 2);
} else if (gf_group->update_type[frame_index] == LAST_BIPRED_UPDATE) {
// Press down the allocated bits on LAST_BIPRED_UPDATE frames
- gf_group->rf_level[frame_index] = INTER_LOW;
+ gf_group->rf_level[frame_index] = INTER_NORMAL;
gf_group->bit_allocation[frame_index] =
target_frame_size - (target_frame_size >> 1);
} else if (gf_group->update_type[frame_index] == BIPRED_UPDATE) {
@@ -1972,7 +1972,7 @@
gf_group->bit_allocation[arf_pos[i]];
gf_group->update_type[arf_pos[i]] = INTNL_OVERLAY_UPDATE;
gf_group->bit_allocation[arf_pos[i]] = 0;
- gf_group->rf_level[arf_pos[i]] = INTER_LOW;
+ gf_group->rf_level[arf_pos[i]] = INTER_NORMAL;
}
}
#else