Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: webrtc/media/base/fakemediaengine.h

Issue 1741933002: Prevent a voice channel from sending data before a renderer is set. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing patch conflict. Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
11 #ifndef WEBRTC_MEDIA_BASE_FAKEMEDIAENGINE_H_ 11 #ifndef WEBRTC_MEDIA_BASE_FAKEMEDIAENGINE_H_
12 #define WEBRTC_MEDIA_BASE_FAKEMEDIAENGINE_H_ 12 #define WEBRTC_MEDIA_BASE_FAKEMEDIAENGINE_H_
13 13
14 #include <list> 14 #include <list>
15 #include <map> 15 #include <map>
16 #include <memory> 16 #include <memory>
17 #include <set> 17 #include <set>
18 #include <string> 18 #include <string>
19 #include <vector> 19 #include <vector>
20 20
21 #include "webrtc/audio_sink.h" 21 #include "webrtc/audio_sink.h"
22 #include "webrtc/base/buffer.h" 22 #include "webrtc/base/buffer.h"
23 #include "webrtc/base/stringutils.h" 23 #include "webrtc/base/stringutils.h"
24 #include "webrtc/media/base/audiorenderer.h" 24 #include "webrtc/media/base/audiosource.h"
25 #include "webrtc/media/base/mediaengine.h" 25 #include "webrtc/media/base/mediaengine.h"
26 #include "webrtc/media/base/rtputils.h" 26 #include "webrtc/media/base/rtputils.h"
27 #include "webrtc/media/base/streamparams.h" 27 #include "webrtc/media/base/streamparams.h"
28 #include "webrtc/p2p/base/sessiondescription.h" 28 #include "webrtc/p2p/base/sessiondescription.h"
29 29
30 namespace cricket { 30 namespace cricket {
31 31
32 class FakeMediaEngine; 32 class FakeMediaEngine;
33 class FakeVideoEngine; 33 class FakeVideoEngine;
34 class FakeVoiceEngine; 34 class FakeVoiceEngine;
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 virtual bool SetPlayout(bool playout) { 252 virtual bool SetPlayout(bool playout) {
253 set_playout(playout); 253 set_playout(playout);
254 return true; 254 return true;
255 } 255 }
256 virtual bool SetSend(SendFlags flag) { 256 virtual bool SetSend(SendFlags flag) {
257 return set_sending(flag != SEND_NOTHING); 257 return set_sending(flag != SEND_NOTHING);
258 } 258 }
259 virtual bool SetAudioSend(uint32_t ssrc, 259 virtual bool SetAudioSend(uint32_t ssrc,
260 bool enable, 260 bool enable,
261 const AudioOptions* options, 261 const AudioOptions* options,
262 AudioRenderer* renderer) { 262 AudioSource* source) {
263 if (!SetLocalRenderer(ssrc, renderer)) { 263 if (!SetLocalSource(ssrc, source)) {
264 return false; 264 return false;
265 } 265 }
266 if (!RtpHelper<VoiceMediaChannel>::MuteStream(ssrc, !enable)) { 266 if (!RtpHelper<VoiceMediaChannel>::MuteStream(ssrc, !enable)) {
267 return false; 267 return false;
268 } 268 }
269 if (enable && options) { 269 if (enable && options) {
270 return SetOptions(*options); 270 return SetOptions(*options);
271 } 271 }
272 return true; 272 return true;
273 } 273 }
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 331
332 virtual bool GetStats(VoiceMediaInfo* info) { return false; } 332 virtual bool GetStats(VoiceMediaInfo* info) { return false; }
333 333
334 virtual void SetRawAudioSink( 334 virtual void SetRawAudioSink(
335 uint32_t ssrc, 335 uint32_t ssrc,
336 std::unique_ptr<webrtc::AudioSinkInterface> sink) { 336 std::unique_ptr<webrtc::AudioSinkInterface> sink) {
337 sink_ = std::move(sink); 337 sink_ = std::move(sink);
338 } 338 }
339 339
340 private: 340 private:
341 class VoiceChannelAudioSink : public AudioRenderer::Sink { 341 class VoiceChannelAudioSink : public AudioSource::Sink {
342 public: 342 public:
343 explicit VoiceChannelAudioSink(AudioRenderer* renderer) 343 explicit VoiceChannelAudioSink(AudioSource* source) : source_(source) {
344 : renderer_(renderer) { 344 source_->SetSink(this);
345 renderer_->SetSink(this);
346 } 345 }
347 virtual ~VoiceChannelAudioSink() { 346 virtual ~VoiceChannelAudioSink() {
348 if (renderer_) { 347 if (source_) {
349 renderer_->SetSink(NULL); 348 source_->SetSink(nullptr);
350 } 349 }
351 } 350 }
352 void OnData(const void* audio_data, 351 void OnData(const void* audio_data,
353 int bits_per_sample, 352 int bits_per_sample,
354 int sample_rate, 353 int sample_rate,
355 size_t number_of_channels, 354 size_t number_of_channels,
356 size_t number_of_frames) override {} 355 size_t number_of_frames) override {}
357 void OnClose() override { renderer_ = NULL; } 356 void OnClose() override { source_ = nullptr; }
358 AudioRenderer* renderer() const { return renderer_; } 357 AudioSource* source() const { return source_; }
359 358
360 private: 359 private:
361 AudioRenderer* renderer_; 360 AudioSource* source_;
362 }; 361 };
363 362
364 bool SetRecvCodecs(const std::vector<AudioCodec>& codecs) { 363 bool SetRecvCodecs(const std::vector<AudioCodec>& codecs) {
365 if (fail_set_recv_codecs()) { 364 if (fail_set_recv_codecs()) {
366 // Fake the failure in SetRecvCodecs. 365 // Fake the failure in SetRecvCodecs.
367 return false; 366 return false;
368 } 367 }
369 recv_codecs_ = codecs; 368 recv_codecs_ = codecs;
370 return true; 369 return true;
371 } 370 }
372 bool SetSendCodecs(const std::vector<AudioCodec>& codecs) { 371 bool SetSendCodecs(const std::vector<AudioCodec>& codecs) {
373 if (fail_set_send_codecs()) { 372 if (fail_set_send_codecs()) {
374 // Fake the failure in SetSendCodecs. 373 // Fake the failure in SetSendCodecs.
375 return false; 374 return false;
376 } 375 }
377 send_codecs_ = codecs; 376 send_codecs_ = codecs;
378 return true; 377 return true;
379 } 378 }
380 bool SetMaxSendBandwidth(int bps) { return true; } 379 bool SetMaxSendBandwidth(int bps) { return true; }
381 bool SetOptions(const AudioOptions& options) { 380 bool SetOptions(const AudioOptions& options) {
382 // Does a "merge" of current options and set options. 381 // Does a "merge" of current options and set options.
383 options_.SetAll(options); 382 options_.SetAll(options);
384 return true; 383 return true;
385 } 384 }
386 bool SetLocalRenderer(uint32_t ssrc, AudioRenderer* renderer) { 385 bool SetLocalSource(uint32_t ssrc, AudioSource* source) {
387 auto it = local_renderers_.find(ssrc); 386 auto it = local_sinks_.find(ssrc);
388 if (renderer) { 387 if (source) {
389 if (it != local_renderers_.end()) { 388 if (it != local_sinks_.end()) {
390 ASSERT(it->second->renderer() == renderer); 389 ASSERT(it->second->source() == source);
391 } else { 390 } else {
392 local_renderers_.insert(std::make_pair( 391 local_sinks_.insert(
393 ssrc, new VoiceChannelAudioSink(renderer))); 392 std::make_pair(ssrc, new VoiceChannelAudioSink(source)));
394 } 393 }
395 } else { 394 } else {
396 if (it != local_renderers_.end()) { 395 if (it != local_sinks_.end()) {
397 delete it->second; 396 delete it->second;
398 local_renderers_.erase(it); 397 local_sinks_.erase(it);
399 } 398 }
400 } 399 }
401 return true; 400 return true;
402 } 401 }
403 402
404 FakeVoiceEngine* engine_; 403 FakeVoiceEngine* engine_;
405 std::vector<AudioCodec> recv_codecs_; 404 std::vector<AudioCodec> recv_codecs_;
406 std::vector<AudioCodec> send_codecs_; 405 std::vector<AudioCodec> send_codecs_;
407 std::map<uint32_t, double> output_scalings_; 406 std::map<uint32_t, double> output_scalings_;
408 std::vector<DtmfInfo> dtmf_info_queue_; 407 std::vector<DtmfInfo> dtmf_info_queue_;
409 int time_since_last_typing_; 408 int time_since_last_typing_;
410 AudioOptions options_; 409 AudioOptions options_;
411 std::map<uint32_t, VoiceChannelAudioSink*> local_renderers_; 410 std::map<uint32_t, VoiceChannelAudioSink*> local_sinks_;
412 std::unique_ptr<webrtc::AudioSinkInterface> sink_; 411 std::unique_ptr<webrtc::AudioSinkInterface> sink_;
413 }; 412 };
414 413
415 // A helper function to compare the FakeVoiceMediaChannel::DtmfInfo. 414 // A helper function to compare the FakeVoiceMediaChannel::DtmfInfo.
416 inline bool CompareDtmfInfo(const FakeVoiceMediaChannel::DtmfInfo& info, 415 inline bool CompareDtmfInfo(const FakeVoiceMediaChannel::DtmfInfo& info,
417 uint32_t ssrc, 416 uint32_t ssrc,
418 int event_code, 417 int event_code,
419 int duration) { 418 int duration) {
420 return (info.duration == duration && info.event_code == event_code && 419 return (info.duration == duration && info.event_code == event_code &&
421 info.ssrc == ssrc); 420 info.ssrc == ssrc);
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 868
870 private: 869 private:
871 std::vector<FakeDataMediaChannel*> channels_; 870 std::vector<FakeDataMediaChannel*> channels_;
872 std::vector<DataCodec> data_codecs_; 871 std::vector<DataCodec> data_codecs_;
873 DataChannelType last_channel_type_; 872 DataChannelType last_channel_type_;
874 }; 873 };
875 874
876 } // namespace cricket 875 } // namespace cricket
877 876
878 #endif // WEBRTC_MEDIA_BASE_FAKEMEDIAENGINE_H_ 877 #endif // WEBRTC_MEDIA_BASE_FAKEMEDIAENGINE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698