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}
This commit is contained in:
Niels Möller
2019-01-17 16:31:36 +01:00
committed by Commit Bot
parent d15687d612
commit 3eaf9f169c
2 changed files with 22 additions and 18 deletions

View File

@ -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<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 @@ 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());
}

View File

@ -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 @@ class FakeVideoTrackSource : public VideoTrackSource {
}
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