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 17namespace webrtc { 18 19LevelEstimatorImpl::LevelEstimatorImpl(rtc::CriticalSection* crit) 20 : crit_(crit), rms_(new RMSLevel()) { 21 RTC_DCHECK(crit); 22} 23 24LevelEstimatorImpl::~LevelEstimatorImpl() {} 25 26void LevelEstimatorImpl::Initialize() { 27 rtc::CritScope cs(crit_); 28 rms_->Reset(); 29} 30 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 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 52bool LevelEstimatorImpl::is_enabled() const { 53 rtc::CritScope cs(crit_); 54 return enabled_; 55} 56 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