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 631 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
642 | 642 |
643 voe_wrapper_->base()->Terminate(); | 643 voe_wrapper_->base()->Terminate(); |
644 } | 644 } |
645 | 645 |
646 rtc::scoped_refptr<webrtc::AudioState> | 646 rtc::scoped_refptr<webrtc::AudioState> |
647 WebRtcVoiceEngine::GetAudioState() const { | 647 WebRtcVoiceEngine::GetAudioState() const { |
648 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 648 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
649 return audio_state_; | 649 return audio_state_; |
650 } | 650 } |
651 | 651 |
652 VoiceMediaChannel* WebRtcVoiceEngine::CreateChannel(webrtc::Call* call, | 652 VoiceMediaChannel* WebRtcVoiceEngine::CreateChannel( |
| 653 webrtc::Call* call, |
| 654 const MediaConfig& config, |
653 const AudioOptions& options) { | 655 const AudioOptions& options) { |
654 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 656 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
655 return new WebRtcVoiceMediaChannel(this, options, call); | 657 return new WebRtcVoiceMediaChannel(this, config, options, call); |
656 } | 658 } |
657 | 659 |
658 bool WebRtcVoiceEngine::ApplyOptions(const AudioOptions& options_in) { | 660 bool WebRtcVoiceEngine::ApplyOptions(const AudioOptions& options_in) { |
659 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 661 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
660 LOG(LS_INFO) << "ApplyOptions: " << options_in.ToString(); | 662 LOG(LS_INFO) << "ApplyOptions: " << options_in.ToString(); |
661 AudioOptions options = options_in; // The options are modified below. | 663 AudioOptions options = options_in; // The options are modified below. |
662 | 664 |
663 // kEcConference is AEC with high suppression. | 665 // kEcConference is AEC with high suppression. |
664 webrtc::EcModes ec_mode = webrtc::kEcConference; | 666 webrtc::EcModes ec_mode = webrtc::kEcConference; |
665 webrtc::AecmModes aecm_mode = webrtc::kAecmSpeakerphone; | 667 webrtc::AecmModes aecm_mode = webrtc::kAecmSpeakerphone; |
(...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1359 webrtc::Call* call_ = nullptr; | 1361 webrtc::Call* call_ = nullptr; |
1360 webrtc::AudioReceiveStream::Config config_; | 1362 webrtc::AudioReceiveStream::Config config_; |
1361 // The stream is owned by WebRtcAudioReceiveStream and may be reallocated if | 1363 // The stream is owned by WebRtcAudioReceiveStream and may be reallocated if |
1362 // configuration changes. | 1364 // configuration changes. |
1363 webrtc::AudioReceiveStream* stream_ = nullptr; | 1365 webrtc::AudioReceiveStream* stream_ = nullptr; |
1364 | 1366 |
1365 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(WebRtcAudioReceiveStream); | 1367 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(WebRtcAudioReceiveStream); |
1366 }; | 1368 }; |
1367 | 1369 |
1368 WebRtcVoiceMediaChannel::WebRtcVoiceMediaChannel(WebRtcVoiceEngine* engine, | 1370 WebRtcVoiceMediaChannel::WebRtcVoiceMediaChannel(WebRtcVoiceEngine* engine, |
| 1371 const MediaConfig& config, |
1369 const AudioOptions& options, | 1372 const AudioOptions& options, |
1370 webrtc::Call* call) | 1373 webrtc::Call* call) |
1371 : engine_(engine), call_(call) { | 1374 : VoiceMediaChannel(config), engine_(engine), call_(call) { |
1372 LOG(LS_VERBOSE) << "WebRtcVoiceMediaChannel::WebRtcVoiceMediaChannel"; | 1375 LOG(LS_VERBOSE) << "WebRtcVoiceMediaChannel::WebRtcVoiceMediaChannel"; |
1373 RTC_DCHECK(call); | 1376 RTC_DCHECK(call); |
1374 engine->RegisterChannel(this); | 1377 engine->RegisterChannel(this); |
1375 SetOptions(options); | 1378 SetOptions(options); |
1376 } | 1379 } |
1377 | 1380 |
1378 WebRtcVoiceMediaChannel::~WebRtcVoiceMediaChannel() { | 1381 WebRtcVoiceMediaChannel::~WebRtcVoiceMediaChannel() { |
1379 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 1382 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
1380 LOG(LS_VERBOSE) << "WebRtcVoiceMediaChannel::~WebRtcVoiceMediaChannel"; | 1383 LOG(LS_VERBOSE) << "WebRtcVoiceMediaChannel::~WebRtcVoiceMediaChannel"; |
1381 // TODO(solenberg): Should be able to delete the streams directly, without | 1384 // TODO(solenberg): Should be able to delete the streams directly, without |
1382 // going through RemoveNnStream(), once stream objects handle | 1385 // going through RemoveNnStream(), once stream objects handle |
1383 // all (de)configuration. | 1386 // all (de)configuration. |
1384 while (!send_streams_.empty()) { | 1387 while (!send_streams_.empty()) { |
1385 RemoveSendStream(send_streams_.begin()->first); | 1388 RemoveSendStream(send_streams_.begin()->first); |
1386 } | 1389 } |
1387 while (!recv_streams_.empty()) { | 1390 while (!recv_streams_.empty()) { |
1388 RemoveRecvStream(recv_streams_.begin()->first); | 1391 RemoveRecvStream(recv_streams_.begin()->first); |
1389 } | 1392 } |
1390 engine()->UnregisterChannel(this); | 1393 engine()->UnregisterChannel(this); |
1391 } | 1394 } |
1392 | 1395 |
| 1396 rtc::DiffServCodePoint WebRtcVoiceMediaChannel::PreferredDscp() const { |
| 1397 return kAudioDscpValue; |
| 1398 } |
| 1399 |
1393 bool WebRtcVoiceMediaChannel::SetSendParameters( | 1400 bool WebRtcVoiceMediaChannel::SetSendParameters( |
1394 const AudioSendParameters& params) { | 1401 const AudioSendParameters& params) { |
1395 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 1402 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
1396 LOG(LS_INFO) << "WebRtcVoiceMediaChannel::SetSendParameters: " | 1403 LOG(LS_INFO) << "WebRtcVoiceMediaChannel::SetSendParameters: " |
1397 << params.ToString(); | 1404 << params.ToString(); |
1398 // TODO(pthatcher): Refactor this to be more clean now that we have | 1405 // TODO(pthatcher): Refactor this to be more clean now that we have |
1399 // all the information at once. | 1406 // all the information at once. |
1400 | 1407 |
1401 if (!SetSendCodecs(params.codecs)) { | 1408 if (!SetSendCodecs(params.codecs)) { |
1402 return false; | 1409 return false; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1446 } | 1453 } |
1447 } | 1454 } |
1448 return true; | 1455 return true; |
1449 } | 1456 } |
1450 | 1457 |
1451 bool WebRtcVoiceMediaChannel::SetOptions(const AudioOptions& options) { | 1458 bool WebRtcVoiceMediaChannel::SetOptions(const AudioOptions& options) { |
1452 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 1459 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
1453 LOG(LS_INFO) << "Setting voice channel options: " | 1460 LOG(LS_INFO) << "Setting voice channel options: " |
1454 << options.ToString(); | 1461 << options.ToString(); |
1455 | 1462 |
1456 // Check if DSCP value is changed from previous. | |
1457 bool dscp_option_changed = (options_.dscp != options.dscp); | |
1458 | |
1459 // We retain all of the existing options, and apply the given ones | 1463 // We retain all of the existing options, and apply the given ones |
1460 // on top. This means there is no way to "clear" options such that | 1464 // on top. This means there is no way to "clear" options such that |
1461 // they go back to the engine default. | 1465 // they go back to the engine default. |
1462 options_.SetAll(options); | 1466 options_.SetAll(options); |
1463 if (!engine()->ApplyOptions(options_)) { | 1467 if (!engine()->ApplyOptions(options_)) { |
1464 LOG(LS_WARNING) << | 1468 LOG(LS_WARNING) << |
1465 "Failed to apply engine options during channel SetOptions."; | 1469 "Failed to apply engine options during channel SetOptions."; |
1466 return false; | 1470 return false; |
1467 } | 1471 } |
1468 | |
1469 if (dscp_option_changed) { | |
1470 rtc::DiffServCodePoint dscp = rtc::DSCP_DEFAULT; | |
1471 if (options_.dscp.value_or(false)) { | |
1472 dscp = kAudioDscpValue; | |
1473 } | |
1474 if (MediaChannel::SetDscp(dscp) != 0) { | |
1475 LOG(LS_WARNING) << "Failed to set DSCP settings for audio channel"; | |
1476 } | |
1477 } | |
1478 | |
1479 LOG(LS_INFO) << "Set voice channel options. Current options: " | 1472 LOG(LS_INFO) << "Set voice channel options. Current options: " |
1480 << options_.ToString(); | 1473 << options_.ToString(); |
1481 return true; | 1474 return true; |
1482 } | 1475 } |
1483 | 1476 |
1484 bool WebRtcVoiceMediaChannel::SetRecvCodecs( | 1477 bool WebRtcVoiceMediaChannel::SetRecvCodecs( |
1485 const std::vector<AudioCodec>& codecs) { | 1478 const std::vector<AudioCodec>& codecs) { |
1486 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 1479 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
1487 | 1480 |
1488 // Set the payload types to be used for incoming media. | 1481 // Set the payload types to be used for incoming media. |
(...skipping 1064 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2553 } | 2546 } |
2554 } else { | 2547 } else { |
2555 LOG(LS_INFO) << "Stopping playout for channel #" << channel; | 2548 LOG(LS_INFO) << "Stopping playout for channel #" << channel; |
2556 engine()->voe()->base()->StopPlayout(channel); | 2549 engine()->voe()->base()->StopPlayout(channel); |
2557 } | 2550 } |
2558 return true; | 2551 return true; |
2559 } | 2552 } |
2560 } // namespace cricket | 2553 } // namespace cricket |
2561 | 2554 |
2562 #endif // HAVE_WEBRTC_VOICE | 2555 #endif // HAVE_WEBRTC_VOICE |
OLD | NEW |