/* * 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