From 3eaf9f169cd04dcd15ecda60add655da249f9b36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= Date: Thu, 17 Jan 2019 16:31:36 +0100 Subject: [PATCH] Refactor PeerConnectionFactoryTest to not use FakeVideoCapturer. Extend FakeVideoTrackSource to have a VideoBroadcaster. Bug: webrtc:6353 Change-Id: I3c8e68b4ec9a1910f0450b5cc698056c0f3089d2 Reviewed-on: https://webrtc-review.googlesource.com/c/118080 Reviewed-by: Harald Alvestrand Commit-Queue: Niels Moller Cr-Commit-Position: refs/heads/master@{#26320} --- pc/peer_connection_factory_unittest.cc | 22 +++++++++++----------- pc/test/fake_video_track_source.h | 18 +++++++++++------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/pc/peer_connection_factory_unittest.cc b/pc/peer_connection_factory_unittest.cc index 3f3cc158f5..1c3eff7a73 100644 --- a/pc/peer_connection_factory_unittest.cc +++ b/pc/peer_connection_factory_unittest.cc @@ -27,7 +27,7 @@ #include "api/video_codecs/builtin_video_encoder_factory.h" #include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_encoder_factory.h" -#include "media/base/fake_video_capturer.h" +#include "media/base/fake_frame_source.h" #include "modules/audio_device/include/audio_device.h" #include "modules/audio_processing/include/audio_processing.h" #include "p2p/base/fake_port_allocator.h" @@ -35,6 +35,7 @@ #include "p2p/base/port_interface.h" #include "pc/peer_connection_factory.h" #include "pc/test/fake_audio_capture_module.h" +#include "pc/test/fake_video_track_source.h" #include "rtc_base/socket_address.h" #include "test/gtest.h" @@ -443,13 +444,12 @@ TEST_F(PeerConnectionFactoryTest, CreatePCUsingIPLiteralAddress) { // This test verifies the captured stream is rendered locally using a // local video track. TEST_F(PeerConnectionFactoryTest, LocalRendering) { - cricket::FakeVideoCapturerWithTaskQueue* capturer = - new cricket::FakeVideoCapturerWithTaskQueue(); - // The source takes ownership of |capturer|, but we keep a raw pointer to - // inject fake frames. - rtc::scoped_refptr source( - factory_->CreateVideoSource( - std::unique_ptr(capturer), NULL)); + rtc::scoped_refptr source = + webrtc::FakeVideoTrackSource::Create(/*is_screencast=*/false); + + cricket::FakeFrameSource frame_source(1280, 720, + rtc::kNumMicrosecsPerSec / 30); + ASSERT_TRUE(source.get() != NULL); rtc::scoped_refptr track( factory_->CreateVideoTrack("testlabel", source)); @@ -457,17 +457,17 @@ TEST_F(PeerConnectionFactoryTest, LocalRendering) { FakeVideoTrackRenderer local_renderer(track); EXPECT_EQ(0, local_renderer.num_rendered_frames()); - EXPECT_TRUE(capturer->CaptureFrame()); + source->InjectFrame(frame_source.GetFrame()); EXPECT_EQ(1, local_renderer.num_rendered_frames()); EXPECT_FALSE(local_renderer.black_frame()); track->set_enabled(false); - EXPECT_TRUE(capturer->CaptureFrame()); + source->InjectFrame(frame_source.GetFrame()); EXPECT_EQ(2, local_renderer.num_rendered_frames()); EXPECT_TRUE(local_renderer.black_frame()); track->set_enabled(true); - EXPECT_TRUE(capturer->CaptureFrame()); + source->InjectFrame(frame_source.GetFrame()); EXPECT_EQ(3, local_renderer.num_rendered_frames()); EXPECT_FALSE(local_renderer.black_frame()); } diff --git a/pc/test/fake_video_track_source.h b/pc/test/fake_video_track_source.h index 295201ecb4..d6562313c5 100644 --- a/pc/test/fake_video_track_source.h +++ b/pc/test/fake_video_track_source.h @@ -12,12 +12,13 @@ #define PC_TEST_FAKE_VIDEO_TRACK_SOURCE_H_ #include "api/media_stream_interface.h" +#include "media/base/video_broadcaster.h" #include "pc/video_track_source.h" namespace webrtc { -// A minimal implementation of VideoTrackSource, which doesn't produce -// any frames. +// A minimal implementation of VideoTrackSource. Includes a VideoBroadcaster for +// injection of frames. class FakeVideoTrackSource : public VideoTrackSource { public: static rtc::scoped_refptr Create(bool is_screencast) { @@ -29,20 +30,23 @@ class FakeVideoTrackSource : public VideoTrackSource { } bool is_screencast() const override { return is_screencast_; } - void AddOrUpdateSink(rtc::VideoSinkInterface* sink, - const rtc::VideoSinkWants& wants) override {} - void RemoveSink(rtc::VideoSinkInterface* sink) {} + + void InjectFrame(const VideoFrame& frame) { + video_broadcaster_.OnFrame(frame); + } protected: explicit FakeVideoTrackSource(bool is_screencast) : VideoTrackSource(false /* remote */), is_screencast_(is_screencast) {} ~FakeVideoTrackSource() override = default; - // Unused, since we override AddOrUpdateSink and RemoveSink above. - rtc::VideoSourceInterface* source() override { return nullptr; } + rtc::VideoSourceInterface* source() override { + return &video_broadcaster_; + } private: const bool is_screencast_; + rtc::VideoBroadcaster video_broadcaster_; }; } // namespace webrtc