diff options
author | angiebird <angiebird@google.com> | 2019-12-03 15:34:03 -0800 |
---|---|---|
committer | angiebird <angiebird@google.com> | 2019-12-03 18:33:10 -0800 |
commit | 42916ce60416d00f1188afd09c6a088ae9c91de9 (patch) | |
tree | 0e18cff89c868cea3084c253836e987aaba47f0d /test/simple_encode_test.cc | |
parent | f0878a719ab79c743e561e2eb35855219f73d969 (diff) | |
download | libvpx-42916ce60416d00f1188afd09c6a088ae9c91de9.tar libvpx-42916ce60416d00f1188afd09c6a088ae9c91de9.tar.gz libvpx-42916ce60416d00f1188afd09c6a088ae9c91de9.tar.bz2 libvpx-42916ce60416d00f1188afd09c6a088ae9c91de9.zip |
Fix the encode inconsistency of SimpleEncode
Make sure restore_coding_context() is always called in the end
of encode_with_recode_loop().
Add EncodeConsistencyTest.
Change-Id: I3c8e4c8fcff4e3f7afef9bec469beef2a5fb6eeb
Diffstat (limited to 'test/simple_encode_test.cc')
-rw-r--r-- | test/simple_encode_test.cc | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/test/simple_encode_test.cc b/test/simple_encode_test.cc index 8caf8bfe2..e93a1a469 100644 --- a/test/simple_encode_test.cc +++ b/test/simple_encode_test.cc @@ -107,6 +107,48 @@ TEST(SimpleEncode, EncodeFrameWithQuantizeIndex) { } simple_encode.EndEncode(); } + +TEST(SimpleEncode, EncodeConsistencyTest) { + std::vector<int> quantize_index_list; + std::vector<uint64_t> ref_sse_list; + std::vector<double> ref_psnr_list; + std::vector<size_t> ref_bit_size_list; + { + SimpleEncode simple_encode(w, h, frame_rate_num, frame_rate_den, + target_bitrate, num_frames, infile_path); + simple_encode.ComputeFirstPassStats(); + const int num_coding_frames = simple_encode.GetCodingFrameNum(); + simple_encode.StartEncode(); + for (int i = 0; i < num_coding_frames; ++i) { + EncodeFrameResult encode_frame_result; + simple_encode.EncodeFrame(&encode_frame_result); + quantize_index_list.push_back(encode_frame_result.quantize_index); + ref_sse_list.push_back(encode_frame_result.sse); + ref_psnr_list.push_back(encode_frame_result.psnr); + ref_bit_size_list.push_back(encode_frame_result.coding_data_bit_size); + } + simple_encode.EndEncode(); + } + { + SimpleEncode simple_encode(w, h, frame_rate_num, frame_rate_den, + target_bitrate, num_frames, infile_path); + simple_encode.ComputeFirstPassStats(); + const int num_coding_frames = simple_encode.GetCodingFrameNum(); + EXPECT_EQ(static_cast<size_t>(num_coding_frames), + quantize_index_list.size()); + simple_encode.StartEncode(); + for (int i = 0; i < num_coding_frames; ++i) { + EncodeFrameResult encode_frame_result; + simple_encode.EncodeFrameWithQuantizeIndex(&encode_frame_result, + quantize_index_list[i]); + EXPECT_EQ(encode_frame_result.quantize_index, quantize_index_list[i]); + EXPECT_EQ(encode_frame_result.sse, ref_sse_list[i]); + EXPECT_DOUBLE_EQ(encode_frame_result.psnr, ref_psnr_list[i]); + EXPECT_EQ(encode_frame_result.coding_data_bit_size, ref_bit_size_list[i]); + } + simple_encode.EndEncode(); + } +} } // namespace } // namespace vp9 |