| 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 |
| 11 #include "webrtc/voice_engine/voe_base_impl.h" | 11 #include "webrtc/voice_engine/voe_base_impl.h" |
| 12 | 12 |
| 13 #include "webrtc/base/format_macros.h" | 13 #include "webrtc/base/format_macros.h" |
| 14 #include "webrtc/base/logging.h" | 14 #include "webrtc/base/logging.h" |
| 15 #include "webrtc/common.h" | 15 #include "webrtc/common.h" |
| 16 #include "webrtc/common_audio/signal_processing/include/signal_processing_librar
y.h" | 16 #include "webrtc/common_audio/signal_processing/include/signal_processing_librar
y.h" |
| 17 #include "webrtc/modules/audio_coding/include/audio_coding_module.h" | 17 #include "webrtc/modules/audio_coding/include/audio_coding_module.h" |
| 18 #include "webrtc/modules/audio_device/audio_device_impl.h" | 18 #include "webrtc/modules/audio_device/audio_device_impl.h" |
| 19 #include "webrtc/modules/audio_processing/include/audio_processing.h" | 19 #include "webrtc/modules/audio_processing/include/audio_processing.h" |
| 20 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" | |
| 21 #include "webrtc/system_wrappers/include/file_wrapper.h" | 20 #include "webrtc/system_wrappers/include/file_wrapper.h" |
| 22 #include "webrtc/voice_engine/channel.h" | 21 #include "webrtc/voice_engine/channel.h" |
| 23 #include "webrtc/voice_engine/include/voe_errors.h" | 22 #include "webrtc/voice_engine/include/voe_errors.h" |
| 24 #include "webrtc/voice_engine/output_mixer.h" | 23 #include "webrtc/voice_engine/output_mixer.h" |
| 25 #include "webrtc/voice_engine/transmit_mixer.h" | 24 #include "webrtc/voice_engine/transmit_mixer.h" |
| 26 #include "webrtc/voice_engine/utility.h" | 25 #include "webrtc/voice_engine/utility.h" |
| 27 #include "webrtc/voice_engine/voice_engine_impl.h" | 26 #include "webrtc/voice_engine/voice_engine_impl.h" |
| 28 | 27 |
| 29 namespace webrtc { | 28 namespace webrtc { |
| 30 | 29 |
| 31 VoEBase* VoEBase::GetInterface(VoiceEngine* voiceEngine) { | 30 VoEBase* VoEBase::GetInterface(VoiceEngine* voiceEngine) { |
| 32 if (nullptr == voiceEngine) { | 31 if (nullptr == voiceEngine) { |
| 33 return nullptr; | 32 return nullptr; |
| 34 } | 33 } |
| 35 VoiceEngineImpl* s = static_cast<VoiceEngineImpl*>(voiceEngine); | 34 VoiceEngineImpl* s = static_cast<VoiceEngineImpl*>(voiceEngine); |
| 36 s->AddRef(); | 35 s->AddRef(); |
| 37 return s; | 36 return s; |
| 38 } | 37 } |
| 39 | 38 |
| 40 VoEBaseImpl::VoEBaseImpl(voe::SharedData* shared) | 39 VoEBaseImpl::VoEBaseImpl(voe::SharedData* shared) |
| 41 : voiceEngineObserverPtr_(nullptr), | 40 : voiceEngineObserverPtr_(nullptr), |
| 42 callbackCritSect_(*CriticalSectionWrapper::CreateCriticalSection()), | |
| 43 shared_(shared) {} | 41 shared_(shared) {} |
| 44 | 42 |
| 45 VoEBaseImpl::~VoEBaseImpl() { | 43 VoEBaseImpl::~VoEBaseImpl() { |
| 46 TerminateInternal(); | 44 TerminateInternal(); |
| 47 delete &callbackCritSect_; | |
| 48 } | 45 } |
| 49 | 46 |
| 50 void VoEBaseImpl::OnErrorIsReported(const ErrorCode error) { | 47 void VoEBaseImpl::OnErrorIsReported(const ErrorCode error) { |
| 51 CriticalSectionScoped cs(&callbackCritSect_); | 48 rtc::CritScope cs(&callbackCritSect_); |
| 52 int errCode = 0; | 49 int errCode = 0; |
| 53 if (error == AudioDeviceObserver::kRecordingError) { | 50 if (error == AudioDeviceObserver::kRecordingError) { |
| 54 errCode = VE_RUNTIME_REC_ERROR; | 51 errCode = VE_RUNTIME_REC_ERROR; |
| 55 LOG_F(LS_ERROR) << "VE_RUNTIME_REC_ERROR"; | 52 LOG_F(LS_ERROR) << "VE_RUNTIME_REC_ERROR"; |
| 56 } else if (error == AudioDeviceObserver::kPlayoutError) { | 53 } else if (error == AudioDeviceObserver::kPlayoutError) { |
| 57 errCode = VE_RUNTIME_PLAY_ERROR; | 54 errCode = VE_RUNTIME_PLAY_ERROR; |
| 58 LOG_F(LS_ERROR) << "VE_RUNTIME_PLAY_ERROR"; | 55 LOG_F(LS_ERROR) << "VE_RUNTIME_PLAY_ERROR"; |
| 59 } | 56 } |
| 60 if (voiceEngineObserverPtr_) { | 57 if (voiceEngineObserverPtr_) { |
| 61 // Deliver callback (-1 <=> no channel dependency) | 58 // Deliver callback (-1 <=> no channel dependency) |
| 62 voiceEngineObserverPtr_->CallbackOnError(-1, errCode); | 59 voiceEngineObserverPtr_->CallbackOnError(-1, errCode); |
| 63 } | 60 } |
| 64 } | 61 } |
| 65 | 62 |
| 66 void VoEBaseImpl::OnWarningIsReported(const WarningCode warning) { | 63 void VoEBaseImpl::OnWarningIsReported(const WarningCode warning) { |
| 67 CriticalSectionScoped cs(&callbackCritSect_); | 64 rtc::CritScope cs(&callbackCritSect_); |
| 68 int warningCode = 0; | 65 int warningCode = 0; |
| 69 if (warning == AudioDeviceObserver::kRecordingWarning) { | 66 if (warning == AudioDeviceObserver::kRecordingWarning) { |
| 70 warningCode = VE_RUNTIME_REC_WARNING; | 67 warningCode = VE_RUNTIME_REC_WARNING; |
| 71 LOG_F(LS_WARNING) << "VE_RUNTIME_REC_WARNING"; | 68 LOG_F(LS_WARNING) << "VE_RUNTIME_REC_WARNING"; |
| 72 } else if (warning == AudioDeviceObserver::kPlayoutWarning) { | 69 } else if (warning == AudioDeviceObserver::kPlayoutWarning) { |
| 73 warningCode = VE_RUNTIME_PLAY_WARNING; | 70 warningCode = VE_RUNTIME_PLAY_WARNING; |
| 74 LOG_F(LS_WARNING) << "VE_RUNTIME_PLAY_WARNING"; | 71 LOG_F(LS_WARNING) << "VE_RUNTIME_PLAY_WARNING"; |
| 75 } | 72 } |
| 76 if (voiceEngineObserverPtr_) { | 73 if (voiceEngineObserverPtr_) { |
| 77 // Deliver callback (-1 <=> no channel dependency) | 74 // Deliver callback (-1 <=> no channel dependency) |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 void* audio_data, int64_t* elapsed_time_ms, | 166 void* audio_data, int64_t* elapsed_time_ms, |
| 170 int64_t* ntp_time_ms) { | 167 int64_t* ntp_time_ms) { |
| 171 assert(bits_per_sample == 16); | 168 assert(bits_per_sample == 16); |
| 172 assert(number_of_frames == static_cast<size_t>(sample_rate / 100)); | 169 assert(number_of_frames == static_cast<size_t>(sample_rate / 100)); |
| 173 | 170 |
| 174 GetPlayoutData(sample_rate, number_of_channels, number_of_frames, false, | 171 GetPlayoutData(sample_rate, number_of_channels, number_of_frames, false, |
| 175 audio_data, elapsed_time_ms, ntp_time_ms); | 172 audio_data, elapsed_time_ms, ntp_time_ms); |
| 176 } | 173 } |
| 177 | 174 |
| 178 int VoEBaseImpl::RegisterVoiceEngineObserver(VoiceEngineObserver& observer) { | 175 int VoEBaseImpl::RegisterVoiceEngineObserver(VoiceEngineObserver& observer) { |
| 179 CriticalSectionScoped cs(&callbackCritSect_); | 176 rtc::CritScope cs(&callbackCritSect_); |
| 180 if (voiceEngineObserverPtr_) { | 177 if (voiceEngineObserverPtr_) { |
| 181 shared_->SetLastError( | 178 shared_->SetLastError( |
| 182 VE_INVALID_OPERATION, kTraceError, | 179 VE_INVALID_OPERATION, kTraceError, |
| 183 "RegisterVoiceEngineObserver() observer already enabled"); | 180 "RegisterVoiceEngineObserver() observer already enabled"); |
| 184 return -1; | 181 return -1; |
| 185 } | 182 } |
| 186 | 183 |
| 187 // Register the observer in all active channels | 184 // Register the observer in all active channels |
| 188 for (voe::ChannelManager::Iterator it(&shared_->channel_manager()); | 185 for (voe::ChannelManager::Iterator it(&shared_->channel_manager()); |
| 189 it.IsValid(); it.Increment()) { | 186 it.IsValid(); it.Increment()) { |
| 190 it.GetChannel()->RegisterVoiceEngineObserver(observer); | 187 it.GetChannel()->RegisterVoiceEngineObserver(observer); |
| 191 } | 188 } |
| 192 | 189 |
| 193 shared_->transmit_mixer()->RegisterVoiceEngineObserver(observer); | 190 shared_->transmit_mixer()->RegisterVoiceEngineObserver(observer); |
| 194 voiceEngineObserverPtr_ = &observer; | 191 voiceEngineObserverPtr_ = &observer; |
| 195 return 0; | 192 return 0; |
| 196 } | 193 } |
| 197 | 194 |
| 198 int VoEBaseImpl::DeRegisterVoiceEngineObserver() { | 195 int VoEBaseImpl::DeRegisterVoiceEngineObserver() { |
| 199 CriticalSectionScoped cs(&callbackCritSect_); | 196 rtc::CritScope cs(&callbackCritSect_); |
| 200 if (!voiceEngineObserverPtr_) { | 197 if (!voiceEngineObserverPtr_) { |
| 201 shared_->SetLastError( | 198 shared_->SetLastError( |
| 202 VE_INVALID_OPERATION, kTraceError, | 199 VE_INVALID_OPERATION, kTraceError, |
| 203 "DeRegisterVoiceEngineObserver() observer already disabled"); | 200 "DeRegisterVoiceEngineObserver() observer already disabled"); |
| 204 return 0; | 201 return 0; |
| 205 } | 202 } |
| 206 voiceEngineObserverPtr_ = nullptr; | 203 voiceEngineObserverPtr_ = nullptr; |
| 207 | 204 |
| 208 // Deregister the observer in all active channels | 205 // Deregister the observer in all active channels |
| 209 for (voe::ChannelManager::Iterator it(&shared_->channel_manager()); | 206 for (voe::ChannelManager::Iterator it(&shared_->channel_manager()); |
| 210 it.IsValid(); it.Increment()) { | 207 it.IsValid(); it.Increment()) { |
| 211 it.GetChannel()->DeRegisterVoiceEngineObserver(); | 208 it.GetChannel()->DeRegisterVoiceEngineObserver(); |
| 212 } | 209 } |
| 213 | 210 |
| 214 return 0; | 211 return 0; |
| 215 } | 212 } |
| 216 | 213 |
| 217 int VoEBaseImpl::Init(AudioDeviceModule* external_adm, | 214 int VoEBaseImpl::Init(AudioDeviceModule* external_adm, |
| 218 AudioProcessing* audioproc) { | 215 AudioProcessing* audioproc) { |
| 219 CriticalSectionScoped cs(shared_->crit_sec()); | 216 rtc::CritScope cs(shared_->crit_sec()); |
| 220 WebRtcSpl_Init(); | 217 WebRtcSpl_Init(); |
| 221 if (shared_->statistics().Initialized()) { | 218 if (shared_->statistics().Initialized()) { |
| 222 return 0; | 219 return 0; |
| 223 } | 220 } |
| 224 if (shared_->process_thread()) { | 221 if (shared_->process_thread()) { |
| 225 shared_->process_thread()->Start(); | 222 shared_->process_thread()->Start(); |
| 226 } | 223 } |
| 227 | 224 |
| 228 // Create an internal ADM if the user has not added an external | 225 // Create an internal ADM if the user has not added an external |
| 229 // ADM implementation as input to Init(). | 226 // ADM implementation as input to Init(). |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 375 shared_->SetLastError(VE_AUDIO_DEVICE_MODULE_ERROR); | 372 shared_->SetLastError(VE_AUDIO_DEVICE_MODULE_ERROR); |
| 376 // TODO(ajm): No error return here due to | 373 // TODO(ajm): No error return here due to |
| 377 // https://code.google.com/p/webrtc/issues/detail?id=1464 | 374 // https://code.google.com/p/webrtc/issues/detail?id=1464 |
| 378 } | 375 } |
| 379 #endif | 376 #endif |
| 380 | 377 |
| 381 return shared_->statistics().SetInitialized(); | 378 return shared_->statistics().SetInitialized(); |
| 382 } | 379 } |
| 383 | 380 |
| 384 int VoEBaseImpl::Terminate() { | 381 int VoEBaseImpl::Terminate() { |
| 385 CriticalSectionScoped cs(shared_->crit_sec()); | 382 rtc::CritScope cs(shared_->crit_sec()); |
| 386 return TerminateInternal(); | 383 return TerminateInternal(); |
| 387 } | 384 } |
| 388 | 385 |
| 389 int VoEBaseImpl::CreateChannel() { | 386 int VoEBaseImpl::CreateChannel() { |
| 390 CriticalSectionScoped cs(shared_->crit_sec()); | 387 rtc::CritScope cs(shared_->crit_sec()); |
| 391 if (!shared_->statistics().Initialized()) { | 388 if (!shared_->statistics().Initialized()) { |
| 392 shared_->SetLastError(VE_NOT_INITED, kTraceError); | 389 shared_->SetLastError(VE_NOT_INITED, kTraceError); |
| 393 return -1; | 390 return -1; |
| 394 } | 391 } |
| 395 | 392 |
| 396 voe::ChannelOwner channel_owner = shared_->channel_manager().CreateChannel(); | 393 voe::ChannelOwner channel_owner = shared_->channel_manager().CreateChannel(); |
| 397 return InitializeChannel(&channel_owner); | 394 return InitializeChannel(&channel_owner); |
| 398 } | 395 } |
| 399 | 396 |
| 400 int VoEBaseImpl::CreateChannel(const Config& config) { | 397 int VoEBaseImpl::CreateChannel(const Config& config) { |
| 401 CriticalSectionScoped cs(shared_->crit_sec()); | 398 rtc::CritScope cs(shared_->crit_sec()); |
| 402 if (!shared_->statistics().Initialized()) { | 399 if (!shared_->statistics().Initialized()) { |
| 403 shared_->SetLastError(VE_NOT_INITED, kTraceError); | 400 shared_->SetLastError(VE_NOT_INITED, kTraceError); |
| 404 return -1; | 401 return -1; |
| 405 } | 402 } |
| 406 voe::ChannelOwner channel_owner = | 403 voe::ChannelOwner channel_owner = |
| 407 shared_->channel_manager().CreateChannel(config); | 404 shared_->channel_manager().CreateChannel(config); |
| 408 return InitializeChannel(&channel_owner); | 405 return InitializeChannel(&channel_owner); |
| 409 } | 406 } |
| 410 | 407 |
| 411 int VoEBaseImpl::InitializeChannel(voe::ChannelOwner* channel_owner) { | 408 int VoEBaseImpl::InitializeChannel(voe::ChannelOwner* channel_owner) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 427 "CreateChannel() failed to initialize channel. Destroying" | 424 "CreateChannel() failed to initialize channel. Destroying" |
| 428 " channel."); | 425 " channel."); |
| 429 shared_->channel_manager().DestroyChannel( | 426 shared_->channel_manager().DestroyChannel( |
| 430 channel_owner->channel()->ChannelId()); | 427 channel_owner->channel()->ChannelId()); |
| 431 return -1; | 428 return -1; |
| 432 } | 429 } |
| 433 return channel_owner->channel()->ChannelId(); | 430 return channel_owner->channel()->ChannelId(); |
| 434 } | 431 } |
| 435 | 432 |
| 436 int VoEBaseImpl::DeleteChannel(int channel) { | 433 int VoEBaseImpl::DeleteChannel(int channel) { |
| 437 CriticalSectionScoped cs(shared_->crit_sec()); | 434 rtc::CritScope cs(shared_->crit_sec()); |
| 438 if (!shared_->statistics().Initialized()) { | 435 if (!shared_->statistics().Initialized()) { |
| 439 shared_->SetLastError(VE_NOT_INITED, kTraceError); | 436 shared_->SetLastError(VE_NOT_INITED, kTraceError); |
| 440 return -1; | 437 return -1; |
| 441 } | 438 } |
| 442 | 439 |
| 443 { | 440 { |
| 444 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); | 441 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); |
| 445 voe::Channel* channelPtr = ch.channel(); | 442 voe::Channel* channelPtr = ch.channel(); |
| 446 if (channelPtr == nullptr) { | 443 if (channelPtr == nullptr) { |
| 447 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, | 444 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, |
| 448 "DeleteChannel() failed to locate channel"); | 445 "DeleteChannel() failed to locate channel"); |
| 449 return -1; | 446 return -1; |
| 450 } | 447 } |
| 451 } | 448 } |
| 452 | 449 |
| 453 shared_->channel_manager().DestroyChannel(channel); | 450 shared_->channel_manager().DestroyChannel(channel); |
| 454 if (StopSend() != 0) { | 451 if (StopSend() != 0) { |
| 455 return -1; | 452 return -1; |
| 456 } | 453 } |
| 457 if (StopPlayout() != 0) { | 454 if (StopPlayout() != 0) { |
| 458 return -1; | 455 return -1; |
| 459 } | 456 } |
| 460 return 0; | 457 return 0; |
| 461 } | 458 } |
| 462 | 459 |
| 463 int VoEBaseImpl::StartReceive(int channel) { | 460 int VoEBaseImpl::StartReceive(int channel) { |
| 464 CriticalSectionScoped cs(shared_->crit_sec()); | 461 rtc::CritScope cs(shared_->crit_sec()); |
| 465 if (!shared_->statistics().Initialized()) { | 462 if (!shared_->statistics().Initialized()) { |
| 466 shared_->SetLastError(VE_NOT_INITED, kTraceError); | 463 shared_->SetLastError(VE_NOT_INITED, kTraceError); |
| 467 return -1; | 464 return -1; |
| 468 } | 465 } |
| 469 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); | 466 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); |
| 470 voe::Channel* channelPtr = ch.channel(); | 467 voe::Channel* channelPtr = ch.channel(); |
| 471 if (channelPtr == nullptr) { | 468 if (channelPtr == nullptr) { |
| 472 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, | 469 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, |
| 473 "StartReceive() failed to locate channel"); | 470 "StartReceive() failed to locate channel"); |
| 474 return -1; | 471 return -1; |
| 475 } | 472 } |
| 476 return channelPtr->StartReceiving(); | 473 return channelPtr->StartReceiving(); |
| 477 } | 474 } |
| 478 | 475 |
| 479 int VoEBaseImpl::StopReceive(int channel) { | 476 int VoEBaseImpl::StopReceive(int channel) { |
| 480 CriticalSectionScoped cs(shared_->crit_sec()); | 477 rtc::CritScope cs(shared_->crit_sec()); |
| 481 if (!shared_->statistics().Initialized()) { | 478 if (!shared_->statistics().Initialized()) { |
| 482 shared_->SetLastError(VE_NOT_INITED, kTraceError); | 479 shared_->SetLastError(VE_NOT_INITED, kTraceError); |
| 483 return -1; | 480 return -1; |
| 484 } | 481 } |
| 485 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); | 482 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); |
| 486 voe::Channel* channelPtr = ch.channel(); | 483 voe::Channel* channelPtr = ch.channel(); |
| 487 if (channelPtr == nullptr) { | 484 if (channelPtr == nullptr) { |
| 488 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, | 485 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, |
| 489 "SetLocalReceiver() failed to locate channel"); | 486 "SetLocalReceiver() failed to locate channel"); |
| 490 return -1; | 487 return -1; |
| 491 } | 488 } |
| 492 return channelPtr->StopReceiving(); | 489 return channelPtr->StopReceiving(); |
| 493 } | 490 } |
| 494 | 491 |
| 495 int VoEBaseImpl::StartPlayout(int channel) { | 492 int VoEBaseImpl::StartPlayout(int channel) { |
| 496 CriticalSectionScoped cs(shared_->crit_sec()); | 493 rtc::CritScope cs(shared_->crit_sec()); |
| 497 if (!shared_->statistics().Initialized()) { | 494 if (!shared_->statistics().Initialized()) { |
| 498 shared_->SetLastError(VE_NOT_INITED, kTraceError); | 495 shared_->SetLastError(VE_NOT_INITED, kTraceError); |
| 499 return -1; | 496 return -1; |
| 500 } | 497 } |
| 501 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); | 498 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); |
| 502 voe::Channel* channelPtr = ch.channel(); | 499 voe::Channel* channelPtr = ch.channel(); |
| 503 if (channelPtr == nullptr) { | 500 if (channelPtr == nullptr) { |
| 504 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, | 501 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, |
| 505 "StartPlayout() failed to locate channel"); | 502 "StartPlayout() failed to locate channel"); |
| 506 return -1; | 503 return -1; |
| 507 } | 504 } |
| 508 if (channelPtr->Playing()) { | 505 if (channelPtr->Playing()) { |
| 509 return 0; | 506 return 0; |
| 510 } | 507 } |
| 511 if (StartPlayout() != 0) { | 508 if (StartPlayout() != 0) { |
| 512 shared_->SetLastError(VE_AUDIO_DEVICE_MODULE_ERROR, kTraceError, | 509 shared_->SetLastError(VE_AUDIO_DEVICE_MODULE_ERROR, kTraceError, |
| 513 "StartPlayout() failed to start playout"); | 510 "StartPlayout() failed to start playout"); |
| 514 return -1; | 511 return -1; |
| 515 } | 512 } |
| 516 return channelPtr->StartPlayout(); | 513 return channelPtr->StartPlayout(); |
| 517 } | 514 } |
| 518 | 515 |
| 519 int VoEBaseImpl::StopPlayout(int channel) { | 516 int VoEBaseImpl::StopPlayout(int channel) { |
| 520 CriticalSectionScoped cs(shared_->crit_sec()); | 517 rtc::CritScope cs(shared_->crit_sec()); |
| 521 if (!shared_->statistics().Initialized()) { | 518 if (!shared_->statistics().Initialized()) { |
| 522 shared_->SetLastError(VE_NOT_INITED, kTraceError); | 519 shared_->SetLastError(VE_NOT_INITED, kTraceError); |
| 523 return -1; | 520 return -1; |
| 524 } | 521 } |
| 525 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); | 522 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); |
| 526 voe::Channel* channelPtr = ch.channel(); | 523 voe::Channel* channelPtr = ch.channel(); |
| 527 if (channelPtr == nullptr) { | 524 if (channelPtr == nullptr) { |
| 528 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, | 525 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, |
| 529 "StopPlayout() failed to locate channel"); | 526 "StopPlayout() failed to locate channel"); |
| 530 return -1; | 527 return -1; |
| 531 } | 528 } |
| 532 if (channelPtr->StopPlayout() != 0) { | 529 if (channelPtr->StopPlayout() != 0) { |
| 533 LOG_F(LS_WARNING) << "StopPlayout() failed to stop playout for channel " | 530 LOG_F(LS_WARNING) << "StopPlayout() failed to stop playout for channel " |
| 534 << channel; | 531 << channel; |
| 535 } | 532 } |
| 536 return StopPlayout(); | 533 return StopPlayout(); |
| 537 } | 534 } |
| 538 | 535 |
| 539 int VoEBaseImpl::StartSend(int channel) { | 536 int VoEBaseImpl::StartSend(int channel) { |
| 540 CriticalSectionScoped cs(shared_->crit_sec()); | 537 rtc::CritScope cs(shared_->crit_sec()); |
| 541 if (!shared_->statistics().Initialized()) { | 538 if (!shared_->statistics().Initialized()) { |
| 542 shared_->SetLastError(VE_NOT_INITED, kTraceError); | 539 shared_->SetLastError(VE_NOT_INITED, kTraceError); |
| 543 return -1; | 540 return -1; |
| 544 } | 541 } |
| 545 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); | 542 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); |
| 546 voe::Channel* channelPtr = ch.channel(); | 543 voe::Channel* channelPtr = ch.channel(); |
| 547 if (channelPtr == nullptr) { | 544 if (channelPtr == nullptr) { |
| 548 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, | 545 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, |
| 549 "StartSend() failed to locate channel"); | 546 "StartSend() failed to locate channel"); |
| 550 return -1; | 547 return -1; |
| 551 } | 548 } |
| 552 if (channelPtr->Sending()) { | 549 if (channelPtr->Sending()) { |
| 553 return 0; | 550 return 0; |
| 554 } | 551 } |
| 555 if (StartSend() != 0) { | 552 if (StartSend() != 0) { |
| 556 shared_->SetLastError(VE_AUDIO_DEVICE_MODULE_ERROR, kTraceError, | 553 shared_->SetLastError(VE_AUDIO_DEVICE_MODULE_ERROR, kTraceError, |
| 557 "StartSend() failed to start recording"); | 554 "StartSend() failed to start recording"); |
| 558 return -1; | 555 return -1; |
| 559 } | 556 } |
| 560 return channelPtr->StartSend(); | 557 return channelPtr->StartSend(); |
| 561 } | 558 } |
| 562 | 559 |
| 563 int VoEBaseImpl::StopSend(int channel) { | 560 int VoEBaseImpl::StopSend(int channel) { |
| 564 CriticalSectionScoped cs(shared_->crit_sec()); | 561 rtc::CritScope cs(shared_->crit_sec()); |
| 565 if (!shared_->statistics().Initialized()) { | 562 if (!shared_->statistics().Initialized()) { |
| 566 shared_->SetLastError(VE_NOT_INITED, kTraceError); | 563 shared_->SetLastError(VE_NOT_INITED, kTraceError); |
| 567 return -1; | 564 return -1; |
| 568 } | 565 } |
| 569 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); | 566 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); |
| 570 voe::Channel* channelPtr = ch.channel(); | 567 voe::Channel* channelPtr = ch.channel(); |
| 571 if (channelPtr == nullptr) { | 568 if (channelPtr == nullptr) { |
| 572 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, | 569 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, |
| 573 "StopSend() failed to locate channel"); | 570 "StopSend() failed to locate channel"); |
| 574 return -1; | 571 return -1; |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 788 // Deliver audio (PCM) samples to the ADM | 785 // Deliver audio (PCM) samples to the ADM |
| 789 memcpy(audio_data, audioFrame_.data_, | 786 memcpy(audio_data, audioFrame_.data_, |
| 790 sizeof(int16_t) * number_of_frames * number_of_channels); | 787 sizeof(int16_t) * number_of_frames * number_of_channels); |
| 791 | 788 |
| 792 *elapsed_time_ms = audioFrame_.elapsed_time_ms_; | 789 *elapsed_time_ms = audioFrame_.elapsed_time_ms_; |
| 793 *ntp_time_ms = audioFrame_.ntp_time_ms_; | 790 *ntp_time_ms = audioFrame_.ntp_time_ms_; |
| 794 } | 791 } |
| 795 | 792 |
| 796 int VoEBaseImpl::AssociateSendChannel(int channel, | 793 int VoEBaseImpl::AssociateSendChannel(int channel, |
| 797 int accociate_send_channel) { | 794 int accociate_send_channel) { |
| 798 CriticalSectionScoped cs(shared_->crit_sec()); | 795 rtc::CritScope cs(shared_->crit_sec()); |
| 799 | 796 |
| 800 if (!shared_->statistics().Initialized()) { | 797 if (!shared_->statistics().Initialized()) { |
| 801 shared_->SetLastError(VE_NOT_INITED, kTraceError); | 798 shared_->SetLastError(VE_NOT_INITED, kTraceError); |
| 802 return -1; | 799 return -1; |
| 803 } | 800 } |
| 804 | 801 |
| 805 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); | 802 voe::ChannelOwner ch = shared_->channel_manager().GetChannel(channel); |
| 806 voe::Channel* channel_ptr = ch.channel(); | 803 voe::Channel* channel_ptr = ch.channel(); |
| 807 if (channel_ptr == NULL) { | 804 if (channel_ptr == NULL) { |
| 808 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, | 805 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, |
| 809 "AssociateSendChannel() failed to locate channel"); | 806 "AssociateSendChannel() failed to locate channel"); |
| 810 return -1; | 807 return -1; |
| 811 } | 808 } |
| 812 | 809 |
| 813 ch = shared_->channel_manager().GetChannel(accociate_send_channel); | 810 ch = shared_->channel_manager().GetChannel(accociate_send_channel); |
| 814 voe::Channel* accociate_send_channel_ptr = ch.channel(); | 811 voe::Channel* accociate_send_channel_ptr = ch.channel(); |
| 815 if (accociate_send_channel_ptr == NULL) { | 812 if (accociate_send_channel_ptr == NULL) { |
| 816 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, | 813 shared_->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, |
| 817 "AssociateSendChannel() failed to locate accociate_send_channel"); | 814 "AssociateSendChannel() failed to locate accociate_send_channel"); |
| 818 return -1; | 815 return -1; |
| 819 } | 816 } |
| 820 | 817 |
| 821 channel_ptr->set_associate_send_channel(ch); | 818 channel_ptr->set_associate_send_channel(ch); |
| 822 return 0; | 819 return 0; |
| 823 } | 820 } |
| 824 | 821 |
| 825 } // namespace webrtc | 822 } // namespace webrtc |
| OLD | NEW |