| 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/transmit_mixer.h" | 11 #include "webrtc/voice_engine/transmit_mixer.h" | 
| 12 | 12 | 
| 13 #include "webrtc/base/format_macros.h" | 13 #include "webrtc/base/format_macros.h" | 
| 14 #include "webrtc/modules/utility/include/audio_frame_operations.h" | 14 #include "webrtc/modules/utility/include/audio_frame_operations.h" | 
| 15 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" | 15 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" | 
| 16 #include "webrtc/system_wrappers/include/event_wrapper.h" | 16 #include "webrtc/system_wrappers/include/event_wrapper.h" | 
| 17 #include "webrtc/system_wrappers/include/logging.h" | 17 #include "webrtc/system_wrappers/include/logging.h" | 
| 18 #include "webrtc/system_wrappers/include/trace.h" | 18 #include "webrtc/system_wrappers/include/trace.h" | 
| 19 #include "webrtc/voice_engine/channel.h" | 19 #include "webrtc/voice_engine/channel.h" | 
| 20 #include "webrtc/voice_engine/channel_manager.h" | 20 #include "webrtc/voice_engine/channel_manager.h" | 
| 21 #include "webrtc/voice_engine/include/voe_external_media.h" | 21 #include "webrtc/voice_engine/include/voe_external_media.h" | 
| 22 #include "webrtc/voice_engine/statistics.h" | 22 #include "webrtc/voice_engine/statistics.h" | 
| 23 #include "webrtc/voice_engine/utility.h" | 23 #include "webrtc/voice_engine/utility.h" | 
| 24 #include "webrtc/voice_engine/voe_base_impl.h" | 24 #include "webrtc/voice_engine/voe_base_impl.h" | 
| 25 | 25 | 
| 26 #define WEBRTC_ABS(a) (((a) < 0) ? -(a) : (a)) |  | 
| 27 |  | 
| 28 namespace webrtc { | 26 namespace webrtc { | 
| 29 namespace voe { | 27 namespace voe { | 
| 30 | 28 | 
| 31 // TODO(ajm): The thread safety of this is dubious... | 29 // TODO(ajm): The thread safety of this is dubious... | 
| 32 void | 30 void | 
| 33 TransmitMixer::OnPeriodicProcess() | 31 TransmitMixer::OnPeriodicProcess() | 
| 34 { | 32 { | 
| 35     WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, -1), | 33     WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, -1), | 
| 36                  "TransmitMixer::OnPeriodicProcess()"); | 34                  "TransmitMixer::OnPeriodicProcess()"); | 
| 37 | 35 | 
| 38 #if defined(WEBRTC_VOICE_ENGINE_TYPING_DETECTION) | 36 #if defined(WEBRTC_VOICE_ENGINE_TYPING_DETECTION) | 
| 39     if (_typingNoiseWarningPending) | 37     bool send_typing_noise_warning = false; | 
|  | 38     bool typing_noise_detected = false; | 
| 40     { | 39     { | 
|  | 40       CriticalSectionScoped cs(&_critSect); | 
|  | 41       if (_typingNoiseWarningPending) { | 
|  | 42         send_typing_noise_warning = true; | 
|  | 43         typing_noise_detected = _typingNoiseDetected; | 
|  | 44         _typingNoiseWarningPending = false; | 
|  | 45       } | 
|  | 46     } | 
|  | 47     if (send_typing_noise_warning) { | 
| 41         CriticalSectionScoped cs(&_callbackCritSect); | 48         CriticalSectionScoped cs(&_callbackCritSect); | 
| 42         if (_voiceEngineObserverPtr) | 49         if (_voiceEngineObserverPtr) { | 
| 43         { | 50             if (typing_noise_detected) { | 
| 44             if (_typingNoiseDetected) { |  | 
| 45                 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), | 51                 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), | 
| 46                              "TransmitMixer::OnPeriodicProcess() => " | 52                              "TransmitMixer::OnPeriodicProcess() => " | 
| 47                              "CallbackOnError(VE_TYPING_NOISE_WARNING)"); | 53                              "CallbackOnError(VE_TYPING_NOISE_WARNING)"); | 
| 48                 _voiceEngineObserverPtr->CallbackOnError( | 54                 _voiceEngineObserverPtr->CallbackOnError( | 
| 49                     -1, | 55                     -1, | 
| 50                     VE_TYPING_NOISE_WARNING); | 56                     VE_TYPING_NOISE_WARNING); | 
| 51             } else { | 57             } else { | 
| 52                 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), | 58                 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), | 
| 53                              "TransmitMixer::OnPeriodicProcess() => " | 59                              "TransmitMixer::OnPeriodicProcess() => " | 
| 54                              "CallbackOnError(VE_TYPING_NOISE_OFF_WARNING)"); | 60                              "CallbackOnError(VE_TYPING_NOISE_OFF_WARNING)"); | 
| 55                 _voiceEngineObserverPtr->CallbackOnError( | 61                 _voiceEngineObserverPtr->CallbackOnError( | 
| 56                     -1, | 62                     -1, | 
| 57                     VE_TYPING_NOISE_OFF_WARNING); | 63                     VE_TYPING_NOISE_OFF_WARNING); | 
| 58             } | 64             } | 
| 59         } | 65         } | 
| 60         _typingNoiseWarningPending = false; |  | 
| 61     } | 66     } | 
| 62 #endif | 67 #endif | 
| 63 | 68 | 
| 64     bool saturationWarning = false; | 69     bool saturationWarning = false; | 
| 65     { | 70     { | 
| 66       // Modify |_saturationWarning| under lock to avoid conflict with write op | 71       // Modify |_saturationWarning| under lock to avoid conflict with write op | 
| 67       // in ProcessAudio and also ensure that we don't hold the lock during the | 72       // in ProcessAudio and also ensure that we don't hold the lock during the | 
| 68       // callback. | 73       // callback. | 
| 69       CriticalSectionScoped cs(&_critSect); | 74       CriticalSectionScoped cs(&_critSect); | 
| 70       saturationWarning = _saturationWarning; | 75       saturationWarning = _saturationWarning; | 
| (...skipping 1201 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1272 #ifdef WEBRTC_VOICE_ENGINE_TYPING_DETECTION | 1277 #ifdef WEBRTC_VOICE_ENGINE_TYPING_DETECTION | 
| 1273 void TransmitMixer::TypingDetection(bool keyPressed) | 1278 void TransmitMixer::TypingDetection(bool keyPressed) | 
| 1274 { | 1279 { | 
| 1275   // We let the VAD determine if we're using this feature or not. | 1280   // We let the VAD determine if we're using this feature or not. | 
| 1276   if (_audioFrame.vad_activity_ == AudioFrame::kVadUnknown) { | 1281   if (_audioFrame.vad_activity_ == AudioFrame::kVadUnknown) { | 
| 1277     return; | 1282     return; | 
| 1278   } | 1283   } | 
| 1279 | 1284 | 
| 1280   bool vadActive = _audioFrame.vad_activity_ == AudioFrame::kVadActive; | 1285   bool vadActive = _audioFrame.vad_activity_ == AudioFrame::kVadActive; | 
| 1281   if (_typingDetection.Process(keyPressed, vadActive)) { | 1286   if (_typingDetection.Process(keyPressed, vadActive)) { | 
|  | 1287     CriticalSectionScoped cs(&_critSect); | 
| 1282     _typingNoiseWarningPending = true; | 1288     _typingNoiseWarningPending = true; | 
| 1283     _typingNoiseDetected = true; | 1289     _typingNoiseDetected = true; | 
| 1284   } else { | 1290   } else { | 
|  | 1291     CriticalSectionScoped cs(&_critSect); | 
| 1285     // If there is already a warning pending, do not change the state. | 1292     // If there is already a warning pending, do not change the state. | 
| 1286     // Otherwise set a warning pending if last callback was for noise detected. | 1293     // Otherwise set a warning pending if last callback was for noise detected. | 
| 1287     if (!_typingNoiseWarningPending && _typingNoiseDetected) { | 1294     if (!_typingNoiseWarningPending && _typingNoiseDetected) { | 
| 1288       _typingNoiseWarningPending = true; | 1295       _typingNoiseWarningPending = true; | 
| 1289       _typingNoiseDetected = false; | 1296       _typingNoiseDetected = false; | 
| 1290     } | 1297     } | 
| 1291   } | 1298   } | 
| 1292 } | 1299 } | 
| 1293 #endif | 1300 #endif | 
| 1294 | 1301 | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1328 void TransmitMixer::EnableStereoChannelSwapping(bool enable) { | 1335 void TransmitMixer::EnableStereoChannelSwapping(bool enable) { | 
| 1329   swap_stereo_channels_ = enable; | 1336   swap_stereo_channels_ = enable; | 
| 1330 } | 1337 } | 
| 1331 | 1338 | 
| 1332 bool TransmitMixer::IsStereoChannelSwappingEnabled() { | 1339 bool TransmitMixer::IsStereoChannelSwappingEnabled() { | 
| 1333   return swap_stereo_channels_; | 1340   return swap_stereo_channels_; | 
| 1334 } | 1341 } | 
| 1335 | 1342 | 
| 1336 }  // namespace voe | 1343 }  // namespace voe | 
| 1337 }  // namespace webrtc | 1344 }  // namespace webrtc | 
| OLD | NEW | 
|---|