Index: webrtc/media/base/fakemediaengine.h |
diff --git a/webrtc/media/base/fakemediaengine.h b/webrtc/media/base/fakemediaengine.h |
index 0082391d768c17fe8bbaeceec9cb8ce5e27f9041..c8d54a545151a1600fce245b3a655f457f95548d 100644 |
--- a/webrtc/media/base/fakemediaengine.h |
+++ b/webrtc/media/base/fakemediaengine.h |
@@ -23,11 +23,13 @@ |
#include "webrtc/media/base/mediaengine.h" |
#include "webrtc/media/base/rtputils.h" |
#include "webrtc/media/base/streamparams.h" |
+#include "webrtc/media/engine/webrtcvideoengine.h" |
#include "webrtc/modules/audio_processing/include/audio_processing.h" |
#include "webrtc/p2p/base/sessiondescription.h" |
#include "webrtc/rtc_base/checks.h" |
#include "webrtc/rtc_base/copyonwritebuffer.h" |
#include "webrtc/rtc_base/networkroute.h" |
+#include "webrtc/rtc_base/ptr_util.h" |
#include "webrtc/rtc_base/stringutils.h" |
using webrtc::RtpExtension; |
@@ -47,7 +49,10 @@ template <class Base> class RtpHelper : public Base { |
fail_set_send_codecs_(false), |
fail_set_recv_codecs_(false), |
send_ssrc_(0), |
- ready_to_send_(false) {} |
+ ready_to_send_(false), |
+ transport_overhead_per_packet_(0), |
+ num_network_route_changes_(0) {} |
+ virtual ~RtpHelper() = default; |
const std::vector<RtpExtension>& recv_extensions() { |
return recv_extensions_; |
} |
@@ -299,7 +304,7 @@ template <class Base> class RtpHelper : public Base { |
bool ready_to_send_; |
int transport_overhead_per_packet_; |
rtc::NetworkRoute last_network_route_; |
- int num_network_route_changes_ = 0; |
+ int num_network_route_changes_; |
}; |
class FakeVoiceMediaChannel : public RtpHelper<VoiceMediaChannel> { |
@@ -517,9 +522,14 @@ inline bool CompareDtmfInfo(const FakeVoiceMediaChannel::DtmfInfo& info, |
class FakeVideoMediaChannel : public RtpHelper<VideoMediaChannel> { |
public: |
- explicit FakeVideoMediaChannel(FakeVideoEngine* engine, |
- const VideoOptions& options) |
- : engine_(engine), max_bps_(-1) { |
+ FakeVideoMediaChannel(FakeVideoEngine* engine, const VideoOptions& options) |
+ : FakeVideoMediaChannel(engine, |
+ options, |
+ std::unique_ptr<WebRtcVideoChannel>()) {} |
+ FakeVideoMediaChannel(FakeVideoEngine* engine, |
+ const VideoOptions& options, |
+ std::unique_ptr<WebRtcVideoChannel> real_channel) |
+ : engine_(engine), max_bps_(-1), real_channel_(std::move(real_channel)) { |
SetOptions(options); |
} |
@@ -536,6 +546,8 @@ class FakeVideoMediaChannel : public RtpHelper<VideoMediaChannel> { |
} |
int max_bps() const { return max_bps_; } |
bool SetSendParameters(const VideoSendParameters& params) override { |
+ if (real_channel_) |
+ real_channel_->SetSendParameters(params); |
set_send_rtcp_parameters(params.rtcp); |
return (SetSendCodecs(params.codecs) && |
SetSendRtpHeaderExtensions(params.extensions) && |
@@ -547,9 +559,13 @@ class FakeVideoMediaChannel : public RtpHelper<VideoMediaChannel> { |
SetRecvRtpHeaderExtensions(params.extensions)); |
} |
bool AddSendStream(const StreamParams& sp) override { |
+ if (real_channel_) |
+ real_channel_->AddSendStream(sp); |
return RtpHelper<VideoMediaChannel>::AddSendStream(sp); |
} |
bool RemoveSendStream(uint32_t ssrc) override { |
+ if (real_channel_) |
+ real_channel_->RemoveSendStream(ssrc); |
return RtpHelper<VideoMediaChannel>::RemoveSendStream(ssrc); |
} |
@@ -574,12 +590,20 @@ class FakeVideoMediaChannel : public RtpHelper<VideoMediaChannel> { |
return sinks_.find(ssrc) != sinks_.end() && sinks_.at(ssrc) != nullptr; |
} |
- bool SetSend(bool send) override { return set_sending(send); } |
+ bool SetSend(bool send) override { |
+ if (real_channel_) |
+ real_channel_->SetSend(send); |
+ return set_sending(send); |
+ } |
+ |
bool SetVideoSend( |
uint32_t ssrc, |
bool enable, |
const VideoOptions* options, |
rtc::VideoSourceInterface<webrtc::VideoFrame>* source) override { |
+ if (real_channel_) |
+ real_channel_->SetVideoSend(ssrc, enable, options, source); |
+ |
if (!RtpHelper<VideoMediaChannel>::MuteStream(ssrc, !enable)) { |
return false; |
} |
@@ -646,6 +670,7 @@ class FakeVideoMediaChannel : public RtpHelper<VideoMediaChannel> { |
std::map<uint32_t, rtc::VideoSourceInterface<webrtc::VideoFrame>*> sources_; |
VideoOptions options_; |
int max_bps_; |
+ std::unique_ptr<WebRtcVideoChannel> real_channel_; |
}; |
// Dummy option class, needed for the DataTraits abstraction in |
@@ -833,12 +858,14 @@ class FakeVoiceEngine : public FakeBaseEngine { |
class FakeVideoEngine : public FakeBaseEngine { |
public: |
- FakeVideoEngine() : capture_(false) { |
+ FakeVideoEngine() : capture_(false), create_real_channels_(false) { |
// Add a fake video codec. Note that the name must not be "" as there are |
// sanity checks against that. |
codecs_.push_back(VideoCodec(0, "fake_video_codec")); |
} |
+ |
void Init() {} |
+ |
bool SetOptions(const VideoOptions& options) { |
options_ = options; |
options_changed_ = true; |
@@ -849,21 +876,30 @@ class FakeVideoEngine : public FakeBaseEngine { |
const MediaConfig& config, |
const VideoOptions& options) { |
if (fail_create_channel_) { |
- return NULL; |
+ return nullptr; |
} |
- FakeVideoMediaChannel* ch = new FakeVideoMediaChannel(this, options); |
- channels_.push_back(ch); |
- return ch; |
+ channels_.emplace_back(new FakeVideoMediaChannel( |
+ this, options, |
+ std::unique_ptr<WebRtcVideoChannel>( |
+ create_real_channels_ ? new WebRtcVideoChannel( |
+ call, config, options, nullptr, nullptr) |
+ : nullptr))); |
+ return channels_.back(); |
} |
+ |
FakeVideoMediaChannel* GetChannel(size_t index) { |
- return (channels_.size() > index) ? channels_[index] : NULL; |
+ return (channels_.size() > index) ? channels_[index] : nullptr; |
} |
+ |
void UnregisterChannel(VideoMediaChannel* channel) { |
- channels_.erase(std::find(channels_.begin(), channels_.end(), channel)); |
+ auto it = std::find(channels_.begin(), channels_.end(), channel); |
+ RTC_DCHECK(it != channels_.end()); |
+ channels_.erase(it); |
} |
const std::vector<VideoCodec>& codecs() const { return codecs_; } |
+ |
void SetCodecs(const std::vector<VideoCodec> codecs) { codecs_ = codecs; } |
bool SetCapture(bool capture) { |
@@ -871,11 +907,16 @@ class FakeVideoEngine : public FakeBaseEngine { |
return true; |
} |
+ void SetCreateRealChannel(bool do_create) { |
+ create_real_channels_ = do_create; |
+ } |
+ |
private: |
std::vector<FakeVideoMediaChannel*> channels_; |
std::vector<VideoCodec> codecs_; |
bool capture_; |
VideoOptions options_; |
+ bool create_real_channels_; |
friend class FakeMediaEngine; |
}; |
@@ -934,6 +975,8 @@ class FakeMediaEngine : |
voice_.set_fail_create_channel(fail); |
video_.set_fail_create_channel(fail); |
} |
+ |
+ FakeVideoEngine* GetVideoEngine() { return &video_; } |
}; |
// Have to come afterwards due to declaration order |