mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-14 14:20:45 +01:00

Agc2 applies a digital gain to the nearend signal. When the analog level changes, the digital gain calculation is no longer valid. Therefore Agc2 should be notified to analog gain changes. This CL also allow audioproc_f to chain AGC1 and AGC2. In a dependent CL we will allow using AGC1 for analog gain and AGC2 for digital gain. Bug: webrtc:7494 Change-Id: Id75b3728fbf2de1d84b7fba005e4670c7a2985d9 Reviewed-on: https://webrtc-review.googlesource.com/89387 Commit-Queue: Alex Loiko <aleloi@webrtc.org> Reviewed-by: Alessio Bazzica <alessiob@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24231}
78 lines
2.9 KiB
C++
78 lines
2.9 KiB
C++
/*
|
|
* 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.
|
|
*/
|
|
|
|
#ifndef MODULES_AUDIO_PROCESSING_GAIN_CONTROL_FOR_EXPERIMENTAL_AGC_H_
|
|
#define MODULES_AUDIO_PROCESSING_GAIN_CONTROL_FOR_EXPERIMENTAL_AGC_H_
|
|
|
|
#include "modules/audio_processing/agc/agc_manager_direct.h"
|
|
#include "modules/audio_processing/include/audio_processing.h"
|
|
#include "rtc_base/constructormagic.h"
|
|
#include "rtc_base/criticalsection.h"
|
|
#include "rtc_base/thread_checker.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class ApmDataDumper;
|
|
|
|
// This class has two main purposes:
|
|
//
|
|
// 1) It is returned instead of the real GainControl after the new AGC has been
|
|
// enabled in order to prevent an outside user from overriding compression
|
|
// settings. It doesn't do anything in its implementation, except for
|
|
// delegating the const methods and Enable calls to the real GainControl, so
|
|
// AGC can still be disabled.
|
|
//
|
|
// 2) It is injected into AgcManagerDirect and implements volume callbacks for
|
|
// getting and setting the volume level. It just caches this value to be used
|
|
// in VoiceEngine later.
|
|
class GainControlForExperimentalAgc : public GainControl,
|
|
public VolumeCallbacks {
|
|
public:
|
|
GainControlForExperimentalAgc(GainControl* gain_control,
|
|
rtc::CriticalSection* crit_capture);
|
|
~GainControlForExperimentalAgc() override;
|
|
|
|
// GainControl implementation.
|
|
int Enable(bool enable) override;
|
|
bool is_enabled() const override;
|
|
int set_stream_analog_level(int level) override;
|
|
int stream_analog_level() override;
|
|
int set_mode(Mode mode) override;
|
|
Mode mode() const override;
|
|
int set_target_level_dbfs(int level) override;
|
|
int target_level_dbfs() const override;
|
|
int set_compression_gain_db(int gain) override;
|
|
int compression_gain_db() const override;
|
|
int enable_limiter(bool enable) override;
|
|
bool is_limiter_enabled() const override;
|
|
int set_analog_level_limits(int minimum, int maximum) override;
|
|
int analog_level_minimum() const override;
|
|
int analog_level_maximum() const override;
|
|
bool stream_is_saturated() const override;
|
|
|
|
// VolumeCallbacks implementation.
|
|
void SetMicVolume(int volume) override;
|
|
int GetMicVolume() override;
|
|
|
|
void Initialize();
|
|
|
|
private:
|
|
std::unique_ptr<ApmDataDumper> data_dumper_;
|
|
GainControl* real_gain_control_;
|
|
int volume_;
|
|
rtc::CriticalSection* crit_capture_;
|
|
bool do_log_level_ = true;
|
|
static int instance_counter_;
|
|
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(GainControlForExperimentalAgc);
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // MODULES_AUDIO_PROCESSING_GAIN_CONTROL_FOR_EXPERIMENTAL_AGC_H_
|