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 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
211 | 211 |
212 WebRtcVoiceEngine::WebRtcVoiceEngine( | 212 WebRtcVoiceEngine::WebRtcVoiceEngine( |
213 webrtc::AudioDeviceModule* adm, | 213 webrtc::AudioDeviceModule* adm, |
214 const rtc::scoped_refptr<webrtc::AudioEncoderFactory>& encoder_factory, | 214 const rtc::scoped_refptr<webrtc::AudioEncoderFactory>& encoder_factory, |
215 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory, | 215 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory, |
216 rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer) | 216 rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer) |
217 : WebRtcVoiceEngine(adm, | 217 : WebRtcVoiceEngine(adm, |
218 encoder_factory, | 218 encoder_factory, |
219 decoder_factory, | 219 decoder_factory, |
220 audio_mixer, | 220 audio_mixer, |
221 new VoEWrapper()) { | 221 nullptr) {} |
222 audio_state_ = | |
223 webrtc::AudioState::Create(MakeAudioStateConfig(voe(), audio_mixer)); | |
224 } | |
225 | 222 |
226 WebRtcVoiceEngine::WebRtcVoiceEngine( | 223 WebRtcVoiceEngine::WebRtcVoiceEngine( |
227 webrtc::AudioDeviceModule* adm, | 224 webrtc::AudioDeviceModule* adm, |
228 const rtc::scoped_refptr<webrtc::AudioEncoderFactory>& encoder_factory, | 225 const rtc::scoped_refptr<webrtc::AudioEncoderFactory>& encoder_factory, |
229 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory, | 226 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory, |
230 rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer, | 227 rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer, |
231 VoEWrapper* voe_wrapper) | 228 VoEWrapper* voe_wrapper) |
232 : low_priority_worker_queue_("rtc-low-prio", rtc::TaskQueue::Priority::LOW), | 229 : adm_(adm), |
233 adm_(adm), | |
234 encoder_factory_(encoder_factory), | 230 encoder_factory_(encoder_factory), |
235 decoder_factory_(decoder_factory), | 231 decoder_factory_(decoder_factory), |
232 audio_mixer_(audio_mixer), | |
236 voe_wrapper_(voe_wrapper) { | 233 voe_wrapper_(voe_wrapper) { |
234 // This may be called from any thread, so detach thread checkers. | |
235 worker_thread_checker_.DetachFromThread(); | |
236 signal_thread_checker_.DetachFromThread(); | |
237 LOG(LS_INFO) << "WebRtcVoiceEngine::WebRtcVoiceEngine"; | |
238 RTC_DCHECK(decoder_factory); | |
the sun
2017/06/15 07:38:19
Might as well add the missing DCHECK for encoder_f
Taylor Brandstetter
2017/06/15 15:05:58
Done.
| |
239 // The rest of our initialization will happen in Init. | |
240 } | |
241 | |
242 WebRtcVoiceEngine::~WebRtcVoiceEngine() { | |
237 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 243 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
238 LOG(LS_INFO) << "WebRtcVoiceEngine::WebRtcVoiceEngine"; | 244 LOG(LS_INFO) << "WebRtcVoiceEngine::~WebRtcVoiceEngine"; |
239 RTC_DCHECK(voe_wrapper); | 245 if (initialized_) { |
240 RTC_DCHECK(decoder_factory); | 246 StopAecDump(); |
247 voe_wrapper_->base()->Terminate(); | |
248 webrtc::Trace::SetTraceCallback(nullptr); | |
249 } | |
250 } | |
241 | 251 |
242 signal_thread_checker_.DetachFromThread(); | 252 void WebRtcVoiceEngine::Init() { |
253 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | |
254 LOG(LS_INFO) << "WebRtcVoiceEngine::Init"; | |
255 | |
256 // TaskQueue expects to be created/destroyed on the same thread. | |
257 low_priority_worker_queue_.reset( | |
258 new rtc::TaskQueue("rtc-low-prio", rtc::TaskQueue::Priority::LOW)); | |
259 | |
260 // VoEWrapper needs to be created on the worker thread. It's expected to be | |
261 // null here unless it's being injected for testing. | |
262 if (!voe_wrapper_) { | |
263 voe_wrapper_.reset(new VoEWrapper()); | |
264 } | |
243 | 265 |
244 // Load our audio codec lists. | 266 // Load our audio codec lists. |
245 LOG(LS_INFO) << "Supported send codecs in order of preference:"; | 267 LOG(LS_INFO) << "Supported send codecs in order of preference:"; |
246 send_codecs_ = CollectCodecs(encoder_factory_->GetSupportedEncoders()); | 268 send_codecs_ = CollectCodecs(encoder_factory_->GetSupportedEncoders()); |
247 for (const AudioCodec& codec : send_codecs_) { | 269 for (const AudioCodec& codec : send_codecs_) { |
248 LOG(LS_INFO) << ToString(codec); | 270 LOG(LS_INFO) << ToString(codec); |
249 } | 271 } |
250 | 272 |
251 LOG(LS_INFO) << "Supported recv codecs in order of preference:"; | 273 LOG(LS_INFO) << "Supported recv codecs in order of preference:"; |
252 recv_codecs_ = CollectCodecs(decoder_factory_->GetSupportedDecoders()); | 274 recv_codecs_ = CollectCodecs(decoder_factory_->GetSupportedDecoders()); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
302 bool error = ApplyOptions(options); | 324 bool error = ApplyOptions(options); |
303 RTC_DCHECK(error); | 325 RTC_DCHECK(error); |
304 } | 326 } |
305 | 327 |
306 // Set default audio devices. | 328 // Set default audio devices. |
307 #if !defined(WEBRTC_IOS) | 329 #if !defined(WEBRTC_IOS) |
308 webrtc::adm_helpers::SetRecordingDevice(adm_); | 330 webrtc::adm_helpers::SetRecordingDevice(adm_); |
309 apm()->Initialize(); | 331 apm()->Initialize(); |
310 webrtc::adm_helpers::SetPlayoutDevice(adm_); | 332 webrtc::adm_helpers::SetPlayoutDevice(adm_); |
311 #endif // !WEBRTC_IOS | 333 #endif // !WEBRTC_IOS |
312 } | |
313 | 334 |
314 WebRtcVoiceEngine::~WebRtcVoiceEngine() { | 335 // May be null for VoE injected for testing. |
315 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 336 if (voe()->engine()) { |
Taylor Brandstetter
2017/06/13 21:35:51
Note that this wasn't necessary before because the
| |
316 LOG(LS_INFO) << "WebRtcVoiceEngine::~WebRtcVoiceEngine"; | 337 audio_state_ = |
317 StopAecDump(); | 338 webrtc::AudioState::Create(MakeAudioStateConfig(voe(), audio_mixer_)); |
318 voe_wrapper_->base()->Terminate(); | 339 } |
319 webrtc::Trace::SetTraceCallback(nullptr); | 340 |
341 initialized_ = true; | |
320 } | 342 } |
321 | 343 |
322 rtc::scoped_refptr<webrtc::AudioState> | 344 rtc::scoped_refptr<webrtc::AudioState> |
323 WebRtcVoiceEngine::GetAudioState() const { | 345 WebRtcVoiceEngine::GetAudioState() const { |
324 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 346 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
325 return audio_state_; | 347 return audio_state_; |
326 } | 348 } |
327 | 349 |
328 VoiceMediaChannel* WebRtcVoiceEngine::CreateChannel( | 350 VoiceMediaChannel* WebRtcVoiceEngine::CreateChannel( |
329 webrtc::Call* call, | 351 webrtc::Call* call, |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
682 void WebRtcVoiceEngine::UnregisterChannel(WebRtcVoiceMediaChannel* channel) { | 704 void WebRtcVoiceEngine::UnregisterChannel(WebRtcVoiceMediaChannel* channel) { |
683 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 705 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
684 auto it = std::find(channels_.begin(), channels_.end(), channel); | 706 auto it = std::find(channels_.begin(), channels_.end(), channel); |
685 RTC_DCHECK(it != channels_.end()); | 707 RTC_DCHECK(it != channels_.end()); |
686 channels_.erase(it); | 708 channels_.erase(it); |
687 } | 709 } |
688 | 710 |
689 bool WebRtcVoiceEngine::StartAecDump(rtc::PlatformFile file, | 711 bool WebRtcVoiceEngine::StartAecDump(rtc::PlatformFile file, |
690 int64_t max_size_bytes) { | 712 int64_t max_size_bytes) { |
691 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 713 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
692 auto aec_dump = webrtc::AecDumpFactory::Create(file, max_size_bytes, | 714 auto aec_dump = webrtc::AecDumpFactory::Create( |
693 &low_priority_worker_queue_); | 715 file, max_size_bytes, low_priority_worker_queue_.get()); |
694 if (!aec_dump) { | 716 if (!aec_dump) { |
695 return false; | 717 return false; |
696 } | 718 } |
697 apm()->AttachAecDump(std::move(aec_dump)); | 719 apm()->AttachAecDump(std::move(aec_dump)); |
698 return true; | 720 return true; |
699 } | 721 } |
700 | 722 |
701 void WebRtcVoiceEngine::StartAecDump(const std::string& filename) { | 723 void WebRtcVoiceEngine::StartAecDump(const std::string& filename) { |
702 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 724 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
703 | 725 |
704 auto aec_dump = | 726 auto aec_dump = webrtc::AecDumpFactory::Create( |
705 webrtc::AecDumpFactory::Create(filename, -1, &low_priority_worker_queue_); | 727 filename, -1, low_priority_worker_queue_.get()); |
706 if (aec_dump) { | 728 if (aec_dump) { |
707 apm()->AttachAecDump(std::move(aec_dump)); | 729 apm()->AttachAecDump(std::move(aec_dump)); |
708 } | 730 } |
709 } | 731 } |
710 | 732 |
711 void WebRtcVoiceEngine::StopAecDump() { | 733 void WebRtcVoiceEngine::StopAecDump() { |
712 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 734 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
713 apm()->DetachAecDump(); | 735 apm()->DetachAecDump(); |
714 } | 736 } |
715 | 737 |
(...skipping 1625 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2341 ssrc); | 2363 ssrc); |
2342 if (it != unsignaled_recv_ssrcs_.end()) { | 2364 if (it != unsignaled_recv_ssrcs_.end()) { |
2343 unsignaled_recv_ssrcs_.erase(it); | 2365 unsignaled_recv_ssrcs_.erase(it); |
2344 return true; | 2366 return true; |
2345 } | 2367 } |
2346 return false; | 2368 return false; |
2347 } | 2369 } |
2348 } // namespace cricket | 2370 } // namespace cricket |
2349 | 2371 |
2350 #endif // HAVE_WEBRTC_VOICE | 2372 #endif // HAVE_WEBRTC_VOICE |
OLD | NEW |