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 <hta@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26320}
diff --git a/pc/peer_connection_factory_unittest.cc b/pc/peer_connection_factory_unittest.cc
index 3f3cc15..1c3eff7 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 @@
// 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<VideoTrackSourceInterface> source(
- factory_->CreateVideoSource(
- std::unique_ptr<cricket::VideoCapturer>(capturer), NULL));
+ rtc::scoped_refptr<webrtc::FakeVideoTrackSource> source =
+ webrtc::FakeVideoTrackSource::Create(/*is_screencast=*/false);
+
+ cricket::FakeFrameSource frame_source(1280, 720,
+ rtc::kNumMicrosecsPerSec / 30);
+
ASSERT_TRUE(source.get() != NULL);
rtc::scoped_refptr<VideoTrackInterface> track(
factory_->CreateVideoTrack("testlabel", source));
@@ -457,17 +457,17 @@
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 295201e..d656231 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<FakeVideoTrackSource> Create(bool is_screencast) {
@@ -29,20 +30,23 @@
}
bool is_screencast() const override { return is_screencast_; }
- void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
- const rtc::VideoSinkWants& wants) override {}
- void RemoveSink(rtc::VideoSinkInterface<VideoFrame>* 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<VideoFrame>* source() override { return nullptr; }
+ rtc::VideoSourceInterface<VideoFrame>* source() override {
+ return &video_broadcaster_;
+ }
private:
const bool is_screencast_;
+ rtc::VideoBroadcaster video_broadcaster_;
};
} // namespace webrtc