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 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 return rtc::Optional<int>(std::min(bps, spec.info.max_bitrate_bps)); | 206 return rtc::Optional<int>(std::min(bps, spec.info.max_bitrate_bps)); |
207 } | 207 } |
208 } | 208 } |
209 | 209 |
210 } // namespace | 210 } // namespace |
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 rtc::TaskQueue* low_priority_worker_queue) |
217 : WebRtcVoiceEngine(adm, | 218 : WebRtcVoiceEngine(adm, |
218 encoder_factory, | 219 encoder_factory, |
219 decoder_factory, | 220 decoder_factory, |
220 audio_mixer, | 221 audio_mixer, |
| 222 low_priority_worker_queue, |
221 new VoEWrapper()) { | 223 new VoEWrapper()) { |
222 audio_state_ = | 224 audio_state_ = |
223 webrtc::AudioState::Create(MakeAudioStateConfig(voe(), audio_mixer)); | 225 webrtc::AudioState::Create(MakeAudioStateConfig(voe(), audio_mixer)); |
224 } | 226 } |
225 | 227 |
226 WebRtcVoiceEngine::WebRtcVoiceEngine( | 228 WebRtcVoiceEngine::WebRtcVoiceEngine( |
227 webrtc::AudioDeviceModule* adm, | 229 webrtc::AudioDeviceModule* adm, |
228 const rtc::scoped_refptr<webrtc::AudioEncoderFactory>& encoder_factory, | 230 const rtc::scoped_refptr<webrtc::AudioEncoderFactory>& encoder_factory, |
229 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory, | 231 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>& decoder_factory, |
230 rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer, | 232 rtc::scoped_refptr<webrtc::AudioMixer> audio_mixer, |
| 233 rtc::TaskQueue* low_priority_worker_queue, |
231 VoEWrapper* voe_wrapper) | 234 VoEWrapper* voe_wrapper) |
232 : low_priority_worker_queue_("low-prio-worker-queue", | 235 : adm_(adm), |
233 rtc::TaskQueue::Priority::LOW), | |
234 adm_(adm), | |
235 encoder_factory_(encoder_factory), | 236 encoder_factory_(encoder_factory), |
236 decoder_factory_(decoder_factory), | 237 decoder_factory_(decoder_factory), |
237 voe_wrapper_(voe_wrapper) { | 238 voe_wrapper_(voe_wrapper), |
| 239 low_priority_worker_queue_(low_priority_worker_queue) { |
238 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 240 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
239 LOG(LS_INFO) << "WebRtcVoiceEngine::WebRtcVoiceEngine"; | 241 LOG(LS_INFO) << "WebRtcVoiceEngine::WebRtcVoiceEngine"; |
240 RTC_DCHECK(voe_wrapper); | 242 RTC_DCHECK(voe_wrapper); |
241 RTC_DCHECK(decoder_factory); | 243 RTC_DCHECK(decoder_factory); |
| 244 RTC_DCHECK(low_priority_worker_queue); |
242 | 245 |
243 signal_thread_checker_.DetachFromThread(); | 246 signal_thread_checker_.DetachFromThread(); |
244 | 247 |
245 // Load our audio codec lists. | 248 // Load our audio codec lists. |
246 LOG(LS_INFO) << "Supported send codecs in order of preference:"; | 249 LOG(LS_INFO) << "Supported send codecs in order of preference:"; |
247 send_codecs_ = CollectCodecs(encoder_factory_->GetSupportedEncoders()); | 250 send_codecs_ = CollectCodecs(encoder_factory_->GetSupportedEncoders()); |
248 for (const AudioCodec& codec : send_codecs_) { | 251 for (const AudioCodec& codec : send_codecs_) { |
249 LOG(LS_INFO) << ToString(codec); | 252 LOG(LS_INFO) << ToString(codec); |
250 } | 253 } |
251 | 254 |
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
653 void WebRtcVoiceEngine::UnregisterChannel(WebRtcVoiceMediaChannel* channel) { | 656 void WebRtcVoiceEngine::UnregisterChannel(WebRtcVoiceMediaChannel* channel) { |
654 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 657 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
655 auto it = std::find(channels_.begin(), channels_.end(), channel); | 658 auto it = std::find(channels_.begin(), channels_.end(), channel); |
656 RTC_DCHECK(it != channels_.end()); | 659 RTC_DCHECK(it != channels_.end()); |
657 channels_.erase(it); | 660 channels_.erase(it); |
658 } | 661 } |
659 | 662 |
660 bool WebRtcVoiceEngine::StartAecDump(rtc::PlatformFile file, | 663 bool WebRtcVoiceEngine::StartAecDump(rtc::PlatformFile file, |
661 int64_t max_size_bytes) { | 664 int64_t max_size_bytes) { |
662 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 665 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
| 666 RTC_DCHECK(low_priority_worker_queue_); |
663 auto aec_dump = webrtc::AecDumpFactory::Create(file, max_size_bytes, | 667 auto aec_dump = webrtc::AecDumpFactory::Create(file, max_size_bytes, |
664 &low_priority_worker_queue_); | 668 low_priority_worker_queue_); |
665 if (aec_dump) { | 669 if (aec_dump) { |
666 apm()->AttachAecDump(std::move(aec_dump)); | 670 apm()->AttachAecDump(std::move(aec_dump)); |
667 } | 671 } |
668 return !!aec_dump; | 672 return !!aec_dump; |
669 } | 673 } |
670 | 674 |
671 void WebRtcVoiceEngine::StartAecDump(const std::string& filename) { | 675 void WebRtcVoiceEngine::StartAecDump(const std::string& filename) { |
672 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 676 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
| 677 RTC_DCHECK(low_priority_worker_queue_); |
673 | 678 |
674 auto aec_dump = | 679 auto aec_dump = |
675 webrtc::AecDumpFactory::Create(filename, -1, &low_priority_worker_queue_); | 680 webrtc::AecDumpFactory::Create(filename, -1, low_priority_worker_queue_); |
676 if (aec_dump) { | 681 if (aec_dump) { |
677 apm()->AttachAecDump(std::move(aec_dump)); | 682 apm()->AttachAecDump(std::move(aec_dump)); |
678 } | 683 } |
679 } | 684 } |
680 | 685 |
681 void WebRtcVoiceEngine::StopAecDump() { | 686 void WebRtcVoiceEngine::StopAecDump() { |
682 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); | 687 RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
683 apm()->DetachAecDump(); | 688 apm()->DetachAecDump(); |
684 } | 689 } |
685 | 690 |
(...skipping 1625 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2311 ssrc); | 2316 ssrc); |
2312 if (it != unsignaled_recv_ssrcs_.end()) { | 2317 if (it != unsignaled_recv_ssrcs_.end()) { |
2313 unsignaled_recv_ssrcs_.erase(it); | 2318 unsignaled_recv_ssrcs_.erase(it); |
2314 return true; | 2319 return true; |
2315 } | 2320 } |
2316 return false; | 2321 return false; |
2317 } | 2322 } |
2318 } // namespace cricket | 2323 } // namespace cricket |
2319 | 2324 |
2320 #endif // HAVE_WEBRTC_VOICE | 2325 #endif // HAVE_WEBRTC_VOICE |
OLD | NEW |