Remove unimplemented VideoChannel code.

Also removing a lot of dead testcases that were copied over and made
sense in the old implementation, now they just take space.

BUG=
R=pthatcher@google.com, pthatcher@webrtc.org

Review URL: https://codereview.webrtc.org/1658533003 .

Cr-Commit-Position: refs/heads/master@{#11450}
This commit is contained in:
Peter Boström 2016-02-01 19:30:33 +01:00
parent 6f7557e9e2
commit a6c39d9902
8 changed files with 2 additions and 423 deletions

View File

@ -441,10 +441,7 @@ class FakeVideoMediaChannel : public RtpHelper<VideoMediaChannel> {
public:
explicit FakeVideoMediaChannel(FakeVideoEngine* engine,
const VideoOptions& options)
: engine_(engine),
sent_intra_frame_(false),
requested_intra_frame_(false),
max_bps_(-1) {
: engine_(engine), max_bps_(-1) {
SetOptions(options);
}
@ -545,19 +542,6 @@ class FakeVideoMediaChannel : public RtpHelper<VideoMediaChannel> {
}
virtual bool GetStats(VideoMediaInfo* info) { return false; }
virtual bool SendIntraFrame() {
sent_intra_frame_ = true;
return true;
}
virtual bool RequestIntraFrame() {
requested_intra_frame_ = true;
return true;
}
virtual void UpdateAspectRatio(int ratio_w, int ratio_h) {}
void set_sent_intra_frame(bool v) { sent_intra_frame_ = v; }
bool sent_intra_frame() const { return sent_intra_frame_; }
void set_requested_intra_frame(bool v) { requested_intra_frame_ = v; }
bool requested_intra_frame() const { return requested_intra_frame_; }
private:
bool SetRecvCodecs(const std::vector<VideoCodec>& codecs) {
@ -606,8 +590,6 @@ class FakeVideoMediaChannel : public RtpHelper<VideoMediaChannel> {
std::map<uint32_t, VideoRenderer*> renderers_;
std::map<uint32_t, VideoFormat> send_formats_;
std::map<uint32_t, VideoCapturer*> capturers_;
bool sent_intra_frame_;
bool requested_intra_frame_;
VideoOptions options_;
int max_bps_;
};

View File

@ -1006,11 +1006,6 @@ class VideoMediaChannel : public MediaChannel {
virtual bool SetCapturer(uint32_t ssrc, VideoCapturer* capturer) = 0;
// Gets quality stats for the channel.
virtual bool GetStats(VideoMediaInfo* info) = 0;
// Send an intra frame to the receivers.
virtual bool SendIntraFrame() = 0;
// Reuqest each of the remote senders to send an intra frame.
virtual bool RequestIntraFrame() = 0;
virtual void UpdateAspectRatio(int ratio_w, int ratio_h) = 0;
protected:
VideoRenderer *renderer_;

View File

@ -588,7 +588,6 @@ class VideoMediaChannelTest : public testing::Test,
EXPECT_TRUE(channel_->AddRecvStream(
cricket::StreamParams::CreateLegacy(kSsrc)));
EXPECT_TRUE(channel_->SetRenderer(kSsrc, &renderer_));
channel_->UpdateAspectRatio(640, 400);
EXPECT_TRUE(SetSend(true));
EXPECT_TRUE(SendFrame());
EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout);
@ -760,47 +759,6 @@ class VideoMediaChannelTest : public testing::Test,
EXPECT_EQ(789u, ssrc);
}
// Test that no frames are rendered after the receive stream have been
// removed.
void AddRemoveRecvStreamAndRender() {
cricket::FakeVideoRenderer renderer1;
EXPECT_TRUE(SetDefaultCodec());
EXPECT_TRUE(SetSend(true));
EXPECT_TRUE(channel_->AddRecvStream(
cricket::StreamParams::CreateLegacy(kSsrc)));
EXPECT_TRUE(channel_->SetRenderer(kSsrc, &renderer1));
EXPECT_TRUE(SendFrame());
EXPECT_FRAME_ON_RENDERER_WAIT(
renderer1, 1, DefaultCodec().width, DefaultCodec().height, kTimeout);
EXPECT_TRUE(channel_->RemoveRecvStream(kSsrc));
// Send three more frames. This is to avoid that the test might be flaky
// due to frame dropping.
for (size_t i = 0; i < 3; ++i)
EXPECT_TRUE(WaitAndSendFrame(100));
// Test that no more frames have been rendered.
EXPECT_EQ(1, renderer1.num_rendered_frames());
// Re-add the stream again and make sure it renders.
EXPECT_TRUE(channel_->AddRecvStream(
cricket::StreamParams::CreateLegacy(kSsrc)));
// Force the next frame to be a key frame to make the receiving
// decoder happy.
EXPECT_TRUE(channel_->SendIntraFrame());
EXPECT_TRUE(channel_->SetRenderer(kSsrc, &renderer1));
EXPECT_TRUE(SendFrame());
// Because the default channel is used, RemoveRecvStream above is not going
// to delete the channel. As a result the engine will continue to receive
// and decode the 3 frames sent above. So it is possible we will receive
// some (e.g. 1) of these 3 frames after the renderer is set again.
EXPECT_GT_FRAME_ON_RENDERER_WAIT(
renderer1, 2, DefaultCodec().width, DefaultCodec().height, kTimeout);
// Detach |renderer1| before exit as there might be frames come late.
EXPECT_TRUE(channel_->SetRenderer(kSsrc, NULL));
}
// Tests the behavior of incoming streams in a conference scenario.
void SimulateConference() {
cricket::FakeVideoRenderer renderer1, renderer2;

View File

@ -1347,18 +1347,6 @@ bool WebRtcVideoChannel2::SetCapturer(uint32_t ssrc, VideoCapturer* capturer) {
return true;
}
bool WebRtcVideoChannel2::SendIntraFrame() {
// TODO(pbos): Implement.
LOG(LS_VERBOSE) << "SendIntraFrame().";
return true;
}
bool WebRtcVideoChannel2::RequestIntraFrame() {
// TODO(pbos): Implement.
LOG(LS_VERBOSE) << "SendIntraFrame().";
return true;
}
void WebRtcVideoChannel2::OnPacketReceived(
rtc::Buffer* packet,
const rtc::PacketTime& packet_time) {
@ -1474,14 +1462,6 @@ void WebRtcVideoChannel2::SetInterface(NetworkInterface* iface) {
kVideoRtpBufferSize);
}
void WebRtcVideoChannel2::UpdateAspectRatio(int ratio_w, int ratio_h) {
// TODO(pbos): Implement.
}
void WebRtcVideoChannel2::OnMessage(rtc::Message* msg) {
// Ignored.
}
void WebRtcVideoChannel2::OnLoadUpdate(Load load) {
// OnLoadUpdate can not take any locks that are held while creating streams
// etc. Doing so establishes lock-order inversions between the webrtc process

View File

@ -145,8 +145,7 @@ class WebRtcVideoEngine2 {
rtc::scoped_ptr<WebRtcVideoEncoderFactory> simulcast_encoder_factory_;
};
class WebRtcVideoChannel2 : public rtc::MessageHandler,
public VideoMediaChannel,
class WebRtcVideoChannel2 : public VideoMediaChannel,
public webrtc::Transport,
public webrtc::LoadObserver {
public:
@ -174,8 +173,6 @@ class WebRtcVideoChannel2 : public rtc::MessageHandler,
bool SetRenderer(uint32_t ssrc, VideoRenderer* renderer) override;
bool GetStats(VideoMediaInfo* info) override;
bool SetCapturer(uint32_t ssrc, VideoCapturer* capturer) override;
bool SendIntraFrame() override;
bool RequestIntraFrame() override;
void OnPacketReceived(rtc::Buffer* packet,
const rtc::PacketTime& packet_time) override;
@ -183,9 +180,6 @@ class WebRtcVideoChannel2 : public rtc::MessageHandler,
const rtc::PacketTime& packet_time) override;
void OnReadyToSend(bool ready) override;
void SetInterface(NetworkInterface* iface) override;
void UpdateAspectRatio(int ratio_w, int ratio_h) override;
void OnMessage(rtc::Message* msg) override;
void OnLoadUpdate(Load load) override;

View File

@ -807,8 +807,6 @@ WEBRTC_BASE_TEST(SetSendSsrcAfterSetCodecs);
WEBRTC_BASE_TEST(SetRenderer);
WEBRTC_DISABLED_BASE_TEST(AddRemoveRecvStreamAndRender);
WEBRTC_BASE_TEST(AddRemoveSendStreams);
WEBRTC_BASE_TEST(SimulateConference);
@ -864,29 +862,6 @@ TEST_F(WebRtcVideoChannel2BaseTest, TwoStreamsReUseFirstStream) {
Base::TwoStreamsReUseFirstStream(kVp8Codec);
}
// TODO(pbos): Enable and figure out why this fails (or should work).
TEST_F(WebRtcVideoChannel2BaseTest, DISABLED_SendVp8HdAndReceiveAdaptedVp8Vga) {
EXPECT_TRUE(channel_->SetCapturer(kSsrc, NULL));
EXPECT_TRUE(channel_->SetRenderer(kDefaultReceiveSsrc, &renderer_));
channel_->UpdateAspectRatio(1280, 720);
video_capturer_.reset(new cricket::FakeVideoCapturer);
const std::vector<cricket::VideoFormat>* formats =
video_capturer_->GetSupportedFormats();
cricket::VideoFormat capture_format_hd = (*formats)[0];
EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(capture_format_hd));
EXPECT_TRUE(channel_->SetCapturer(kSsrc, video_capturer_.get()));
// Capture format HD -> adapt (OnOutputFormatRequest VGA) -> VGA.
cricket::VideoCodec codec = kVp8Codec720p;
EXPECT_TRUE(SetOneCodec(codec));
codec.width /= 2;
codec.height /= 2;
EXPECT_TRUE(SetSend(true));
EXPECT_EQ(0, renderer_.num_rendered_frames());
EXPECT_TRUE(SendFrame());
EXPECT_FRAME_WAIT(1, codec.width, codec.height, kTimeout);
}
class WebRtcVideoChannel2Test : public WebRtcVideoEngine2Test {
public:
WebRtcVideoChannel2Test() : WebRtcVideoChannel2Test("") {}
@ -1392,18 +1367,6 @@ TEST_F(WebRtcVideoChannel2Test, SetRecvRtpHeaderExtensionsRejectsDuplicateIds) {
EXPECT_FALSE(channel_->SetRecvParameters(recv_parameters_));
}
TEST_F(WebRtcVideoChannel2Test, DISABLED_LeakyBucketTest) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test, DISABLED_BufferedModeLatency) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test, DISABLED_AdditiveVideoOptions) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test, AddRecvStreamOnlyUsesOneReceiveStream) {
EXPECT_TRUE(channel_->AddRecvStream(cricket::StreamParams::CreateLegacy(1)));
EXPECT_EQ(1u, fake_call_->GetVideoReceiveStreams().size());
@ -1515,38 +1478,6 @@ TEST_F(WebRtcVideoChannel2Test, NackCanBeEnabledAndDisabled) {
EXPECT_GT(send_stream->GetConfig().rtp.nack.rtp_history_ms, 0);
}
TEST_F(WebRtcVideoChannel2Test, DISABLED_VideoProtectionInterop) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test, DISABLED_VideoProtectionInteropReversed) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test, DISABLED_HybridNackFecConference) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test, DISABLED_AddRemoveRecvStreamConference) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test, DISABLED_SetBandwidthAuto) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test, DISABLED_SetBandwidthAutoCapped) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test, DISABLED_SetBandwidthFixed) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test, DISABLED_SetBandwidthInConference) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test, UsesCorrectSettingsForScreencast) {
static const int kScreenshareMinBitrateKbps = 800;
cricket::VideoCodec codec = kVp8Codec360p;
@ -1639,15 +1570,6 @@ TEST_F(WebRtcVideoChannel2Test,
EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL));
}
TEST_F(WebRtcVideoChannel2Test, DISABLED_SetSendSsrcAndCname) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test,
DISABLED_SetSendSsrcAfterCreatingReceiveChannel) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test, SuspendBelowMinBitrateDisabledByDefault) {
FakeVideoSendStream* stream = AddSendStream();
EXPECT_FALSE(stream->GetConfig().suspend_below_min_bitrate);
@ -1824,14 +1746,6 @@ TEST_F(Vp9SettingsTest, VerifyVp9SpecificSettings) {
EXPECT_TRUE(channel_->SetCapturer(last_ssrc_, NULL));
}
TEST_F(WebRtcVideoChannel2Test, DISABLED_MultipleSendStreamsWithOneCapturer) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test, DISABLED_SendReceiveBitratesStats) {
FAIL() << "Not implemented."; // TODO(pbos): Implement.
}
TEST_F(WebRtcVideoChannel2Test, AdaptsOnOveruse) {
TestCpuAdaptation(true, false);
}
@ -3047,153 +2961,6 @@ TEST_F(WebRtcVideoChannel2Test, ConfiguresLocalSsrcOnExistingReceivers) {
TestReceiverLocalSsrcConfiguration(true);
}
class WebRtcVideoEngine2SimulcastTest : public testing::Test {};
// Test that if we add a stream with RTX SSRC's, SSRC's get set correctly.
TEST_F(WebRtcVideoEngine2SimulcastTest, DISABLED_TestStreamWithRtx) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test that if we get too few ssrcs are given in AddSendStream(),
// only supported sub-streams will be added.
TEST_F(WebRtcVideoEngine2SimulcastTest, DISABLED_TooFewSimulcastSsrcs) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test that even more than enough ssrcs are given in AddSendStream(),
// only supported sub-streams will be added.
TEST_F(WebRtcVideoEngine2SimulcastTest, DISABLED_MoreThanEnoughSimulcastSscrs) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test that SetSendStreamFormat works well with simulcast.
TEST_F(WebRtcVideoEngine2SimulcastTest,
DISABLED_SetSendStreamFormatWithSimulcast) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test that simulcast send codec is reset on new video frame size.
TEST_F(WebRtcVideoEngine2SimulcastTest,
DISABLED_ResetSimulcastSendCodecOnNewFrameSize) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test that simulcast send codec is reset on new portait mode video frame.
TEST_F(WebRtcVideoEngine2SimulcastTest,
DISABLED_ResetSimulcastSendCodecOnNewPortaitFrame) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoEngine2SimulcastTest,
DISABLED_SetBandwidthInConferenceWithSimulcast) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test that sending screencast frames in conference mode changes
// bitrate.
TEST_F(WebRtcVideoEngine2SimulcastTest,
DISABLED_SetBandwidthScreencastInConference) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test AddSendStream with simulcast rejects bad StreamParams.
TEST_F(WebRtcVideoEngine2SimulcastTest,
DISABLED_AddSendStreamWithBadStreamParams) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test AddSendStream with simulcast sets ssrc and cname correctly.
TEST_F(WebRtcVideoEngine2SimulcastTest, DISABLED_AddSendStreamWithSimulcast) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test RemoveSendStream with simulcast.
TEST_F(WebRtcVideoEngine2SimulcastTest,
DISABLED_RemoveSendStreamWithSimulcast) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test AddSendStream after send codec has already been set will reset
// send codec with simulcast settings.
TEST_F(WebRtcVideoEngine2SimulcastTest,
DISABLED_AddSimulcastStreamAfterSetSendCodec) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoEngine2SimulcastTest, DISABLED_GetStatsWithMultipleSsrcs) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test receiving channel(s) local ssrc is set to the same as the first
// simulcast sending ssrc.
TEST_F(WebRtcVideoEngine2SimulcastTest,
DISABLED_AddSimulcastStreamAfterCreatingRecvChannels) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test 1:1 call never turn on simulcast.
TEST_F(WebRtcVideoEngine2SimulcastTest, DISABLED_NoSimulcastWith1on1) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test SetOptions with conference mode.
TEST_F(WebRtcVideoEngine2SimulcastTest, DISABLED_SetOptionsWithConferenceMode) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test that two different streams can have different formats.
TEST_F(WebRtcVideoEngine2SimulcastTest,
DISABLED_MultipleSendStreamsDifferentFormats) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoEngine2SimulcastTest, DISABLED_TestAdaptToOutputFormat) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoEngine2SimulcastTest,
DISABLED_TestAdaptWithCpuOveruseObserver) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test that codec is not reset for every frame sent in non-conference and
// non-screencast mode.
TEST_F(WebRtcVideoEngine2SimulcastTest, DISABLED_DontResetCodecOnSendFrame) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoEngine2SimulcastTest,
DISABLED_UseSimulcastAdapterOnVp8OnlyFactory) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoEngine2SimulcastTest,
DISABLED_DontUseSimulcastAdapterOnNonVp8Factory) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
class WebRtcVideoChannel2SimulcastTest : public testing::Test {
public:
WebRtcVideoChannel2SimulcastTest() : fake_call_(webrtc::Call::Config()) {}
@ -3334,88 +3101,6 @@ TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) {
codec.height += 1;
VerifySimulcastSettings(codec, 2, 2);
}
TEST_F(WebRtcVideoChannel2SimulcastTest, DISABLED_SimulcastSend_1280x800) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoChannel2SimulcastTest, DISABLED_SimulcastSend_1280x720) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoChannel2SimulcastTest, DISABLED_SimulcastSend_960x540) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoChannel2SimulcastTest, DISABLED_SimulcastSend_960x600) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoChannel2SimulcastTest, DISABLED_SimulcastSend_640x400) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoChannel2SimulcastTest, DISABLED_SimulcastSend_640x360) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoChannel2SimulcastTest, DISABLED_SimulcastSend_480x300) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoChannel2SimulcastTest, DISABLED_SimulcastSend_480x270) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoChannel2SimulcastTest, DISABLED_SimulcastSend_320x200) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
TEST_F(WebRtcVideoChannel2SimulcastTest, DISABLED_SimulcastSend_320x180) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Test simulcast streams are decodeable with expected sizes.
TEST_F(WebRtcVideoChannel2SimulcastTest, DISABLED_SimulcastStreams) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Simulcast and resolution resizing should be turned off when screencasting
// but not otherwise.
TEST_F(WebRtcVideoChannel2SimulcastTest, DISABLED_ScreencastRendering) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Ensures that the correct settings are applied to the codec when single
// temporal layer screencasting is enabled, and that the correct simulcast
// settings are reapplied when disabling screencasting.
TEST_F(WebRtcVideoChannel2SimulcastTest,
DISABLED_OneTemporalLayerScreencastSettings) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
// Ensures that the correct settings are applied to the codec when two temporal
// layer screencasting is enabled, and that the correct simulcast settings are
// reapplied when disabling screencasting.
TEST_F(WebRtcVideoChannel2SimulcastTest,
DISABLED_TwoTemporalLayerScreencastSettings) {
// TODO(pbos): Implement.
FAIL() << "Not implemented.";
}
} // namespace cricket
#endif // HAVE_WEBRTC_VIDEO

View File

@ -1707,18 +1707,6 @@ bool VideoChannel::IsScreencasting() {
return InvokeOnWorker(Bind(&VideoChannel::IsScreencasting_w, this));
}
bool VideoChannel::SendIntraFrame() {
worker_thread()->Invoke<void>(Bind(
&VideoMediaChannel::SendIntraFrame, media_channel()));
return true;
}
bool VideoChannel::RequestIntraFrame() {
worker_thread()->Invoke<void>(Bind(
&VideoMediaChannel::RequestIntraFrame, media_channel()));
return true;
}
bool VideoChannel::SetVideoSend(uint32_t ssrc,
bool mute,
const VideoOptions* options) {

View File

@ -478,9 +478,6 @@ class VideoChannel : public BaseChannel {
sigslot::signal2<VideoChannel*, const VideoMediaInfo&> SignalMediaMonitor;
sigslot::signal2<uint32_t, rtc::WindowEvent> SignalScreencastWindowEvent;
bool SendIntraFrame();
bool RequestIntraFrame();
bool SetVideoSend(uint32_t ssrc, bool enable, const VideoOptions* options);
private: