Bump to WebRTC M120 release
Some API deprecation -- ExperimentalAgc and ExperimentalNs are gone. We're continuing to carry iSAC even though it's gone upstream, but maybe we'll want to drop that soon.
This commit is contained in:
@ -13,9 +13,11 @@
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include <atomic>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "absl/types/optional.h"
|
||||
#include "api/array_view.h"
|
||||
#include "api/audio/echo_canceller3_config.h"
|
||||
#include "api/audio/echo_control.h"
|
||||
@ -23,7 +25,9 @@
|
||||
#include "modules/audio_processing/aec3/block_delay_buffer.h"
|
||||
#include "modules/audio_processing/aec3/block_framer.h"
|
||||
#include "modules/audio_processing/aec3/block_processor.h"
|
||||
#include "modules/audio_processing/aec3/config_selector.h"
|
||||
#include "modules/audio_processing/aec3/frame_blocker.h"
|
||||
#include "modules/audio_processing/aec3/multi_channel_content_detector.h"
|
||||
#include "modules/audio_processing/audio_buffer.h"
|
||||
#include "modules/audio_processing/logging/apm_data_dumper.h"
|
||||
#include "rtc_base/checks.h"
|
||||
@ -84,18 +88,15 @@ class Aec3RenderQueueItemVerifier {
|
||||
// AnalyzeRender call which can be called concurrently with the other methods.
|
||||
class EchoCanceller3 : public EchoControl {
|
||||
public:
|
||||
// Normal c-tor to use.
|
||||
EchoCanceller3(const EchoCanceller3Config& config,
|
||||
int sample_rate_hz,
|
||||
size_t num_render_channels,
|
||||
size_t num_capture_channels);
|
||||
// Testing c-tor that is used only for testing purposes.
|
||||
EchoCanceller3(const EchoCanceller3Config& config,
|
||||
int sample_rate_hz,
|
||||
size_t num_render_channels,
|
||||
size_t num_capture_channels,
|
||||
std::unique_ptr<BlockProcessor> block_processor);
|
||||
EchoCanceller3(
|
||||
const EchoCanceller3Config& config,
|
||||
const absl::optional<EchoCanceller3Config>& multichannel_config,
|
||||
int sample_rate_hz,
|
||||
size_t num_render_channels,
|
||||
size_t num_capture_channels);
|
||||
|
||||
~EchoCanceller3() override;
|
||||
|
||||
EchoCanceller3(const EchoCanceller3&) = delete;
|
||||
EchoCanceller3& operator=(const EchoCanceller3&) = delete;
|
||||
|
||||
@ -118,6 +119,12 @@ class EchoCanceller3 : public EchoControl {
|
||||
// Provides an optional external estimate of the audio buffer delay.
|
||||
void SetAudioBufferDelay(int delay_ms) override;
|
||||
|
||||
// Specifies whether the capture output will be used. The purpose of this is
|
||||
// to allow the echo controller to deactivate some of the processing when the
|
||||
// resulting output is anyway not used, for instance when the endpoint is
|
||||
// muted.
|
||||
void SetCaptureOutputUsage(bool capture_output_used) override;
|
||||
|
||||
bool ActiveProcessing() const override;
|
||||
|
||||
// Signals whether an external detector has detected echo leakage from the
|
||||
@ -129,14 +136,39 @@ class EchoCanceller3 : public EchoControl {
|
||||
block_processor_->UpdateEchoLeakageStatus(leakage_detected);
|
||||
}
|
||||
|
||||
// Produces a default configuration that is suitable for a certain combination
|
||||
// of render and capture channels.
|
||||
static EchoCanceller3Config CreateDefaultConfig(size_t num_render_channels,
|
||||
size_t num_capture_channels);
|
||||
// Produces a default configuration for multichannel.
|
||||
static EchoCanceller3Config CreateDefaultMultichannelConfig();
|
||||
|
||||
private:
|
||||
friend class EchoCanceller3Tester;
|
||||
FRIEND_TEST_ALL_PREFIXES(EchoCanceller3, DetectionOfProperStereo);
|
||||
FRIEND_TEST_ALL_PREFIXES(EchoCanceller3,
|
||||
DetectionOfProperStereoUsingThreshold);
|
||||
FRIEND_TEST_ALL_PREFIXES(EchoCanceller3,
|
||||
DetectionOfProperStereoUsingHysteresis);
|
||||
FRIEND_TEST_ALL_PREFIXES(EchoCanceller3,
|
||||
StereoContentDetectionForMonoSignals);
|
||||
|
||||
class RenderWriter;
|
||||
|
||||
// (Re-)Initializes the selected subset of the EchoCanceller3 fields, at
|
||||
// creation as well as during reconfiguration.
|
||||
void Initialize();
|
||||
|
||||
// Only for testing. Replaces the internal block processor.
|
||||
void SetBlockProcessorForTesting(
|
||||
std::unique_ptr<BlockProcessor> block_processor);
|
||||
|
||||
// Only for testing. Returns whether stereo processing is active.
|
||||
bool StereoRenderProcessingActiveForTesting() const {
|
||||
return multichannel_content_detector_.IsProperMultiChannelContentDetected();
|
||||
}
|
||||
|
||||
// Only for testing.
|
||||
const EchoCanceller3Config& GetActiveConfigForTesting() const {
|
||||
return config_selector_.active_config();
|
||||
}
|
||||
|
||||
// Empties the render SwapQueue.
|
||||
void EmptyRenderQueue();
|
||||
|
||||
@ -154,18 +186,22 @@ class EchoCanceller3 : public EchoControl {
|
||||
RTC_GUARDED_BY(render_race_checker_);
|
||||
|
||||
// State that may be accessed by the capture thread.
|
||||
static int instance_count_;
|
||||
static std::atomic<int> instance_count_;
|
||||
std::unique_ptr<ApmDataDumper> data_dumper_;
|
||||
const EchoCanceller3Config config_;
|
||||
const int sample_rate_hz_;
|
||||
const int num_bands_;
|
||||
const size_t num_render_channels_;
|
||||
const size_t num_render_input_channels_;
|
||||
size_t num_render_channels_to_aec_;
|
||||
const size_t num_capture_channels_;
|
||||
ConfigSelector config_selector_;
|
||||
MultiChannelContentDetector multichannel_content_detector_;
|
||||
std::unique_ptr<BlockFramer> linear_output_framer_
|
||||
RTC_GUARDED_BY(capture_race_checker_);
|
||||
BlockFramer output_framer_ RTC_GUARDED_BY(capture_race_checker_);
|
||||
FrameBlocker capture_blocker_ RTC_GUARDED_BY(capture_race_checker_);
|
||||
FrameBlocker render_blocker_ RTC_GUARDED_BY(capture_race_checker_);
|
||||
std::unique_ptr<FrameBlocker> render_blocker_
|
||||
RTC_GUARDED_BY(capture_race_checker_);
|
||||
SwapQueue<std::vector<std::vector<std::vector<float>>>,
|
||||
Aec3RenderQueueItemVerifier>
|
||||
render_transfer_queue_;
|
||||
@ -175,12 +211,10 @@ class EchoCanceller3 : public EchoControl {
|
||||
RTC_GUARDED_BY(capture_race_checker_);
|
||||
bool saturated_microphone_signal_ RTC_GUARDED_BY(capture_race_checker_) =
|
||||
false;
|
||||
std::vector<std::vector<std::vector<float>>> render_block_
|
||||
RTC_GUARDED_BY(capture_race_checker_);
|
||||
std::unique_ptr<std::vector<std::vector<std::vector<float>>>>
|
||||
linear_output_block_ RTC_GUARDED_BY(capture_race_checker_);
|
||||
std::vector<std::vector<std::vector<float>>> capture_block_
|
||||
Block render_block_ RTC_GUARDED_BY(capture_race_checker_);
|
||||
std::unique_ptr<Block> linear_output_block_
|
||||
RTC_GUARDED_BY(capture_race_checker_);
|
||||
Block capture_block_ RTC_GUARDED_BY(capture_race_checker_);
|
||||
std::vector<std::vector<rtc::ArrayView<float>>> render_sub_frame_view_
|
||||
RTC_GUARDED_BY(capture_race_checker_);
|
||||
std::vector<std::vector<rtc::ArrayView<float>>> linear_output_sub_frame_view_
|
||||
|
Reference in New Issue
Block a user