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:
@ -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());
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user