OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 bool CheckNoRtp() { return rtp_packets_.empty(); } | 89 bool CheckNoRtp() { return rtp_packets_.empty(); } |
90 bool CheckNoRtcp() { return rtcp_packets_.empty(); } | 90 bool CheckNoRtcp() { return rtcp_packets_.empty(); } |
91 void set_fail_set_send_codecs(bool fail) { fail_set_send_codecs_ = fail; } | 91 void set_fail_set_send_codecs(bool fail) { fail_set_send_codecs_ = fail; } |
92 void set_fail_set_recv_codecs(bool fail) { fail_set_recv_codecs_ = fail; } | 92 void set_fail_set_recv_codecs(bool fail) { fail_set_recv_codecs_ = fail; } |
93 virtual bool AddSendStream(const StreamParams& sp) { | 93 virtual bool AddSendStream(const StreamParams& sp) { |
94 if (std::find(send_streams_.begin(), send_streams_.end(), sp) != | 94 if (std::find(send_streams_.begin(), send_streams_.end(), sp) != |
95 send_streams_.end()) { | 95 send_streams_.end()) { |
96 return false; | 96 return false; |
97 } | 97 } |
98 send_streams_.push_back(sp); | 98 send_streams_.push_back(sp); |
| 99 rtp_parameters_[sp.first_ssrc()] = CreateRtpParametersWithOneEncoding(); |
99 return true; | 100 return true; |
100 } | 101 } |
101 virtual bool RemoveSendStream(uint32_t ssrc) { | 102 virtual bool RemoveSendStream(uint32_t ssrc) { |
| 103 auto parameters_iterator = rtp_parameters_.find(ssrc); |
| 104 if (parameters_iterator != rtp_parameters_.end()) { |
| 105 rtp_parameters_.erase(parameters_iterator); |
| 106 } |
102 return RemoveStreamBySsrc(&send_streams_, ssrc); | 107 return RemoveStreamBySsrc(&send_streams_, ssrc); |
103 } | 108 } |
104 virtual bool AddRecvStream(const StreamParams& sp) { | 109 virtual bool AddRecvStream(const StreamParams& sp) { |
105 if (std::find(receive_streams_.begin(), receive_streams_.end(), sp) != | 110 if (std::find(receive_streams_.begin(), receive_streams_.end(), sp) != |
106 receive_streams_.end()) { | 111 receive_streams_.end()) { |
107 return false; | 112 return false; |
108 } | 113 } |
109 receive_streams_.push_back(sp); | 114 receive_streams_.push_back(sp); |
110 return true; | 115 return true; |
111 } | 116 } |
112 virtual bool RemoveRecvStream(uint32_t ssrc) { | 117 virtual bool RemoveRecvStream(uint32_t ssrc) { |
113 return RemoveStreamBySsrc(&receive_streams_, ssrc); | 118 return RemoveStreamBySsrc(&receive_streams_, ssrc); |
114 } | 119 } |
| 120 |
| 121 virtual webrtc::RtpParameters GetRtpParameters(uint32_t ssrc) const { |
| 122 auto parameters_iterator = rtp_parameters_.find(ssrc); |
| 123 if (parameters_iterator != rtp_parameters_.end()) { |
| 124 return parameters_iterator->second; |
| 125 } |
| 126 return webrtc::RtpParameters(); |
| 127 } |
| 128 virtual bool SetRtpParameters(uint32_t ssrc, |
| 129 const webrtc::RtpParameters& parameters) { |
| 130 auto parameters_iterator = rtp_parameters_.find(ssrc); |
| 131 if (parameters_iterator != rtp_parameters_.end()) { |
| 132 parameters_iterator->second = parameters; |
| 133 return true; |
| 134 } |
| 135 // Replicate the behavior of the real media channel: return false |
| 136 // when setting parameters for unknown SSRCs. |
| 137 return false; |
| 138 } |
| 139 |
115 bool IsStreamMuted(uint32_t ssrc) const { | 140 bool IsStreamMuted(uint32_t ssrc) const { |
116 bool ret = muted_streams_.find(ssrc) != muted_streams_.end(); | 141 bool ret = muted_streams_.find(ssrc) != muted_streams_.end(); |
117 // If |ssrc = 0| check if the first send stream is muted. | 142 // If |ssrc = 0| check if the first send stream is muted. |
118 if (!ret && ssrc == 0 && !send_streams_.empty()) { | 143 if (!ret && ssrc == 0 && !send_streams_.empty()) { |
119 return muted_streams_.find(send_streams_[0].first_ssrc()) != | 144 return muted_streams_.find(send_streams_[0].first_ssrc()) != |
120 muted_streams_.end(); | 145 muted_streams_.end(); |
121 } | 146 } |
122 return ret; | 147 return ret; |
123 } | 148 } |
124 const std::vector<StreamParams>& send_streams() const { | 149 const std::vector<StreamParams>& send_streams() const { |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 private: | 222 private: |
198 bool sending_; | 223 bool sending_; |
199 bool playout_; | 224 bool playout_; |
200 std::vector<RtpHeaderExtension> recv_extensions_; | 225 std::vector<RtpHeaderExtension> recv_extensions_; |
201 std::vector<RtpHeaderExtension> send_extensions_; | 226 std::vector<RtpHeaderExtension> send_extensions_; |
202 std::list<std::string> rtp_packets_; | 227 std::list<std::string> rtp_packets_; |
203 std::list<std::string> rtcp_packets_; | 228 std::list<std::string> rtcp_packets_; |
204 std::vector<StreamParams> send_streams_; | 229 std::vector<StreamParams> send_streams_; |
205 std::vector<StreamParams> receive_streams_; | 230 std::vector<StreamParams> receive_streams_; |
206 std::set<uint32_t> muted_streams_; | 231 std::set<uint32_t> muted_streams_; |
| 232 std::map<uint32_t, webrtc::RtpParameters> rtp_parameters_; |
207 bool fail_set_send_codecs_; | 233 bool fail_set_send_codecs_; |
208 bool fail_set_recv_codecs_; | 234 bool fail_set_recv_codecs_; |
209 uint32_t send_ssrc_; | 235 uint32_t send_ssrc_; |
210 std::string rtcp_cname_; | 236 std::string rtcp_cname_; |
211 bool ready_to_send_; | 237 bool ready_to_send_; |
212 }; | 238 }; |
213 | 239 |
214 class FakeVoiceMediaChannel : public RtpHelper<VoiceMediaChannel> { | 240 class FakeVoiceMediaChannel : public RtpHelper<VoiceMediaChannel> { |
215 public: | 241 public: |
216 struct DtmfInfo { | 242 struct DtmfInfo { |
217 DtmfInfo(uint32_t ssrc, int event_code, int duration) | 243 DtmfInfo(uint32_t ssrc, int event_code, int duration) |
218 : ssrc(ssrc), | 244 : ssrc(ssrc), |
219 event_code(event_code), | 245 event_code(event_code), |
220 duration(duration) {} | 246 duration(duration) {} |
221 uint32_t ssrc; | 247 uint32_t ssrc; |
222 int event_code; | 248 int event_code; |
223 int duration; | 249 int duration; |
224 }; | 250 }; |
225 explicit FakeVoiceMediaChannel(FakeVoiceEngine* engine, | 251 explicit FakeVoiceMediaChannel(FakeVoiceEngine* engine, |
226 const AudioOptions& options) | 252 const AudioOptions& options) |
227 : engine_(engine), | 253 : engine_(engine), time_since_last_typing_(-1), max_bps_(-1) { |
228 time_since_last_typing_(-1) { | |
229 output_scalings_[0] = 1.0; // For default channel. | 254 output_scalings_[0] = 1.0; // For default channel. |
230 SetOptions(options); | 255 SetOptions(options); |
231 } | 256 } |
232 ~FakeVoiceMediaChannel(); | 257 ~FakeVoiceMediaChannel(); |
233 const std::vector<AudioCodec>& recv_codecs() const { return recv_codecs_; } | 258 const std::vector<AudioCodec>& recv_codecs() const { return recv_codecs_; } |
234 const std::vector<AudioCodec>& send_codecs() const { return send_codecs_; } | 259 const std::vector<AudioCodec>& send_codecs() const { return send_codecs_; } |
235 const std::vector<AudioCodec>& codecs() const { return send_codecs(); } | 260 const std::vector<AudioCodec>& codecs() const { return send_codecs(); } |
236 const std::vector<DtmfInfo>& dtmf_info_queue() const { | 261 const std::vector<DtmfInfo>& dtmf_info_queue() const { |
237 return dtmf_info_queue_; | 262 return dtmf_info_queue_; |
238 } | 263 } |
239 const AudioOptions& options() const { return options_; } | 264 const AudioOptions& options() const { return options_; } |
240 | 265 int max_bps() const { return max_bps_; } |
241 virtual bool SetSendParameters(const AudioSendParameters& params) { | 266 virtual bool SetSendParameters(const AudioSendParameters& params) { |
242 return (SetSendCodecs(params.codecs) && | 267 return (SetSendCodecs(params.codecs) && |
243 SetSendRtpHeaderExtensions(params.extensions) && | 268 SetSendRtpHeaderExtensions(params.extensions) && |
244 SetMaxSendBandwidth(params.max_bandwidth_bps) && | 269 SetMaxSendBandwidth(params.max_bandwidth_bps) && |
245 SetOptions(params.options)); | 270 SetOptions(params.options)); |
246 } | 271 } |
247 | 272 |
248 virtual bool SetRecvParameters(const AudioRecvParameters& params) { | 273 virtual bool SetRecvParameters(const AudioRecvParameters& params) { |
249 return (SetRecvCodecs(params.codecs) && | 274 return (SetRecvCodecs(params.codecs) && |
250 SetRecvRtpHeaderExtensions(params.extensions)); | 275 SetRecvRtpHeaderExtensions(params.extensions)); |
251 } | 276 } |
| 277 |
252 virtual bool SetPlayout(bool playout) { | 278 virtual bool SetPlayout(bool playout) { |
253 set_playout(playout); | 279 set_playout(playout); |
254 return true; | 280 return true; |
255 } | 281 } |
256 virtual void SetSend(bool send) { set_sending(send); } | 282 virtual void SetSend(bool send) { set_sending(send); } |
257 virtual bool SetAudioSend(uint32_t ssrc, | 283 virtual bool SetAudioSend(uint32_t ssrc, |
258 bool enable, | 284 bool enable, |
259 const AudioOptions* options, | 285 const AudioOptions* options, |
260 AudioSource* source) { | 286 AudioSource* source) { |
261 if (!SetLocalSource(ssrc, source)) { | 287 if (!SetLocalSource(ssrc, source)) { |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 return true; | 393 return true; |
368 } | 394 } |
369 bool SetSendCodecs(const std::vector<AudioCodec>& codecs) { | 395 bool SetSendCodecs(const std::vector<AudioCodec>& codecs) { |
370 if (fail_set_send_codecs()) { | 396 if (fail_set_send_codecs()) { |
371 // Fake the failure in SetSendCodecs. | 397 // Fake the failure in SetSendCodecs. |
372 return false; | 398 return false; |
373 } | 399 } |
374 send_codecs_ = codecs; | 400 send_codecs_ = codecs; |
375 return true; | 401 return true; |
376 } | 402 } |
377 bool SetMaxSendBandwidth(int bps) { return true; } | 403 bool SetMaxSendBandwidth(int bps) { |
| 404 max_bps_ = bps; |
| 405 return true; |
| 406 } |
378 bool SetOptions(const AudioOptions& options) { | 407 bool SetOptions(const AudioOptions& options) { |
379 // Does a "merge" of current options and set options. | 408 // Does a "merge" of current options and set options. |
380 options_.SetAll(options); | 409 options_.SetAll(options); |
381 return true; | 410 return true; |
382 } | 411 } |
383 bool SetLocalSource(uint32_t ssrc, AudioSource* source) { | 412 bool SetLocalSource(uint32_t ssrc, AudioSource* source) { |
384 auto it = local_sinks_.find(ssrc); | 413 auto it = local_sinks_.find(ssrc); |
385 if (source) { | 414 if (source) { |
386 if (it != local_sinks_.end()) { | 415 if (it != local_sinks_.end()) { |
387 ASSERT(it->second->source() == source); | 416 ASSERT(it->second->source() == source); |
(...skipping 12 matching lines...) Expand all Loading... |
400 | 429 |
401 FakeVoiceEngine* engine_; | 430 FakeVoiceEngine* engine_; |
402 std::vector<AudioCodec> recv_codecs_; | 431 std::vector<AudioCodec> recv_codecs_; |
403 std::vector<AudioCodec> send_codecs_; | 432 std::vector<AudioCodec> send_codecs_; |
404 std::map<uint32_t, double> output_scalings_; | 433 std::map<uint32_t, double> output_scalings_; |
405 std::vector<DtmfInfo> dtmf_info_queue_; | 434 std::vector<DtmfInfo> dtmf_info_queue_; |
406 int time_since_last_typing_; | 435 int time_since_last_typing_; |
407 AudioOptions options_; | 436 AudioOptions options_; |
408 std::map<uint32_t, VoiceChannelAudioSink*> local_sinks_; | 437 std::map<uint32_t, VoiceChannelAudioSink*> local_sinks_; |
409 std::unique_ptr<webrtc::AudioSinkInterface> sink_; | 438 std::unique_ptr<webrtc::AudioSinkInterface> sink_; |
| 439 int max_bps_; |
410 }; | 440 }; |
411 | 441 |
412 // A helper function to compare the FakeVoiceMediaChannel::DtmfInfo. | 442 // A helper function to compare the FakeVoiceMediaChannel::DtmfInfo. |
413 inline bool CompareDtmfInfo(const FakeVoiceMediaChannel::DtmfInfo& info, | 443 inline bool CompareDtmfInfo(const FakeVoiceMediaChannel::DtmfInfo& info, |
414 uint32_t ssrc, | 444 uint32_t ssrc, |
415 int event_code, | 445 int event_code, |
416 int duration) { | 446 int duration) { |
417 return (info.duration == duration && info.event_code == event_code && | 447 return (info.duration == duration && info.event_code == event_code && |
418 info.ssrc == ssrc); | 448 info.ssrc == ssrc); |
419 } | 449 } |
(...skipping 17 matching lines...) Expand all Loading... |
437 const { | 467 const { |
438 return sinks_; | 468 return sinks_; |
439 } | 469 } |
440 int max_bps() const { return max_bps_; } | 470 int max_bps() const { return max_bps_; } |
441 virtual bool SetSendParameters(const VideoSendParameters& params) { | 471 virtual bool SetSendParameters(const VideoSendParameters& params) { |
442 return (SetSendCodecs(params.codecs) && | 472 return (SetSendCodecs(params.codecs) && |
443 SetSendRtpHeaderExtensions(params.extensions) && | 473 SetSendRtpHeaderExtensions(params.extensions) && |
444 SetMaxSendBandwidth(params.max_bandwidth_bps) && | 474 SetMaxSendBandwidth(params.max_bandwidth_bps) && |
445 SetOptions(params.options)); | 475 SetOptions(params.options)); |
446 } | 476 } |
447 | |
448 virtual bool SetRecvParameters(const VideoRecvParameters& params) { | 477 virtual bool SetRecvParameters(const VideoRecvParameters& params) { |
449 return (SetRecvCodecs(params.codecs) && | 478 return (SetRecvCodecs(params.codecs) && |
450 SetRecvRtpHeaderExtensions(params.extensions)); | 479 SetRecvRtpHeaderExtensions(params.extensions)); |
451 } | 480 } |
452 virtual bool AddSendStream(const StreamParams& sp) { | 481 virtual bool AddSendStream(const StreamParams& sp) { |
453 return RtpHelper<VideoMediaChannel>::AddSendStream(sp); | 482 return RtpHelper<VideoMediaChannel>::AddSendStream(sp); |
454 } | 483 } |
455 virtual bool RemoveSendStream(uint32_t ssrc) { | 484 virtual bool RemoveSendStream(uint32_t ssrc) { |
456 return RtpHelper<VideoMediaChannel>::RemoveSendStream(ssrc); | 485 return RtpHelper<VideoMediaChannel>::RemoveSendStream(ssrc); |
457 } | 486 } |
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
866 | 895 |
867 private: | 896 private: |
868 std::vector<FakeDataMediaChannel*> channels_; | 897 std::vector<FakeDataMediaChannel*> channels_; |
869 std::vector<DataCodec> data_codecs_; | 898 std::vector<DataCodec> data_codecs_; |
870 DataChannelType last_channel_type_; | 899 DataChannelType last_channel_type_; |
871 }; | 900 }; |
872 | 901 |
873 } // namespace cricket | 902 } // namespace cricket |
874 | 903 |
875 #endif // WEBRTC_MEDIA_BASE_FAKEMEDIAENGINE_H_ | 904 #endif // WEBRTC_MEDIA_BASE_FAKEMEDIAENGINE_H_ |
OLD | NEW |