Fix issues related to adaptive rd thresh
Encode Time Quality Impact(%)
Preset reduction(%) (AWCY)
2 0.48 0.00
3 1.29 0.07
4 1.06 0.04
STATS_CHANGED
Change-Id: I00fe62bf17a65d9093981c1c5cff64dd8f4bb4d6
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c
index 0e18b88..91a912d 100644
--- a/av1/encoder/rd.c
+++ b/av1/encoder/rd.c
@@ -1322,10 +1322,17 @@
if (rd_thresh > 0) {
const int top_mode = MAX_MODES;
int mode;
+ BLOCK_SIZE min_size;
+ BLOCK_SIZE max_size;
+ if (bsize <= cm->seq_params.sb_size) {
+ min_size = AOMMAX(bsize - 1, BLOCK_4X4);
+ max_size = AOMMIN(bsize + 2, (int)cm->seq_params.sb_size);
+ } else {
+ // TODO(any): Experiment with threshold update for parent/child blocks
+ min_size = bsize;
+ max_size = bsize;
+ }
for (mode = 0; mode < top_mode; ++mode) {
- const BLOCK_SIZE min_size = AOMMAX(bsize - 1, BLOCK_4X4);
- const BLOCK_SIZE max_size =
- AOMMIN(bsize + 2, (int)cm->seq_params.sb_size);
BLOCK_SIZE bs;
for (bs = min_size; bs <= max_size; ++bs) {
int *const fact = &factor_buf[bs][mode];