ref: bfd0f41f9b8282a458e276fbccf07c8e9ae0870b
parent: 0e87b1602241b54c71f8d40d1ca7d5d47f3bbc5c
author: Yunqing Wang <yunqingwang@google.com>
date: Wed Aug 2 11:47:09 EDT 2017
Force the bit exactness in the first pass Originally, for the purpose of keeping a fast first pass, the first-pass stats between row_mt_mode = 0 and row_mt_mode = 1 are not bit exact, but that difference is very small that doesn't cause a mismatch between the final bitstreams. However, if the encoder changes, this minor difference may cause a mismatch. Thus, this patch always forces the first pass to be bit exact. BUG=webm:1453 Change-Id: I2b67cf529dee81f660f9d9e7fe9a60ea3c7b12b8
--- a/test/vp9_ethread_test.cc
+++ b/test/vp9_ethread_test.cc
@@ -340,8 +340,6 @@
ASSERT_EQ(single_thr_md5, multi_thr_md5);
// Part 2: row_mt_mode_ = 0 vs row_mt_mode_ = 1 single thread bit exact test.
- // The first-pass stats are not bit exact here, but that difference doesn't
- // cause a mismatch between the final bitstreams.
row_mt_mode_ = 1;
// Encode using single thread
--- a/vp9/encoder/vp9_encoder.c
+++ b/vp9/encoder/vp9_encoder.c
@@ -5589,7 +5589,7 @@
cpi->row_mt = 1;
}
- if (cpi->row_mt && cpi->oxcf.max_threads > 1)
+ if (cpi->row_mt)
cpi->row_mt_bit_exact = 1;
else
cpi->row_mt_bit_exact = 0;
--- a/vp9/encoder/vp9_speed_features.c
+++ b/vp9/encoder/vp9_speed_features.c
@@ -664,7 +664,8 @@
// and multiple threads match.
// It can be used in realtime when adaptive_rd_thresh_row_mt is enabled since
// adaptive_rd_thresh is defined per-row for non-rd pickmode.
- if (!sf->adaptive_rd_thresh_row_mt && cpi->row_mt_bit_exact)
+ if (!sf->adaptive_rd_thresh_row_mt && cpi->row_mt_bit_exact &&
+ oxcf->max_threads > 1)
sf->adaptive_rd_thresh = 0;
// This is only used in motion vector unit test.
@@ -820,7 +821,8 @@
// and multiple threads match.
// It can be used in realtime when adaptive_rd_thresh_row_mt is enabled since
// adaptive_rd_thresh is defined per-row for non-rd pickmode.
- if (!sf->adaptive_rd_thresh_row_mt && cpi->row_mt_bit_exact)
+ if (!sf->adaptive_rd_thresh_row_mt && cpi->row_mt_bit_exact &&
+ oxcf->max_threads > 1)
sf->adaptive_rd_thresh = 0;
// This is only used in motion vector unit test.