1 /* 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "webrtc/modules/audio_processing/level_estimator_impl.h" 12 13 #include "webrtc/modules/audio_processing/audio_buffer.h" 14 #include "webrtc/modules/audio_processing/rms_level.h" 15 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" 16 17 namespace webrtc { 18 LevelEstimatorImpl(rtc::CriticalSection * crit)19LevelEstimatorImpl::LevelEstimatorImpl(rtc::CriticalSection* crit) 20 : crit_(crit), rms_(new RMSLevel()) { 21 RTC_DCHECK(crit); 22 } 23 ~LevelEstimatorImpl()24LevelEstimatorImpl::~LevelEstimatorImpl() {} 25 Initialize()26void LevelEstimatorImpl::Initialize() { 27 rtc::CritScope cs(crit_); 28 rms_->Reset(); 29 } 30 ProcessStream(AudioBuffer * audio)31void LevelEstimatorImpl::ProcessStream(AudioBuffer* audio) { 32 RTC_DCHECK(audio); 33 rtc::CritScope cs(crit_); 34 if (!enabled_) { 35 return; 36 } 37 38 for (size_t i = 0; i < audio->num_channels(); i++) { 39 rms_->Process(audio->channels_const()[i], audio->num_frames()); 40 } 41 } 42 Enable(bool enable)43int LevelEstimatorImpl::Enable(bool enable) { 44 rtc::CritScope cs(crit_); 45 if (enable && !enabled_) { 46 rms_->Reset(); 47 } 48 enabled_ = enable; 49 return AudioProcessing::kNoError; 50 } 51 is_enabled() const52bool LevelEstimatorImpl::is_enabled() const { 53 rtc::CritScope cs(crit_); 54 return enabled_; 55 } 56 RMS()57int LevelEstimatorImpl::RMS() { 58 rtc::CritScope cs(crit_); 59 if (!enabled_) { 60 return AudioProcessing::kNotEnabledError; 61 } 62 63 return rms_->RMS(); 64 } 65 } // namespace webrtc 66