Showing the changes to test (2 of 2 files). Show all
Unified · Split
| @@ -0,0 +1,90 @@ | |||
| 1 | /* | ||
| 2 | Copyright (c) 2012 The WebM project authors. All Rights Reserved. | ||
| 3 | |||
| 4 | Use of this source code is governed by a BSD-style license | ||
| 5 | that can be found in the LICENSE file in the root of the source | ||
| 6 | tree. An additional intellectual property rights grant can be found | ||
| 7 | in the file PATENTS. All contributing project authors may | ||
| 8 | be found in the AUTHORS file in the root of the source tree. | ||
| 9 | */ | ||
| 10 | #include "third_party/googletest/src/include/gtest/gtest.h" | ||
| 11 | #include "test/encode_test_driver.h" | ||
| 12 | #include "test/i420_video_source.h" | ||
| 13 | |||
| 14 | namespace { | ||
| 15 | |||
| 16 | class ErrorResilienceTest : public libvpx_test::EncoderTest, | ||
| 17 | public ::testing::TestWithParam<int> { | ||
| 18 | protected: | ||
| 19 | ErrorResilienceTest() { | ||
| 20 | psnr_ = 0.0; | ||
| 21 | nframes_ = 0; | ||
| 22 | encoding_mode_ = static_cast<libvpx_test::TestMode>(GetParam()); | ||
| 23 | } | ||
| 24 | virtual ~ErrorResilienceTest() {} | ||
| 25 | |||
| 26 | virtual void SetUp() { | ||
| 27 | InitializeConfig(); | ||
| 28 | SetMode(encoding_mode_); | ||
| 29 | } | ||
| 30 | |||
| 31 | virtual void BeginPassHook(unsigned int /*pass*/) { | ||
| 32 | psnr_ = 0.0; | ||
| 33 | nframes_ = 0; | ||
| 34 | } | ||
| 35 | |||
| 36 | virtual bool Continue() const { | ||
| 37 | return !HasFatalFailure() && !abort_; | ||
| 38 | } | ||
| 39 | |||
| 40 | virtual void PSNRPktHook(const vpx_codec_cx_pkt_t *pkt) { | ||
| 41 | psnr_ += pkt->data.psnr.psnr[0]; | ||
| 42 | nframes_++; | ||
| 43 | } | ||
| 44 | |||
| 45 | double GetAveragePsnr() const { | ||
| 46 | if (nframes_) | ||
| 47 | return psnr_ / nframes_; | ||
| 48 | return 0.0; | ||
| 49 | } | ||
| 50 | |||
| 51 | private: | ||
| 52 | double psnr_; | ||
| 53 | unsigned int nframes_; | ||
| 54 | libvpx_test::TestMode encoding_mode_; | ||
| 55 | }; | ||
| 56 | |||
| 57 | TEST_P(ErrorResilienceTest, OnVersusOff) { | ||
| 58 | const vpx_rational timebase = { 33333333, 1000000000 }; | ||
| 59 | cfg_.g_timebase = timebase; | ||
| 60 | cfg_.rc_target_bitrate = 2000; | ||
| 61 | cfg_.g_lag_in_frames = 25; | ||
| 62 | |||
| 63 | init_flags_ = VPX_CODEC_USE_PSNR; | ||
| 64 | |||
| 65 | libvpx_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288, | ||
| 66 | timebase.den, timebase.num, 0, 30); | ||
| 67 | |||
| 68 | // Error resilient mode OFF. | ||
| 69 | cfg_.g_error_resilient = 0; | ||
| 70 | ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); | ||
| 71 | const double psnr_resilience_off = GetAveragePsnr(); | ||
| 72 | EXPECT_GT(psnr_resilience_off, 25.0); | ||
| 73 | |||
| 74 | // Error resilient mode ON. | ||
| 75 | cfg_.g_error_resilient = 1; | ||
| 76 | ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); | ||
| 77 | const double psnr_resilience_on = GetAveragePsnr(); | ||
| 78 | EXPECT_GT(psnr_resilience_on, 25.0); | ||
| 79 | |||
| 80 | // Test that turning on error resilient mode hurts by 10% at most. | ||
| 81 | if (psnr_resilience_off > 0.0) { | ||
| 82 | const double psnr_ratio = psnr_resilience_on / psnr_resilience_off; | ||
| 83 | EXPECT_GE(psnr_ratio, 0.9); | ||
| 84 | EXPECT_LE(psnr_ratio, 1.1); | ||
| 85 | } | ||
| 86 | } | ||
| 87 | |||
| 88 | INSTANTIATE_TEST_CASE_P(OnOffTest, ErrorResilienceTest, | ||
| 89 | ONE_PASS_TEST_MODES); | ||
| 90 | } // namespace | ||
| @@ -13,6 +13,7 @@ LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += config_test.cc · 12 unmodified lines | |||
| 13 | LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += cq_test.cc | 13 | LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += cq_test.cc |
| 14 | LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += encode_test_driver.cc | 14 | LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += encode_test_driver.cc |
| 15 | LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += encode_test_driver.h | 15 | LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += encode_test_driver.h |
| 16 | LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += error_resilience_test.cc | ||
| 16 | LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += i420_video_source.h | 17 | LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += i420_video_source.h |
| 17 | LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += keyframe_test.cc | 18 | LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += keyframe_test.cc |
| 18 | LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += resize_test.cc | 19 | LIBVPX_TEST_SRCS-$(CONFIG_VP8_ENCODER) += resize_test.cc |