OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2004 Google Inc. | 3 * Copyright 2004 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
585 | 585 |
586 voe_wrapper_->base()->Terminate(); | 586 voe_wrapper_->base()->Terminate(); |
587 } | 587 } |
588 | 588 |
589 rtc::scoped_refptr<webrtc::AudioState> | 589 rtc::scoped_refptr<webrtc::AudioState> |
590 WebRtcVoiceEngine::GetAudioState() const { | 590 WebRtcVoiceEngine::GetAudioState() const { |
591 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 591 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
592 return audio_state_; | 592 return audio_state_; |
593 } | 593 } |
594 | 594 |
595 VoiceMediaChannel* WebRtcVoiceEngine::CreateChannel(webrtc::Call* call, | 595 VoiceMediaChannel* WebRtcVoiceEngine::CreateChannel( |
596 const AudioOptions& options) { | 596 webrtc::Call* call, |
| 597 const MediaChannelOptions& options, |
| 598 const AudioOptions& audio_options) { |
597 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 599 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
598 return new WebRtcVoiceMediaChannel(this, options, call); | 600 return new WebRtcVoiceMediaChannel(this, options, audio_options, call); |
599 } | 601 } |
600 | 602 |
601 bool WebRtcVoiceEngine::ApplyOptions(const AudioOptions& options_in) { | 603 bool WebRtcVoiceEngine::ApplyOptions(const AudioOptions& options_in) { |
602 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 604 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
603 LOG(LS_INFO) << "ApplyOptions: " << options_in.ToString(); | 605 LOG(LS_INFO) << "ApplyOptions: " << options_in.ToString(); |
604 AudioOptions options = options_in; // The options are modified below. | 606 AudioOptions options = options_in; // The options are modified below. |
605 | 607 |
606 // kEcConference is AEC with high suppression. | 608 // kEcConference is AEC with high suppression. |
607 webrtc::EcModes ec_mode = webrtc::kEcConference; | 609 webrtc::EcModes ec_mode = webrtc::kEcConference; |
608 webrtc::AecmModes aecm_mode = webrtc::kAecmSpeakerphone; | 610 webrtc::AecmModes aecm_mode = webrtc::kAecmSpeakerphone; |
(...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1282 rtc::ThreadChecker worker_thread_checker_; | 1284 rtc::ThreadChecker worker_thread_checker_; |
1283 webrtc::Call* call_ = nullptr; | 1285 webrtc::Call* call_ = nullptr; |
1284 webrtc::AudioReceiveStream::Config config_; | 1286 webrtc::AudioReceiveStream::Config config_; |
1285 // The stream is owned by WebRtcAudioReceiveStream and may be reallocated if | 1287 // The stream is owned by WebRtcAudioReceiveStream and may be reallocated if |
1286 // configuration changes. | 1288 // configuration changes. |
1287 webrtc::AudioReceiveStream* stream_ = nullptr; | 1289 webrtc::AudioReceiveStream* stream_ = nullptr; |
1288 | 1290 |
1289 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(WebRtcAudioReceiveStream); | 1291 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(WebRtcAudioReceiveStream); |
1290 }; | 1292 }; |
1291 | 1293 |
1292 WebRtcVoiceMediaChannel::WebRtcVoiceMediaChannel(WebRtcVoiceEngine* engine, | 1294 WebRtcVoiceMediaChannel::WebRtcVoiceMediaChannel( |
1293 const AudioOptions& options, | 1295 WebRtcVoiceEngine* engine, |
1294 webrtc::Call* call) | 1296 const MediaChannelOptions& options, |
1295 : engine_(engine), call_(call) { | 1297 const AudioOptions& audio_options, |
| 1298 webrtc::Call* call) |
| 1299 : VoiceMediaChannel(options), engine_(engine), call_(call) { |
1296 LOG(LS_VERBOSE) << "WebRtcVoiceMediaChannel::WebRtcVoiceMediaChannel"; | 1300 LOG(LS_VERBOSE) << "WebRtcVoiceMediaChannel::WebRtcVoiceMediaChannel"; |
1297 RTC_DCHECK(call); | 1301 RTC_DCHECK(call); |
1298 engine->RegisterChannel(this); | 1302 engine->RegisterChannel(this); |
1299 SetOptions(options); | 1303 SetOptions(audio_options); |
1300 } | 1304 } |
1301 | 1305 |
1302 WebRtcVoiceMediaChannel::~WebRtcVoiceMediaChannel() { | 1306 WebRtcVoiceMediaChannel::~WebRtcVoiceMediaChannel() { |
1303 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 1307 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
1304 LOG(LS_VERBOSE) << "WebRtcVoiceMediaChannel::~WebRtcVoiceMediaChannel"; | 1308 LOG(LS_VERBOSE) << "WebRtcVoiceMediaChannel::~WebRtcVoiceMediaChannel"; |
1305 // TODO(solenberg): Should be able to delete the streams directly, without | 1309 // TODO(solenberg): Should be able to delete the streams directly, without |
1306 // going through RemoveNnStream(), once stream objects handle | 1310 // going through RemoveNnStream(), once stream objects handle |
1307 // all (de)configuration. | 1311 // all (de)configuration. |
1308 while (!send_streams_.empty()) { | 1312 while (!send_streams_.empty()) { |
1309 RemoveSendStream(send_streams_.begin()->first); | 1313 RemoveSendStream(send_streams_.begin()->first); |
1310 } | 1314 } |
1311 while (!recv_streams_.empty()) { | 1315 while (!recv_streams_.empty()) { |
1312 RemoveRecvStream(recv_streams_.begin()->first); | 1316 RemoveRecvStream(recv_streams_.begin()->first); |
1313 } | 1317 } |
1314 engine()->UnregisterChannel(this); | 1318 engine()->UnregisterChannel(this); |
1315 } | 1319 } |
1316 | 1320 |
| 1321 rtc::DiffServCodePoint WebRtcVoiceMediaChannel::MediaTypeDscpValue() const { |
| 1322 return kAudioDscpValue; |
| 1323 } |
| 1324 |
1317 bool WebRtcVoiceMediaChannel::SetSendParameters( | 1325 bool WebRtcVoiceMediaChannel::SetSendParameters( |
1318 const AudioSendParameters& params) { | 1326 const AudioSendParameters& params) { |
1319 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 1327 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
1320 LOG(LS_INFO) << "WebRtcVoiceMediaChannel::SetSendParameters: " | 1328 LOG(LS_INFO) << "WebRtcVoiceMediaChannel::SetSendParameters: " |
1321 << params.ToString(); | 1329 << params.ToString(); |
1322 // TODO(pthatcher): Refactor this to be more clean now that we have | 1330 // TODO(pthatcher): Refactor this to be more clean now that we have |
1323 // all the information at once. | 1331 // all the information at once. |
1324 | 1332 |
1325 if (!SetSendCodecs(params.codecs)) { | 1333 if (!SetSendCodecs(params.codecs)) { |
1326 return false; | 1334 return false; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1371 } | 1379 } |
1372 | 1380 |
1373 return true; | 1381 return true; |
1374 } | 1382 } |
1375 | 1383 |
1376 bool WebRtcVoiceMediaChannel::SetOptions(const AudioOptions& options) { | 1384 bool WebRtcVoiceMediaChannel::SetOptions(const AudioOptions& options) { |
1377 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 1385 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
1378 LOG(LS_INFO) << "Setting voice channel options: " | 1386 LOG(LS_INFO) << "Setting voice channel options: " |
1379 << options.ToString(); | 1387 << options.ToString(); |
1380 | 1388 |
1381 // Check if DSCP value is changed from previous. | |
1382 bool dscp_option_changed = (options_.dscp != options.dscp); | |
1383 | |
1384 // We retain all of the existing options, and apply the given ones | 1389 // We retain all of the existing options, and apply the given ones |
1385 // on top. This means there is no way to "clear" options such that | 1390 // on top. This means there is no way to "clear" options such that |
1386 // they go back to the engine default. | 1391 // they go back to the engine default. |
1387 options_.SetAll(options); | 1392 options_.SetAll(options); |
1388 if (!engine()->ApplyOptions(options_)) { | 1393 if (!engine()->ApplyOptions(options_)) { |
1389 LOG(LS_WARNING) << | 1394 LOG(LS_WARNING) << |
1390 "Failed to apply engine options during channel SetOptions."; | 1395 "Failed to apply engine options during channel SetOptions."; |
1391 return false; | 1396 return false; |
1392 } | 1397 } |
1393 | 1398 |
1394 if (dscp_option_changed) { | |
1395 rtc::DiffServCodePoint dscp = rtc::DSCP_DEFAULT; | |
1396 if (options_.dscp.value_or(false)) { | |
1397 dscp = kAudioDscpValue; | |
1398 } | |
1399 if (MediaChannel::SetDscp(dscp) != 0) { | |
1400 LOG(LS_WARNING) << "Failed to set DSCP settings for audio channel"; | |
1401 } | |
1402 } | |
1403 | |
1404 // TODO(solenberg): Don't recreate unless options changed. | 1399 // TODO(solenberg): Don't recreate unless options changed. |
1405 for (auto& it : recv_streams_) { | 1400 for (auto& it : recv_streams_) { |
1406 it.second->RecreateAudioReceiveStream( | 1401 it.second->RecreateAudioReceiveStream( |
1407 options_.combined_audio_video_bwe.value_or(false)); | 1402 options_.combined_audio_video_bwe.value_or(false)); |
1408 } | 1403 } |
1409 | 1404 |
1410 LOG(LS_INFO) << "Set voice channel options. Current options: " | 1405 LOG(LS_INFO) << "Set voice channel options. Current options: " |
1411 << options_.ToString(); | 1406 << options_.ToString(); |
1412 return true; | 1407 return true; |
1413 } | 1408 } |
(...skipping 1116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2530 } | 2525 } |
2531 } else { | 2526 } else { |
2532 LOG(LS_INFO) << "Stopping playout for channel #" << channel; | 2527 LOG(LS_INFO) << "Stopping playout for channel #" << channel; |
2533 engine()->voe()->base()->StopPlayout(channel); | 2528 engine()->voe()->base()->StopPlayout(channel); |
2534 } | 2529 } |
2535 return true; | 2530 return true; |
2536 } | 2531 } |
2537 } // namespace cricket | 2532 } // namespace cricket |
2538 | 2533 |
2539 #endif // HAVE_WEBRTC_VOICE | 2534 #endif // HAVE_WEBRTC_VOICE |
OLD | NEW |