From d37307c56132d4a6c65ad2907ec9c9fa703cf9a9 Mon Sep 17 00:00:00 2001 From: Sebastian Jansson Date: Fri, 22 Feb 2019 17:07:49 +0100 Subject: [PATCH] Reland "Adds resource path support for video files in scenario tests." This is a reland of 8306a733f0dc45f19462268e29c90ada9f46b28e Original change's description: > Adds resource path support for video files in scenario tests. > > Bug: webrtc:9510 > Change-Id: Id41a32325cc5b16b119e62fba483cec88f52975b > Reviewed-on: https://webrtc-review.googlesource.com/c/123189 > Commit-Queue: Sebastian Jansson > Reviewed-by: Ilya Nikolaevskiy > Cr-Commit-Position: refs/heads/master@{#26804} Bug: webrtc:9510 Change-Id: I97a5568063569ca66d87f28204200a582d01e2e1 Reviewed-on: https://webrtc-review.googlesource.com/c/123960 Reviewed-by: Ilya Nikolaevskiy Commit-Queue: Sebastian Jansson Cr-Commit-Position: refs/heads/master@{#26836} --- test/scenario/BUILD.gn | 32 ++++++++++++++++ test/scenario/video_stream.cc | 2 +- test/scenario/video_stream_unittest.cc | 52 +++++++++++++++++++++++++- 3 files changed, 84 insertions(+), 2 deletions(-) diff --git a/test/scenario/BUILD.gn b/test/scenario/BUILD.gn index 9c5422d527..3f168a7e30 100644 --- a/test/scenario/BUILD.gn +++ b/test/scenario/BUILD.gn @@ -21,6 +21,30 @@ rtc_source_set("column_printer") { ] } +scenario_resources = [ + "../../resources/difficult_photo_1850_1110.yuv", + "../../resources/photo_1850_1110.yuv", + "../../resources/presentation_1850_1110.yuv", + "../../resources/web_screenshot_1850_1110.yuv", +] +scenario_unittest_resources = [ "../../resources/foreman_cif.yuv" ] + +if (is_ios) { + bundle_data("scenario_resources_bundle_data") { + testonly = true + sources = scenario_resources + outputs = [ + "{{bundle_resources_dir}}/{{source_file_part}}", + ] + } + bundle_data("scenario_unittest_resources_bundle_data") { + testonly = true + sources = scenario_unittest_resources + outputs = [ + "{{bundle_resources_dir}}/{{source_file_part}}", + ] + } +} if (rtc_include_tests) { rtc_source_set("scenario") { testonly = true @@ -123,6 +147,10 @@ if (rtc_include_tests) { if (!build_with_chromium && is_clang) { suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] } + data = scenario_resources + if (is_ios) { + deps += [ ":scenario_resources_bundle_data" ] + } } rtc_source_set("scenario_unittests") { testonly = true @@ -145,6 +173,10 @@ if (rtc_include_tests) { "//testing/gmock", "//third_party/abseil-cpp/absl/memory", ] + data = scenario_unittest_resources + if (is_ios) { + deps += [ ":scenario_unittest_resources_bundle_data" ] + } } rtc_source_set("scenario_slow_tests") { testonly = true diff --git a/test/scenario/video_stream.cc b/test/scenario/video_stream.cc index c50167e31b..02ee327818 100644 --- a/test/scenario/video_stream.cc +++ b/test/scenario/video_stream.cc @@ -286,7 +286,7 @@ std::unique_ptr CreateFrameGenerator( case Capture::kVideoFile: RTC_CHECK(source.video_file.width && source.video_file.height); return FrameGenerator::CreateFromYuvFile( - {source.video_file.name}, source.video_file.width, + {TransformFilePath(source.video_file.name)}, source.video_file.width, source.video_file.height, /*frame_repeat_count*/ 1); case Capture::kGenerateSlides: return FrameGenerator::CreateSlideGenerator( diff --git a/test/scenario/video_stream_unittest.cc b/test/scenario/video_stream_unittest.cc index df7adba50d..dcb4e1bd93 100644 --- a/test/scenario/video_stream_unittest.cc +++ b/test/scenario/video_stream_unittest.cc @@ -15,11 +15,61 @@ namespace webrtc { namespace test { namespace { +using Capture = VideoStreamConfig::Source::Capture; +using ContentType = VideoStreamConfig::Encoder::ContentType; using Codec = VideoStreamConfig::Encoder::Codec; using CodecImpl = VideoStreamConfig::Encoder::Implementation; } // namespace -// TODO(srte): Enable after landing fix causing flakiness. +// TODO(srte): Enable this after resolving flakiness issues. +TEST(VideoStreamTest, DISABLED_ReceivesFramesFromFileBasedStreams) { + TimeDelta kRunTime = TimeDelta::ms(500); + std::vector kFrameRates = {15, 30}; + std::deque> frame_counts(2); + frame_counts[0] = 0; + frame_counts[1] = 0; + { + Scenario s; + auto route = s.CreateRoutes(s.CreateClient("caller", CallClientConfig()), + {s.CreateSimulationNode(NetworkNodeConfig())}, + s.CreateClient("callee", CallClientConfig()), + {s.CreateSimulationNode(NetworkNodeConfig())}); + + s.CreateVideoStream(route->forward(), [&](VideoStreamConfig* c) { + c->analyzer.frame_quality_handler = [&](const VideoFrameQualityInfo&) { + frame_counts[0]++; + }; + c->source.capture = Capture::kVideoFile; + c->source.video_file.name = "foreman_cif"; + c->source.video_file.width = 352; + c->source.video_file.height = 288; + c->source.framerate = kFrameRates[0]; + c->encoder.implementation = CodecImpl::kSoftware; + c->encoder.codec = Codec::kVideoCodecVP8; + }); + s.CreateVideoStream(route->forward(), [&](VideoStreamConfig* c) { + c->analyzer.frame_quality_handler = [&](const VideoFrameQualityInfo&) { + frame_counts[1]++; + }; + c->source.capture = Capture::kImageSlides; + c->source.slides.images.crop.width = 320; + c->source.slides.images.crop.height = 240; + c->source.framerate = kFrameRates[1]; + c->encoder.implementation = CodecImpl::kSoftware; + c->encoder.codec = Codec::kVideoCodecVP9; + }); + s.RunFor(kRunTime); + } + std::vector expected_counts; + for (int fps : kFrameRates) + expected_counts.push_back( + static_cast(kRunTime.seconds() * fps * 0.8)); + + EXPECT_GE(frame_counts[0], expected_counts[0]); + EXPECT_GE(frame_counts[1], expected_counts[1]); +} + +// TODO(srte): Enable this after resolving flakiness issues. TEST(VideoStreamTest, DISABLED_RecievesVp8SimulcastFrames) { TimeDelta kRunTime = TimeDelta::ms(500); int kFrameRate = 30;