Commit bfd0f41f authored by Yunqing Wang's avatar Yunqing Wang

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
parent 0e87b160
......@@ -340,8 +340,6 @@ TEST_P(VPxEncoderThreadTest, EncoderResultTest) {
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
......
......@@ -5589,7 +5589,7 @@ void vp9_set_row_mt(VP9_COMP *cpi) {
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;
......
......@@ -664,7 +664,8 @@ void vp9_set_speed_features_framesize_dependent(VP9_COMP *cpi) {
// 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 @@ void vp9_set_speed_features_framesize_independent(VP9_COMP *cpi) {
// 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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment