1*d9f75844SAndroid Build Coastguard Worker /* 2*d9f75844SAndroid Build Coastguard Worker * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 3*d9f75844SAndroid Build Coastguard Worker * 4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*d9f75844SAndroid Build Coastguard Worker */ 10*d9f75844SAndroid Build Coastguard Worker 11*d9f75844SAndroid Build Coastguard Worker // This file contains fake implementations, for use in unit tests, of the 12*d9f75844SAndroid Build Coastguard Worker // following classes: 13*d9f75844SAndroid Build Coastguard Worker // 14*d9f75844SAndroid Build Coastguard Worker // webrtc::Call 15*d9f75844SAndroid Build Coastguard Worker // webrtc::AudioSendStream 16*d9f75844SAndroid Build Coastguard Worker // webrtc::AudioReceiveStreamInterface 17*d9f75844SAndroid Build Coastguard Worker // webrtc::VideoSendStream 18*d9f75844SAndroid Build Coastguard Worker // webrtc::VideoReceiveStreamInterface 19*d9f75844SAndroid Build Coastguard Worker 20*d9f75844SAndroid Build Coastguard Worker #ifndef MEDIA_ENGINE_FAKE_WEBRTC_CALL_H_ 21*d9f75844SAndroid Build Coastguard Worker #define MEDIA_ENGINE_FAKE_WEBRTC_CALL_H_ 22*d9f75844SAndroid Build Coastguard Worker 23*d9f75844SAndroid Build Coastguard Worker #include <map> 24*d9f75844SAndroid Build Coastguard Worker #include <memory> 25*d9f75844SAndroid Build Coastguard Worker #include <string> 26*d9f75844SAndroid Build Coastguard Worker #include <utility> 27*d9f75844SAndroid Build Coastguard Worker #include <vector> 28*d9f75844SAndroid Build Coastguard Worker 29*d9f75844SAndroid Build Coastguard Worker #include "absl/strings/string_view.h" 30*d9f75844SAndroid Build Coastguard Worker #include "api/transport/field_trial_based_config.h" 31*d9f75844SAndroid Build Coastguard Worker #include "api/video/video_frame.h" 32*d9f75844SAndroid Build Coastguard Worker #include "call/audio_receive_stream.h" 33*d9f75844SAndroid Build Coastguard Worker #include "call/audio_send_stream.h" 34*d9f75844SAndroid Build Coastguard Worker #include "call/call.h" 35*d9f75844SAndroid Build Coastguard Worker #include "call/flexfec_receive_stream.h" 36*d9f75844SAndroid Build Coastguard Worker #include "call/test/mock_rtp_transport_controller_send.h" 37*d9f75844SAndroid Build Coastguard Worker #include "call/video_receive_stream.h" 38*d9f75844SAndroid Build Coastguard Worker #include "call/video_send_stream.h" 39*d9f75844SAndroid Build Coastguard Worker #include "modules/rtp_rtcp/source/rtp_packet_received.h" 40*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/buffer.h" 41*d9f75844SAndroid Build Coastguard Worker #include "test/scoped_key_value_config.h" 42*d9f75844SAndroid Build Coastguard Worker 43*d9f75844SAndroid Build Coastguard Worker namespace cricket { 44*d9f75844SAndroid Build Coastguard Worker class FakeAudioSendStream final : public webrtc::AudioSendStream { 45*d9f75844SAndroid Build Coastguard Worker public: 46*d9f75844SAndroid Build Coastguard Worker struct TelephoneEvent { 47*d9f75844SAndroid Build Coastguard Worker int payload_type = -1; 48*d9f75844SAndroid Build Coastguard Worker int payload_frequency = -1; 49*d9f75844SAndroid Build Coastguard Worker int event_code = 0; 50*d9f75844SAndroid Build Coastguard Worker int duration_ms = 0; 51*d9f75844SAndroid Build Coastguard Worker }; 52*d9f75844SAndroid Build Coastguard Worker 53*d9f75844SAndroid Build Coastguard Worker explicit FakeAudioSendStream(int id, 54*d9f75844SAndroid Build Coastguard Worker const webrtc::AudioSendStream::Config& config); 55*d9f75844SAndroid Build Coastguard Worker id()56*d9f75844SAndroid Build Coastguard Worker int id() const { return id_; } 57*d9f75844SAndroid Build Coastguard Worker const webrtc::AudioSendStream::Config& GetConfig() const override; 58*d9f75844SAndroid Build Coastguard Worker void SetStats(const webrtc::AudioSendStream::Stats& stats); 59*d9f75844SAndroid Build Coastguard Worker TelephoneEvent GetLatestTelephoneEvent() const; IsSending()60*d9f75844SAndroid Build Coastguard Worker bool IsSending() const { return sending_; } muted()61*d9f75844SAndroid Build Coastguard Worker bool muted() const { return muted_; } 62*d9f75844SAndroid Build Coastguard Worker 63*d9f75844SAndroid Build Coastguard Worker private: 64*d9f75844SAndroid Build Coastguard Worker // webrtc::AudioSendStream implementation. 65*d9f75844SAndroid Build Coastguard Worker void Reconfigure(const webrtc::AudioSendStream::Config& config, 66*d9f75844SAndroid Build Coastguard Worker webrtc::SetParametersCallback callback) override; Start()67*d9f75844SAndroid Build Coastguard Worker void Start() override { sending_ = true; } Stop()68*d9f75844SAndroid Build Coastguard Worker void Stop() override { sending_ = false; } SendAudioData(std::unique_ptr<webrtc::AudioFrame> audio_frame)69*d9f75844SAndroid Build Coastguard Worker void SendAudioData(std::unique_ptr<webrtc::AudioFrame> audio_frame) override { 70*d9f75844SAndroid Build Coastguard Worker } 71*d9f75844SAndroid Build Coastguard Worker bool SendTelephoneEvent(int payload_type, 72*d9f75844SAndroid Build Coastguard Worker int payload_frequency, 73*d9f75844SAndroid Build Coastguard Worker int event, 74*d9f75844SAndroid Build Coastguard Worker int duration_ms) override; 75*d9f75844SAndroid Build Coastguard Worker void SetMuted(bool muted) override; 76*d9f75844SAndroid Build Coastguard Worker webrtc::AudioSendStream::Stats GetStats() const override; 77*d9f75844SAndroid Build Coastguard Worker webrtc::AudioSendStream::Stats GetStats( 78*d9f75844SAndroid Build Coastguard Worker bool has_remote_tracks) const override; 79*d9f75844SAndroid Build Coastguard Worker 80*d9f75844SAndroid Build Coastguard Worker int id_ = -1; 81*d9f75844SAndroid Build Coastguard Worker TelephoneEvent latest_telephone_event_; 82*d9f75844SAndroid Build Coastguard Worker webrtc::AudioSendStream::Config config_; 83*d9f75844SAndroid Build Coastguard Worker webrtc::AudioSendStream::Stats stats_; 84*d9f75844SAndroid Build Coastguard Worker bool sending_ = false; 85*d9f75844SAndroid Build Coastguard Worker bool muted_ = false; 86*d9f75844SAndroid Build Coastguard Worker }; 87*d9f75844SAndroid Build Coastguard Worker 88*d9f75844SAndroid Build Coastguard Worker class FakeAudioReceiveStream final 89*d9f75844SAndroid Build Coastguard Worker : public webrtc::AudioReceiveStreamInterface { 90*d9f75844SAndroid Build Coastguard Worker public: 91*d9f75844SAndroid Build Coastguard Worker explicit FakeAudioReceiveStream( 92*d9f75844SAndroid Build Coastguard Worker int id, 93*d9f75844SAndroid Build Coastguard Worker const webrtc::AudioReceiveStreamInterface::Config& config); 94*d9f75844SAndroid Build Coastguard Worker id()95*d9f75844SAndroid Build Coastguard Worker int id() const { return id_; } 96*d9f75844SAndroid Build Coastguard Worker const webrtc::AudioReceiveStreamInterface::Config& GetConfig() const; 97*d9f75844SAndroid Build Coastguard Worker void SetStats(const webrtc::AudioReceiveStreamInterface::Stats& stats); received_packets()98*d9f75844SAndroid Build Coastguard Worker int received_packets() const { return received_packets_; } 99*d9f75844SAndroid Build Coastguard Worker bool VerifyLastPacket(const uint8_t* data, size_t length) const; sink()100*d9f75844SAndroid Build Coastguard Worker const webrtc::AudioSinkInterface* sink() const { return sink_; } gain()101*d9f75844SAndroid Build Coastguard Worker float gain() const { return gain_; } 102*d9f75844SAndroid Build Coastguard Worker bool DeliverRtp(const uint8_t* packet, size_t length, int64_t packet_time_us); started()103*d9f75844SAndroid Build Coastguard Worker bool started() const { return started_; } base_mininum_playout_delay_ms()104*d9f75844SAndroid Build Coastguard Worker int base_mininum_playout_delay_ms() const { 105*d9f75844SAndroid Build Coastguard Worker return base_mininum_playout_delay_ms_; 106*d9f75844SAndroid Build Coastguard Worker } 107*d9f75844SAndroid Build Coastguard Worker SetLocalSsrc(uint32_t local_ssrc)108*d9f75844SAndroid Build Coastguard Worker void SetLocalSsrc(uint32_t local_ssrc) { 109*d9f75844SAndroid Build Coastguard Worker config_.rtp.local_ssrc = local_ssrc; 110*d9f75844SAndroid Build Coastguard Worker } 111*d9f75844SAndroid Build Coastguard Worker SetSyncGroup(absl::string_view sync_group)112*d9f75844SAndroid Build Coastguard Worker void SetSyncGroup(absl::string_view sync_group) { 113*d9f75844SAndroid Build Coastguard Worker config_.sync_group = std::string(sync_group); 114*d9f75844SAndroid Build Coastguard Worker } 115*d9f75844SAndroid Build Coastguard Worker transport_cc()116*d9f75844SAndroid Build Coastguard Worker bool transport_cc() const override { return config_.rtp.transport_cc; } SetTransportCc(bool transport_cc)117*d9f75844SAndroid Build Coastguard Worker void SetTransportCc(bool transport_cc) override { 118*d9f75844SAndroid Build Coastguard Worker config_.rtp.transport_cc = transport_cc; 119*d9f75844SAndroid Build Coastguard Worker } remote_ssrc()120*d9f75844SAndroid Build Coastguard Worker uint32_t remote_ssrc() const override { return config_.rtp.remote_ssrc; } Start()121*d9f75844SAndroid Build Coastguard Worker void Start() override { started_ = true; } Stop()122*d9f75844SAndroid Build Coastguard Worker void Stop() override { started_ = false; } IsRunning()123*d9f75844SAndroid Build Coastguard Worker bool IsRunning() const override { return started_; } 124*d9f75844SAndroid Build Coastguard Worker void SetDepacketizerToDecoderFrameTransformer( 125*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer) 126*d9f75844SAndroid Build Coastguard Worker override; 127*d9f75844SAndroid Build Coastguard Worker void SetDecoderMap( 128*d9f75844SAndroid Build Coastguard Worker std::map<int, webrtc::SdpAudioFormat> decoder_map) override; 129*d9f75844SAndroid Build Coastguard Worker void SetNackHistory(int history_ms) override; 130*d9f75844SAndroid Build Coastguard Worker void SetNonSenderRttMeasurement(bool enabled) override; 131*d9f75844SAndroid Build Coastguard Worker void SetFrameDecryptor(rtc::scoped_refptr<webrtc::FrameDecryptorInterface> 132*d9f75844SAndroid Build Coastguard Worker frame_decryptor) override; 133*d9f75844SAndroid Build Coastguard Worker void SetRtpExtensions(std::vector<webrtc::RtpExtension> extensions) override; 134*d9f75844SAndroid Build Coastguard Worker const std::vector<webrtc::RtpExtension>& GetRtpExtensions() const override; 135*d9f75844SAndroid Build Coastguard Worker webrtc::RtpHeaderExtensionMap GetRtpExtensionMap() const override; 136*d9f75844SAndroid Build Coastguard Worker 137*d9f75844SAndroid Build Coastguard Worker webrtc::AudioReceiveStreamInterface::Stats GetStats( 138*d9f75844SAndroid Build Coastguard Worker bool get_and_clear_legacy_stats) const override; 139*d9f75844SAndroid Build Coastguard Worker void SetSink(webrtc::AudioSinkInterface* sink) override; 140*d9f75844SAndroid Build Coastguard Worker void SetGain(float gain) override; SetBaseMinimumPlayoutDelayMs(int delay_ms)141*d9f75844SAndroid Build Coastguard Worker bool SetBaseMinimumPlayoutDelayMs(int delay_ms) override { 142*d9f75844SAndroid Build Coastguard Worker base_mininum_playout_delay_ms_ = delay_ms; 143*d9f75844SAndroid Build Coastguard Worker return true; 144*d9f75844SAndroid Build Coastguard Worker } GetBaseMinimumPlayoutDelayMs()145*d9f75844SAndroid Build Coastguard Worker int GetBaseMinimumPlayoutDelayMs() const override { 146*d9f75844SAndroid Build Coastguard Worker return base_mininum_playout_delay_ms_; 147*d9f75844SAndroid Build Coastguard Worker } GetSources()148*d9f75844SAndroid Build Coastguard Worker std::vector<webrtc::RtpSource> GetSources() const override { 149*d9f75844SAndroid Build Coastguard Worker return std::vector<webrtc::RtpSource>(); 150*d9f75844SAndroid Build Coastguard Worker } 151*d9f75844SAndroid Build Coastguard Worker 152*d9f75844SAndroid Build Coastguard Worker private: 153*d9f75844SAndroid Build Coastguard Worker int id_ = -1; 154*d9f75844SAndroid Build Coastguard Worker webrtc::AudioReceiveStreamInterface::Config config_; 155*d9f75844SAndroid Build Coastguard Worker webrtc::AudioReceiveStreamInterface::Stats stats_; 156*d9f75844SAndroid Build Coastguard Worker int received_packets_ = 0; 157*d9f75844SAndroid Build Coastguard Worker webrtc::AudioSinkInterface* sink_ = nullptr; 158*d9f75844SAndroid Build Coastguard Worker float gain_ = 1.0f; 159*d9f75844SAndroid Build Coastguard Worker rtc::Buffer last_packet_; 160*d9f75844SAndroid Build Coastguard Worker bool started_ = false; 161*d9f75844SAndroid Build Coastguard Worker int base_mininum_playout_delay_ms_ = 0; 162*d9f75844SAndroid Build Coastguard Worker }; 163*d9f75844SAndroid Build Coastguard Worker 164*d9f75844SAndroid Build Coastguard Worker class FakeVideoSendStream final 165*d9f75844SAndroid Build Coastguard Worker : public webrtc::VideoSendStream, 166*d9f75844SAndroid Build Coastguard Worker public rtc::VideoSinkInterface<webrtc::VideoFrame> { 167*d9f75844SAndroid Build Coastguard Worker public: 168*d9f75844SAndroid Build Coastguard Worker FakeVideoSendStream(webrtc::VideoSendStream::Config config, 169*d9f75844SAndroid Build Coastguard Worker webrtc::VideoEncoderConfig encoder_config); 170*d9f75844SAndroid Build Coastguard Worker ~FakeVideoSendStream() override; 171*d9f75844SAndroid Build Coastguard Worker const webrtc::VideoSendStream::Config& GetConfig() const; 172*d9f75844SAndroid Build Coastguard Worker const webrtc::VideoEncoderConfig& GetEncoderConfig() const; 173*d9f75844SAndroid Build Coastguard Worker const std::vector<webrtc::VideoStream>& GetVideoStreams() const; 174*d9f75844SAndroid Build Coastguard Worker 175*d9f75844SAndroid Build Coastguard Worker bool IsSending() const; 176*d9f75844SAndroid Build Coastguard Worker bool GetVp8Settings(webrtc::VideoCodecVP8* settings) const; 177*d9f75844SAndroid Build Coastguard Worker bool GetVp9Settings(webrtc::VideoCodecVP9* settings) const; 178*d9f75844SAndroid Build Coastguard Worker bool GetH264Settings(webrtc::VideoCodecH264* settings) const; 179*d9f75844SAndroid Build Coastguard Worker 180*d9f75844SAndroid Build Coastguard Worker int GetNumberOfSwappedFrames() const; 181*d9f75844SAndroid Build Coastguard Worker int GetLastWidth() const; 182*d9f75844SAndroid Build Coastguard Worker int GetLastHeight() const; 183*d9f75844SAndroid Build Coastguard Worker int64_t GetLastTimestamp() const; 184*d9f75844SAndroid Build Coastguard Worker void SetStats(const webrtc::VideoSendStream::Stats& stats); num_encoder_reconfigurations()185*d9f75844SAndroid Build Coastguard Worker int num_encoder_reconfigurations() const { 186*d9f75844SAndroid Build Coastguard Worker return num_encoder_reconfigurations_; 187*d9f75844SAndroid Build Coastguard Worker } 188*d9f75844SAndroid Build Coastguard Worker resolution_scaling_enabled()189*d9f75844SAndroid Build Coastguard Worker bool resolution_scaling_enabled() const { 190*d9f75844SAndroid Build Coastguard Worker return resolution_scaling_enabled_; 191*d9f75844SAndroid Build Coastguard Worker } framerate_scaling_enabled()192*d9f75844SAndroid Build Coastguard Worker bool framerate_scaling_enabled() const { return framerate_scaling_enabled_; } 193*d9f75844SAndroid Build Coastguard Worker void InjectVideoSinkWants(const rtc::VideoSinkWants& wants); 194*d9f75844SAndroid Build Coastguard Worker source()195*d9f75844SAndroid Build Coastguard Worker rtc::VideoSourceInterface<webrtc::VideoFrame>* source() const { 196*d9f75844SAndroid Build Coastguard Worker return source_; 197*d9f75844SAndroid Build Coastguard Worker } GenerateKeyFrame(const std::vector<std::string> & rids)198*d9f75844SAndroid Build Coastguard Worker void GenerateKeyFrame(const std::vector<std::string>& rids) override {} 199*d9f75844SAndroid Build Coastguard Worker 200*d9f75844SAndroid Build Coastguard Worker private: 201*d9f75844SAndroid Build Coastguard Worker // rtc::VideoSinkInterface<VideoFrame> implementation. 202*d9f75844SAndroid Build Coastguard Worker void OnFrame(const webrtc::VideoFrame& frame) override; 203*d9f75844SAndroid Build Coastguard Worker 204*d9f75844SAndroid Build Coastguard Worker // webrtc::VideoSendStream implementation. 205*d9f75844SAndroid Build Coastguard Worker void StartPerRtpStream(std::vector<bool> active_layers) override; 206*d9f75844SAndroid Build Coastguard Worker void Start() override; 207*d9f75844SAndroid Build Coastguard Worker void Stop() override; started()208*d9f75844SAndroid Build Coastguard Worker bool started() override { return IsSending(); } 209*d9f75844SAndroid Build Coastguard Worker void AddAdaptationResource( 210*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<webrtc::Resource> resource) override; 211*d9f75844SAndroid Build Coastguard Worker std::vector<rtc::scoped_refptr<webrtc::Resource>> GetAdaptationResources() 212*d9f75844SAndroid Build Coastguard Worker override; 213*d9f75844SAndroid Build Coastguard Worker void SetSource( 214*d9f75844SAndroid Build Coastguard Worker rtc::VideoSourceInterface<webrtc::VideoFrame>* source, 215*d9f75844SAndroid Build Coastguard Worker const webrtc::DegradationPreference& degradation_preference) override; 216*d9f75844SAndroid Build Coastguard Worker webrtc::VideoSendStream::Stats GetStats() override; 217*d9f75844SAndroid Build Coastguard Worker 218*d9f75844SAndroid Build Coastguard Worker void ReconfigureVideoEncoder(webrtc::VideoEncoderConfig config) override; 219*d9f75844SAndroid Build Coastguard Worker void ReconfigureVideoEncoder(webrtc::VideoEncoderConfig config, 220*d9f75844SAndroid Build Coastguard Worker webrtc::SetParametersCallback callback) override; 221*d9f75844SAndroid Build Coastguard Worker 222*d9f75844SAndroid Build Coastguard Worker bool sending_; 223*d9f75844SAndroid Build Coastguard Worker webrtc::VideoSendStream::Config config_; 224*d9f75844SAndroid Build Coastguard Worker webrtc::VideoEncoderConfig encoder_config_; 225*d9f75844SAndroid Build Coastguard Worker std::vector<webrtc::VideoStream> video_streams_; 226*d9f75844SAndroid Build Coastguard Worker rtc::VideoSinkWants sink_wants_; 227*d9f75844SAndroid Build Coastguard Worker 228*d9f75844SAndroid Build Coastguard Worker bool codec_settings_set_; 229*d9f75844SAndroid Build Coastguard Worker union CodecSpecificSettings { 230*d9f75844SAndroid Build Coastguard Worker webrtc::VideoCodecVP8 vp8; 231*d9f75844SAndroid Build Coastguard Worker webrtc::VideoCodecVP9 vp9; 232*d9f75844SAndroid Build Coastguard Worker webrtc::VideoCodecH264 h264; 233*d9f75844SAndroid Build Coastguard Worker } codec_specific_settings_; 234*d9f75844SAndroid Build Coastguard Worker bool resolution_scaling_enabled_; 235*d9f75844SAndroid Build Coastguard Worker bool framerate_scaling_enabled_; 236*d9f75844SAndroid Build Coastguard Worker rtc::VideoSourceInterface<webrtc::VideoFrame>* source_; 237*d9f75844SAndroid Build Coastguard Worker int num_swapped_frames_; 238*d9f75844SAndroid Build Coastguard Worker absl::optional<webrtc::VideoFrame> last_frame_; 239*d9f75844SAndroid Build Coastguard Worker webrtc::VideoSendStream::Stats stats_; 240*d9f75844SAndroid Build Coastguard Worker int num_encoder_reconfigurations_ = 0; 241*d9f75844SAndroid Build Coastguard Worker }; 242*d9f75844SAndroid Build Coastguard Worker 243*d9f75844SAndroid Build Coastguard Worker class FakeVideoReceiveStream final 244*d9f75844SAndroid Build Coastguard Worker : public webrtc::VideoReceiveStreamInterface { 245*d9f75844SAndroid Build Coastguard Worker public: 246*d9f75844SAndroid Build Coastguard Worker explicit FakeVideoReceiveStream( 247*d9f75844SAndroid Build Coastguard Worker webrtc::VideoReceiveStreamInterface::Config config); 248*d9f75844SAndroid Build Coastguard Worker 249*d9f75844SAndroid Build Coastguard Worker const webrtc::VideoReceiveStreamInterface::Config& GetConfig() const; 250*d9f75844SAndroid Build Coastguard Worker 251*d9f75844SAndroid Build Coastguard Worker bool IsReceiving() const; 252*d9f75844SAndroid Build Coastguard Worker 253*d9f75844SAndroid Build Coastguard Worker void InjectFrame(const webrtc::VideoFrame& frame); 254*d9f75844SAndroid Build Coastguard Worker 255*d9f75844SAndroid Build Coastguard Worker void SetStats(const webrtc::VideoReceiveStreamInterface::Stats& stats); 256*d9f75844SAndroid Build Coastguard Worker GetSources()257*d9f75844SAndroid Build Coastguard Worker std::vector<webrtc::RtpSource> GetSources() const override { 258*d9f75844SAndroid Build Coastguard Worker return std::vector<webrtc::RtpSource>(); 259*d9f75844SAndroid Build Coastguard Worker } 260*d9f75844SAndroid Build Coastguard Worker base_mininum_playout_delay_ms()261*d9f75844SAndroid Build Coastguard Worker int base_mininum_playout_delay_ms() const { 262*d9f75844SAndroid Build Coastguard Worker return base_mininum_playout_delay_ms_; 263*d9f75844SAndroid Build Coastguard Worker } 264*d9f75844SAndroid Build Coastguard Worker SetLocalSsrc(uint32_t local_ssrc)265*d9f75844SAndroid Build Coastguard Worker void SetLocalSsrc(uint32_t local_ssrc) { 266*d9f75844SAndroid Build Coastguard Worker config_.rtp.local_ssrc = local_ssrc; 267*d9f75844SAndroid Build Coastguard Worker } 268*d9f75844SAndroid Build Coastguard Worker SetFrameDecryptor(rtc::scoped_refptr<webrtc::FrameDecryptorInterface> frame_decryptor)269*d9f75844SAndroid Build Coastguard Worker void SetFrameDecryptor(rtc::scoped_refptr<webrtc::FrameDecryptorInterface> 270*d9f75844SAndroid Build Coastguard Worker frame_decryptor) override {} 271*d9f75844SAndroid Build Coastguard Worker SetDepacketizerToDecoderFrameTransformer(rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer)272*d9f75844SAndroid Build Coastguard Worker void SetDepacketizerToDecoderFrameTransformer( 273*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<webrtc::FrameTransformerInterface> frame_transformer) 274*d9f75844SAndroid Build Coastguard Worker override {} 275*d9f75844SAndroid Build Coastguard Worker SetAndGetRecordingState(RecordingState state,bool generate_key_frame)276*d9f75844SAndroid Build Coastguard Worker RecordingState SetAndGetRecordingState(RecordingState state, 277*d9f75844SAndroid Build Coastguard Worker bool generate_key_frame) override { 278*d9f75844SAndroid Build Coastguard Worker return RecordingState(); 279*d9f75844SAndroid Build Coastguard Worker } GenerateKeyFrame()280*d9f75844SAndroid Build Coastguard Worker void GenerateKeyFrame() override {} 281*d9f75844SAndroid Build Coastguard Worker 282*d9f75844SAndroid Build Coastguard Worker // webrtc::VideoReceiveStreamInterface implementation. 283*d9f75844SAndroid Build Coastguard Worker void SetRtpExtensions(std::vector<webrtc::RtpExtension> extensions) override; 284*d9f75844SAndroid Build Coastguard Worker webrtc::RtpHeaderExtensionMap GetRtpExtensionMap() const override; transport_cc()285*d9f75844SAndroid Build Coastguard Worker bool transport_cc() const override { return config_.rtp.transport_cc; } SetTransportCc(bool transport_cc)286*d9f75844SAndroid Build Coastguard Worker void SetTransportCc(bool transport_cc) override { 287*d9f75844SAndroid Build Coastguard Worker config_.rtp.transport_cc = transport_cc; 288*d9f75844SAndroid Build Coastguard Worker } SetRtcpMode(webrtc::RtcpMode mode)289*d9f75844SAndroid Build Coastguard Worker void SetRtcpMode(webrtc::RtcpMode mode) override { 290*d9f75844SAndroid Build Coastguard Worker config_.rtp.rtcp_mode = mode; 291*d9f75844SAndroid Build Coastguard Worker } 292*d9f75844SAndroid Build Coastguard Worker SetFlexFecProtection(webrtc::RtpPacketSinkInterface * sink)293*d9f75844SAndroid Build Coastguard Worker void SetFlexFecProtection(webrtc::RtpPacketSinkInterface* sink) override { 294*d9f75844SAndroid Build Coastguard Worker config_.rtp.packet_sink_ = sink; 295*d9f75844SAndroid Build Coastguard Worker config_.rtp.protected_by_flexfec = (sink != nullptr); 296*d9f75844SAndroid Build Coastguard Worker } 297*d9f75844SAndroid Build Coastguard Worker SetLossNotificationEnabled(bool enabled)298*d9f75844SAndroid Build Coastguard Worker void SetLossNotificationEnabled(bool enabled) override { 299*d9f75844SAndroid Build Coastguard Worker config_.rtp.lntf.enabled = enabled; 300*d9f75844SAndroid Build Coastguard Worker } 301*d9f75844SAndroid Build Coastguard Worker SetNackHistory(webrtc::TimeDelta history)302*d9f75844SAndroid Build Coastguard Worker void SetNackHistory(webrtc::TimeDelta history) override { 303*d9f75844SAndroid Build Coastguard Worker config_.rtp.nack.rtp_history_ms = history.ms(); 304*d9f75844SAndroid Build Coastguard Worker } 305*d9f75844SAndroid Build Coastguard Worker SetProtectionPayloadTypes(int red_payload_type,int ulpfec_payload_type)306*d9f75844SAndroid Build Coastguard Worker void SetProtectionPayloadTypes(int red_payload_type, 307*d9f75844SAndroid Build Coastguard Worker int ulpfec_payload_type) override { 308*d9f75844SAndroid Build Coastguard Worker config_.rtp.red_payload_type = red_payload_type; 309*d9f75844SAndroid Build Coastguard Worker config_.rtp.ulpfec_payload_type = ulpfec_payload_type; 310*d9f75844SAndroid Build Coastguard Worker } 311*d9f75844SAndroid Build Coastguard Worker SetRtcpXr(Config::Rtp::RtcpXr rtcp_xr)312*d9f75844SAndroid Build Coastguard Worker void SetRtcpXr(Config::Rtp::RtcpXr rtcp_xr) override { 313*d9f75844SAndroid Build Coastguard Worker config_.rtp.rtcp_xr = rtcp_xr; 314*d9f75844SAndroid Build Coastguard Worker } 315*d9f75844SAndroid Build Coastguard Worker SetAssociatedPayloadTypes(std::map<int,int> associated_payload_types)316*d9f75844SAndroid Build Coastguard Worker void SetAssociatedPayloadTypes(std::map<int, int> associated_payload_types) { 317*d9f75844SAndroid Build Coastguard Worker config_.rtp.rtx_associated_payload_types = 318*d9f75844SAndroid Build Coastguard Worker std::move(associated_payload_types); 319*d9f75844SAndroid Build Coastguard Worker } 320*d9f75844SAndroid Build Coastguard Worker 321*d9f75844SAndroid Build Coastguard Worker void Start() override; 322*d9f75844SAndroid Build Coastguard Worker void Stop() override; 323*d9f75844SAndroid Build Coastguard Worker 324*d9f75844SAndroid Build Coastguard Worker webrtc::VideoReceiveStreamInterface::Stats GetStats() const override; 325*d9f75844SAndroid Build Coastguard Worker SetBaseMinimumPlayoutDelayMs(int delay_ms)326*d9f75844SAndroid Build Coastguard Worker bool SetBaseMinimumPlayoutDelayMs(int delay_ms) override { 327*d9f75844SAndroid Build Coastguard Worker base_mininum_playout_delay_ms_ = delay_ms; 328*d9f75844SAndroid Build Coastguard Worker return true; 329*d9f75844SAndroid Build Coastguard Worker } 330*d9f75844SAndroid Build Coastguard Worker GetBaseMinimumPlayoutDelayMs()331*d9f75844SAndroid Build Coastguard Worker int GetBaseMinimumPlayoutDelayMs() const override { 332*d9f75844SAndroid Build Coastguard Worker return base_mininum_playout_delay_ms_; 333*d9f75844SAndroid Build Coastguard Worker } 334*d9f75844SAndroid Build Coastguard Worker 335*d9f75844SAndroid Build Coastguard Worker private: 336*d9f75844SAndroid Build Coastguard Worker webrtc::VideoReceiveStreamInterface::Config config_; 337*d9f75844SAndroid Build Coastguard Worker bool receiving_; 338*d9f75844SAndroid Build Coastguard Worker webrtc::VideoReceiveStreamInterface::Stats stats_; 339*d9f75844SAndroid Build Coastguard Worker 340*d9f75844SAndroid Build Coastguard Worker int base_mininum_playout_delay_ms_ = 0; 341*d9f75844SAndroid Build Coastguard Worker }; 342*d9f75844SAndroid Build Coastguard Worker 343*d9f75844SAndroid Build Coastguard Worker class FakeFlexfecReceiveStream final : public webrtc::FlexfecReceiveStream { 344*d9f75844SAndroid Build Coastguard Worker public: 345*d9f75844SAndroid Build Coastguard Worker explicit FakeFlexfecReceiveStream( 346*d9f75844SAndroid Build Coastguard Worker const webrtc::FlexfecReceiveStream::Config config); 347*d9f75844SAndroid Build Coastguard Worker SetLocalSsrc(uint32_t local_ssrc)348*d9f75844SAndroid Build Coastguard Worker void SetLocalSsrc(uint32_t local_ssrc) { 349*d9f75844SAndroid Build Coastguard Worker config_.rtp.local_ssrc = local_ssrc; 350*d9f75844SAndroid Build Coastguard Worker } 351*d9f75844SAndroid Build Coastguard Worker 352*d9f75844SAndroid Build Coastguard Worker void SetRtpExtensions(std::vector<webrtc::RtpExtension> extensions) override; 353*d9f75844SAndroid Build Coastguard Worker webrtc::RtpHeaderExtensionMap GetRtpExtensionMap() const override; transport_cc()354*d9f75844SAndroid Build Coastguard Worker bool transport_cc() const override { return config_.rtp.transport_cc; } SetTransportCc(bool transport_cc)355*d9f75844SAndroid Build Coastguard Worker void SetTransportCc(bool transport_cc) override { 356*d9f75844SAndroid Build Coastguard Worker config_.rtp.transport_cc = transport_cc; 357*d9f75844SAndroid Build Coastguard Worker } SetRtcpMode(webrtc::RtcpMode mode)358*d9f75844SAndroid Build Coastguard Worker void SetRtcpMode(webrtc::RtcpMode mode) override { config_.rtcp_mode = mode; } 359*d9f75844SAndroid Build Coastguard Worker payload_type()360*d9f75844SAndroid Build Coastguard Worker int payload_type() const override { return config_.payload_type; } SetPayloadType(int payload_type)361*d9f75844SAndroid Build Coastguard Worker void SetPayloadType(int payload_type) override { 362*d9f75844SAndroid Build Coastguard Worker config_.payload_type = payload_type; 363*d9f75844SAndroid Build Coastguard Worker } 364*d9f75844SAndroid Build Coastguard Worker 365*d9f75844SAndroid Build Coastguard Worker const webrtc::FlexfecReceiveStream::Config& GetConfig() const; 366*d9f75844SAndroid Build Coastguard Worker remote_ssrc()367*d9f75844SAndroid Build Coastguard Worker uint32_t remote_ssrc() const { return config_.rtp.remote_ssrc; } 368*d9f75844SAndroid Build Coastguard Worker 369*d9f75844SAndroid Build Coastguard Worker private: 370*d9f75844SAndroid Build Coastguard Worker void OnRtpPacket(const webrtc::RtpPacketReceived& packet) override; 371*d9f75844SAndroid Build Coastguard Worker 372*d9f75844SAndroid Build Coastguard Worker webrtc::FlexfecReceiveStream::Config config_; 373*d9f75844SAndroid Build Coastguard Worker }; 374*d9f75844SAndroid Build Coastguard Worker 375*d9f75844SAndroid Build Coastguard Worker class FakeCall final : public webrtc::Call, public webrtc::PacketReceiver { 376*d9f75844SAndroid Build Coastguard Worker public: 377*d9f75844SAndroid Build Coastguard Worker explicit FakeCall(webrtc::test::ScopedKeyValueConfig* field_trials = nullptr); 378*d9f75844SAndroid Build Coastguard Worker FakeCall(webrtc::TaskQueueBase* worker_thread, 379*d9f75844SAndroid Build Coastguard Worker webrtc::TaskQueueBase* network_thread, 380*d9f75844SAndroid Build Coastguard Worker webrtc::test::ScopedKeyValueConfig* field_trials = nullptr); 381*d9f75844SAndroid Build Coastguard Worker ~FakeCall() override; 382*d9f75844SAndroid Build Coastguard Worker GetMockTransportControllerSend()383*d9f75844SAndroid Build Coastguard Worker webrtc::MockRtpTransportControllerSend* GetMockTransportControllerSend() { 384*d9f75844SAndroid Build Coastguard Worker return &transport_controller_send_; 385*d9f75844SAndroid Build Coastguard Worker } 386*d9f75844SAndroid Build Coastguard Worker 387*d9f75844SAndroid Build Coastguard Worker const std::vector<FakeVideoSendStream*>& GetVideoSendStreams(); 388*d9f75844SAndroid Build Coastguard Worker const std::vector<FakeVideoReceiveStream*>& GetVideoReceiveStreams(); 389*d9f75844SAndroid Build Coastguard Worker 390*d9f75844SAndroid Build Coastguard Worker const std::vector<FakeAudioSendStream*>& GetAudioSendStreams(); 391*d9f75844SAndroid Build Coastguard Worker const FakeAudioSendStream* GetAudioSendStream(uint32_t ssrc); 392*d9f75844SAndroid Build Coastguard Worker const std::vector<FakeAudioReceiveStream*>& GetAudioReceiveStreams(); 393*d9f75844SAndroid Build Coastguard Worker const FakeAudioReceiveStream* GetAudioReceiveStream(uint32_t ssrc); 394*d9f75844SAndroid Build Coastguard Worker const FakeVideoReceiveStream* GetVideoReceiveStream(uint32_t ssrc); 395*d9f75844SAndroid Build Coastguard Worker 396*d9f75844SAndroid Build Coastguard Worker const std::vector<FakeFlexfecReceiveStream*>& GetFlexfecReceiveStreams(); 397*d9f75844SAndroid Build Coastguard Worker last_sent_packet()398*d9f75844SAndroid Build Coastguard Worker rtc::SentPacket last_sent_packet() const { return last_sent_packet_; } GetDeliveredPacketsForSsrc(uint32_t ssrc)399*d9f75844SAndroid Build Coastguard Worker size_t GetDeliveredPacketsForSsrc(uint32_t ssrc) const { 400*d9f75844SAndroid Build Coastguard Worker auto it = delivered_packets_by_ssrc_.find(ssrc); 401*d9f75844SAndroid Build Coastguard Worker return it != delivered_packets_by_ssrc_.end() ? it->second : 0u; 402*d9f75844SAndroid Build Coastguard Worker } 403*d9f75844SAndroid Build Coastguard Worker 404*d9f75844SAndroid Build Coastguard Worker // This is useful if we care about the last media packet (with id populated) 405*d9f75844SAndroid Build Coastguard Worker // but not the last ICE packet (with -1 ID). last_sent_nonnegative_packet_id()406*d9f75844SAndroid Build Coastguard Worker int last_sent_nonnegative_packet_id() const { 407*d9f75844SAndroid Build Coastguard Worker return last_sent_nonnegative_packet_id_; 408*d9f75844SAndroid Build Coastguard Worker } 409*d9f75844SAndroid Build Coastguard Worker 410*d9f75844SAndroid Build Coastguard Worker webrtc::NetworkState GetNetworkState(webrtc::MediaType media) const; 411*d9f75844SAndroid Build Coastguard Worker int GetNumCreatedSendStreams() const; 412*d9f75844SAndroid Build Coastguard Worker int GetNumCreatedReceiveStreams() const; 413*d9f75844SAndroid Build Coastguard Worker void SetStats(const webrtc::Call::Stats& stats); 414*d9f75844SAndroid Build Coastguard Worker SetClientBitratePreferences(const webrtc::BitrateSettings & preferences)415*d9f75844SAndroid Build Coastguard Worker void SetClientBitratePreferences( 416*d9f75844SAndroid Build Coastguard Worker const webrtc::BitrateSettings& preferences) override {} 417*d9f75844SAndroid Build Coastguard Worker SetFieldTrial(const std::string & field_trial_string)418*d9f75844SAndroid Build Coastguard Worker void SetFieldTrial(const std::string& field_trial_string) { 419*d9f75844SAndroid Build Coastguard Worker trials_overrides_ = std::make_unique<webrtc::test::ScopedKeyValueConfig>( 420*d9f75844SAndroid Build Coastguard Worker *trials_, field_trial_string); 421*d9f75844SAndroid Build Coastguard Worker } 422*d9f75844SAndroid Build Coastguard Worker trials()423*d9f75844SAndroid Build Coastguard Worker const webrtc::FieldTrialsView& trials() const override { return *trials_; } 424*d9f75844SAndroid Build Coastguard Worker 425*d9f75844SAndroid Build Coastguard Worker private: 426*d9f75844SAndroid Build Coastguard Worker webrtc::AudioSendStream* CreateAudioSendStream( 427*d9f75844SAndroid Build Coastguard Worker const webrtc::AudioSendStream::Config& config) override; 428*d9f75844SAndroid Build Coastguard Worker void DestroyAudioSendStream(webrtc::AudioSendStream* send_stream) override; 429*d9f75844SAndroid Build Coastguard Worker 430*d9f75844SAndroid Build Coastguard Worker webrtc::AudioReceiveStreamInterface* CreateAudioReceiveStream( 431*d9f75844SAndroid Build Coastguard Worker const webrtc::AudioReceiveStreamInterface::Config& config) override; 432*d9f75844SAndroid Build Coastguard Worker void DestroyAudioReceiveStream( 433*d9f75844SAndroid Build Coastguard Worker webrtc::AudioReceiveStreamInterface* receive_stream) override; 434*d9f75844SAndroid Build Coastguard Worker 435*d9f75844SAndroid Build Coastguard Worker webrtc::VideoSendStream* CreateVideoSendStream( 436*d9f75844SAndroid Build Coastguard Worker webrtc::VideoSendStream::Config config, 437*d9f75844SAndroid Build Coastguard Worker webrtc::VideoEncoderConfig encoder_config) override; 438*d9f75844SAndroid Build Coastguard Worker void DestroyVideoSendStream(webrtc::VideoSendStream* send_stream) override; 439*d9f75844SAndroid Build Coastguard Worker 440*d9f75844SAndroid Build Coastguard Worker webrtc::VideoReceiveStreamInterface* CreateVideoReceiveStream( 441*d9f75844SAndroid Build Coastguard Worker webrtc::VideoReceiveStreamInterface::Config config) override; 442*d9f75844SAndroid Build Coastguard Worker void DestroyVideoReceiveStream( 443*d9f75844SAndroid Build Coastguard Worker webrtc::VideoReceiveStreamInterface* receive_stream) override; 444*d9f75844SAndroid Build Coastguard Worker 445*d9f75844SAndroid Build Coastguard Worker webrtc::FlexfecReceiveStream* CreateFlexfecReceiveStream( 446*d9f75844SAndroid Build Coastguard Worker const webrtc::FlexfecReceiveStream::Config config) override; 447*d9f75844SAndroid Build Coastguard Worker void DestroyFlexfecReceiveStream( 448*d9f75844SAndroid Build Coastguard Worker webrtc::FlexfecReceiveStream* receive_stream) override; 449*d9f75844SAndroid Build Coastguard Worker 450*d9f75844SAndroid Build Coastguard Worker void AddAdaptationResource( 451*d9f75844SAndroid Build Coastguard Worker rtc::scoped_refptr<webrtc::Resource> resource) override; 452*d9f75844SAndroid Build Coastguard Worker 453*d9f75844SAndroid Build Coastguard Worker webrtc::PacketReceiver* Receiver() override; 454*d9f75844SAndroid Build Coastguard Worker 455*d9f75844SAndroid Build Coastguard Worker DeliveryStatus DeliverPacket(webrtc::MediaType media_type, 456*d9f75844SAndroid Build Coastguard Worker rtc::CopyOnWriteBuffer packet, 457*d9f75844SAndroid Build Coastguard Worker int64_t packet_time_us) override; 458*d9f75844SAndroid Build Coastguard Worker GetTransportControllerSend()459*d9f75844SAndroid Build Coastguard Worker webrtc::RtpTransportControllerSendInterface* GetTransportControllerSend() 460*d9f75844SAndroid Build Coastguard Worker override { 461*d9f75844SAndroid Build Coastguard Worker return &transport_controller_send_; 462*d9f75844SAndroid Build Coastguard Worker } 463*d9f75844SAndroid Build Coastguard Worker 464*d9f75844SAndroid Build Coastguard Worker webrtc::Call::Stats GetStats() const override; 465*d9f75844SAndroid Build Coastguard Worker 466*d9f75844SAndroid Build Coastguard Worker webrtc::TaskQueueBase* network_thread() const override; 467*d9f75844SAndroid Build Coastguard Worker webrtc::TaskQueueBase* worker_thread() const override; 468*d9f75844SAndroid Build Coastguard Worker 469*d9f75844SAndroid Build Coastguard Worker void SignalChannelNetworkState(webrtc::MediaType media, 470*d9f75844SAndroid Build Coastguard Worker webrtc::NetworkState state) override; 471*d9f75844SAndroid Build Coastguard Worker void OnAudioTransportOverheadChanged( 472*d9f75844SAndroid Build Coastguard Worker int transport_overhead_per_packet) override; 473*d9f75844SAndroid Build Coastguard Worker void OnLocalSsrcUpdated(webrtc::AudioReceiveStreamInterface& stream, 474*d9f75844SAndroid Build Coastguard Worker uint32_t local_ssrc) override; 475*d9f75844SAndroid Build Coastguard Worker void OnLocalSsrcUpdated(webrtc::VideoReceiveStreamInterface& stream, 476*d9f75844SAndroid Build Coastguard Worker uint32_t local_ssrc) override; 477*d9f75844SAndroid Build Coastguard Worker void OnLocalSsrcUpdated(webrtc::FlexfecReceiveStream& stream, 478*d9f75844SAndroid Build Coastguard Worker uint32_t local_ssrc) override; 479*d9f75844SAndroid Build Coastguard Worker void OnUpdateSyncGroup(webrtc::AudioReceiveStreamInterface& stream, 480*d9f75844SAndroid Build Coastguard Worker absl::string_view sync_group) override; 481*d9f75844SAndroid Build Coastguard Worker void OnSentPacket(const rtc::SentPacket& sent_packet) override; 482*d9f75844SAndroid Build Coastguard Worker 483*d9f75844SAndroid Build Coastguard Worker webrtc::TaskQueueBase* const network_thread_; 484*d9f75844SAndroid Build Coastguard Worker webrtc::TaskQueueBase* const worker_thread_; 485*d9f75844SAndroid Build Coastguard Worker 486*d9f75844SAndroid Build Coastguard Worker ::testing::NiceMock<webrtc::MockRtpTransportControllerSend> 487*d9f75844SAndroid Build Coastguard Worker transport_controller_send_; 488*d9f75844SAndroid Build Coastguard Worker 489*d9f75844SAndroid Build Coastguard Worker webrtc::NetworkState audio_network_state_; 490*d9f75844SAndroid Build Coastguard Worker webrtc::NetworkState video_network_state_; 491*d9f75844SAndroid Build Coastguard Worker rtc::SentPacket last_sent_packet_; 492*d9f75844SAndroid Build Coastguard Worker int last_sent_nonnegative_packet_id_ = -1; 493*d9f75844SAndroid Build Coastguard Worker int next_stream_id_ = 665; 494*d9f75844SAndroid Build Coastguard Worker webrtc::Call::Stats stats_; 495*d9f75844SAndroid Build Coastguard Worker std::vector<FakeVideoSendStream*> video_send_streams_; 496*d9f75844SAndroid Build Coastguard Worker std::vector<FakeAudioSendStream*> audio_send_streams_; 497*d9f75844SAndroid Build Coastguard Worker std::vector<FakeVideoReceiveStream*> video_receive_streams_; 498*d9f75844SAndroid Build Coastguard Worker std::vector<FakeAudioReceiveStream*> audio_receive_streams_; 499*d9f75844SAndroid Build Coastguard Worker std::vector<FakeFlexfecReceiveStream*> flexfec_receive_streams_; 500*d9f75844SAndroid Build Coastguard Worker std::map<uint32_t, size_t> delivered_packets_by_ssrc_; 501*d9f75844SAndroid Build Coastguard Worker 502*d9f75844SAndroid Build Coastguard Worker int num_created_send_streams_; 503*d9f75844SAndroid Build Coastguard Worker int num_created_receive_streams_; 504*d9f75844SAndroid Build Coastguard Worker 505*d9f75844SAndroid Build Coastguard Worker // The field trials that are in use, either supplied by caller 506*d9f75844SAndroid Build Coastguard Worker // or pointer to &fallback_trials_. 507*d9f75844SAndroid Build Coastguard Worker webrtc::test::ScopedKeyValueConfig* trials_; 508*d9f75844SAndroid Build Coastguard Worker 509*d9f75844SAndroid Build Coastguard Worker // fallback_trials_ is used if caller does not provide any field trials. 510*d9f75844SAndroid Build Coastguard Worker webrtc::test::ScopedKeyValueConfig fallback_trials_; 511*d9f75844SAndroid Build Coastguard Worker 512*d9f75844SAndroid Build Coastguard Worker // An extra field trial that can be set using SetFieldTrial. 513*d9f75844SAndroid Build Coastguard Worker std::unique_ptr<webrtc::test::ScopedKeyValueConfig> trials_overrides_; 514*d9f75844SAndroid Build Coastguard Worker }; 515*d9f75844SAndroid Build Coastguard Worker 516*d9f75844SAndroid Build Coastguard Worker } // namespace cricket 517*d9f75844SAndroid Build Coastguard Worker #endif // MEDIA_ENGINE_FAKE_WEBRTC_CALL_H_ 518