| /* | 
 |  *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 
 |  * | 
 |  *  Use of this source code is governed by a BSD-style license | 
 |  *  that can be found in the LICENSE file in the root of the source | 
 |  *  tree. An additional intellectual property rights grant can be found | 
 |  *  in the file PATENTS.  All contributing project authors may | 
 |  *  be found in the AUTHORS file in the root of the source tree. | 
 |  */ | 
 |  | 
 | #include "modules/audio_processing/gain_control_for_experimental_agc.h" | 
 |  | 
 | #include "modules/audio_processing/include/audio_processing.h" | 
 | #include "modules/audio_processing/logging/apm_data_dumper.h" | 
 | #include "rtc_base/checks.h" | 
 | #include "rtc_base/criticalsection.h" | 
 |  | 
 | namespace webrtc { | 
 |  | 
 | int GainControlForExperimentalAgc::instance_counter_ = 0; | 
 |  | 
 | GainControlForExperimentalAgc::GainControlForExperimentalAgc( | 
 |     GainControl* gain_control, | 
 |     rtc::CriticalSection* crit_capture) | 
 |     : data_dumper_(new ApmDataDumper(instance_counter_)), | 
 |       real_gain_control_(gain_control), | 
 |       volume_(0), | 
 |       crit_capture_(crit_capture) { | 
 |   instance_counter_++; | 
 | } | 
 |  | 
 | GainControlForExperimentalAgc::~GainControlForExperimentalAgc() = default; | 
 |  | 
 | int GainControlForExperimentalAgc::Enable(bool enable) { | 
 |   return real_gain_control_->Enable(enable); | 
 | } | 
 |  | 
 | bool GainControlForExperimentalAgc::is_enabled() const { | 
 |   return real_gain_control_->is_enabled(); | 
 | } | 
 |  | 
 | int GainControlForExperimentalAgc::set_stream_analog_level(int level) { | 
 |   rtc::CritScope cs_capture(crit_capture_); | 
 |   data_dumper_->DumpRaw("experimental_gain_control_set_stream_analog_level", 1, | 
 |                         &level); | 
 |   volume_ = level; | 
 |   return AudioProcessing::kNoError; | 
 | } | 
 |  | 
 | int GainControlForExperimentalAgc::stream_analog_level() { | 
 |   rtc::CritScope cs_capture(crit_capture_); | 
 |   data_dumper_->DumpRaw("experimental_gain_control_stream_analog_level", 1, | 
 |                         &volume_); | 
 |   return volume_; | 
 | } | 
 |  | 
 | int GainControlForExperimentalAgc::set_mode(Mode mode) { | 
 |   return AudioProcessing::kNoError; | 
 | } | 
 |  | 
 | GainControl::Mode GainControlForExperimentalAgc::mode() const { | 
 |   return GainControl::kAdaptiveAnalog; | 
 | } | 
 |  | 
 | int GainControlForExperimentalAgc::set_target_level_dbfs(int level) { | 
 |   return AudioProcessing::kNoError; | 
 | } | 
 |  | 
 | int GainControlForExperimentalAgc::target_level_dbfs() const { | 
 |   return real_gain_control_->target_level_dbfs(); | 
 | } | 
 |  | 
 | int GainControlForExperimentalAgc::set_compression_gain_db(int gain) { | 
 |   return AudioProcessing::kNoError; | 
 | } | 
 |  | 
 | int GainControlForExperimentalAgc::compression_gain_db() const { | 
 |   return real_gain_control_->compression_gain_db(); | 
 | } | 
 |  | 
 | int GainControlForExperimentalAgc::enable_limiter(bool enable) { | 
 |   return AudioProcessing::kNoError; | 
 | } | 
 |  | 
 | bool GainControlForExperimentalAgc::is_limiter_enabled() const { | 
 |   return real_gain_control_->is_limiter_enabled(); | 
 | } | 
 |  | 
 | int GainControlForExperimentalAgc::set_analog_level_limits(int minimum, | 
 |                                                            int maximum) { | 
 |   return AudioProcessing::kNoError; | 
 | } | 
 |  | 
 | int GainControlForExperimentalAgc::analog_level_minimum() const { | 
 |   return real_gain_control_->analog_level_minimum(); | 
 | } | 
 |  | 
 | int GainControlForExperimentalAgc::analog_level_maximum() const { | 
 |   return real_gain_control_->analog_level_maximum(); | 
 | } | 
 |  | 
 | bool GainControlForExperimentalAgc::stream_is_saturated() const { | 
 |   return real_gain_control_->stream_is_saturated(); | 
 | } | 
 |  | 
 | void GainControlForExperimentalAgc::SetMicVolume(int volume) { | 
 |   rtc::CritScope cs_capture(crit_capture_); | 
 |   volume_ = volume; | 
 | } | 
 |  | 
 | int GainControlForExperimentalAgc::GetMicVolume() { | 
 |   rtc::CritScope cs_capture(crit_capture_); | 
 |   return volume_; | 
 | } | 
 |  | 
 | void GainControlForExperimentalAgc::Initialize() { | 
 |   data_dumper_->InitiateNewSetOfRecordings(); | 
 | } | 
 |  | 
 | }  // namespace webrtc |