From cd7da92012f8a7d149eae4669a7e8bb97c9d8a22 Mon Sep 17 00:00:00 2001 From: Rasmus Brandt Date: Wed, 25 Apr 2018 12:45:16 +0200 Subject: [PATCH] Add MediaCodec VP tests for uncommon resolutions. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: None Change-Id: Ibfc35af3635c3b3a50027c4cd828f78e7a438dcd Reviewed-on: https://webrtc-review.googlesource.com/72342 Commit-Queue: Rasmus Brandt Reviewed-by: Åsa Persson Cr-Commit-Position: refs/heads/master@{#23020} --- modules/video_coding/BUILD.gn | 10 +++++ ...deoprocessor_integrationtest_mediacodec.cc | 41 +++++++++++++++++-- resources/foreman_240x136.yuv.sha1 | 1 + resources/foreman_480x272.yuv.sha1 | 1 + 4 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 resources/foreman_240x136.yuv.sha1 create mode 100644 resources/foreman_480x272.yuv.sha1 diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn index b2fd91d467..555a3b42ca 100644 --- a/modules/video_coding/BUILD.gn +++ b/modules/video_coding/BUILD.gn @@ -635,6 +635,16 @@ if (rtc_include_tests) { } video_coding_modules_tests_resources = [] + if (is_android) { + video_coding_modules_tests_resources += [ + "../../resources/foreman_128x96.yuv", + "../../resources/foreman_160x120.yuv", + "../../resources/foreman_176x144.yuv", + "../../resources/foreman_240x136.yuv", + "../../resources/foreman_320x240.yuv", + "../../resources/foreman_480x272.yuv", + ] + } if (!(is_ios || is_android)) { video_coding_modules_tests_resources += [ "../../resources/FourPeople_1280x720_30.yuv", diff --git a/modules/video_coding/codecs/test/videoprocessor_integrationtest_mediacodec.cc b/modules/video_coding/codecs/test/videoprocessor_integrationtest_mediacodec.cc index 938b45175c..8b758ae357 100644 --- a/modules/video_coding/codecs/test/videoprocessor_integrationtest_mediacodec.cc +++ b/modules/video_coding/codecs/test/videoprocessor_integrationtest_mediacodec.cc @@ -10,6 +10,8 @@ #include "modules/video_coding/codecs/test/videoprocessor_integrationtest.h" +#include +#include #include #include "common_types.h" // NOLINT(build/include) @@ -22,6 +24,7 @@ namespace test { namespace { const int kForemanNumFrames = 300; +const int kForemanFramerateFps = 30; } // namespace class VideoProcessorIntegrationTestMediaCodec @@ -40,7 +43,8 @@ TEST_F(VideoProcessorIntegrationTestMediaCodec, ForemanCif500kbpsVp8) { config_.SetCodecSettings(cricket::kVp8CodecName, 1, 1, 1, false, false, false, false, 352, 288); - std::vector rate_profiles = {{500, 30, kForemanNumFrames}}; + std::vector rate_profiles = { + {500, kForemanFramerateFps, kForemanNumFrames}}; // The thresholds below may have to be tweaked to let even poor MediaCodec // implementations pass. If this test fails on the bots, disable it and @@ -59,7 +63,8 @@ TEST_F(VideoProcessorIntegrationTestMediaCodec, ForemanCif500kbpsH264CBP) { config_.SetCodecSettings(cricket::kH264CodecName, 1, 1, 1, false, false, false, false, 352, 288); - std::vector rate_profiles = {{500, 30, kForemanNumFrames}}; + std::vector rate_profiles = { + {500, kForemanFramerateFps, kForemanNumFrames}}; // The thresholds below may have to be tweaked to let even poor MediaCodec // implementations pass. If this test fails on the bots, disable it and @@ -84,7 +89,8 @@ TEST_F(VideoProcessorIntegrationTestMediaCodec, config_.SetCodecSettings(cricket::kH264CodecName, 1, 1, 1, false, false, false, false, 352, 288); - std::vector rate_profiles = {{500, 30, kForemanNumFrames}}; + std::vector rate_profiles = { + {500, kForemanFramerateFps, kForemanNumFrames}}; // The thresholds below may have to be tweaked to let even poor MediaCodec // implementations pass. If this test fails on the bots, disable it and @@ -98,5 +104,34 @@ TEST_F(VideoProcessorIntegrationTestMediaCodec, &quality_thresholds, nullptr, nullptr); } +TEST_F(VideoProcessorIntegrationTestMediaCodec, ForemanMixedRes100kbpsVp8H264) { + const int kNumFrames = 30; + // TODO(brandtr): Add H.264 when we have fixed the encoder. + const std::vector codecs = {cricket::kVp8CodecName}; + const std::vector> resolutions = { + {128, 96}, {160, 120}, {176, 144}, {240, 136}, {320, 240}, {480, 272}}; + const std::vector rate_profiles = { + {100, kForemanFramerateFps, kNumFrames}}; + const std::vector quality_thresholds = { + {29, 26, 0.8, 0.75}}; + + for (const auto& codec : codecs) { + for (const auto& resolution : resolutions) { + const int width = std::get<0>(resolution); + const int height = std::get<1>(resolution); + config_.filename = std::string("foreman_") + std::to_string(width) + "x" + + std::to_string(height); + config_.filepath = ResourcePath(config_.filename, "yuv"); + config_.num_frames = kNumFrames; + config_.SetCodecSettings(codec, 1, 1, 1, false, false, false, false, + width, height); + + ProcessFramesAndMaybeVerify( + rate_profiles, nullptr /* rc_thresholds */, &quality_thresholds, + nullptr /* bs_thresholds */, nullptr /* visualization_params */); + } + } +} + } // namespace test } // namespace webrtc diff --git a/resources/foreman_240x136.yuv.sha1 b/resources/foreman_240x136.yuv.sha1 new file mode 100644 index 0000000000..bc162e16b9 --- /dev/null +++ b/resources/foreman_240x136.yuv.sha1 @@ -0,0 +1 @@ +117c0301ed19d83f0e112ea3e831dd389db68570 \ No newline at end of file diff --git a/resources/foreman_480x272.yuv.sha1 b/resources/foreman_480x272.yuv.sha1 new file mode 100644 index 0000000000..a5fded8519 --- /dev/null +++ b/resources/foreman_480x272.yuv.sha1 @@ -0,0 +1 @@ +65717a7be6dc7ce5d88afedc73e46838aa0a3abc \ No newline at end of file