xref: /aosp_15_r20/external/webrtc/media/engine/fake_webrtc_call.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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