| Index: source/libvpx/test/test_vector_test.cc
|
| diff --git a/source/libvpx/test/test_vector_test.cc b/source/libvpx/test/test_vector_test.cc
|
| index 1f294f20b9fc051873020781e7a59b7dd66a41a1..d7b1a544bebdb8e90ede0fc5712ea1a595b9c4b8 100644
|
| --- a/source/libvpx/test/test_vector_test.cc
|
| +++ b/source/libvpx/test/test_vector_test.cc
|
| @@ -12,6 +12,7 @@
|
| #include <cstdlib>
|
| #include <string>
|
| #include "third_party/googletest/src/include/gtest/gtest.h"
|
| +#include "../tools_common.h"
|
| #include "./vpx_config.h"
|
| #include "test/codec_factory.h"
|
| #include "test/decode_test_driver.h"
|
| @@ -26,10 +27,24 @@
|
|
|
| namespace {
|
|
|
| +enum DecodeMode {
|
| + kSerialMode,
|
| + kFrameParallMode
|
| +};
|
| +
|
| +const int kDecodeMode = 0;
|
| +const int kThreads = 1;
|
| +const int kFileName = 2;
|
| +
|
| +typedef std::tr1::tuple<int, int, const char*> DecodeParam;
|
| +
|
| class TestVectorTest : public ::libvpx_test::DecoderTest,
|
| - public ::libvpx_test::CodecTestWithParam<const char*> {
|
| + public ::libvpx_test::CodecTestWithParam<DecodeParam> {
|
| protected:
|
| - TestVectorTest() : DecoderTest(GET_PARAM(0)), md5_file_(NULL) {}
|
| + TestVectorTest()
|
| + : DecoderTest(GET_PARAM(0)),
|
| + md5_file_(NULL) {
|
| + }
|
|
|
| virtual ~TestVectorTest() {
|
| if (md5_file_)
|
| @@ -71,8 +86,25 @@ class TestVectorTest : public ::libvpx_test::DecoderTest,
|
| // checksums match the correct md5 data, then the test is passed. Otherwise,
|
| // the test failed.
|
| TEST_P(TestVectorTest, MD5Match) {
|
| - const std::string filename = GET_PARAM(1);
|
| + const DecodeParam input = GET_PARAM(1);
|
| + const std::string filename = std::tr1::get<kFileName>(input);
|
| + const int threads = std::tr1::get<kThreads>(input);
|
| + const int mode = std::tr1::get<kDecodeMode>(input);
|
| libvpx_test::CompressedVideoSource *video = NULL;
|
| + vpx_codec_flags_t flags = 0;
|
| + vpx_codec_dec_cfg_t cfg = {0};
|
| + char str[256];
|
| +
|
| + if (mode == kFrameParallMode) {
|
| + flags |= VPX_CODEC_USE_FRAME_THREADING;
|
| + }
|
| +
|
| + cfg.threads = threads;
|
| +
|
| + snprintf(str, sizeof(str) / sizeof(str[0]) - 1,
|
| + "file: %s mode: %s threads: %d",
|
| + filename.c_str(), mode == 0 ? "Serial" : "Parallel", threads);
|
| + SCOPED_TRACE(str);
|
|
|
| // Open compressed video file.
|
| if (filename.substr(filename.length() - 3, 3) == "ivf") {
|
| @@ -92,18 +124,53 @@ TEST_P(TestVectorTest, MD5Match) {
|
| const std::string md5_filename = filename + ".md5";
|
| OpenMD5File(md5_filename);
|
|
|
| + // Set decode config and flags.
|
| + set_cfg(cfg);
|
| + set_flags(flags);
|
| +
|
| // Decode frame, and check the md5 matching.
|
| - ASSERT_NO_FATAL_FAILURE(RunLoop(video));
|
| + ASSERT_NO_FATAL_FAILURE(RunLoop(video, cfg));
|
| delete video;
|
| }
|
|
|
| -VP8_INSTANTIATE_TEST_CASE(TestVectorTest,
|
| - ::testing::ValuesIn(libvpx_test::kVP8TestVectors,
|
| - libvpx_test::kVP8TestVectors +
|
| - libvpx_test::kNumVP8TestVectors));
|
| -VP9_INSTANTIATE_TEST_CASE(TestVectorTest,
|
| - ::testing::ValuesIn(libvpx_test::kVP9TestVectors,
|
| - libvpx_test::kVP9TestVectors +
|
| - libvpx_test::kNumVP9TestVectors));
|
| -
|
| +// Test VP8 decode in serial mode with single thread.
|
| +// NOTE: VP8 only support serial mode.
|
| +INSTANTIATE_TEST_CASE_P(
|
| + VP8, TestVectorTest,
|
| + ::testing::Combine(
|
| + ::testing::Values(
|
| + static_cast<const libvpx_test::CodecFactory *>(&libvpx_test::kVP8)),
|
| + ::testing::Combine(
|
| + ::testing::Values(0), // Serial Mode.
|
| + ::testing::Values(1), // Single thread.
|
| + ::testing::ValuesIn(libvpx_test::kVP8TestVectors,
|
| + libvpx_test::kVP8TestVectors +
|
| + libvpx_test::kNumVP8TestVectors))));
|
| +
|
| +// Test VP9 decode in serial mode with single thread.
|
| +INSTANTIATE_TEST_CASE_P(
|
| + VP9, TestVectorTest,
|
| + ::testing::Combine(
|
| + ::testing::Values(
|
| + static_cast<const libvpx_test::CodecFactory *>(&libvpx_test::kVP9)),
|
| + ::testing::Combine(
|
| + ::testing::Values(0), // Serial Mode.
|
| + ::testing::Values(1), // Single thread.
|
| + ::testing::ValuesIn(libvpx_test::kVP9TestVectors,
|
| + libvpx_test::kVP9TestVectors +
|
| + libvpx_test::kNumVP9TestVectors))));
|
| +
|
| +
|
| +// Test VP9 decode in frame parallel mode with different number of threads.
|
| +INSTANTIATE_TEST_CASE_P(
|
| + VP9MultiThreadedFrameParallel, TestVectorTest,
|
| + ::testing::Combine(
|
| + ::testing::Values(
|
| + static_cast<const libvpx_test::CodecFactory *>(&libvpx_test::kVP9)),
|
| + ::testing::Combine(
|
| + ::testing::Values(1), // Frame Parallel mode.
|
| + ::testing::Range(2, 9), // With 2 ~ 8 threads.
|
| + ::testing::ValuesIn(libvpx_test::kVP9TestVectors,
|
| + libvpx_test::kVP9TestVectors +
|
| + libvpx_test::kNumVP9TestVectors))));
|
| } // namespace
|
|
|