|  | /* | 
|  | *  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/atomic_ops.h" | 
|  | #include "rtc_base/critical_section.h" | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | int GainControlForExperimentalAgc::instance_counter_ = 0; | 
|  |  | 
|  | GainControlForExperimentalAgc::GainControlForExperimentalAgc( | 
|  | GainControl* gain_control) | 
|  | : data_dumper_( | 
|  | new ApmDataDumper(rtc::AtomicOps::Increment(&instance_counter_))), | 
|  | real_gain_control_(gain_control), | 
|  | volume_(0) {} | 
|  |  | 
|  | 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) { | 
|  | data_dumper_->DumpRaw("experimental_gain_control_set_stream_analog_level", 1, | 
|  | &level); | 
|  | do_log_level_ = true; | 
|  | volume_ = level; | 
|  | return AudioProcessing::kNoError; | 
|  | } | 
|  |  | 
|  | int GainControlForExperimentalAgc::stream_analog_level() const { | 
|  | if (do_log_level_) { | 
|  | data_dumper_->DumpRaw("experimental_gain_control_stream_analog_level", 1, | 
|  | &volume_); | 
|  | do_log_level_ = false; | 
|  | } | 
|  | 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) { | 
|  | volume_ = volume; | 
|  | } | 
|  |  | 
|  | int GainControlForExperimentalAgc::GetMicVolume() { | 
|  | return volume_; | 
|  | } | 
|  |  | 
|  | void GainControlForExperimentalAgc::Initialize() { | 
|  | data_dumper_->InitiateNewSetOfRecordings(); | 
|  | } | 
|  |  | 
|  | }  // namespace webrtc |