OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 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 17 matching lines...) Expand all Loading... |
28 VoEBase* VoEBase::GetInterface(VoiceEngine* voiceEngine) { | 28 VoEBase* VoEBase::GetInterface(VoiceEngine* voiceEngine) { |
29 if (nullptr == voiceEngine) { | 29 if (nullptr == voiceEngine) { |
30 return nullptr; | 30 return nullptr; |
31 } | 31 } |
32 VoiceEngineImpl* s = static_cast<VoiceEngineImpl*>(voiceEngine); | 32 VoiceEngineImpl* s = static_cast<VoiceEngineImpl*>(voiceEngine); |
33 s->AddRef(); | 33 s->AddRef(); |
34 return s; | 34 return s; |
35 } | 35 } |
36 | 36 |
37 VoEBaseImpl::VoEBaseImpl(voe::SharedData* shared) | 37 VoEBaseImpl::VoEBaseImpl(voe::SharedData* shared) |
38 : voiceEngineObserverPtr_(nullptr), | 38 : shared_(shared) {} |
39 shared_(shared) {} | |
40 | 39 |
41 VoEBaseImpl::~VoEBaseImpl() { | 40 VoEBaseImpl::~VoEBaseImpl() { |
42 TerminateInternal(); | 41 TerminateInternal(); |
43 } | 42 } |
44 | 43 |
45 void VoEBaseImpl::OnErrorIsReported(const ErrorCode error) { | 44 void VoEBaseImpl::OnErrorIsReported(const ErrorCode error) { |
46 rtc::CritScope cs(&callbackCritSect_); | 45 rtc::CritScope cs(&callbackCritSect_); |
47 int errCode = 0; | |
48 if (error == AudioDeviceObserver::kRecordingError) { | 46 if (error == AudioDeviceObserver::kRecordingError) { |
49 errCode = VE_RUNTIME_REC_ERROR; | |
50 LOG_F(LS_ERROR) << "VE_RUNTIME_REC_ERROR"; | 47 LOG_F(LS_ERROR) << "VE_RUNTIME_REC_ERROR"; |
51 } else if (error == AudioDeviceObserver::kPlayoutError) { | 48 } else if (error == AudioDeviceObserver::kPlayoutError) { |
52 errCode = VE_RUNTIME_PLAY_ERROR; | |
53 LOG_F(LS_ERROR) << "VE_RUNTIME_PLAY_ERROR"; | 49 LOG_F(LS_ERROR) << "VE_RUNTIME_PLAY_ERROR"; |
54 } | 50 } |
55 if (voiceEngineObserverPtr_) { | |
56 // Deliver callback (-1 <=> no channel dependency) | |
57 voiceEngineObserverPtr_->CallbackOnError(-1, errCode); | |
58 } | |
59 } | 51 } |
60 | 52 |
61 void VoEBaseImpl::OnWarningIsReported(const WarningCode warning) { | 53 void VoEBaseImpl::OnWarningIsReported(const WarningCode warning) { |
62 rtc::CritScope cs(&callbackCritSect_); | 54 rtc::CritScope cs(&callbackCritSect_); |
63 int warningCode = 0; | |
64 if (warning == AudioDeviceObserver::kRecordingWarning) { | 55 if (warning == AudioDeviceObserver::kRecordingWarning) { |
65 warningCode = VE_RUNTIME_REC_WARNING; | |
66 LOG_F(LS_WARNING) << "VE_RUNTIME_REC_WARNING"; | 56 LOG_F(LS_WARNING) << "VE_RUNTIME_REC_WARNING"; |
67 } else if (warning == AudioDeviceObserver::kPlayoutWarning) { | 57 } else if (warning == AudioDeviceObserver::kPlayoutWarning) { |
68 warningCode = VE_RUNTIME_PLAY_WARNING; | |
69 LOG_F(LS_WARNING) << "VE_RUNTIME_PLAY_WARNING"; | 58 LOG_F(LS_WARNING) << "VE_RUNTIME_PLAY_WARNING"; |
70 } | 59 } |
71 if (voiceEngineObserverPtr_) { | |
72 // Deliver callback (-1 <=> no channel dependency) | |
73 voiceEngineObserverPtr_->CallbackOnError(-1, warningCode); | |
74 } | |
75 } | 60 } |
76 | 61 |
77 int32_t VoEBaseImpl::RecordedDataIsAvailable( | 62 int32_t VoEBaseImpl::RecordedDataIsAvailable( |
78 const void* audio_data, | 63 const void* audio_data, |
79 const size_t number_of_frames, | 64 const size_t number_of_frames, |
80 const size_t bytes_per_sample, | 65 const size_t bytes_per_sample, |
81 const size_t number_of_channels, | 66 const size_t number_of_channels, |
82 const uint32_t sample_rate, | 67 const uint32_t sample_rate, |
83 const uint32_t audio_delay_milliseconds, | 68 const uint32_t audio_delay_milliseconds, |
84 const int32_t clock_drift, | 69 const int32_t clock_drift, |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 | 153 |
169 void VoEBaseImpl::PullRenderData(int bits_per_sample, | 154 void VoEBaseImpl::PullRenderData(int bits_per_sample, |
170 int sample_rate, | 155 int sample_rate, |
171 size_t number_of_channels, | 156 size_t number_of_channels, |
172 size_t number_of_frames, | 157 size_t number_of_frames, |
173 void* audio_data, int64_t* elapsed_time_ms, | 158 void* audio_data, int64_t* elapsed_time_ms, |
174 int64_t* ntp_time_ms) { | 159 int64_t* ntp_time_ms) { |
175 RTC_NOTREACHED(); | 160 RTC_NOTREACHED(); |
176 } | 161 } |
177 | 162 |
178 int VoEBaseImpl::RegisterVoiceEngineObserver(VoiceEngineObserver& observer) { | |
179 rtc::CritScope cs(&callbackCritSect_); | |
180 if (voiceEngineObserverPtr_) { | |
181 shared_->SetLastError( | |
182 VE_INVALID_OPERATION, kTraceError, | |
183 "RegisterVoiceEngineObserver() observer already enabled"); | |
184 return -1; | |
185 } | |
186 | |
187 // Register the observer in all active channels | |
188 for (voe::ChannelManager::Iterator it(&shared_->channel_manager()); | |
189 it.IsValid(); it.Increment()) { | |
190 it.GetChannel()->RegisterVoiceEngineObserver(observer); | |
191 } | |
192 | |
193 shared_->transmit_mixer()->RegisterVoiceEngineObserver(observer); | |
194 voiceEngineObserverPtr_ = &observer; | |
195 return 0; | |
196 } | |
197 | |
198 int VoEBaseImpl::DeRegisterVoiceEngineObserver() { | |
199 rtc::CritScope cs(&callbackCritSect_); | |
200 if (!voiceEngineObserverPtr_) { | |
201 shared_->SetLastError( | |
202 VE_INVALID_OPERATION, kTraceError, | |
203 "DeRegisterVoiceEngineObserver() observer already disabled"); | |
204 return 0; | |
205 } | |
206 voiceEngineObserverPtr_ = nullptr; | |
207 | |
208 // Deregister the observer in all active channels | |
209 for (voe::ChannelManager::Iterator it(&shared_->channel_manager()); | |
210 it.IsValid(); it.Increment()) { | |
211 it.GetChannel()->DeRegisterVoiceEngineObserver(); | |
212 } | |
213 | |
214 return 0; | |
215 } | |
216 | |
217 int VoEBaseImpl::Init( | 163 int VoEBaseImpl::Init( |
218 AudioDeviceModule* external_adm, | 164 AudioDeviceModule* external_adm, |
219 AudioProcessing* audio_processing, | 165 AudioProcessing* audio_processing, |
220 const rtc::scoped_refptr<AudioDecoderFactory>& decoder_factory) { | 166 const rtc::scoped_refptr<AudioDecoderFactory>& decoder_factory) { |
221 RTC_DCHECK(audio_processing); | 167 RTC_DCHECK(audio_processing); |
222 rtc::CritScope cs(shared_->crit_sec()); | 168 rtc::CritScope cs(shared_->crit_sec()); |
223 WebRtcSpl_Init(); | 169 WebRtcSpl_Init(); |
224 if (shared_->statistics().Initialized()) { | 170 if (shared_->statistics().Initialized()) { |
225 return 0; | 171 return 0; |
226 } | 172 } |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 config_copy.acm_config.decoder_factory = decoder_factory_; | 350 config_copy.acm_config.decoder_factory = decoder_factory_; |
405 voe::ChannelOwner channel_owner = | 351 voe::ChannelOwner channel_owner = |
406 shared_->channel_manager().CreateChannel(config_copy); | 352 shared_->channel_manager().CreateChannel(config_copy); |
407 return InitializeChannel(&channel_owner); | 353 return InitializeChannel(&channel_owner); |
408 } | 354 } |
409 | 355 |
410 int VoEBaseImpl::InitializeChannel(voe::ChannelOwner* channel_owner) { | 356 int VoEBaseImpl::InitializeChannel(voe::ChannelOwner* channel_owner) { |
411 if (channel_owner->channel()->SetEngineInformation( | 357 if (channel_owner->channel()->SetEngineInformation( |
412 shared_->statistics(), | 358 shared_->statistics(), |
413 *shared_->process_thread(), *shared_->audio_device(), | 359 *shared_->process_thread(), *shared_->audio_device(), |
414 voiceEngineObserverPtr_, &callbackCritSect_, | 360 &callbackCritSect_, shared_->encoder_queue()) != 0) { |
415 shared_->encoder_queue()) != 0) { | |
416 shared_->SetLastError( | 361 shared_->SetLastError( |
417 VE_CHANNEL_NOT_CREATED, kTraceError, | 362 VE_CHANNEL_NOT_CREATED, kTraceError, |
418 "CreateChannel() failed to associate engine and channel." | 363 "CreateChannel() failed to associate engine and channel." |
419 " Destroying channel."); | 364 " Destroying channel."); |
420 shared_->channel_manager().DestroyChannel( | 365 shared_->channel_manager().DestroyChannel( |
421 channel_owner->channel()->ChannelId()); | 366 channel_owner->channel()->ChannelId()); |
422 return -1; | 367 return -1; |
423 } else if (channel_owner->channel()->Init() != 0) { | 368 } else if (channel_owner->channel()->Init() != 0) { |
424 shared_->SetLastError( | 369 shared_->SetLastError( |
425 VE_CHANNEL_NOT_CREATED, kTraceError, | 370 VE_CHANNEL_NOT_CREATED, kTraceError, |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
638 "TerminateInternal() failed to terminate the ADM"); | 583 "TerminateInternal() failed to terminate the ADM"); |
639 } | 584 } |
640 shared_->set_audio_device(nullptr); | 585 shared_->set_audio_device(nullptr); |
641 } | 586 } |
642 | 587 |
643 shared_->set_audio_processing(nullptr); | 588 shared_->set_audio_processing(nullptr); |
644 | 589 |
645 return shared_->statistics().SetUnInitialized(); | 590 return shared_->statistics().SetUnInitialized(); |
646 } | 591 } |
647 } // namespace webrtc | 592 } // namespace webrtc |
OLD | NEW |