diff --git a/api/BUILD.gn b/api/BUILD.gn index 709d24207f..67d463db8b 100644 --- a/api/BUILD.gn +++ b/api/BUILD.gn @@ -56,8 +56,8 @@ rtc_source_set("enable_media_with_defaults") { deps = [ ":enable_media", ":libjingle_peerconnection_api", - "../modules/audio_processing:api", "../rtc_base/system:rtc_export", + "audio:audio_processing", "audio_codecs:builtin_audio_decoder_factory", "audio_codecs:builtin_audio_encoder_factory", "task_queue:default_task_queue_factory", @@ -81,13 +81,13 @@ if (!build_with_chromium) { ":scoped_refptr", "../api/rtc_event_log:rtc_event_log_factory", "../modules/audio_device:audio_device_api", - "../modules/audio_processing:api", "../pc:peer_connection_factory", "../pc:webrtc_sdp", "../rtc_base:threading", "../rtc_base/system:rtc_export", "../stats:rtc_stats", "audio:audio_mixer_api", + "audio:audio_processing", "audio_codecs:audio_codecs_api", "task_queue:default_task_queue_factory", "transport:field_trial_based_config", @@ -164,10 +164,10 @@ rtc_library("media_stream_interface") { ":scoped_refptr", ":sequence_checker", ":video_track_source_constraints", - "../modules/audio_processing:audio_processing_statistics", "../rtc_base:checks", "../rtc_base/system:no_unique_address", "../rtc_base/system:rtc_export", + "audio:audio_processing_statistics", "video:recordable_encoded_frame", "video:video_frame", ] @@ -377,7 +377,6 @@ rtc_library("libjingle_peerconnection_api") { # targets like pnacl. API should not depend on anything outside of this # file, really. All these should arguably go away in time. "../media:rtc_media_config", - "../modules/audio_processing:audio_processing_statistics", "../rtc_base:checks", "../rtc_base:ip_address", "../rtc_base:socket_address", @@ -587,7 +586,6 @@ rtc_source_set("peer_connection_quality_test_fixture_api") { ":track_id_stream_info_map", ":video_quality_analyzer_api", "../media:media_constants", - "../modules/audio_processing:api", "../rtc_base:checks", "../rtc_base:network", "../rtc_base:rtc_certificate_generator", @@ -596,6 +594,7 @@ rtc_source_set("peer_connection_quality_test_fixture_api") { "../rtc_base:threading", "../test:fileutils", "audio:audio_mixer_api", + "audio:audio_processing", "rtc_event_log", "task_queue", "test/pclf:media_configuration", @@ -995,8 +994,8 @@ if (rtc_include_tests) { deps = [ "../modules/audio_processing", - "../modules/audio_processing:api", "../modules/audio_processing:audioproc_f_impl", + "audio:audio_processing", ] } diff --git a/api/DEPS b/api/DEPS index 5a5c285856..f9fdb72a99 100644 --- a/api/DEPS +++ b/api/DEPS @@ -49,6 +49,7 @@ specific_include_rules = { ], ".*\.h": [ + "+rtc_base/arraysize.h", "+rtc_base/checks.h", "+rtc_base/system/rtc_export.h", "+rtc_base/system/rtc_export_template.h", @@ -95,10 +96,6 @@ specific_include_rules = { "+modules/include/module_fec_types.h", ], - "media_stream_interface\.h": [ - "+modules/audio_processing/include/audio_processing_statistics.h", - ], - "packet_socket_factory\.h": [ "+rtc_base/proxy_info.h", "+rtc_base/async_packet_socket.h", @@ -151,14 +148,6 @@ specific_include_rules = { "+rtc_base/buffer.h", ], - "audioproc_float\.h": [ - "+modules/audio_processing/include/audio_processing.h", - ], - - "echo_detector_creator\.h": [ - "+modules/audio_processing/include/audio_processing.h", - ], - "make_ref_counted\.h": [ "+rtc_base/ref_counted_object.h", ], diff --git a/api/audio/BUILD.gn b/api/audio/BUILD.gn index 0ecab64086..2fc4b1979c 100644 --- a/api/audio/BUILD.gn +++ b/api/audio/BUILD.gn @@ -42,6 +42,44 @@ rtc_source_set("audio_mixer_api") { ] } +rtc_source_set("audio_processing") { + visibility = [ "*" ] + sources = [ + "audio_processing.cc", + "audio_processing.h", + ] + deps = [ + ":aec3_config", + ":audio_processing_statistics", + ":echo_control", + "..:array_view", + "..:ref_count", + "..:scoped_refptr", + "../../rtc_base:checks", + "../../rtc_base:macromagic", + "../../rtc_base:stringutils", + "../../rtc_base/system:arch", + "../../rtc_base/system:file_wrapper", + "../../rtc_base/system:rtc_export", + "../task_queue", + ] + absl_deps = [ + "//third_party/abseil-cpp/absl/base:nullability", + "//third_party/abseil-cpp/absl/strings:string_view", + "//third_party/abseil-cpp/absl/types:optional", + ] +} + +rtc_source_set("audio_processing_statistics") { + visibility = [ "*" ] + sources = [ + "audio_processing_statistics.cc", + "audio_processing_statistics.h", + ] + deps = [ "../../rtc_base/system:rtc_export" ] + absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] +} + rtc_library("aec3_config") { visibility = [ "*" ] sources = [ @@ -85,9 +123,9 @@ rtc_source_set("echo_detector_creator") { "echo_detector_creator.h", ] deps = [ + ":audio_processing", "..:make_ref_counted", "../../api:scoped_refptr", - "../../modules/audio_processing:api", "../../modules/audio_processing:residual_echo_detector", ] } diff --git a/modules/audio_processing/include/audio_processing.cc b/api/audio/audio_processing.cc similarity index 99% rename from modules/audio_processing/include/audio_processing.cc rename to api/audio/audio_processing.cc index 13ddcc588a..2df2a783c3 100644 --- a/modules/audio_processing/include/audio_processing.cc +++ b/api/audio/audio_processing.cc @@ -8,10 +8,11 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "modules/audio_processing/include/audio_processing.h" +#include "api/audio/audio_processing.h" +#include +#include "rtc_base/checks.h" #include "rtc_base/strings/string_builder.h" -#include "rtc_base/system/arch.h" namespace webrtc { namespace { diff --git a/api/audio/audio_processing.h b/api/audio/audio_processing.h new file mode 100644 index 0000000000..d5cdb44471 --- /dev/null +++ b/api/audio/audio_processing.h @@ -0,0 +1,945 @@ +/* + * Copyright (c) 2012 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 API_AUDIO_AUDIO_PROCESSING_H_ +#define API_AUDIO_AUDIO_PROCESSING_H_ + +// MSVC++ requires this to be set before any other includes to get M_PI. +#ifndef _USE_MATH_DEFINES +#define _USE_MATH_DEFINES +#endif + +#include +#include // size_t +#include // FILE +#include + +#include +#include +#include +#include +#include + +#include "absl/base/nullability.h" +#include "absl/strings/string_view.h" +#include "absl/types/optional.h" +#include "api/array_view.h" +#include "api/audio/audio_processing_statistics.h" +#include "api/audio/echo_control.h" +#include "api/ref_count.h" +#include "api/scoped_refptr.h" +#include "api/task_queue/task_queue_base.h" +#include "rtc_base/arraysize.h" +#include "rtc_base/checks.h" +#include "rtc_base/system/rtc_export.h" + +namespace webrtc { + +class AecDump; +class AudioBuffer; + +class StreamConfig; +class ProcessingConfig; + +class EchoDetector; +class CustomAudioAnalyzer; +class CustomProcessing; + +// The Audio Processing Module (APM) provides a collection of voice processing +// components designed for real-time communications software. +// +// APM operates on two audio streams on a frame-by-frame basis. Frames of the +// primary stream, on which all processing is applied, are passed to +// `ProcessStream()`. Frames of the reverse direction stream are passed to +// `ProcessReverseStream()`. On the client-side, this will typically be the +// near-end (capture) and far-end (render) streams, respectively. APM should be +// placed in the signal chain as close to the audio hardware abstraction layer +// (HAL) as possible. +// +// On the server-side, the reverse stream will normally not be used, with +// processing occurring on each incoming stream. +// +// Component interfaces follow a similar pattern and are accessed through +// corresponding getters in APM. All components are disabled at create-time, +// with default settings that are recommended for most situations. New settings +// can be applied without enabling a component. Enabling a component triggers +// memory allocation and initialization to allow it to start processing the +// streams. +// +// Thread safety is provided with the following assumptions to reduce locking +// overhead: +// 1. The stream getters and setters are called from the same thread as +// ProcessStream(). More precisely, stream functions are never called +// concurrently with ProcessStream(). +// 2. Parameter getters are never called concurrently with the corresponding +// setter. +// +// APM accepts only linear PCM audio data in chunks of ~10 ms (see +// AudioProcessing::GetFrameSize() for details) and sample rates ranging from +// 8000 Hz to 384000 Hz. The int16 interfaces use interleaved data, while the +// float interfaces use deinterleaved data. +// +// Usage example, omitting error checking: +// rtc::scoped_refptr apm = AudioProcessingBuilder().Create(); +// +// AudioProcessing::Config config; +// config.echo_canceller.enabled = true; +// config.echo_canceller.mobile_mode = false; +// +// config.gain_controller1.enabled = true; +// config.gain_controller1.mode = +// AudioProcessing::Config::GainController1::kAdaptiveAnalog; +// config.gain_controller1.analog_level_minimum = 0; +// config.gain_controller1.analog_level_maximum = 255; +// +// config.gain_controller2.enabled = true; +// +// config.high_pass_filter.enabled = true; +// +// apm->ApplyConfig(config) +// +// // Start a voice call... +// +// // ... Render frame arrives bound for the audio HAL ... +// apm->ProcessReverseStream(render_frame); +// +// // ... Capture frame arrives from the audio HAL ... +// // Call required set_stream_ functions. +// apm->set_stream_delay_ms(delay_ms); +// apm->set_stream_analog_level(analog_level); +// +// apm->ProcessStream(capture_frame); +// +// // Call required stream_ functions. +// analog_level = apm->recommended_stream_analog_level(); +// has_voice = apm->stream_has_voice(); +// +// // Repeat render and capture processing for the duration of the call... +// // Start a new call... +// apm->Initialize(); +// +// // Close the application... +// apm.reset(); +// +class RTC_EXPORT AudioProcessing : public RefCountInterface { + public: + // The struct below constitutes the new parameter scheme for the audio + // processing. It is being introduced gradually and until it is fully + // introduced, it is prone to change. + // TODO(peah): Remove this comment once the new config scheme is fully rolled + // out. + // + // The parameters and behavior of the audio processing module are controlled + // by changing the default values in the AudioProcessing::Config struct. + // The config is applied by passing the struct to the ApplyConfig method. + // + // This config is intended to be used during setup, and to enable/disable + // top-level processing effects. Use during processing may cause undesired + // submodule resets, affecting the audio quality. Use the RuntimeSetting + // construct for runtime configuration. + struct RTC_EXPORT Config { + // Sets the properties of the audio processing pipeline. + struct RTC_EXPORT Pipeline { + // Ways to downmix a multi-channel track to mono. + enum class DownmixMethod { + kAverageChannels, // Average across channels. + kUseFirstChannel // Use the first channel. + }; + + // Maximum allowed processing rate used internally. May only be set to + // 32000 or 48000 and any differing values will be treated as 48000. + int maximum_internal_processing_rate = 48000; + // Allow multi-channel processing of render audio. + bool multi_channel_render = false; + // Allow multi-channel processing of capture audio when AEC3 is active + // or a custom AEC is injected.. + bool multi_channel_capture = false; + // Indicates how to downmix multi-channel capture audio to mono (when + // needed). + DownmixMethod capture_downmix_method = DownmixMethod::kAverageChannels; + } pipeline; + + // Enabled the pre-amplifier. It amplifies the capture signal + // before any other processing is done. + // TODO(webrtc:5298): Deprecate and use the pre-gain functionality in + // capture_level_adjustment instead. + struct PreAmplifier { + bool enabled = false; + float fixed_gain_factor = 1.0f; + } pre_amplifier; + + // Functionality for general level adjustment in the capture pipeline. This + // should not be used together with the legacy PreAmplifier functionality. + struct CaptureLevelAdjustment { + bool operator==(const CaptureLevelAdjustment& rhs) const; + bool operator!=(const CaptureLevelAdjustment& rhs) const { + return !(*this == rhs); + } + bool enabled = false; + // The `pre_gain_factor` scales the signal before any processing is done. + float pre_gain_factor = 1.0f; + // The `post_gain_factor` scales the signal after all processing is done. + float post_gain_factor = 1.0f; + struct AnalogMicGainEmulation { + bool operator==(const AnalogMicGainEmulation& rhs) const; + bool operator!=(const AnalogMicGainEmulation& rhs) const { + return !(*this == rhs); + } + bool enabled = false; + // Initial analog gain level to use for the emulated analog gain. Must + // be in the range [0...255]. + int initial_level = 255; + } analog_mic_gain_emulation; + } capture_level_adjustment; + + struct HighPassFilter { + bool enabled = false; + bool apply_in_full_band = true; + } high_pass_filter; + + struct EchoCanceller { + bool enabled = false; + bool mobile_mode = false; + bool export_linear_aec_output = false; + // Enforce the highpass filter to be on (has no effect for the mobile + // mode). + bool enforce_high_pass_filtering = true; + } echo_canceller; + + // Enables background noise suppression. + struct NoiseSuppression { + bool enabled = false; + enum Level { kLow, kModerate, kHigh, kVeryHigh }; + Level level = kModerate; + bool analyze_linear_aec_output_when_available = false; + } noise_suppression; + + // Enables transient suppression. + struct TransientSuppression { + bool enabled = false; + } transient_suppression; + + // Enables automatic gain control (AGC) functionality. + // The automatic gain control (AGC) component brings the signal to an + // appropriate range. This is done by applying a digital gain directly and, + // in the analog mode, prescribing an analog gain to be applied at the audio + // HAL. + // Recommended to be enabled on the client-side. + struct RTC_EXPORT GainController1 { + bool operator==(const GainController1& rhs) const; + bool operator!=(const GainController1& rhs) const { + return !(*this == rhs); + } + + bool enabled = false; + enum Mode { + // Adaptive mode intended for use if an analog volume control is + // available on the capture device. It will require the user to provide + // coupling between the OS mixer controls and AGC through the + // stream_analog_level() functions. + // It consists of an analog gain prescription for the audio device and a + // digital compression stage. + kAdaptiveAnalog, + // Adaptive mode intended for situations in which an analog volume + // control is unavailable. It operates in a similar fashion to the + // adaptive analog mode, but with scaling instead applied in the digital + // domain. As with the analog mode, it additionally uses a digital + // compression stage. + kAdaptiveDigital, + // Fixed mode which enables only the digital compression stage also used + // by the two adaptive modes. + // It is distinguished from the adaptive modes by considering only a + // short time-window of the input signal. It applies a fixed gain + // through most of the input level range, and compresses (gradually + // reduces gain with increasing level) the input signal at higher + // levels. This mode is preferred on embedded devices where the capture + // signal level is predictable, so that a known gain can be applied. + kFixedDigital + }; + Mode mode = kAdaptiveAnalog; + // Sets the target peak level (or envelope) of the AGC in dBFs (decibels + // from digital full-scale). The convention is to use positive values. For + // instance, passing in a value of 3 corresponds to -3 dBFs, or a target + // level 3 dB below full-scale. Limited to [0, 31]. + int target_level_dbfs = 3; + // Sets the maximum gain the digital compression stage may apply, in dB. A + // higher number corresponds to greater compression, while a value of 0 + // will leave the signal uncompressed. Limited to [0, 90]. + // For updates after APM setup, use a RuntimeSetting instead. + int compression_gain_db = 9; + // When enabled, the compression stage will hard limit the signal to the + // target level. Otherwise, the signal will be compressed but not limited + // above the target level. + bool enable_limiter = true; + + // Enables the analog gain controller functionality. + struct AnalogGainController { + bool enabled = true; + // TODO(bugs.webrtc.org/7494): Deprecated. Stop using and remove. + int startup_min_volume = 0; + // Lowest analog microphone level that will be applied in response to + // clipping. + int clipped_level_min = 70; + // If true, an adaptive digital gain is applied. + bool enable_digital_adaptive = true; + // Amount the microphone level is lowered with every clipping event. + // Limited to (0, 255]. + int clipped_level_step = 15; + // Proportion of clipped samples required to declare a clipping event. + // Limited to (0.f, 1.f). + float clipped_ratio_threshold = 0.1f; + // Time in frames to wait after a clipping event before checking again. + // Limited to values higher than 0. + int clipped_wait_frames = 300; + + // Enables clipping prediction functionality. + struct ClippingPredictor { + bool enabled = false; + enum Mode { + // Clipping event prediction mode with fixed step estimation. + kClippingEventPrediction, + // Clipped peak estimation mode with adaptive step estimation. + kAdaptiveStepClippingPeakPrediction, + // Clipped peak estimation mode with fixed step estimation. + kFixedStepClippingPeakPrediction, + }; + Mode mode = kClippingEventPrediction; + // Number of frames in the sliding analysis window. + int window_length = 5; + // Number of frames in the sliding reference window. + int reference_window_length = 5; + // Reference window delay (unit: number of frames). + int reference_window_delay = 5; + // Clipping prediction threshold (dBFS). + float clipping_threshold = -1.0f; + // Crest factor drop threshold (dB). + float crest_factor_margin = 3.0f; + // If true, the recommended clipped level step is used to modify the + // analog gain. Otherwise, the predictor runs without affecting the + // analog gain. + bool use_predicted_step = true; + } clipping_predictor; + } analog_gain_controller; + } gain_controller1; + + // Parameters for AGC2, an Automatic Gain Control (AGC) sub-module which + // replaces the AGC sub-module parametrized by `gain_controller1`. + // AGC2 brings the captured audio signal to the desired level by combining + // three different controllers (namely, input volume controller, adapative + // digital controller and fixed digital controller) and a limiter. + // TODO(bugs.webrtc.org:7494): Name `GainController` when AGC1 removed. + struct RTC_EXPORT GainController2 { + bool operator==(const GainController2& rhs) const; + bool operator!=(const GainController2& rhs) const { + return !(*this == rhs); + } + + // AGC2 must be created if and only if `enabled` is true. + bool enabled = false; + + // Parameters for the input volume controller, which adjusts the input + // volume applied when the audio is captured (e.g., microphone volume on + // a soundcard, input volume on HAL). + struct InputVolumeController { + bool operator==(const InputVolumeController& rhs) const; + bool operator!=(const InputVolumeController& rhs) const { + return !(*this == rhs); + } + bool enabled = false; + } input_volume_controller; + + // Parameters for the adaptive digital controller, which adjusts and + // applies a digital gain after echo cancellation and after noise + // suppression. + struct RTC_EXPORT AdaptiveDigital { + bool operator==(const AdaptiveDigital& rhs) const; + bool operator!=(const AdaptiveDigital& rhs) const { + return !(*this == rhs); + } + bool enabled = false; + float headroom_db = 5.0f; + float max_gain_db = 50.0f; + float initial_gain_db = 15.0f; + float max_gain_change_db_per_second = 6.0f; + float max_output_noise_level_dbfs = -50.0f; + } adaptive_digital; + + // Parameters for the fixed digital controller, which applies a fixed + // digital gain after the adaptive digital controller and before the + // limiter. + struct FixedDigital { + // By setting `gain_db` to a value greater than zero, the limiter can be + // turned into a compressor that first applies a fixed gain. + float gain_db = 0.0f; + } fixed_digital; + } gain_controller2; + + std::string ToString() const; + }; + + // Specifies the properties of a setting to be passed to AudioProcessing at + // runtime. + class RuntimeSetting { + public: + enum class Type { + kNotSpecified, + kCapturePreGain, + kCaptureCompressionGain, + kCaptureFixedPostGain, + kPlayoutVolumeChange, + kCustomRenderProcessingRuntimeSetting, + kPlayoutAudioDeviceChange, + kCapturePostGain, + kCaptureOutputUsed + }; + + // Play-out audio device properties. + struct PlayoutAudioDeviceInfo { + int id; // Identifies the audio device. + int max_volume; // Maximum play-out volume. + }; + + RuntimeSetting() : type_(Type::kNotSpecified), value_(0.0f) {} + ~RuntimeSetting() = default; + + static RuntimeSetting CreateCapturePreGain(float gain) { + return {Type::kCapturePreGain, gain}; + } + + static RuntimeSetting CreateCapturePostGain(float gain) { + return {Type::kCapturePostGain, gain}; + } + + // Corresponds to Config::GainController1::compression_gain_db, but for + // runtime configuration. + static RuntimeSetting CreateCompressionGainDb(int gain_db) { + RTC_DCHECK_GE(gain_db, 0); + RTC_DCHECK_LE(gain_db, 90); + return {Type::kCaptureCompressionGain, static_cast(gain_db)}; + } + + // Corresponds to Config::GainController2::fixed_digital::gain_db, but for + // runtime configuration. + static RuntimeSetting CreateCaptureFixedPostGain(float gain_db) { + RTC_DCHECK_GE(gain_db, 0.0f); + RTC_DCHECK_LE(gain_db, 90.0f); + return {Type::kCaptureFixedPostGain, gain_db}; + } + + // Creates a runtime setting to notify play-out (aka render) audio device + // changes. + static RuntimeSetting CreatePlayoutAudioDeviceChange( + PlayoutAudioDeviceInfo audio_device) { + return {Type::kPlayoutAudioDeviceChange, audio_device}; + } + + // Creates a runtime setting to notify play-out (aka render) volume changes. + // `volume` is the unnormalized volume, the maximum of which + static RuntimeSetting CreatePlayoutVolumeChange(int volume) { + return {Type::kPlayoutVolumeChange, volume}; + } + + static RuntimeSetting CreateCustomRenderSetting(float payload) { + return {Type::kCustomRenderProcessingRuntimeSetting, payload}; + } + + static RuntimeSetting CreateCaptureOutputUsedSetting( + bool capture_output_used) { + return {Type::kCaptureOutputUsed, capture_output_used}; + } + + Type type() const { return type_; } + // Getters do not return a value but instead modify the argument to protect + // from implicit casting. + void GetFloat(float* value) const { + RTC_DCHECK(value); + *value = value_.float_value; + } + void GetInt(int* value) const { + RTC_DCHECK(value); + *value = value_.int_value; + } + void GetBool(bool* value) const { + RTC_DCHECK(value); + *value = value_.bool_value; + } + void GetPlayoutAudioDeviceInfo(PlayoutAudioDeviceInfo* value) const { + RTC_DCHECK(value); + *value = value_.playout_audio_device_info; + } + + private: + RuntimeSetting(Type id, float value) : type_(id), value_(value) {} + RuntimeSetting(Type id, int value) : type_(id), value_(value) {} + RuntimeSetting(Type id, PlayoutAudioDeviceInfo value) + : type_(id), value_(value) {} + Type type_; + union U { + U() {} + U(int value) : int_value(value) {} + U(float value) : float_value(value) {} + U(PlayoutAudioDeviceInfo value) : playout_audio_device_info(value) {} + float float_value; + int int_value; + bool bool_value; + PlayoutAudioDeviceInfo playout_audio_device_info; + } value_; + }; + + ~AudioProcessing() override {} + + // Initializes internal states, while retaining all user settings. This + // should be called before beginning to process a new audio stream. However, + // it is not necessary to call before processing the first stream after + // creation. + // + // It is also not necessary to call if the audio parameters (sample + // rate and number of channels) have changed. Passing updated parameters + // directly to `ProcessStream()` and `ProcessReverseStream()` is permissible. + // If the parameters are known at init-time though, they may be provided. + // TODO(webrtc:5298): Change to return void. + virtual int Initialize() = 0; + + // The int16 interfaces require: + // - only `NativeRate`s be used + // - that the input, output and reverse rates must match + // - that `processing_config.output_stream()` matches + // `processing_config.input_stream()`. + // + // The float interfaces accept arbitrary rates and support differing input and + // output layouts, but the output must have either one channel or the same + // number of channels as the input. + virtual int Initialize(const ProcessingConfig& processing_config) = 0; + + // TODO(peah): This method is a temporary solution used to take control + // over the parameters in the audio processing module and is likely to change. + virtual void ApplyConfig(const Config& config) = 0; + + // TODO(ajm): Only intended for internal use. Make private and friend the + // necessary classes? + virtual int proc_sample_rate_hz() const = 0; + virtual int proc_split_sample_rate_hz() const = 0; + virtual size_t num_input_channels() const = 0; + virtual size_t num_proc_channels() const = 0; + virtual size_t num_output_channels() const = 0; + virtual size_t num_reverse_channels() const = 0; + + // Set to true when the output of AudioProcessing will be muted or in some + // other way not used. Ideally, the captured audio would still be processed, + // but some components may change behavior based on this information. + // Default false. This method takes a lock. To achieve this in a lock-less + // manner the PostRuntimeSetting can instead be used. + virtual void set_output_will_be_muted(bool muted) = 0; + + // Enqueues a runtime setting. + virtual void SetRuntimeSetting(RuntimeSetting setting) = 0; + + // Enqueues a runtime setting. Returns a bool indicating whether the + // enqueueing was successfull. + virtual bool PostRuntimeSetting(RuntimeSetting setting) = 0; + + // Accepts and produces a ~10 ms frame of interleaved 16 bit integer audio as + // specified in `input_config` and `output_config`. `src` and `dest` may use + // the same memory, if desired. + virtual int ProcessStream(const int16_t* const src, + const StreamConfig& input_config, + const StreamConfig& output_config, + int16_t* const dest) = 0; + + // Accepts deinterleaved float audio with the range [-1, 1]. Each element of + // `src` points to a channel buffer, arranged according to `input_stream`. At + // output, the channels will be arranged according to `output_stream` in + // `dest`. + // + // The output must have one channel or as many channels as the input. `src` + // and `dest` may use the same memory, if desired. + virtual int ProcessStream(const float* const* src, + const StreamConfig& input_config, + const StreamConfig& output_config, + float* const* dest) = 0; + + // Accepts and produces a ~10 ms frame of interleaved 16 bit integer audio for + // the reverse direction audio stream as specified in `input_config` and + // `output_config`. `src` and `dest` may use the same memory, if desired. + virtual int ProcessReverseStream(const int16_t* const src, + const StreamConfig& input_config, + const StreamConfig& output_config, + int16_t* const dest) = 0; + + // Accepts deinterleaved float audio with the range [-1, 1]. Each element of + // `data` points to a channel buffer, arranged according to `reverse_config`. + virtual int ProcessReverseStream(const float* const* src, + const StreamConfig& input_config, + const StreamConfig& output_config, + float* const* dest) = 0; + + // Accepts deinterleaved float audio with the range [-1, 1]. Each element + // of `data` points to a channel buffer, arranged according to + // `reverse_config`. + virtual int AnalyzeReverseStream(const float* const* data, + const StreamConfig& reverse_config) = 0; + + // Returns the most recently produced ~10 ms of the linear AEC output at a + // rate of 16 kHz. If there is more than one capture channel, a mono + // representation of the input is returned. Returns true/false to indicate + // whether an output returned. + virtual bool GetLinearAecOutput( + rtc::ArrayView> linear_output) const = 0; + + // This must be called prior to ProcessStream() if and only if adaptive analog + // gain control is enabled, to pass the current analog level from the audio + // HAL. Must be within the range [0, 255]. + virtual void set_stream_analog_level(int level) = 0; + + // When an analog mode is set, this should be called after + // `set_stream_analog_level()` and `ProcessStream()` to obtain the recommended + // new analog level for the audio HAL. It is the user's responsibility to + // apply this level. + virtual int recommended_stream_analog_level() const = 0; + + // This must be called if and only if echo processing is enabled. + // + // Sets the `delay` in ms between ProcessReverseStream() receiving a far-end + // frame and ProcessStream() receiving a near-end frame containing the + // corresponding echo. On the client-side this can be expressed as + // delay = (t_render - t_analyze) + (t_process - t_capture) + // where, + // - t_analyze is the time a frame is passed to ProcessReverseStream() and + // t_render is the time the first sample of the same frame is rendered by + // the audio hardware. + // - t_capture is the time the first sample of a frame is captured by the + // audio hardware and t_process is the time the same frame is passed to + // ProcessStream(). + virtual int set_stream_delay_ms(int delay) = 0; + virtual int stream_delay_ms() const = 0; + + // Call to signal that a key press occurred (true) or did not occur (false) + // with this chunk of audio. + virtual void set_stream_key_pressed(bool key_pressed) = 0; + + // Creates and attaches an webrtc::AecDump for recording debugging + // information. + // The `worker_queue` may not be null and must outlive the created + // AecDump instance. |max_log_size_bytes == -1| means the log size + // will be unlimited. `handle` may not be null. The AecDump takes + // responsibility for `handle` and closes it in the destructor. A + // return value of true indicates that the file has been + // sucessfully opened, while a value of false indicates that + // opening the file failed. + virtual bool CreateAndAttachAecDump( + absl::string_view file_name, + int64_t max_log_size_bytes, + absl::Nonnull worker_queue) = 0; + virtual bool CreateAndAttachAecDump( + absl::Nonnull handle, + int64_t max_log_size_bytes, + absl::Nonnull worker_queue) = 0; + + // TODO(webrtc:5298) Deprecated variant. + // Attaches provided webrtc::AecDump for recording debugging + // information. Log file and maximum file size logic is supposed to + // be handled by implementing instance of AecDump. Calling this + // method when another AecDump is attached resets the active AecDump + // with a new one. This causes the d-tor of the earlier AecDump to + // be called. The d-tor call may block until all pending logging + // tasks are completed. + virtual void AttachAecDump(std::unique_ptr aec_dump) = 0; + + // If no AecDump is attached, this has no effect. If an AecDump is + // attached, it's destructor is called. The d-tor may block until + // all pending logging tasks are completed. + virtual void DetachAecDump() = 0; + + // Get audio processing statistics. + virtual AudioProcessingStats GetStatistics() = 0; + // TODO(webrtc:5298) Deprecated variant. The `has_remote_tracks` argument + // should be set if there are active remote tracks (this would usually be true + // during a call). If there are no remote tracks some of the stats will not be + // set by AudioProcessing, because they only make sense if there is at least + // one remote track. + virtual AudioProcessingStats GetStatistics(bool has_remote_tracks) = 0; + + // Returns the last applied configuration. + virtual AudioProcessing::Config GetConfig() const = 0; + + enum Error { + // Fatal errors. + kNoError = 0, + kUnspecifiedError = -1, + kCreationFailedError = -2, + kUnsupportedComponentError = -3, + kUnsupportedFunctionError = -4, + kNullPointerError = -5, + kBadParameterError = -6, + kBadSampleRateError = -7, + kBadDataLengthError = -8, + kBadNumberChannelsError = -9, + kFileError = -10, + kStreamParameterNotSetError = -11, + kNotEnabledError = -12, + + // Warnings are non-fatal. + // This results when a set_stream_ parameter is out of range. Processing + // will continue, but the parameter may have been truncated. + kBadStreamParameterWarning = -13 + }; + + // Native rates supported by the integer interfaces. + enum NativeRate { + kSampleRate8kHz = 8000, + kSampleRate16kHz = 16000, + kSampleRate32kHz = 32000, + kSampleRate48kHz = 48000 + }; + + // TODO(kwiberg): We currently need to support a compiler (Visual C++) that + // complains if we don't explicitly state the size of the array here. Remove + // the size when that's no longer the case. + static constexpr int kNativeSampleRatesHz[4] = { + kSampleRate8kHz, kSampleRate16kHz, kSampleRate32kHz, kSampleRate48kHz}; + static constexpr size_t kNumNativeSampleRates = + arraysize(kNativeSampleRatesHz); + static constexpr int kMaxNativeSampleRateHz = + kNativeSampleRatesHz[kNumNativeSampleRates - 1]; + + // APM processes audio in chunks of about 10 ms. See GetFrameSize() for + // details. + static constexpr int kChunkSizeMs = 10; + + // Returns floor(sample_rate_hz/100): the number of samples per channel used + // as input and output to the audio processing module in calls to + // ProcessStream, ProcessReverseStream, AnalyzeReverseStream, and + // GetLinearAecOutput. + // + // This is exactly 10 ms for sample rates divisible by 100. For example: + // - 48000 Hz (480 samples per channel), + // - 44100 Hz (441 samples per channel), + // - 16000 Hz (160 samples per channel). + // + // Sample rates not divisible by 100 are received/produced in frames of + // approximately 10 ms. For example: + // - 22050 Hz (220 samples per channel, or ~9.98 ms per frame), + // - 11025 Hz (110 samples per channel, or ~9.98 ms per frame). + // These nondivisible sample rates yield lower audio quality compared to + // multiples of 100. Internal resampling to 10 ms frames causes a simulated + // clock drift effect which impacts the performance of (for example) echo + // cancellation. + static int GetFrameSize(int sample_rate_hz) { return sample_rate_hz / 100; } +}; + +class RTC_EXPORT AudioProcessingBuilder { + public: + AudioProcessingBuilder(); + AudioProcessingBuilder(const AudioProcessingBuilder&) = delete; + AudioProcessingBuilder& operator=(const AudioProcessingBuilder&) = delete; + ~AudioProcessingBuilder(); + + // Sets the APM configuration. + AudioProcessingBuilder& SetConfig(const AudioProcessing::Config& config) { + config_ = config; + return *this; + } + + // Sets the echo controller factory to inject when APM is created. + AudioProcessingBuilder& SetEchoControlFactory( + std::unique_ptr echo_control_factory) { + echo_control_factory_ = std::move(echo_control_factory); + return *this; + } + + // Sets the capture post-processing sub-module to inject when APM is created. + AudioProcessingBuilder& SetCapturePostProcessing( + std::unique_ptr capture_post_processing) { + capture_post_processing_ = std::move(capture_post_processing); + return *this; + } + + // Sets the render pre-processing sub-module to inject when APM is created. + AudioProcessingBuilder& SetRenderPreProcessing( + std::unique_ptr render_pre_processing) { + render_pre_processing_ = std::move(render_pre_processing); + return *this; + } + + // Sets the echo detector to inject when APM is created. + AudioProcessingBuilder& SetEchoDetector( + rtc::scoped_refptr echo_detector) { + echo_detector_ = std::move(echo_detector); + return *this; + } + + // Sets the capture analyzer sub-module to inject when APM is created. + AudioProcessingBuilder& SetCaptureAnalyzer( + std::unique_ptr capture_analyzer) { + capture_analyzer_ = std::move(capture_analyzer); + return *this; + } + + // Creates an APM instance with the specified config or the default one if + // unspecified. Injects the specified components transferring the ownership + // to the newly created APM instance - i.e., except for the config, the + // builder is reset to its initial state. + rtc::scoped_refptr Create(); + + private: + AudioProcessing::Config config_; + std::unique_ptr echo_control_factory_; + std::unique_ptr capture_post_processing_; + std::unique_ptr render_pre_processing_; + rtc::scoped_refptr echo_detector_; + std::unique_ptr capture_analyzer_; +}; + +class StreamConfig { + public: + // sample_rate_hz: The sampling rate of the stream. + // num_channels: The number of audio channels in the stream. + StreamConfig(int sample_rate_hz = 0, + size_t num_channels = 0) // NOLINT(runtime/explicit) + : sample_rate_hz_(sample_rate_hz), + num_channels_(num_channels), + num_frames_(calculate_frames(sample_rate_hz)) {} + + void set_sample_rate_hz(int value) { + sample_rate_hz_ = value; + num_frames_ = calculate_frames(value); + } + void set_num_channels(size_t value) { num_channels_ = value; } + + int sample_rate_hz() const { return sample_rate_hz_; } + + // The number of channels in the stream. + size_t num_channels() const { return num_channels_; } + + size_t num_frames() const { return num_frames_; } + size_t num_samples() const { return num_channels_ * num_frames_; } + + bool operator==(const StreamConfig& other) const { + return sample_rate_hz_ == other.sample_rate_hz_ && + num_channels_ == other.num_channels_; + } + + bool operator!=(const StreamConfig& other) const { return !(*this == other); } + + private: + static size_t calculate_frames(int sample_rate_hz) { + return static_cast(AudioProcessing::GetFrameSize(sample_rate_hz)); + } + + int sample_rate_hz_; + size_t num_channels_; + size_t num_frames_; +}; + +class ProcessingConfig { + public: + enum StreamName { + kInputStream, + kOutputStream, + kReverseInputStream, + kReverseOutputStream, + kNumStreamNames, + }; + + const StreamConfig& input_stream() const { + return streams[StreamName::kInputStream]; + } + const StreamConfig& output_stream() const { + return streams[StreamName::kOutputStream]; + } + const StreamConfig& reverse_input_stream() const { + return streams[StreamName::kReverseInputStream]; + } + const StreamConfig& reverse_output_stream() const { + return streams[StreamName::kReverseOutputStream]; + } + + StreamConfig& input_stream() { return streams[StreamName::kInputStream]; } + StreamConfig& output_stream() { return streams[StreamName::kOutputStream]; } + StreamConfig& reverse_input_stream() { + return streams[StreamName::kReverseInputStream]; + } + StreamConfig& reverse_output_stream() { + return streams[StreamName::kReverseOutputStream]; + } + + bool operator==(const ProcessingConfig& other) const { + for (int i = 0; i < StreamName::kNumStreamNames; ++i) { + if (this->streams[i] != other.streams[i]) { + return false; + } + } + return true; + } + + bool operator!=(const ProcessingConfig& other) const { + return !(*this == other); + } + + StreamConfig streams[StreamName::kNumStreamNames]; +}; + +// Experimental interface for a custom analysis submodule. +class CustomAudioAnalyzer { + public: + // (Re-) Initializes the submodule. + virtual void Initialize(int sample_rate_hz, int num_channels) = 0; + // Analyzes the given capture or render signal. + virtual void Analyze(const AudioBuffer* audio) = 0; + // Returns a string representation of the module state. + virtual std::string ToString() const = 0; + + virtual ~CustomAudioAnalyzer() {} +}; + +// Interface for a custom processing submodule. +class CustomProcessing { + public: + // (Re-)Initializes the submodule. + virtual void Initialize(int sample_rate_hz, int num_channels) = 0; + // Processes the given capture or render signal. + virtual void Process(AudioBuffer* audio) = 0; + // Returns a string representation of the module state. + virtual std::string ToString() const = 0; + // Handles RuntimeSettings. TODO(webrtc:9262): make pure virtual + // after updating dependencies. + virtual void SetRuntimeSetting(AudioProcessing::RuntimeSetting setting); + + virtual ~CustomProcessing() {} +}; + +// Interface for an echo detector submodule. +class EchoDetector : public RefCountInterface { + public: + // (Re-)Initializes the submodule. + virtual void Initialize(int capture_sample_rate_hz, + int num_capture_channels, + int render_sample_rate_hz, + int num_render_channels) = 0; + + // Analysis (not changing) of the first channel of the render signal. + virtual void AnalyzeRenderAudio(rtc::ArrayView render_audio) = 0; + + // Analysis (not changing) of the capture signal. + virtual void AnalyzeCaptureAudio( + rtc::ArrayView capture_audio) = 0; + + struct Metrics { + absl::optional echo_likelihood; + absl::optional echo_likelihood_recent_max; + }; + + // Collect current metrics from the echo detector. + virtual Metrics GetMetrics() const = 0; +}; + +} // namespace webrtc + +#endif // API_AUDIO_AUDIO_PROCESSING_H_ diff --git a/modules/audio_processing/include/audio_processing_statistics.cc b/api/audio/audio_processing_statistics.cc similarity index 89% rename from modules/audio_processing/include/audio_processing_statistics.cc rename to api/audio/audio_processing_statistics.cc index 7139ee502e..90da7e8874 100644 --- a/modules/audio_processing/include/audio_processing_statistics.cc +++ b/api/audio/audio_processing_statistics.cc @@ -8,7 +8,7 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include "modules/audio_processing/include/audio_processing_statistics.h" +#include "api/audio/audio_processing_statistics.h" namespace webrtc { diff --git a/api/audio/audio_processing_statistics.h b/api/audio/audio_processing_statistics.h new file mode 100644 index 0000000000..6f77d07c92 --- /dev/null +++ b/api/audio/audio_processing_statistics.h @@ -0,0 +1,67 @@ +/* + * Copyright 2017 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 API_AUDIO_AUDIO_PROCESSING_STATISTICS_H_ +#define API_AUDIO_AUDIO_PROCESSING_STATISTICS_H_ + +#include + +#include "absl/types/optional.h" +#include "rtc_base/system/rtc_export.h" + +namespace webrtc { +// This version of the stats uses Optionals, it will replace the regular +// AudioProcessingStatistics struct. +struct RTC_EXPORT AudioProcessingStats { + AudioProcessingStats(); + AudioProcessingStats(const AudioProcessingStats& other); + ~AudioProcessingStats(); + + // Deprecated. + // TODO(bugs.webrtc.org/11226): Remove. + // True if voice is detected in the last capture frame, after processing. + // It is conservative in flagging audio as speech, with low likelihood of + // incorrectly flagging a frame as voice. + // Only reported if voice detection is enabled in AudioProcessing::Config. + absl::optional voice_detected; + + // AEC Statistics. + // ERL = 10log_10(P_far / P_echo) + absl::optional echo_return_loss; + // ERLE = 10log_10(P_echo / P_out) + absl::optional echo_return_loss_enhancement; + // Fraction of time that the AEC linear filter is divergent, in a 1-second + // non-overlapped aggregation window. + absl::optional divergent_filter_fraction; + + // The delay metrics consists of the delay median and standard deviation. It + // also consists of the fraction of delay estimates that can make the echo + // cancellation perform poorly. The values are aggregated until the first + // call to `GetStatistics()` and afterwards aggregated and updated every + // second. Note that if there are several clients pulling metrics from + // `GetStatistics()` during a session the first call from any of them will + // change to one second aggregation window for all. + absl::optional delay_median_ms; + absl::optional delay_standard_deviation_ms; + + // Residual echo detector likelihood. + absl::optional residual_echo_likelihood; + // Maximum residual echo likelihood from the last time period. + absl::optional residual_echo_likelihood_recent_max; + + // The instantaneous delay estimate produced in the AEC. The unit is in + // milliseconds and the value is the instantaneous value at the time of the + // call to `GetStatistics()`. + absl::optional delay_ms; +}; + +} // namespace webrtc + +#endif // API_AUDIO_AUDIO_PROCESSING_STATISTICS_H_ diff --git a/api/audio/echo_detector_creator.h b/api/audio/echo_detector_creator.h index 5ba171de97..27dd58cbf2 100644 --- a/api/audio/echo_detector_creator.h +++ b/api/audio/echo_detector_creator.h @@ -11,8 +11,8 @@ #ifndef API_AUDIO_ECHO_DETECTOR_CREATOR_H_ #define API_AUDIO_ECHO_DETECTOR_CREATOR_H_ +#include "api/audio/audio_processing.h" #include "api/scoped_refptr.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc { diff --git a/api/create_peerconnection_factory.cc b/api/create_peerconnection_factory.cc index bd77f74882..42bfa60855 100644 --- a/api/create_peerconnection_factory.cc +++ b/api/create_peerconnection_factory.cc @@ -13,6 +13,7 @@ #include #include +#include "api/audio/audio_processing.h" #include "api/enable_media.h" #include "api/peer_connection_interface.h" #include "api/rtc_event_log/rtc_event_log_factory.h" @@ -20,7 +21,6 @@ #include "api/task_queue/default_task_queue_factory.h" #include "api/transport/field_trial_based_config.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/thread.h" namespace webrtc { diff --git a/api/create_peerconnection_factory.h b/api/create_peerconnection_factory.h index 6ca4cb0ad9..adb4de9279 100644 --- a/api/create_peerconnection_factory.h +++ b/api/create_peerconnection_factory.h @@ -14,6 +14,7 @@ #include #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/audio_decoder_factory.h" #include "api/audio_codecs/audio_encoder_factory.h" #include "api/field_trials_view.h" @@ -34,7 +35,6 @@ namespace webrtc { class AudioDeviceModule; class AudioFrameProcessor; -class AudioProcessing; // Create a new instance of PeerConnectionFactoryInterface with optional video // codec factories. These video factories represents all video codecs, i.e. no diff --git a/api/enable_media_with_defaults.cc b/api/enable_media_with_defaults.cc index 81462f703e..ace224707f 100644 --- a/api/enable_media_with_defaults.cc +++ b/api/enable_media_with_defaults.cc @@ -10,13 +10,13 @@ #include "api/enable_media_with_defaults.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/enable_media.h" #include "api/task_queue/default_task_queue_factory.h" #include "api/video_codecs/builtin_video_decoder_factory.h" #include "api/video_codecs/builtin_video_encoder_factory.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc { diff --git a/api/media_stream_interface.h b/api/media_stream_interface.h index 4f9bffac85..d050fe72f6 100644 --- a/api/media_stream_interface.h +++ b/api/media_stream_interface.h @@ -22,6 +22,7 @@ #include #include "absl/types/optional.h" +#include "api/audio/audio_processing_statistics.h" #include "api/audio_options.h" #include "api/ref_count.h" #include "api/scoped_refptr.h" @@ -30,7 +31,6 @@ #include "api/video/video_sink_interface.h" #include "api/video/video_source_interface.h" #include "api/video_track_source_constraints.h" -#include "modules/audio_processing/include/audio_processing_statistics.h" #include "rtc_base/system/rtc_export.h" namespace webrtc { diff --git a/api/test/audioproc_float.h b/api/test/audioproc_float.h index 1ef1c9828f..021bc732e1 100644 --- a/api/test/audioproc_float.h +++ b/api/test/audioproc_float.h @@ -14,7 +14,7 @@ #include #include -#include "modules/audio_processing/include/audio_processing.h" +#include "api/audio/audio_processing.h" namespace webrtc { namespace test { diff --git a/api/test/pclf/BUILD.gn b/api/test/pclf/BUILD.gn index 68f1688556..0dc8f570f3 100644 --- a/api/test/pclf/BUILD.gn +++ b/api/test/pclf/BUILD.gn @@ -32,7 +32,6 @@ rtc_source_set("media_configuration") { "../..:stats_observer_interface", "../..:track_id_stream_info_map", "../..:video_quality_analyzer_api", - "../../../modules/audio_processing:api", "../../../rtc_base:checks", "../../../rtc_base:network", "../../../rtc_base:rtc_certificate_generator", @@ -43,6 +42,7 @@ rtc_source_set("media_configuration") { "../../../test:video_test_support", "../../../test/pc/e2e/analyzer/video:video_dumping", "../../audio:audio_mixer_api", + "../../audio:audio_processing", "../../rtc_event_log", "../../task_queue", "../../transport:network_control", @@ -73,7 +73,6 @@ rtc_library("media_quality_test_params") { "../../../api/rtc_event_log", "../../../api/transport:network_control", "../../../api/video_codecs:video_codecs_api", - "../../../modules/audio_processing:api", "../../../p2p:connection", "../../../p2p:port_allocator", "../../../p2p:rtc_p2p", @@ -81,6 +80,7 @@ rtc_library("media_quality_test_params") { "../../../rtc_base:rtc_certificate_generator", "../../../rtc_base:ssl", "../../../rtc_base:threading", + "../../audio:audio_processing", ] } @@ -110,10 +110,10 @@ rtc_library("peer_configurer") { "../../../api/transport:bitrate_settings", "../../../api/transport:network_control", "../../../api/video_codecs:video_codecs_api", - "../../../modules/audio_processing:api", "../../../rtc_base:checks", "../../../rtc_base:rtc_certificate_generator", "../../../rtc_base:ssl", + "../../audio:audio_processing", ] absl_deps = [ "//third_party/abseil-cpp/absl/strings", diff --git a/api/test/pclf/media_configuration.h b/api/test/pclf/media_configuration.h index ad29e17e7d..737e4b1a91 100644 --- a/api/test/pclf/media_configuration.h +++ b/api/test/pclf/media_configuration.h @@ -25,6 +25,7 @@ #include "absl/types/optional.h" #include "api/array_view.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_options.h" #include "api/fec_controller.h" #include "api/function_view.h" @@ -46,7 +47,6 @@ #include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_encoder.h" #include "api/video_codecs/video_encoder_factory.h" -#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/checks.h" #include "rtc_base/network.h" #include "rtc_base/rtc_certificate_generator.h" diff --git a/api/test/pclf/media_quality_test_params.h b/api/test/pclf/media_quality_test_params.h index 8a3a13a33b..f1baf4662d 100644 --- a/api/test/pclf/media_quality_test_params.h +++ b/api/test/pclf/media_quality_test_params.h @@ -17,6 +17,7 @@ #include "api/async_dns_resolver.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/fec_controller.h" #include "api/field_trials_view.h" #include "api/rtc_event_log/rtc_event_log_factory_interface.h" @@ -24,7 +25,6 @@ #include "api/transport/network_control.h" #include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_encoder_factory.h" -#include "modules/audio_processing/include/audio_processing.h" #include "p2p/base/port_allocator.h" #include "rtc_base/network.h" #include "rtc_base/rtc_certificate_generator.h" diff --git a/api/test/pclf/peer_configurer.cc b/api/test/pclf/peer_configurer.cc index ac0d02818f..765ec2df56 100644 --- a/api/test/pclf/peer_configurer.cc +++ b/api/test/pclf/peer_configurer.cc @@ -20,6 +20,7 @@ #include "absl/types/optional.h" #include "api/async_dns_resolver.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/audio_decoder_factory.h" #include "api/audio_codecs/audio_encoder_factory.h" #include "api/fec_controller.h" @@ -38,7 +39,6 @@ #include "api/transport/network_control.h" #include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_encoder_factory.h" -#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/checks.h" #include "rtc_base/rtc_certificate_generator.h" #include "rtc_base/ssl_certificate.h" diff --git a/api/test/pclf/peer_configurer.h b/api/test/pclf/peer_configurer.h index 1c6fb4c0e6..3c88d9b3a6 100644 --- a/api/test/pclf/peer_configurer.h +++ b/api/test/pclf/peer_configurer.h @@ -19,6 +19,7 @@ #include "absl/types/variant.h" #include "api/async_dns_resolver.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/audio_decoder_factory.h" #include "api/audio_codecs/audio_encoder_factory.h" #include "api/fec_controller.h" @@ -36,7 +37,6 @@ #include "api/transport/network_control.h" #include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_encoder_factory.h" -#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/rtc_certificate_generator.h" #include "rtc_base/ssl_certificate.h" diff --git a/api/test/peerconnection_quality_test_fixture.h b/api/test/peerconnection_quality_test_fixture.h index 7e19eb1629..0b1e69e5ab 100644 --- a/api/test/peerconnection_quality_test_fixture.h +++ b/api/test/peerconnection_quality_test_fixture.h @@ -26,6 +26,7 @@ #include "absl/types/optional.h" #include "api/array_view.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/fec_controller.h" #include "api/function_view.h" #include "api/media_stream_interface.h" @@ -50,7 +51,6 @@ #include "api/video_codecs/video_encoder.h" #include "api/video_codecs/video_encoder_factory.h" #include "media/base/media_constants.h" -#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/checks.h" #include "rtc_base/network.h" #include "rtc_base/rtc_certificate_generator.h" diff --git a/api/voip/BUILD.gn b/api/voip/BUILD.gn index 714490a526..f175c307c1 100644 --- a/api/voip/BUILD.gn +++ b/api/voip/BUILD.gn @@ -41,8 +41,8 @@ rtc_library("voip_engine_factory") { "..:scoped_refptr", "../../audio/voip:voip_core", "../../modules/audio_device:audio_device_api", - "../../modules/audio_processing:api", "../../rtc_base:logging", + "../audio:audio_processing", "../audio_codecs:audio_codecs_api", "../task_queue", ] diff --git a/api/voip/voip_engine_factory.h b/api/voip/voip_engine_factory.h index 62fe8011a6..3abced7b10 100644 --- a/api/voip/voip_engine_factory.h +++ b/api/voip/voip_engine_factory.h @@ -13,13 +13,13 @@ #include +#include "api/audio/audio_processing.h" #include "api/audio_codecs/audio_decoder_factory.h" #include "api/audio_codecs/audio_encoder_factory.h" #include "api/scoped_refptr.h" #include "api/task_queue/task_queue_factory.h" #include "api/voip/voip_engine.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc { diff --git a/audio/BUILD.gn b/audio/BUILD.gn index 536e192b92..07a0006757 100644 --- a/audio/BUILD.gn +++ b/audio/BUILD.gn @@ -52,6 +52,7 @@ rtc_library("audio") { "../api/audio:audio_frame_api", "../api/audio:audio_frame_processor", "../api/audio:audio_mixer_api", + "../api/audio:audio_processing", "../api/audio_codecs:audio_codecs_api", "../api/crypto:frame_decryptor_interface", "../api/crypto:frame_encryptor_interface", @@ -80,7 +81,6 @@ rtc_library("audio") { "../modules/audio_coding:red", "../modules/audio_device", "../modules/audio_processing", - "../modules/audio_processing:api", "../modules/audio_processing:audio_frame_proxies", "../modules/audio_processing:rms_level", "../modules/pacing", @@ -171,6 +171,7 @@ if (rtc_include_tests) { "../api:mock_transformable_audio_frame", "../api:scoped_refptr", "../api/audio:audio_frame_api", + "../api/audio:audio_processing_statistics", "../api/audio_codecs:audio_codecs_api", "../api/audio_codecs:builtin_audio_encoder_factory", "../api/audio_codecs/opus:audio_decoder_opus", @@ -195,7 +196,6 @@ if (rtc_include_tests) { "../modules/audio_device:mock_audio_device", "../modules/audio_mixer:audio_mixer_impl", "../modules/audio_mixer:audio_mixer_test_utils", - "../modules/audio_processing:audio_processing_statistics", "../modules/audio_processing:mocks", "../modules/pacing", "../modules/rtp_rtcp:mock_rtp_rtcp", diff --git a/audio/audio_send_stream.cc b/audio/audio_send_stream.cc index 59b0ea5b5e..27c733f203 100644 --- a/audio/audio_send_stream.cc +++ b/audio/audio_send_stream.cc @@ -15,6 +15,7 @@ #include #include +#include "api/audio/audio_processing.h" #include "api/audio_codecs/audio_encoder.h" #include "api/audio_codecs/audio_encoder_factory.h" #include "api/audio_codecs/audio_format.h" @@ -34,7 +35,6 @@ #include "media/base/media_channel.h" #include "modules/audio_coding/codecs/cng/audio_encoder_cng.h" #include "modules/audio_coding/codecs/red/audio_encoder_copy_red.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/rtp_rtcp/source/rtp_header_extensions.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" diff --git a/audio/audio_send_stream_unittest.cc b/audio/audio_send_stream_unittest.cc index 60d87eb080..d71776e9a3 100644 --- a/audio/audio_send_stream_unittest.cc +++ b/audio/audio_send_stream_unittest.cc @@ -16,6 +16,7 @@ #include #include +#include "api/audio/audio_processing_statistics.h" #include "api/task_queue/default_task_queue_factory.h" #include "api/test/mock_frame_encryptor.h" #include "audio/audio_state.h" @@ -27,7 +28,6 @@ #include "modules/audio_device/include/mock_audio_device.h" #include "modules/audio_mixer/audio_mixer_impl.h" #include "modules/audio_mixer/sine_wave_generator.h" -#include "modules/audio_processing/include/audio_processing_statistics.h" #include "modules/audio_processing/include/mock_audio_processing.h" #include "modules/rtp_rtcp/mocks/mock_network_link_rtcp_observer.h" #include "modules/rtp_rtcp/mocks/mock_rtp_rtcp.h" diff --git a/audio/audio_transport_impl.h b/audio/audio_transport_impl.h index 24b09d2140..d7a4b7db2a 100644 --- a/audio/audio_transport_impl.h +++ b/audio/audio_transport_impl.h @@ -15,11 +15,11 @@ #include #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/scoped_refptr.h" #include "common_audio/resampler/include/push_resampler.h" #include "modules/async_audio_processing/async_audio_processing.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/synchronization/mutex.h" #include "rtc_base/thread_annotations.h" diff --git a/audio/voip/BUILD.gn b/audio/voip/BUILD.gn index 75f20a6ed2..2b0717949f 100644 --- a/audio/voip/BUILD.gn +++ b/audio/voip/BUILD.gn @@ -17,12 +17,12 @@ rtc_library("voip_core") { ":audio_channel", "..:audio", "../../api:scoped_refptr", + "../../api/audio:audio_processing", "../../api/audio_codecs:audio_codecs_api", "../../api/task_queue", "../../api/voip:voip_api", "../../modules/audio_device:audio_device_api", "../../modules/audio_mixer:audio_mixer_impl", - "../../modules/audio_processing:api", "../../rtc_base:criticalsection", "../../rtc_base:logging", "../../rtc_base/synchronization:mutex", diff --git a/audio/voip/voip_core.h b/audio/voip/voip_core.h index 6c3aec6fa2..2c7c7ee75c 100644 --- a/audio/voip/voip_core.h +++ b/audio/voip/voip_core.h @@ -17,6 +17,7 @@ #include #include +#include "api/audio/audio_processing.h" #include "api/audio_codecs/audio_decoder_factory.h" #include "api/audio_codecs/audio_encoder_factory.h" #include "api/scoped_refptr.h" @@ -32,7 +33,6 @@ #include "audio/voip/audio_channel.h" #include "modules/audio_device/include/audio_device.h" #include "modules/audio_mixer/audio_mixer_impl.h" -#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/synchronization/mutex.h" namespace webrtc { diff --git a/call/BUILD.gn b/call/BUILD.gn index c472fa08f8..43e32a3d09 100644 --- a/call/BUILD.gn +++ b/call/BUILD.gn @@ -52,6 +52,8 @@ rtc_library("call_interfaces") { "../api/adaptation:resource_adaptation_api", "../api/audio:audio_frame_processor", "../api/audio:audio_mixer_api", + "../api/audio:audio_processing", + "../api/audio:audio_processing_statistics", "../api/audio_codecs:audio_codecs_api", "../api/crypto:frame_encryptor_interface", "../api/crypto:options", @@ -64,8 +66,6 @@ rtc_library("call_interfaces") { "../modules/async_audio_processing", "../modules/audio_device", "../modules/audio_processing", - "../modules/audio_processing:api", - "../modules/audio_processing:audio_processing_statistics", "../modules/rtp_rtcp", "../modules/rtp_rtcp:rtp_rtcp_format", "../rtc_base:audio_format_to_string", diff --git a/call/audio_send_stream.h b/call/audio_send_stream.h index 9c2fad652f..798b1cdb9f 100644 --- a/call/audio_send_stream.h +++ b/call/audio_send_stream.h @@ -16,6 +16,7 @@ #include #include "absl/types/optional.h" +#include "api/audio/audio_processing_statistics.h" #include "api/audio_codecs/audio_codec_pair_id.h" #include "api/audio_codecs/audio_encoder.h" #include "api/audio_codecs/audio_encoder_factory.h" @@ -29,7 +30,6 @@ #include "api/scoped_refptr.h" #include "call/audio_sender.h" #include "call/rtp_config.h" -#include "modules/audio_processing/include/audio_processing_statistics.h" #include "modules/rtp_rtcp/include/report_block_data.h" namespace webrtc { diff --git a/call/audio_state.h b/call/audio_state.h index 79fb5cf981..8f6bc7d0ff 100644 --- a/call/audio_state.h +++ b/call/audio_state.h @@ -11,10 +11,10 @@ #define CALL_AUDIO_STATE_H_ #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/scoped_refptr.h" #include "modules/async_audio_processing/async_audio_processing.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/ref_count.h" namespace webrtc { diff --git a/examples/BUILD.gn b/examples/BUILD.gn index 026c974fc1..c66f282ae3 100644 --- a/examples/BUILD.gn +++ b/examples/BUILD.gn @@ -489,12 +489,12 @@ if (is_ios || (is_mac && target_cpu != "x86")) { "../api:libjingle_peerconnection_api", "../api:scoped_refptr", "../api:sequence_checker", + "../api/audio:audio_processing", "../api/audio_codecs:builtin_audio_decoder_factory", "../api/audio_codecs:builtin_audio_encoder_factory", "../api/rtc_event_log:rtc_event_log_factory", "../api/task_queue:default_task_queue_factory", "../modules/audio_processing", - "../modules/audio_processing:api", "../pc:libjingle_peerconnection", "../rtc_base/synchronization:mutex", "../sdk:base_objc", @@ -690,6 +690,7 @@ if (is_linux || is_chromeos || is_win) { "../api:rtp_sender_interface", "../api:scoped_refptr", "../api/audio:audio_mixer_api", + "../api/audio:audio_processing", "../api/audio_codecs:audio_codecs_api", "../api/task_queue:pending_task_safety_flag", "../api/units:time_delta", @@ -768,7 +769,6 @@ if (is_linux || is_chromeos || is_win) { "../media:rtc_audio_video", "../modules/audio_device", "../modules/audio_processing", - "../modules/audio_processing:api", "../modules/video_capture:video_capture_module", "../pc:libjingle_peerconnection", "../rtc_base:rtc_json", diff --git a/examples/objcnativeapi/objc/objc_call_client.mm b/examples/objcnativeapi/objc/objc_call_client.mm index 2601beed71..a794f96628 100644 --- a/examples/objcnativeapi/objc/objc_call_client.mm +++ b/examples/objcnativeapi/objc/objc_call_client.mm @@ -18,13 +18,13 @@ #import "sdk/objc/components/video_codec/RTCDefaultVideoEncoderFactory.h" #import "sdk/objc/helpers/RTCCameraPreviewView.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/enable_media.h" #include "api/peer_connection_interface.h" #include "api/rtc_event_log/rtc_event_log_factory.h" #include "api/task_queue/default_task_queue_factory.h" -#include "modules/audio_processing/include/audio_processing.h" #include "sdk/objc/native/api/video_capturer.h" #include "sdk/objc/native/api/video_decoder_factory.h" #include "sdk/objc/native/api/video_encoder_factory.h" diff --git a/examples/peerconnection/client/conductor.cc b/examples/peerconnection/client/conductor.cc index f94a981a75..1dd9dcd14c 100644 --- a/examples/peerconnection/client/conductor.cc +++ b/examples/peerconnection/client/conductor.cc @@ -20,6 +20,7 @@ #include "absl/memory/memory.h" #include "absl/types/optional.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/audio_decoder_factory.h" #include "api/audio_codecs/audio_encoder_factory.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" @@ -41,7 +42,6 @@ #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h" #include "examples/peerconnection/client/defaults.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/video_capture/video_capture.h" #include "modules/video_capture/video_capture_factory.h" #include "p2p/base/port_allocator.h" diff --git a/media/BUILD.gn b/media/BUILD.gn index 6568944cd3..6a13f78c97 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn @@ -106,7 +106,6 @@ rtc_library("rtc_media_base") { "../common_video", "../modules/async_audio_processing", "../modules/audio_device", - "../modules/audio_processing:audio_processing_statistics", "../modules/rtp_rtcp:rtp_rtcp_format", "../rtc_base:async_packet_socket", "../rtc_base:buffer", @@ -329,6 +328,7 @@ rtc_source_set("media_channel") { "../api:rtp_parameters", "../api:rtp_sender_interface", "../api:scoped_refptr", + "../api/audio:audio_processing_statistics", "../api/audio_codecs:audio_codecs_api", "../api/crypto:frame_decryptor_interface", "../api/crypto:frame_encryptor_interface", @@ -344,7 +344,6 @@ rtc_source_set("media_channel") { "../api/video_codecs:video_codecs_api", "../call:video_stream_api", "../common_video", - "../modules/audio_processing:audio_processing_statistics", "../modules/rtp_rtcp:rtp_rtcp_format", "../rtc_base:async_packet_socket", "../rtc_base:buffer", @@ -581,6 +580,8 @@ rtc_library("rtc_audio_video") { "../api/audio:audio_frame_api", "../api/audio:audio_frame_processor", "../api/audio:audio_mixer_api", + "../api/audio:audio_processing", + "../api/audio:audio_processing_statistics", "../api/audio_codecs:audio_codecs_api", "../api/crypto:frame_decryptor_interface", "../api/crypto:frame_encryptor_interface", @@ -615,8 +616,6 @@ rtc_library("rtc_audio_video") { "../modules/audio_device", "../modules/audio_device:audio_device_impl", "../modules/audio_mixer:audio_mixer_impl", - "../modules/audio_processing:api", - "../modules/audio_processing:audio_processing_statistics", "../modules/audio_processing/aec_dump", "../modules/audio_processing/agc:gain_control_interface", "../modules/rtp_rtcp", @@ -807,6 +806,7 @@ if (rtc_include_tests) { "../api:fec_controller_api", "../api:rtp_parameters", "../api:scoped_refptr", + "../api/audio:audio_processing", "../api/environment", "../api/task_queue", "../api/task_queue:pending_task_safety_flag", @@ -821,7 +821,6 @@ if (rtc_include_tests) { "../call:video_stream_api", "../common_video", "../modules/audio_processing", - "../modules/audio_processing:api", "../modules/rtp_rtcp:rtp_rtcp_format", "../modules/video_coding:video_codec_interface", "../modules/video_coding:video_coding_utility", @@ -955,7 +954,6 @@ if (rtc_include_tests) { "../modules/audio_device:mock_audio_device", "../modules/audio_mixer:audio_mixer_impl", "../modules/audio_processing", - "../modules/audio_processing:api", "../modules/audio_processing:mocks", "../modules/rtp_rtcp", "../modules/rtp_rtcp:rtp_rtcp_format", diff --git a/media/base/fake_media_engine.h b/media/base/fake_media_engine.h index eddc76057d..6453890757 100644 --- a/media/base/fake_media_engine.h +++ b/media/base/fake_media_engine.h @@ -23,6 +23,7 @@ #include "absl/algorithm/container.h" #include "absl/functional/any_invocable.h" +#include "api/audio/audio_processing.h" #include "api/call/audio_sink.h" #include "api/media_types.h" #include "media/base/audio_source.h" @@ -32,7 +33,6 @@ #include "media/base/rtp_utils.h" #include "media/base/stream_params.h" #include "media/engine/webrtc_video_engine.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" #include "rtc_base/copy_on_write_buffer.h" #include "rtc_base/network_route.h" diff --git a/media/base/media_channel.h b/media/base/media_channel.h index 124f68c6ff..3721e5f3b1 100644 --- a/media/base/media_channel.h +++ b/media/base/media_channel.h @@ -19,6 +19,7 @@ #include #include "absl/types/optional.h" +#include "api/audio/audio_processing_statistics.h" #include "api/audio_codecs/audio_encoder.h" #include "api/audio_options.h" #include "api/call/audio_sink.h" @@ -45,7 +46,6 @@ #include "media/base/codec.h" #include "media/base/media_constants.h" #include "media/base/stream_params.h" -#include "modules/audio_processing/include/audio_processing_statistics.h" #include "modules/rtp_rtcp/include/report_block_data.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" #include "rtc_base/async_packet_socket.h" diff --git a/media/base/media_engine.h b/media/base/media_engine.h index b054893163..8d5b01cef2 100644 --- a/media/base/media_engine.h +++ b/media/base/media_engine.h @@ -32,7 +32,6 @@ namespace webrtc { class AudioDeviceModule; class AudioMixer; -class AudioProcessing; class Call; } // namespace webrtc diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc index 23a1b1927c..704544c3d5 100644 --- a/media/engine/webrtc_voice_engine.cc +++ b/media/engine/webrtc_voice_engine.cc @@ -29,6 +29,8 @@ #include "absl/types/optional.h" #include "api/audio/audio_frame.h" #include "api/audio/audio_frame_processor.h" +#include "api/audio/audio_processing.h" +#include "api/audio/audio_processing_statistics.h" #include "api/audio_codecs/audio_codec_pair_id.h" #include "api/audio_codecs/audio_encoder.h" #include "api/call/audio_sink.h" @@ -57,8 +59,6 @@ #include "media/engine/webrtc_media_engine.h" #include "modules/async_audio_processing/async_audio_processing.h" #include "modules/audio_mixer/audio_mixer_impl.h" -#include "modules/audio_processing/include/audio_processing.h" -#include "modules/audio_processing/include/audio_processing_statistics.h" #include "modules/rtp_rtcp/include/report_block_data.h" #include "modules/rtp_rtcp/include/rtp_header_extension_map.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" diff --git a/media/engine/webrtc_voice_engine.h b/media/engine/webrtc_voice_engine.h index b28b9652bb..d6682877ea 100644 --- a/media/engine/webrtc_voice_engine.h +++ b/media/engine/webrtc_voice_engine.h @@ -26,6 +26,7 @@ #include "absl/types/optional.h" #include "api/audio/audio_frame_processor.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/audio_codec_pair_id.h" #include "api/audio_codecs/audio_decoder_factory.h" #include "api/audio_codecs/audio_encoder_factory.h" @@ -59,7 +60,6 @@ #include "media/base/stream_params.h" #include "modules/async_audio_processing/async_audio_processing.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/rtp_rtcp/include/rtp_header_extension_map.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" #include "rtc_base/buffer.h" diff --git a/modules/audio_mixer/BUILD.gn b/modules/audio_mixer/BUILD.gn index fb038bf677..d97d180c75 100644 --- a/modules/audio_mixer/BUILD.gn +++ b/modules/audio_mixer/BUILD.gn @@ -43,6 +43,8 @@ rtc_library("audio_mixer_impl") { "../../api:scoped_refptr", "../../api/audio:audio_frame_api", "../../api/audio:audio_mixer_api", + "../../api/audio:audio_processing", + "../../api/audio:audio_processing", "../../audio/utility:audio_frame_operations", "../../common_audio", "../../rtc_base:checks", @@ -55,7 +57,6 @@ rtc_library("audio_mixer_impl") { "../../rtc_base/synchronization:mutex", "../../system_wrappers", "../../system_wrappers:metrics", - "../audio_processing:api", "../audio_processing:apm_logging", "../audio_processing:audio_frame_view", "../audio_processing/agc2:fixed_digital", diff --git a/modules/audio_mixer/default_output_rate_calculator.cc b/modules/audio_mixer/default_output_rate_calculator.cc index 5f24b653a3..e0e74171b0 100644 --- a/modules/audio_mixer/default_output_rate_calculator.cc +++ b/modules/audio_mixer/default_output_rate_calculator.cc @@ -13,7 +13,7 @@ #include #include -#include "modules/audio_processing/include/audio_processing.h" +#include "api/audio/audio_processing.h" #include "rtc_base/checks.h" namespace webrtc { diff --git a/modules/audio_mixer/frame_combiner.cc b/modules/audio_mixer/frame_combiner.cc index 96c62f6b0d..96d1d86f67 100644 --- a/modules/audio_mixer/frame_combiner.cc +++ b/modules/audio_mixer/frame_combiner.cc @@ -20,13 +20,13 @@ #include #include "api/array_view.h" +#include "api/audio/audio_processing.h" #include "api/rtp_packet_info.h" #include "api/rtp_packet_infos.h" #include "common_audio/include/audio_util.h" #include "modules/audio_mixer/audio_frame_manipulator.h" #include "modules/audio_mixer/audio_mixer_impl.h" #include "modules/audio_processing/include/audio_frame_view.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/audio_processing/logging/apm_data_dumper.h" #include "rtc_base/arraysize.h" #include "rtc_base/checks.h" diff --git a/modules/audio_processing/BUILD.gn b/modules/audio_processing/BUILD.gn index ba9ec95a2d..0bfee01562 100644 --- a/modules/audio_processing/BUILD.gn +++ b/modules/audio_processing/BUILD.gn @@ -21,33 +21,8 @@ config("apm_debug_dump") { rtc_library("api") { visibility = [ "*" ] - sources = [ - "include/audio_processing.cc", - "include/audio_processing.h", - ] - deps = [ - ":audio_frame_view", - ":audio_processing_statistics", - "../../api:array_view", - "../../api:ref_count", - "../../api:scoped_refptr", - "../../api/audio:aec3_config", - "../../api/audio:audio_frame_api", - "../../api/audio:echo_control", - "../../api/task_queue", - "../../rtc_base:macromagic", - "../../rtc_base:refcount", - "../../rtc_base:stringutils", - "../../rtc_base/system:arch", - "../../rtc_base/system:file_wrapper", - "../../rtc_base/system:rtc_export", - "agc:gain_control_interface", - ] - absl_deps = [ - "//third_party/abseil-cpp/absl/base:nullability", - "//third_party/abseil-cpp/absl/strings", - "//third_party/abseil-cpp/absl/types:optional", - ] + sources = [ "include/audio_processing.h" ] + deps = [ "../../api/audio:audio_processing" ] } rtc_library("audio_frame_proxies") { @@ -57,9 +32,9 @@ rtc_library("audio_frame_proxies") { "include/audio_frame_proxies.h", ] deps = [ - ":api", ":audio_frame_view", "../../api/audio:audio_frame_api", + "../../api/audio:audio_processing", ] } @@ -80,8 +55,8 @@ rtc_library("audio_buffer") { defines = [] deps = [ - ":api", "../../api:array_view", + "../../api/audio:audio_processing", "../../common_audio", "../../common_audio:common_audio_c", "../../rtc_base:checks", @@ -114,8 +89,8 @@ rtc_source_set("aec_dump_interface") { ] deps = [ - ":api", ":audio_frame_view", + "../../api/audio:audio_processing", ] absl_deps = [ "//third_party/abseil-cpp/absl/base:core_headers", @@ -132,10 +107,10 @@ rtc_library("gain_controller2") { defines = [] deps = [ ":aec_dump_interface", - ":api", ":apm_logging", ":audio_buffer", ":audio_frame_view", + "../../api/audio:audio_processing", "../../common_audio", "../../rtc_base:checks", "../../rtc_base:logging", @@ -171,12 +146,10 @@ rtc_library("audio_processing") { defines = [] deps = [ ":aec_dump_interface", - ":api", ":apm_logging", ":audio_buffer", ":audio_frame_proxies", ":audio_frame_view", - ":audio_processing_statistics", ":gain_controller2", ":high_pass_filter", ":optionally_built_submodule_creators", @@ -186,6 +159,8 @@ rtc_library("audio_processing") { "../../api:make_ref_counted", "../../api/audio:aec3_config", "../../api/audio:audio_frame_api", + "../../api/audio:audio_processing", + "../../api/audio:audio_processing_statistics", "../../api/audio:echo_control", "../../api/task_queue", "../../audio/utility:audio_frame_operations", @@ -255,9 +230,9 @@ rtc_library("residual_echo_detector") { "residual_echo_detector.h", ] deps = [ - ":api", ":apm_logging", "../../api:array_view", + "../../api/audio:audio_processing", "../../rtc_base:checks", "../../rtc_base:logging", "../../system_wrappers:metrics", @@ -291,12 +266,8 @@ rtc_source_set("rms_level") { rtc_library("audio_processing_statistics") { visibility = [ "*" ] - sources = [ - "include/audio_processing_statistics.cc", - "include/audio_processing_statistics.h", - ] - deps = [ "../../rtc_base/system:rtc_export" ] - absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ] + sources = [ "include/audio_processing_statistics.h" ] + deps = [ "../../api/audio:audio_processing_statistics" ] } rtc_source_set("audio_frame_view") { @@ -337,10 +308,10 @@ if (rtc_include_tests) { sources = [ "include/mock_audio_processing.h" ] deps = [ ":aec_dump_interface", - ":api", ":audio_buffer", ":audio_processing", - ":audio_processing_statistics", + "../../api/audio:audio_processing", + "../../api/audio:audio_processing_statistics", "../../api/task_queue", "../../test:test_support", ] @@ -386,7 +357,6 @@ if (rtc_include_tests) { deps = [ ":aec3_config_json", ":analog_mic_simulation", - ":api", ":apm_logging", ":audio_buffer", ":audio_frame_view", @@ -400,6 +370,7 @@ if (rtc_include_tests) { "../../api:scoped_refptr", "../../api/audio:aec3_config", "../../api/audio:aec3_factory", + "../../api/audio:audio_processing", "../../api/audio:echo_detector_creator", "../../common_audio", "../../common_audio:common_audio_c", @@ -568,7 +539,6 @@ if (rtc_include_tests) { deps = [ ":aec3_config_json", ":analog_mic_simulation", - ":api", ":apm_logging", ":audio_processing", ":audioproc_debug_proto", @@ -576,6 +546,7 @@ if (rtc_include_tests) { ":audioproc_test_utils", ":runtime_settings_protobuf_utils", "../../api/audio:aec3_factory", + "../../api/audio:audio_processing", "../../api/audio:echo_detector_creator", "../../common_audio", "../../rtc_base:checks", @@ -631,9 +602,9 @@ if (rtc_include_tests) { ] deps = [ - ":api", ":audioproc_debug_proto", ":audioproc_protobuf_utils", + "../../api/audio:audio_processing", "../../rtc_base:checks", ] } @@ -661,11 +632,11 @@ rtc_library("audioproc_test_utils") { configs += [ ":apm_debug_dump" ] deps = [ - ":api", ":audio_buffer", ":audio_processing", "../../api:array_view", "../../api/audio:audio_frame_api", + "../../api/audio:audio_processing", "../../common_audio", "../../rtc_base:checks", "../../rtc_base:random", diff --git a/modules/audio_processing/aec_dump/BUILD.gn b/modules/audio_processing/aec_dump/BUILD.gn index 5193e28dff..2757a288e9 100644 --- a/modules/audio_processing/aec_dump/BUILD.gn +++ b/modules/audio_processing/aec_dump/BUILD.gn @@ -47,9 +47,9 @@ if (rtc_include_tests) { deps = [ ":mock_aec_dump", - "..:api", "..:audioproc_test_utils", "../", + "../../../api/audio:audio_processing", "//testing/gtest", ] } diff --git a/modules/audio_processing/aec_dump/aec_dump_integration_test.cc b/modules/audio_processing/aec_dump/aec_dump_integration_test.cc index 503135d87f..067e37392b 100644 --- a/modules/audio_processing/aec_dump/aec_dump_integration_test.cc +++ b/modules/audio_processing/aec_dump/aec_dump_integration_test.cc @@ -12,9 +12,9 @@ #include #include +#include "api/audio/audio_processing.h" #include "modules/audio_processing/aec_dump/mock_aec_dump.h" #include "modules/audio_processing/audio_processing_impl.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/audio_processing/test/audio_processing_builder_for_testing.h" using ::testing::_; diff --git a/modules/audio_processing/agc/BUILD.gn b/modules/audio_processing/agc/BUILD.gn index 508f901b08..28312826a1 100644 --- a/modules/audio_processing/agc/BUILD.gn +++ b/modules/audio_processing/agc/BUILD.gn @@ -21,11 +21,11 @@ rtc_library("agc") { deps = [ ":gain_control_interface", ":level_estimation", - "..:api", "..:apm_logging", "..:audio_buffer", "..:audio_frame_view", "../../../api:array_view", + "../../../api/audio:audio_processing", "../../../common_audio", "../../../common_audio:common_audio_c", "../../../rtc_base:checks", diff --git a/modules/audio_processing/agc/agc_manager_direct.h b/modules/audio_processing/agc/agc_manager_direct.h index adb2f5a63f..62b0e0e452 100644 --- a/modules/audio_processing/agc/agc_manager_direct.h +++ b/modules/audio_processing/agc/agc_manager_direct.h @@ -16,10 +16,10 @@ #include "absl/types/optional.h" #include "api/array_view.h" +#include "api/audio/audio_processing.h" #include "modules/audio_processing/agc/agc.h" #include "modules/audio_processing/agc2/clipping_predictor.h" #include "modules/audio_processing/audio_buffer.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/audio_processing/logging/apm_data_dumper.h" #include "rtc_base/gtest_prod_util.h" diff --git a/modules/audio_processing/agc2/BUILD.gn b/modules/audio_processing/agc2/BUILD.gn index bd59ad3dae..5cc3db0e40 100644 --- a/modules/audio_processing/agc2/BUILD.gn +++ b/modules/audio_processing/agc2/BUILD.gn @@ -23,9 +23,9 @@ rtc_library("speech_level_estimator") { deps = [ ":common", - "..:api", "..:apm_logging", "../../../api:array_view", + "../../../api/audio:audio_processing", "../../../rtc_base:checks", "../../../rtc_base:logging", "../../../rtc_base:safe_minmax", @@ -48,9 +48,9 @@ rtc_library("adaptive_digital_gain_controller") { deps = [ ":common", ":gain_applier", - "..:api", "..:apm_logging", "..:audio_frame_view", + "../../../api/audio:audio_processing", "../../../common_audio", "../../../rtc_base:checks", "../../../rtc_base:logging", @@ -112,8 +112,8 @@ rtc_library("clipping_predictor") { deps = [ ":gain_map", - "..:api", "..:audio_frame_view", + "../../../api/audio:audio_processing", "../../../common_audio", "../../../rtc_base:checks", "../../../rtc_base:logging", @@ -209,10 +209,10 @@ rtc_library("input_volume_controller") { ":clipping_predictor", ":gain_map", ":input_volume_stats_reporter", - "..:api", "..:audio_buffer", "..:audio_frame_view", "../../../api:array_view", + "../../../api/audio:audio_processing", "../../../rtc_base:checks", "../../../rtc_base:checks", "../../../rtc_base:gtest_prod", @@ -303,8 +303,8 @@ rtc_library("speech_level_estimator_unittest") { deps = [ ":common", ":speech_level_estimator", - "..:api", "..:apm_logging", + "../../../api/audio:audio_processing", "../../../rtc_base:gunit_helpers", "../../../test:test_support", ] @@ -320,9 +320,9 @@ rtc_library("adaptive_digital_gain_controller_unittest") { ":adaptive_digital_gain_controller", ":common", ":test_utils", - "..:api", "..:apm_logging", "..:audio_frame_view", + "../../../api/audio:audio_processing", "../../../common_audio", "../../../rtc_base:gunit_helpers", "../../../test:test_support", @@ -413,7 +413,6 @@ rtc_library("input_volume_controller_unittests") { ":clipping_predictor", ":gain_map", ":input_volume_controller", - "..:api", "../../../api:array_view", "../../../rtc_base:checks", "../../../rtc_base:random", diff --git a/modules/audio_processing/agc2/adaptive_digital_gain_controller.h b/modules/audio_processing/agc2/adaptive_digital_gain_controller.h index 01335e79db..9ae74a2dc8 100644 --- a/modules/audio_processing/agc2/adaptive_digital_gain_controller.h +++ b/modules/audio_processing/agc2/adaptive_digital_gain_controller.h @@ -13,9 +13,9 @@ #include +#include "api/audio/audio_processing.h" #include "modules/audio_processing/agc2/gain_applier.h" #include "modules/audio_processing/include/audio_frame_view.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc { diff --git a/modules/audio_processing/agc2/adaptive_digital_gain_controller_unittest.cc b/modules/audio_processing/agc2/adaptive_digital_gain_controller_unittest.cc index cff9b4eb83..88fb792f2d 100644 --- a/modules/audio_processing/agc2/adaptive_digital_gain_controller_unittest.cc +++ b/modules/audio_processing/agc2/adaptive_digital_gain_controller_unittest.cc @@ -13,10 +13,10 @@ #include #include +#include "api/audio/audio_processing.h" #include "common_audio/include/audio_util.h" #include "modules/audio_processing/agc2/agc2_common.h" #include "modules/audio_processing/agc2/vector_float_frame.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/audio_processing/logging/apm_data_dumper.h" #include "rtc_base/gunit.h" diff --git a/modules/audio_processing/agc2/clipping_predictor.h b/modules/audio_processing/agc2/clipping_predictor.h index 14612508c0..53327193c8 100644 --- a/modules/audio_processing/agc2/clipping_predictor.h +++ b/modules/audio_processing/agc2/clipping_predictor.h @@ -15,8 +15,8 @@ #include #include "absl/types/optional.h" +#include "api/audio/audio_processing.h" #include "modules/audio_processing/include/audio_frame_view.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc { diff --git a/modules/audio_processing/agc2/input_volume_controller.h b/modules/audio_processing/agc2/input_volume_controller.h index 0bec7af450..b61f68f89e 100644 --- a/modules/audio_processing/agc2/input_volume_controller.h +++ b/modules/audio_processing/agc2/input_volume_controller.h @@ -16,9 +16,9 @@ #include "absl/types/optional.h" #include "api/array_view.h" +#include "api/audio/audio_processing.h" #include "modules/audio_processing/agc2/clipping_predictor.h" #include "modules/audio_processing/audio_buffer.h" -#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/gtest_prod_util.h" namespace webrtc { diff --git a/modules/audio_processing/agc2/speech_level_estimator.h b/modules/audio_processing/agc2/speech_level_estimator.h index 4d9f106ba9..adbf84c6c5 100644 --- a/modules/audio_processing/agc2/speech_level_estimator.h +++ b/modules/audio_processing/agc2/speech_level_estimator.h @@ -15,8 +15,8 @@ #include +#include "api/audio/audio_processing.h" #include "modules/audio_processing/agc2/agc2_common.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc { class ApmDataDumper; diff --git a/modules/audio_processing/agc2/speech_level_estimator_unittest.cc b/modules/audio_processing/agc2/speech_level_estimator_unittest.cc index 2e627a4d12..939b1146de 100644 --- a/modules/audio_processing/agc2/speech_level_estimator_unittest.cc +++ b/modules/audio_processing/agc2/speech_level_estimator_unittest.cc @@ -12,8 +12,8 @@ #include +#include "api/audio/audio_processing.h" #include "modules/audio_processing/agc2/agc2_common.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/audio_processing/logging/apm_data_dumper.h" #include "rtc_base/gunit.h" diff --git a/modules/audio_processing/audio_buffer.h b/modules/audio_processing/audio_buffer.h index b9ea3000a2..fd69f74ed1 100644 --- a/modules/audio_processing/audio_buffer.h +++ b/modules/audio_processing/audio_buffer.h @@ -17,8 +17,8 @@ #include #include +#include "api/audio/audio_processing.h" #include "common_audio/channel_buffer.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc { diff --git a/modules/audio_processing/audio_processing_builder_impl.cc b/modules/audio_processing/audio_processing_builder_impl.cc index a246448c26..d02ac82fe0 100644 --- a/modules/audio_processing/audio_processing_builder_impl.cc +++ b/modules/audio_processing/audio_processing_builder_impl.cc @@ -10,9 +10,9 @@ #include +#include "api/audio/audio_processing.h" #include "api/make_ref_counted.h" #include "modules/audio_processing/audio_processing_impl.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc { diff --git a/modules/audio_processing/audio_processing_impl.h b/modules/audio_processing/audio_processing_impl.h index 2c0ab198db..51b9ffdaea 100644 --- a/modules/audio_processing/audio_processing_impl.h +++ b/modules/audio_processing/audio_processing_impl.h @@ -23,6 +23,8 @@ #include "absl/strings/string_view.h" #include "absl/types/optional.h" #include "api/array_view.h" +#include "api/audio/audio_processing.h" +#include "api/audio/audio_processing_statistics.h" #include "api/function_view.h" #include "api/task_queue/task_queue_base.h" #include "modules/audio_processing/aec3/echo_canceller3.h" @@ -37,8 +39,6 @@ #include "modules/audio_processing/high_pass_filter.h" #include "modules/audio_processing/include/aec_dump.h" #include "modules/audio_processing/include/audio_frame_proxies.h" -#include "modules/audio_processing/include/audio_processing.h" -#include "modules/audio_processing/include/audio_processing_statistics.h" #include "modules/audio_processing/ns/noise_suppressor.h" #include "modules/audio_processing/optionally_built_submodule_creators.h" #include "modules/audio_processing/render_queue_item_verifier.h" diff --git a/modules/audio_processing/audio_processing_impl_unittest.cc b/modules/audio_processing/audio_processing_impl_unittest.cc index e03f966b06..8bcc94c9c2 100644 --- a/modules/audio_processing/audio_processing_impl_unittest.cc +++ b/modules/audio_processing/audio_processing_impl_unittest.cc @@ -16,9 +16,9 @@ #include #include "absl/types/optional.h" +#include "api/audio/audio_processing.h" #include "api/make_ref_counted.h" #include "api/scoped_refptr.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/audio_processing/optionally_built_submodule_creators.h" #include "modules/audio_processing/test/audio_processing_builder_for_testing.h" #include "modules/audio_processing/test/echo_canceller_test_tools.h" diff --git a/modules/audio_processing/audio_processing_unittest.cc b/modules/audio_processing/audio_processing_unittest.cc index 2d3684e9b5..4d3fc65daf 100644 --- a/modules/audio_processing/audio_processing_unittest.cc +++ b/modules/audio_processing/audio_processing_unittest.cc @@ -7,7 +7,7 @@ * 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/include/audio_processing.h" +#include "api/audio/audio_processing.h" #include #include diff --git a/modules/audio_processing/echo_control_mobile_impl.cc b/modules/audio_processing/echo_control_mobile_impl.cc index fa5cb8ffec..1dc66ab802 100644 --- a/modules/audio_processing/echo_control_mobile_impl.cc +++ b/modules/audio_processing/echo_control_mobile_impl.cc @@ -14,9 +14,9 @@ #include +#include "api/audio/audio_processing.h" #include "modules/audio_processing/aecm/echo_control_mobile.h" #include "modules/audio_processing/audio_buffer.h" -#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/checks.h" namespace webrtc { diff --git a/modules/audio_processing/echo_control_mobile_unittest.cc b/modules/audio_processing/echo_control_mobile_unittest.cc index ed0393043c..dc11a812d3 100644 --- a/modules/audio_processing/echo_control_mobile_unittest.cc +++ b/modules/audio_processing/echo_control_mobile_unittest.cc @@ -11,8 +11,8 @@ #include #include +#include "api/audio/audio_processing.h" #include "modules/audio_processing/echo_control_mobile_impl.h" -#include "modules/audio_processing/include/audio_processing.h" #include "test/gtest.h" namespace webrtc { diff --git a/modules/audio_processing/gain_control_impl.cc b/modules/audio_processing/gain_control_impl.cc index 5f2b4872b9..2a7f527212 100644 --- a/modules/audio_processing/gain_control_impl.cc +++ b/modules/audio_processing/gain_control_impl.cc @@ -13,9 +13,9 @@ #include #include "absl/types/optional.h" +#include "api/audio/audio_processing.h" #include "modules/audio_processing/agc/legacy/gain_control.h" #include "modules/audio_processing/audio_buffer.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/logging.h" diff --git a/modules/audio_processing/gain_controller2.h b/modules/audio_processing/gain_controller2.h index 43b5828d35..f6be48a8d6 100644 --- a/modules/audio_processing/gain_controller2.h +++ b/modules/audio_processing/gain_controller2.h @@ -15,6 +15,7 @@ #include #include +#include "api/audio/audio_processing.h" #include "modules/audio_processing/agc2/adaptive_digital_gain_controller.h" #include "modules/audio_processing/agc2/cpu_features.h" #include "modules/audio_processing/agc2/gain_applier.h" @@ -24,7 +25,6 @@ #include "modules/audio_processing/agc2/saturation_protector.h" #include "modules/audio_processing/agc2/speech_level_estimator.h" #include "modules/audio_processing/agc2/vad_wrapper.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/audio_processing/logging/apm_data_dumper.h" namespace webrtc { diff --git a/modules/audio_processing/include/aec_dump.h b/modules/audio_processing/include/aec_dump.h index 6f2eb64f3a..f07b9115ca 100644 --- a/modules/audio_processing/include/aec_dump.h +++ b/modules/audio_processing/include/aec_dump.h @@ -17,8 +17,8 @@ #include "absl/base/attributes.h" #include "absl/types/optional.h" +#include "api/audio/audio_processing.h" #include "modules/audio_processing/include/audio_frame_view.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc { diff --git a/modules/audio_processing/include/audio_frame_proxies.cc b/modules/audio_processing/include/audio_frame_proxies.cc index 7cc4fb75e4..e37645ef20 100644 --- a/modules/audio_processing/include/audio_frame_proxies.cc +++ b/modules/audio_processing/include/audio_frame_proxies.cc @@ -11,7 +11,7 @@ #include "modules/audio_processing/include/audio_frame_proxies.h" #include "api/audio/audio_frame.h" -#include "modules/audio_processing/include/audio_processing.h" +#include "api/audio/audio_processing.h" namespace webrtc { diff --git a/modules/audio_processing/include/audio_processing.h b/modules/audio_processing/include/audio_processing.h index 02fb497e28..fe938f868f 100644 --- a/modules/audio_processing/include/audio_processing.h +++ b/modules/audio_processing/include/audio_processing.h @@ -11,931 +11,8 @@ #ifndef MODULES_AUDIO_PROCESSING_INCLUDE_AUDIO_PROCESSING_H_ #define MODULES_AUDIO_PROCESSING_INCLUDE_AUDIO_PROCESSING_H_ -// MSVC++ requires this to be set before any other includes to get M_PI. -#ifndef _USE_MATH_DEFINES -#define _USE_MATH_DEFINES -#endif - -#include -#include // size_t -#include // FILE -#include - -#include - -#include "absl/base/nullability.h" -#include "absl/strings/string_view.h" -#include "absl/types/optional.h" -#include "api/array_view.h" -#include "api/audio/echo_canceller3_config.h" -#include "api/audio/echo_control.h" -#include "api/ref_count.h" -#include "api/scoped_refptr.h" -#include "api/task_queue/task_queue_base.h" -#include "modules/audio_processing/include/audio_processing_statistics.h" -#include "rtc_base/arraysize.h" -#include "rtc_base/system/file_wrapper.h" -#include "rtc_base/system/rtc_export.h" - -namespace webrtc { - -class AecDump; -class AudioBuffer; - -class StreamConfig; -class ProcessingConfig; - -class EchoDetector; -class CustomAudioAnalyzer; -class CustomProcessing; - -// The Audio Processing Module (APM) provides a collection of voice processing -// components designed for real-time communications software. -// -// APM operates on two audio streams on a frame-by-frame basis. Frames of the -// primary stream, on which all processing is applied, are passed to -// `ProcessStream()`. Frames of the reverse direction stream are passed to -// `ProcessReverseStream()`. On the client-side, this will typically be the -// near-end (capture) and far-end (render) streams, respectively. APM should be -// placed in the signal chain as close to the audio hardware abstraction layer -// (HAL) as possible. -// -// On the server-side, the reverse stream will normally not be used, with -// processing occurring on each incoming stream. -// -// Component interfaces follow a similar pattern and are accessed through -// corresponding getters in APM. All components are disabled at create-time, -// with default settings that are recommended for most situations. New settings -// can be applied without enabling a component. Enabling a component triggers -// memory allocation and initialization to allow it to start processing the -// streams. -// -// Thread safety is provided with the following assumptions to reduce locking -// overhead: -// 1. The stream getters and setters are called from the same thread as -// ProcessStream(). More precisely, stream functions are never called -// concurrently with ProcessStream(). -// 2. Parameter getters are never called concurrently with the corresponding -// setter. -// -// APM accepts only linear PCM audio data in chunks of ~10 ms (see -// AudioProcessing::GetFrameSize() for details) and sample rates ranging from -// 8000 Hz to 384000 Hz. The int16 interfaces use interleaved data, while the -// float interfaces use deinterleaved data. -// -// Usage example, omitting error checking: -// rtc::scoped_refptr apm = AudioProcessingBuilder().Create(); -// -// AudioProcessing::Config config; -// config.echo_canceller.enabled = true; -// config.echo_canceller.mobile_mode = false; -// -// config.gain_controller1.enabled = true; -// config.gain_controller1.mode = -// AudioProcessing::Config::GainController1::kAdaptiveAnalog; -// config.gain_controller1.analog_level_minimum = 0; -// config.gain_controller1.analog_level_maximum = 255; -// -// config.gain_controller2.enabled = true; -// -// config.high_pass_filter.enabled = true; -// -// apm->ApplyConfig(config) -// -// // Start a voice call... -// -// // ... Render frame arrives bound for the audio HAL ... -// apm->ProcessReverseStream(render_frame); -// -// // ... Capture frame arrives from the audio HAL ... -// // Call required set_stream_ functions. -// apm->set_stream_delay_ms(delay_ms); -// apm->set_stream_analog_level(analog_level); -// -// apm->ProcessStream(capture_frame); -// -// // Call required stream_ functions. -// analog_level = apm->recommended_stream_analog_level(); -// has_voice = apm->stream_has_voice(); -// -// // Repeat render and capture processing for the duration of the call... -// // Start a new call... -// apm->Initialize(); -// -// // Close the application... -// apm.reset(); -// -class RTC_EXPORT AudioProcessing : public RefCountInterface { - public: - // The struct below constitutes the new parameter scheme for the audio - // processing. It is being introduced gradually and until it is fully - // introduced, it is prone to change. - // TODO(peah): Remove this comment once the new config scheme is fully rolled - // out. - // - // The parameters and behavior of the audio processing module are controlled - // by changing the default values in the AudioProcessing::Config struct. - // The config is applied by passing the struct to the ApplyConfig method. - // - // This config is intended to be used during setup, and to enable/disable - // top-level processing effects. Use during processing may cause undesired - // submodule resets, affecting the audio quality. Use the RuntimeSetting - // construct for runtime configuration. - struct RTC_EXPORT Config { - // Sets the properties of the audio processing pipeline. - struct RTC_EXPORT Pipeline { - // Ways to downmix a multi-channel track to mono. - enum class DownmixMethod { - kAverageChannels, // Average across channels. - kUseFirstChannel // Use the first channel. - }; - - // Maximum allowed processing rate used internally. May only be set to - // 32000 or 48000 and any differing values will be treated as 48000. - int maximum_internal_processing_rate = 48000; - // Allow multi-channel processing of render audio. - bool multi_channel_render = false; - // Allow multi-channel processing of capture audio when AEC3 is active - // or a custom AEC is injected.. - bool multi_channel_capture = false; - // Indicates how to downmix multi-channel capture audio to mono (when - // needed). - DownmixMethod capture_downmix_method = DownmixMethod::kAverageChannels; - } pipeline; - - // Enabled the pre-amplifier. It amplifies the capture signal - // before any other processing is done. - // TODO(webrtc:5298): Deprecate and use the pre-gain functionality in - // capture_level_adjustment instead. - struct PreAmplifier { - bool enabled = false; - float fixed_gain_factor = 1.0f; - } pre_amplifier; - - // Functionality for general level adjustment in the capture pipeline. This - // should not be used together with the legacy PreAmplifier functionality. - struct CaptureLevelAdjustment { - bool operator==(const CaptureLevelAdjustment& rhs) const; - bool operator!=(const CaptureLevelAdjustment& rhs) const { - return !(*this == rhs); - } - bool enabled = false; - // The `pre_gain_factor` scales the signal before any processing is done. - float pre_gain_factor = 1.0f; - // The `post_gain_factor` scales the signal after all processing is done. - float post_gain_factor = 1.0f; - struct AnalogMicGainEmulation { - bool operator==(const AnalogMicGainEmulation& rhs) const; - bool operator!=(const AnalogMicGainEmulation& rhs) const { - return !(*this == rhs); - } - bool enabled = false; - // Initial analog gain level to use for the emulated analog gain. Must - // be in the range [0...255]. - int initial_level = 255; - } analog_mic_gain_emulation; - } capture_level_adjustment; - - struct HighPassFilter { - bool enabled = false; - bool apply_in_full_band = true; - } high_pass_filter; - - struct EchoCanceller { - bool enabled = false; - bool mobile_mode = false; - bool export_linear_aec_output = false; - // Enforce the highpass filter to be on (has no effect for the mobile - // mode). - bool enforce_high_pass_filtering = true; - } echo_canceller; - - // Enables background noise suppression. - struct NoiseSuppression { - bool enabled = false; - enum Level { kLow, kModerate, kHigh, kVeryHigh }; - Level level = kModerate; - bool analyze_linear_aec_output_when_available = false; - } noise_suppression; - - // Enables transient suppression. - struct TransientSuppression { - bool enabled = false; - } transient_suppression; - - // Enables automatic gain control (AGC) functionality. - // The automatic gain control (AGC) component brings the signal to an - // appropriate range. This is done by applying a digital gain directly and, - // in the analog mode, prescribing an analog gain to be applied at the audio - // HAL. - // Recommended to be enabled on the client-side. - struct RTC_EXPORT GainController1 { - bool operator==(const GainController1& rhs) const; - bool operator!=(const GainController1& rhs) const { - return !(*this == rhs); - } - - bool enabled = false; - enum Mode { - // Adaptive mode intended for use if an analog volume control is - // available on the capture device. It will require the user to provide - // coupling between the OS mixer controls and AGC through the - // stream_analog_level() functions. - // It consists of an analog gain prescription for the audio device and a - // digital compression stage. - kAdaptiveAnalog, - // Adaptive mode intended for situations in which an analog volume - // control is unavailable. It operates in a similar fashion to the - // adaptive analog mode, but with scaling instead applied in the digital - // domain. As with the analog mode, it additionally uses a digital - // compression stage. - kAdaptiveDigital, - // Fixed mode which enables only the digital compression stage also used - // by the two adaptive modes. - // It is distinguished from the adaptive modes by considering only a - // short time-window of the input signal. It applies a fixed gain - // through most of the input level range, and compresses (gradually - // reduces gain with increasing level) the input signal at higher - // levels. This mode is preferred on embedded devices where the capture - // signal level is predictable, so that a known gain can be applied. - kFixedDigital - }; - Mode mode = kAdaptiveAnalog; - // Sets the target peak level (or envelope) of the AGC in dBFs (decibels - // from digital full-scale). The convention is to use positive values. For - // instance, passing in a value of 3 corresponds to -3 dBFs, or a target - // level 3 dB below full-scale. Limited to [0, 31]. - int target_level_dbfs = 3; - // Sets the maximum gain the digital compression stage may apply, in dB. A - // higher number corresponds to greater compression, while a value of 0 - // will leave the signal uncompressed. Limited to [0, 90]. - // For updates after APM setup, use a RuntimeSetting instead. - int compression_gain_db = 9; - // When enabled, the compression stage will hard limit the signal to the - // target level. Otherwise, the signal will be compressed but not limited - // above the target level. - bool enable_limiter = true; - - // Enables the analog gain controller functionality. - struct AnalogGainController { - bool enabled = true; - // TODO(bugs.webrtc.org/7494): Deprecated. Stop using and remove. - int startup_min_volume = 0; - // Lowest analog microphone level that will be applied in response to - // clipping. - int clipped_level_min = 70; - // If true, an adaptive digital gain is applied. - bool enable_digital_adaptive = true; - // Amount the microphone level is lowered with every clipping event. - // Limited to (0, 255]. - int clipped_level_step = 15; - // Proportion of clipped samples required to declare a clipping event. - // Limited to (0.f, 1.f). - float clipped_ratio_threshold = 0.1f; - // Time in frames to wait after a clipping event before checking again. - // Limited to values higher than 0. - int clipped_wait_frames = 300; - - // Enables clipping prediction functionality. - struct ClippingPredictor { - bool enabled = false; - enum Mode { - // Clipping event prediction mode with fixed step estimation. - kClippingEventPrediction, - // Clipped peak estimation mode with adaptive step estimation. - kAdaptiveStepClippingPeakPrediction, - // Clipped peak estimation mode with fixed step estimation. - kFixedStepClippingPeakPrediction, - }; - Mode mode = kClippingEventPrediction; - // Number of frames in the sliding analysis window. - int window_length = 5; - // Number of frames in the sliding reference window. - int reference_window_length = 5; - // Reference window delay (unit: number of frames). - int reference_window_delay = 5; - // Clipping prediction threshold (dBFS). - float clipping_threshold = -1.0f; - // Crest factor drop threshold (dB). - float crest_factor_margin = 3.0f; - // If true, the recommended clipped level step is used to modify the - // analog gain. Otherwise, the predictor runs without affecting the - // analog gain. - bool use_predicted_step = true; - } clipping_predictor; - } analog_gain_controller; - } gain_controller1; - - // Parameters for AGC2, an Automatic Gain Control (AGC) sub-module which - // replaces the AGC sub-module parametrized by `gain_controller1`. - // AGC2 brings the captured audio signal to the desired level by combining - // three different controllers (namely, input volume controller, adapative - // digital controller and fixed digital controller) and a limiter. - // TODO(bugs.webrtc.org:7494): Name `GainController` when AGC1 removed. - struct RTC_EXPORT GainController2 { - bool operator==(const GainController2& rhs) const; - bool operator!=(const GainController2& rhs) const { - return !(*this == rhs); - } - - // AGC2 must be created if and only if `enabled` is true. - bool enabled = false; - - // Parameters for the input volume controller, which adjusts the input - // volume applied when the audio is captured (e.g., microphone volume on - // a soundcard, input volume on HAL). - struct InputVolumeController { - bool operator==(const InputVolumeController& rhs) const; - bool operator!=(const InputVolumeController& rhs) const { - return !(*this == rhs); - } - bool enabled = false; - } input_volume_controller; - - // Parameters for the adaptive digital controller, which adjusts and - // applies a digital gain after echo cancellation and after noise - // suppression. - struct RTC_EXPORT AdaptiveDigital { - bool operator==(const AdaptiveDigital& rhs) const; - bool operator!=(const AdaptiveDigital& rhs) const { - return !(*this == rhs); - } - bool enabled = false; - float headroom_db = 5.0f; - float max_gain_db = 50.0f; - float initial_gain_db = 15.0f; - float max_gain_change_db_per_second = 6.0f; - float max_output_noise_level_dbfs = -50.0f; - } adaptive_digital; - - // Parameters for the fixed digital controller, which applies a fixed - // digital gain after the adaptive digital controller and before the - // limiter. - struct FixedDigital { - // By setting `gain_db` to a value greater than zero, the limiter can be - // turned into a compressor that first applies a fixed gain. - float gain_db = 0.0f; - } fixed_digital; - } gain_controller2; - - std::string ToString() const; - }; - - // Specifies the properties of a setting to be passed to AudioProcessing at - // runtime. - class RuntimeSetting { - public: - enum class Type { - kNotSpecified, - kCapturePreGain, - kCaptureCompressionGain, - kCaptureFixedPostGain, - kPlayoutVolumeChange, - kCustomRenderProcessingRuntimeSetting, - kPlayoutAudioDeviceChange, - kCapturePostGain, - kCaptureOutputUsed - }; - - // Play-out audio device properties. - struct PlayoutAudioDeviceInfo { - int id; // Identifies the audio device. - int max_volume; // Maximum play-out volume. - }; - - RuntimeSetting() : type_(Type::kNotSpecified), value_(0.0f) {} - ~RuntimeSetting() = default; - - static RuntimeSetting CreateCapturePreGain(float gain) { - return {Type::kCapturePreGain, gain}; - } - - static RuntimeSetting CreateCapturePostGain(float gain) { - return {Type::kCapturePostGain, gain}; - } - - // Corresponds to Config::GainController1::compression_gain_db, but for - // runtime configuration. - static RuntimeSetting CreateCompressionGainDb(int gain_db) { - RTC_DCHECK_GE(gain_db, 0); - RTC_DCHECK_LE(gain_db, 90); - return {Type::kCaptureCompressionGain, static_cast(gain_db)}; - } - - // Corresponds to Config::GainController2::fixed_digital::gain_db, but for - // runtime configuration. - static RuntimeSetting CreateCaptureFixedPostGain(float gain_db) { - RTC_DCHECK_GE(gain_db, 0.0f); - RTC_DCHECK_LE(gain_db, 90.0f); - return {Type::kCaptureFixedPostGain, gain_db}; - } - - // Creates a runtime setting to notify play-out (aka render) audio device - // changes. - static RuntimeSetting CreatePlayoutAudioDeviceChange( - PlayoutAudioDeviceInfo audio_device) { - return {Type::kPlayoutAudioDeviceChange, audio_device}; - } - - // Creates a runtime setting to notify play-out (aka render) volume changes. - // `volume` is the unnormalized volume, the maximum of which - static RuntimeSetting CreatePlayoutVolumeChange(int volume) { - return {Type::kPlayoutVolumeChange, volume}; - } - - static RuntimeSetting CreateCustomRenderSetting(float payload) { - return {Type::kCustomRenderProcessingRuntimeSetting, payload}; - } - - static RuntimeSetting CreateCaptureOutputUsedSetting( - bool capture_output_used) { - return {Type::kCaptureOutputUsed, capture_output_used}; - } - - Type type() const { return type_; } - // Getters do not return a value but instead modify the argument to protect - // from implicit casting. - void GetFloat(float* value) const { - RTC_DCHECK(value); - *value = value_.float_value; - } - void GetInt(int* value) const { - RTC_DCHECK(value); - *value = value_.int_value; - } - void GetBool(bool* value) const { - RTC_DCHECK(value); - *value = value_.bool_value; - } - void GetPlayoutAudioDeviceInfo(PlayoutAudioDeviceInfo* value) const { - RTC_DCHECK(value); - *value = value_.playout_audio_device_info; - } - - private: - RuntimeSetting(Type id, float value) : type_(id), value_(value) {} - RuntimeSetting(Type id, int value) : type_(id), value_(value) {} - RuntimeSetting(Type id, PlayoutAudioDeviceInfo value) - : type_(id), value_(value) {} - Type type_; - union U { - U() {} - U(int value) : int_value(value) {} - U(float value) : float_value(value) {} - U(PlayoutAudioDeviceInfo value) : playout_audio_device_info(value) {} - float float_value; - int int_value; - bool bool_value; - PlayoutAudioDeviceInfo playout_audio_device_info; - } value_; - }; - - ~AudioProcessing() override {} - - // Initializes internal states, while retaining all user settings. This - // should be called before beginning to process a new audio stream. However, - // it is not necessary to call before processing the first stream after - // creation. - // - // It is also not necessary to call if the audio parameters (sample - // rate and number of channels) have changed. Passing updated parameters - // directly to `ProcessStream()` and `ProcessReverseStream()` is permissible. - // If the parameters are known at init-time though, they may be provided. - // TODO(webrtc:5298): Change to return void. - virtual int Initialize() = 0; - - // The int16 interfaces require: - // - only `NativeRate`s be used - // - that the input, output and reverse rates must match - // - that `processing_config.output_stream()` matches - // `processing_config.input_stream()`. - // - // The float interfaces accept arbitrary rates and support differing input and - // output layouts, but the output must have either one channel or the same - // number of channels as the input. - virtual int Initialize(const ProcessingConfig& processing_config) = 0; - - // TODO(peah): This method is a temporary solution used to take control - // over the parameters in the audio processing module and is likely to change. - virtual void ApplyConfig(const Config& config) = 0; - - // TODO(ajm): Only intended for internal use. Make private and friend the - // necessary classes? - virtual int proc_sample_rate_hz() const = 0; - virtual int proc_split_sample_rate_hz() const = 0; - virtual size_t num_input_channels() const = 0; - virtual size_t num_proc_channels() const = 0; - virtual size_t num_output_channels() const = 0; - virtual size_t num_reverse_channels() const = 0; - - // Set to true when the output of AudioProcessing will be muted or in some - // other way not used. Ideally, the captured audio would still be processed, - // but some components may change behavior based on this information. - // Default false. This method takes a lock. To achieve this in a lock-less - // manner the PostRuntimeSetting can instead be used. - virtual void set_output_will_be_muted(bool muted) = 0; - - // Enqueues a runtime setting. - virtual void SetRuntimeSetting(RuntimeSetting setting) = 0; - - // Enqueues a runtime setting. Returns a bool indicating whether the - // enqueueing was successfull. - virtual bool PostRuntimeSetting(RuntimeSetting setting) = 0; - - // Accepts and produces a ~10 ms frame of interleaved 16 bit integer audio as - // specified in `input_config` and `output_config`. `src` and `dest` may use - // the same memory, if desired. - virtual int ProcessStream(const int16_t* const src, - const StreamConfig& input_config, - const StreamConfig& output_config, - int16_t* const dest) = 0; - - // Accepts deinterleaved float audio with the range [-1, 1]. Each element of - // `src` points to a channel buffer, arranged according to `input_stream`. At - // output, the channels will be arranged according to `output_stream` in - // `dest`. - // - // The output must have one channel or as many channels as the input. `src` - // and `dest` may use the same memory, if desired. - virtual int ProcessStream(const float* const* src, - const StreamConfig& input_config, - const StreamConfig& output_config, - float* const* dest) = 0; - - // Accepts and produces a ~10 ms frame of interleaved 16 bit integer audio for - // the reverse direction audio stream as specified in `input_config` and - // `output_config`. `src` and `dest` may use the same memory, if desired. - virtual int ProcessReverseStream(const int16_t* const src, - const StreamConfig& input_config, - const StreamConfig& output_config, - int16_t* const dest) = 0; - - // Accepts deinterleaved float audio with the range [-1, 1]. Each element of - // `data` points to a channel buffer, arranged according to `reverse_config`. - virtual int ProcessReverseStream(const float* const* src, - const StreamConfig& input_config, - const StreamConfig& output_config, - float* const* dest) = 0; - - // Accepts deinterleaved float audio with the range [-1, 1]. Each element - // of `data` points to a channel buffer, arranged according to - // `reverse_config`. - virtual int AnalyzeReverseStream(const float* const* data, - const StreamConfig& reverse_config) = 0; - - // Returns the most recently produced ~10 ms of the linear AEC output at a - // rate of 16 kHz. If there is more than one capture channel, a mono - // representation of the input is returned. Returns true/false to indicate - // whether an output returned. - virtual bool GetLinearAecOutput( - rtc::ArrayView> linear_output) const = 0; - - // This must be called prior to ProcessStream() if and only if adaptive analog - // gain control is enabled, to pass the current analog level from the audio - // HAL. Must be within the range [0, 255]. - virtual void set_stream_analog_level(int level) = 0; - - // When an analog mode is set, this should be called after - // `set_stream_analog_level()` and `ProcessStream()` to obtain the recommended - // new analog level for the audio HAL. It is the user's responsibility to - // apply this level. - virtual int recommended_stream_analog_level() const = 0; - - // This must be called if and only if echo processing is enabled. - // - // Sets the `delay` in ms between ProcessReverseStream() receiving a far-end - // frame and ProcessStream() receiving a near-end frame containing the - // corresponding echo. On the client-side this can be expressed as - // delay = (t_render - t_analyze) + (t_process - t_capture) - // where, - // - t_analyze is the time a frame is passed to ProcessReverseStream() and - // t_render is the time the first sample of the same frame is rendered by - // the audio hardware. - // - t_capture is the time the first sample of a frame is captured by the - // audio hardware and t_process is the time the same frame is passed to - // ProcessStream(). - virtual int set_stream_delay_ms(int delay) = 0; - virtual int stream_delay_ms() const = 0; - - // Call to signal that a key press occurred (true) or did not occur (false) - // with this chunk of audio. - virtual void set_stream_key_pressed(bool key_pressed) = 0; - - // Creates and attaches an webrtc::AecDump for recording debugging - // information. - // The `worker_queue` may not be null and must outlive the created - // AecDump instance. |max_log_size_bytes == -1| means the log size - // will be unlimited. `handle` may not be null. The AecDump takes - // responsibility for `handle` and closes it in the destructor. A - // return value of true indicates that the file has been - // sucessfully opened, while a value of false indicates that - // opening the file failed. - virtual bool CreateAndAttachAecDump( - absl::string_view file_name, - int64_t max_log_size_bytes, - absl::Nonnull worker_queue) = 0; - virtual bool CreateAndAttachAecDump( - absl::Nonnull handle, - int64_t max_log_size_bytes, - absl::Nonnull worker_queue) = 0; - - // TODO(webrtc:5298) Deprecated variant. - // Attaches provided webrtc::AecDump for recording debugging - // information. Log file and maximum file size logic is supposed to - // be handled by implementing instance of AecDump. Calling this - // method when another AecDump is attached resets the active AecDump - // with a new one. This causes the d-tor of the earlier AecDump to - // be called. The d-tor call may block until all pending logging - // tasks are completed. - virtual void AttachAecDump(std::unique_ptr aec_dump) = 0; - - // If no AecDump is attached, this has no effect. If an AecDump is - // attached, it's destructor is called. The d-tor may block until - // all pending logging tasks are completed. - virtual void DetachAecDump() = 0; - - // Get audio processing statistics. - virtual AudioProcessingStats GetStatistics() = 0; - // TODO(webrtc:5298) Deprecated variant. The `has_remote_tracks` argument - // should be set if there are active remote tracks (this would usually be true - // during a call). If there are no remote tracks some of the stats will not be - // set by AudioProcessing, because they only make sense if there is at least - // one remote track. - virtual AudioProcessingStats GetStatistics(bool has_remote_tracks) = 0; - - // Returns the last applied configuration. - virtual AudioProcessing::Config GetConfig() const = 0; - - enum Error { - // Fatal errors. - kNoError = 0, - kUnspecifiedError = -1, - kCreationFailedError = -2, - kUnsupportedComponentError = -3, - kUnsupportedFunctionError = -4, - kNullPointerError = -5, - kBadParameterError = -6, - kBadSampleRateError = -7, - kBadDataLengthError = -8, - kBadNumberChannelsError = -9, - kFileError = -10, - kStreamParameterNotSetError = -11, - kNotEnabledError = -12, - - // Warnings are non-fatal. - // This results when a set_stream_ parameter is out of range. Processing - // will continue, but the parameter may have been truncated. - kBadStreamParameterWarning = -13 - }; - - // Native rates supported by the integer interfaces. - enum NativeRate { - kSampleRate8kHz = 8000, - kSampleRate16kHz = 16000, - kSampleRate32kHz = 32000, - kSampleRate48kHz = 48000 - }; - - // TODO(kwiberg): We currently need to support a compiler (Visual C++) that - // complains if we don't explicitly state the size of the array here. Remove - // the size when that's no longer the case. - static constexpr int kNativeSampleRatesHz[4] = { - kSampleRate8kHz, kSampleRate16kHz, kSampleRate32kHz, kSampleRate48kHz}; - static constexpr size_t kNumNativeSampleRates = - arraysize(kNativeSampleRatesHz); - static constexpr int kMaxNativeSampleRateHz = - kNativeSampleRatesHz[kNumNativeSampleRates - 1]; - - // APM processes audio in chunks of about 10 ms. See GetFrameSize() for - // details. - static constexpr int kChunkSizeMs = 10; - - // Returns floor(sample_rate_hz/100): the number of samples per channel used - // as input and output to the audio processing module in calls to - // ProcessStream, ProcessReverseStream, AnalyzeReverseStream, and - // GetLinearAecOutput. - // - // This is exactly 10 ms for sample rates divisible by 100. For example: - // - 48000 Hz (480 samples per channel), - // - 44100 Hz (441 samples per channel), - // - 16000 Hz (160 samples per channel). - // - // Sample rates not divisible by 100 are received/produced in frames of - // approximately 10 ms. For example: - // - 22050 Hz (220 samples per channel, or ~9.98 ms per frame), - // - 11025 Hz (110 samples per channel, or ~9.98 ms per frame). - // These nondivisible sample rates yield lower audio quality compared to - // multiples of 100. Internal resampling to 10 ms frames causes a simulated - // clock drift effect which impacts the performance of (for example) echo - // cancellation. - static int GetFrameSize(int sample_rate_hz) { return sample_rate_hz / 100; } -}; - -class RTC_EXPORT AudioProcessingBuilder { - public: - AudioProcessingBuilder(); - AudioProcessingBuilder(const AudioProcessingBuilder&) = delete; - AudioProcessingBuilder& operator=(const AudioProcessingBuilder&) = delete; - ~AudioProcessingBuilder(); - - // Sets the APM configuration. - AudioProcessingBuilder& SetConfig(const AudioProcessing::Config& config) { - config_ = config; - return *this; - } - - // Sets the echo controller factory to inject when APM is created. - AudioProcessingBuilder& SetEchoControlFactory( - std::unique_ptr echo_control_factory) { - echo_control_factory_ = std::move(echo_control_factory); - return *this; - } - - // Sets the capture post-processing sub-module to inject when APM is created. - AudioProcessingBuilder& SetCapturePostProcessing( - std::unique_ptr capture_post_processing) { - capture_post_processing_ = std::move(capture_post_processing); - return *this; - } - - // Sets the render pre-processing sub-module to inject when APM is created. - AudioProcessingBuilder& SetRenderPreProcessing( - std::unique_ptr render_pre_processing) { - render_pre_processing_ = std::move(render_pre_processing); - return *this; - } - - // Sets the echo detector to inject when APM is created. - AudioProcessingBuilder& SetEchoDetector( - rtc::scoped_refptr echo_detector) { - echo_detector_ = std::move(echo_detector); - return *this; - } - - // Sets the capture analyzer sub-module to inject when APM is created. - AudioProcessingBuilder& SetCaptureAnalyzer( - std::unique_ptr capture_analyzer) { - capture_analyzer_ = std::move(capture_analyzer); - return *this; - } - - // Creates an APM instance with the specified config or the default one if - // unspecified. Injects the specified components transferring the ownership - // to the newly created APM instance - i.e., except for the config, the - // builder is reset to its initial state. - rtc::scoped_refptr Create(); - - private: - AudioProcessing::Config config_; - std::unique_ptr echo_control_factory_; - std::unique_ptr capture_post_processing_; - std::unique_ptr render_pre_processing_; - rtc::scoped_refptr echo_detector_; - std::unique_ptr capture_analyzer_; -}; - -class StreamConfig { - public: - // sample_rate_hz: The sampling rate of the stream. - // num_channels: The number of audio channels in the stream. - StreamConfig(int sample_rate_hz = 0, size_t num_channels = 0) - : sample_rate_hz_(sample_rate_hz), - num_channels_(num_channels), - num_frames_(calculate_frames(sample_rate_hz)) {} - - void set_sample_rate_hz(int value) { - sample_rate_hz_ = value; - num_frames_ = calculate_frames(value); - } - void set_num_channels(size_t value) { num_channels_ = value; } - - int sample_rate_hz() const { return sample_rate_hz_; } - - // The number of channels in the stream. - size_t num_channels() const { return num_channels_; } - - size_t num_frames() const { return num_frames_; } - size_t num_samples() const { return num_channels_ * num_frames_; } - - bool operator==(const StreamConfig& other) const { - return sample_rate_hz_ == other.sample_rate_hz_ && - num_channels_ == other.num_channels_; - } - - bool operator!=(const StreamConfig& other) const { return !(*this == other); } - - private: - static size_t calculate_frames(int sample_rate_hz) { - return static_cast(AudioProcessing::GetFrameSize(sample_rate_hz)); - } - - int sample_rate_hz_; - size_t num_channels_; - size_t num_frames_; -}; - -class ProcessingConfig { - public: - enum StreamName { - kInputStream, - kOutputStream, - kReverseInputStream, - kReverseOutputStream, - kNumStreamNames, - }; - - const StreamConfig& input_stream() const { - return streams[StreamName::kInputStream]; - } - const StreamConfig& output_stream() const { - return streams[StreamName::kOutputStream]; - } - const StreamConfig& reverse_input_stream() const { - return streams[StreamName::kReverseInputStream]; - } - const StreamConfig& reverse_output_stream() const { - return streams[StreamName::kReverseOutputStream]; - } - - StreamConfig& input_stream() { return streams[StreamName::kInputStream]; } - StreamConfig& output_stream() { return streams[StreamName::kOutputStream]; } - StreamConfig& reverse_input_stream() { - return streams[StreamName::kReverseInputStream]; - } - StreamConfig& reverse_output_stream() { - return streams[StreamName::kReverseOutputStream]; - } - - bool operator==(const ProcessingConfig& other) const { - for (int i = 0; i < StreamName::kNumStreamNames; ++i) { - if (this->streams[i] != other.streams[i]) { - return false; - } - } - return true; - } - - bool operator!=(const ProcessingConfig& other) const { - return !(*this == other); - } - - StreamConfig streams[StreamName::kNumStreamNames]; -}; - -// Experimental interface for a custom analysis submodule. -class CustomAudioAnalyzer { - public: - // (Re-) Initializes the submodule. - virtual void Initialize(int sample_rate_hz, int num_channels) = 0; - // Analyzes the given capture or render signal. - virtual void Analyze(const AudioBuffer* audio) = 0; - // Returns a string representation of the module state. - virtual std::string ToString() const = 0; - - virtual ~CustomAudioAnalyzer() {} -}; - -// Interface for a custom processing submodule. -class CustomProcessing { - public: - // (Re-)Initializes the submodule. - virtual void Initialize(int sample_rate_hz, int num_channels) = 0; - // Processes the given capture or render signal. - virtual void Process(AudioBuffer* audio) = 0; - // Returns a string representation of the module state. - virtual std::string ToString() const = 0; - // Handles RuntimeSettings. TODO(webrtc:9262): make pure virtual - // after updating dependencies. - virtual void SetRuntimeSetting(AudioProcessing::RuntimeSetting setting); - - virtual ~CustomProcessing() {} -}; - -// Interface for an echo detector submodule. -class EchoDetector : public RefCountInterface { - public: - // (Re-)Initializes the submodule. - virtual void Initialize(int capture_sample_rate_hz, - int num_capture_channels, - int render_sample_rate_hz, - int num_render_channels) = 0; - - // Analysis (not changing) of the first channel of the render signal. - virtual void AnalyzeRenderAudio(rtc::ArrayView render_audio) = 0; - - // Analysis (not changing) of the capture signal. - virtual void AnalyzeCaptureAudio( - rtc::ArrayView capture_audio) = 0; - - struct Metrics { - absl::optional echo_likelihood; - absl::optional echo_likelihood_recent_max; - }; - - // Collect current metrics from the echo detector. - virtual Metrics GetMetrics() const = 0; -}; - -} // namespace webrtc +// This is a transitional header forwarding to the new version in the api/ +// folder. +#include "api/audio/audio_processing.h" #endif // MODULES_AUDIO_PROCESSING_INCLUDE_AUDIO_PROCESSING_H_ diff --git a/modules/audio_processing/include/audio_processing_statistics.h b/modules/audio_processing/include/audio_processing_statistics.h index 3b43319951..594d3f5a4d 100644 --- a/modules/audio_processing/include/audio_processing_statistics.h +++ b/modules/audio_processing/include/audio_processing_statistics.h @@ -11,57 +11,8 @@ #ifndef MODULES_AUDIO_PROCESSING_INCLUDE_AUDIO_PROCESSING_STATISTICS_H_ #define MODULES_AUDIO_PROCESSING_INCLUDE_AUDIO_PROCESSING_STATISTICS_H_ -#include - -#include "absl/types/optional.h" -#include "rtc_base/system/rtc_export.h" - -namespace webrtc { -// This version of the stats uses Optionals, it will replace the regular -// AudioProcessingStatistics struct. -struct RTC_EXPORT AudioProcessingStats { - AudioProcessingStats(); - AudioProcessingStats(const AudioProcessingStats& other); - ~AudioProcessingStats(); - - // Deprecated. - // TODO(bugs.webrtc.org/11226): Remove. - // True if voice is detected in the last capture frame, after processing. - // It is conservative in flagging audio as speech, with low likelihood of - // incorrectly flagging a frame as voice. - // Only reported if voice detection is enabled in AudioProcessing::Config. - absl::optional voice_detected; - - // AEC Statistics. - // ERL = 10log_10(P_far / P_echo) - absl::optional echo_return_loss; - // ERLE = 10log_10(P_echo / P_out) - absl::optional echo_return_loss_enhancement; - // Fraction of time that the AEC linear filter is divergent, in a 1-second - // non-overlapped aggregation window. - absl::optional divergent_filter_fraction; - - // The delay metrics consists of the delay median and standard deviation. It - // also consists of the fraction of delay estimates that can make the echo - // cancellation perform poorly. The values are aggregated until the first - // call to `GetStatistics()` and afterwards aggregated and updated every - // second. Note that if there are several clients pulling metrics from - // `GetStatistics()` during a session the first call from any of them will - // change to one second aggregation window for all. - absl::optional delay_median_ms; - absl::optional delay_standard_deviation_ms; - - // Residual echo detector likelihood. - absl::optional residual_echo_likelihood; - // Maximum residual echo likelihood from the last time period. - absl::optional residual_echo_likelihood_recent_max; - - // The instantaneous delay estimate produced in the AEC. The unit is in - // milliseconds and the value is the instantaneous value at the time of the - // call to `GetStatistics()`. - absl::optional delay_ms; -}; - -} // namespace webrtc +// This is a transitional header forwarding to the new version in the api/ +// folder. +#include "api/audio/audio_processing_statistics.h" #endif // MODULES_AUDIO_PROCESSING_INCLUDE_AUDIO_PROCESSING_STATISTICS_H_ diff --git a/modules/audio_processing/include/mock_audio_processing.h b/modules/audio_processing/include/mock_audio_processing.h index dfe7d84e07..f8c76bf3d9 100644 --- a/modules/audio_processing/include/mock_audio_processing.h +++ b/modules/audio_processing/include/mock_audio_processing.h @@ -15,10 +15,10 @@ #include "absl/base/nullability.h" #include "absl/strings/string_view.h" +#include "api/audio/audio_processing.h" +#include "api/audio/audio_processing_statistics.h" #include "api/task_queue/task_queue_base.h" #include "modules/audio_processing/include/aec_dump.h" -#include "modules/audio_processing/include/audio_processing.h" -#include "modules/audio_processing/include/audio_processing_statistics.h" #include "test/gmock.h" namespace webrtc { diff --git a/modules/audio_processing/residual_echo_detector.h b/modules/audio_processing/residual_echo_detector.h index ac554b17c4..83773ae19d 100644 --- a/modules/audio_processing/residual_echo_detector.h +++ b/modules/audio_processing/residual_echo_detector.h @@ -15,11 +15,11 @@ #include #include "api/array_view.h" +#include "api/audio/audio_processing.h" #include "modules/audio_processing/echo_detector/circular_buffer.h" #include "modules/audio_processing/echo_detector/mean_variance_estimator.h" #include "modules/audio_processing/echo_detector/moving_max.h" #include "modules/audio_processing/echo_detector/normalized_covariance_estimator.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc { diff --git a/modules/audio_processing/test/audio_buffer_tools.h b/modules/audio_processing/test/audio_buffer_tools.h index faac4bf9ff..c4e4b09324 100644 --- a/modules/audio_processing/test/audio_buffer_tools.h +++ b/modules/audio_processing/test/audio_buffer_tools.h @@ -14,8 +14,8 @@ #include #include "api/array_view.h" +#include "api/audio/audio_processing.h" #include "modules/audio_processing/audio_buffer.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc { namespace test { diff --git a/modules/audio_processing/test/audio_processing_builder_for_testing.h b/modules/audio_processing/test/audio_processing_builder_for_testing.h index e73706c1b6..d61d189cc7 100644 --- a/modules/audio_processing/test/audio_processing_builder_for_testing.h +++ b/modules/audio_processing/test/audio_processing_builder_for_testing.h @@ -16,7 +16,7 @@ #include #include -#include "modules/audio_processing/include/audio_processing.h" +#include "api/audio/audio_processing.h" namespace webrtc { diff --git a/modules/audio_processing/test/audio_processing_simulator.cc b/modules/audio_processing/test/audio_processing_simulator.cc index 500005f26a..a47e4b5be2 100644 --- a/modules/audio_processing/test/audio_processing_simulator.cc +++ b/modules/audio_processing/test/audio_processing_simulator.cc @@ -19,11 +19,11 @@ #include #include "absl/strings/string_view.h" +#include "api/audio/audio_processing.h" #include "api/audio/echo_canceller3_factory.h" #include "api/audio/echo_detector_creator.h" #include "modules/audio_processing/aec_dump/aec_dump_factory.h" #include "modules/audio_processing/echo_control_mobile_impl.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/audio_processing/logging/apm_data_dumper.h" #include "modules/audio_processing/test/echo_canceller3_config_json.h" #include "modules/audio_processing/test/fake_recording_device.h" diff --git a/modules/audio_processing/test/audio_processing_simulator.h b/modules/audio_processing/test/audio_processing_simulator.h index e40d818bd8..82e22cca4f 100644 --- a/modules/audio_processing/test/audio_processing_simulator.h +++ b/modules/audio_processing/test/audio_processing_simulator.h @@ -18,9 +18,9 @@ #include #include "absl/types/optional.h" +#include "api/audio/audio_processing.h" #include "common_audio/channel_buffer.h" #include "common_audio/include/audio_util.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/audio_processing/test/api_call_statistics.h" #include "modules/audio_processing/test/fake_recording_device.h" #include "modules/audio_processing/test/test_utils.h" diff --git a/modules/audio_processing/test/audioproc_float_impl.cc b/modules/audio_processing/test/audioproc_float_impl.cc index c23ec74366..980b80a81e 100644 --- a/modules/audio_processing/test/audioproc_float_impl.cc +++ b/modules/audio_processing/test/audioproc_float_impl.cc @@ -21,7 +21,7 @@ #include "absl/flags/flag.h" #include "absl/flags/parse.h" #include "absl/strings/string_view.h" -#include "modules/audio_processing/include/audio_processing.h" +#include "api/audio/audio_processing.h" #include "modules/audio_processing/test/aec_dump_based_simulator.h" #include "modules/audio_processing/test/audio_processing_simulator.h" #include "modules/audio_processing/test/wav_based_simulator.h" diff --git a/modules/audio_processing/test/audioproc_float_impl.h b/modules/audio_processing/test/audioproc_float_impl.h index 5ed3aefab7..55ded264b2 100644 --- a/modules/audio_processing/test/audioproc_float_impl.h +++ b/modules/audio_processing/test/audioproc_float_impl.h @@ -13,7 +13,7 @@ #include -#include "modules/audio_processing/include/audio_processing.h" +#include "api/audio/audio_processing.h" namespace webrtc { namespace test { diff --git a/modules/audio_processing/test/debug_dump_replayer.h b/modules/audio_processing/test/debug_dump_replayer.h index 077147eb68..2768f18791 100644 --- a/modules/audio_processing/test/debug_dump_replayer.h +++ b/modules/audio_processing/test/debug_dump_replayer.h @@ -14,8 +14,8 @@ #include #include "absl/strings/string_view.h" +#include "api/audio/audio_processing.h" #include "common_audio/channel_buffer.h" -#include "modules/audio_processing/include/audio_processing.h" // Generated at build-time by the protobuf compiler. #include "modules/audio_processing/debug.pb.h" diff --git a/modules/audio_processing/test/runtime_setting_util.h b/modules/audio_processing/test/runtime_setting_util.h index d8cbe82076..85ed5ecdab 100644 --- a/modules/audio_processing/test/runtime_setting_util.h +++ b/modules/audio_processing/test/runtime_setting_util.h @@ -11,7 +11,7 @@ #ifndef MODULES_AUDIO_PROCESSING_TEST_RUNTIME_SETTING_UTIL_H_ #define MODULES_AUDIO_PROCESSING_TEST_RUNTIME_SETTING_UTIL_H_ -#include "modules/audio_processing/include/audio_processing.h" +#include "api/audio/audio_processing.h" #include "modules/audio_processing/test/protobuf_utils.h" namespace webrtc { diff --git a/modules/audio_processing/test/simulator_buffers.h b/modules/audio_processing/test/simulator_buffers.h index 36dcf301a2..4e1b086f7b 100644 --- a/modules/audio_processing/test/simulator_buffers.h +++ b/modules/audio_processing/test/simulator_buffers.h @@ -14,8 +14,8 @@ #include #include +#include "api/audio/audio_processing.h" #include "modules/audio_processing/audio_buffer.h" -#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/random.h" namespace webrtc { diff --git a/modules/audio_processing/test/test_utils.h b/modules/audio_processing/test/test_utils.h index bf82f9d66d..04e980fb64 100644 --- a/modules/audio_processing/test/test_utils.h +++ b/modules/audio_processing/test/test_utils.h @@ -21,9 +21,9 @@ #include #include "absl/strings/string_view.h" +#include "api/audio/audio_processing.h" #include "common_audio/channel_buffer.h" #include "common_audio/wav_file.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc { diff --git a/pc/BUILD.gn b/pc/BUILD.gn index 1e1e4bad88..42763b4d91 100644 --- a/pc/BUILD.gn +++ b/pc/BUILD.gn @@ -907,6 +907,7 @@ rtc_source_set("rtc_stats_collector") { "../api:rtp_parameters", "../api:scoped_refptr", "../api:sequence_checker", + "../api/audio:audio_processing_statistics", "../api/task_queue:task_queue", "../api/units:time_delta", "../api/video:video_rtp_headers", @@ -916,7 +917,6 @@ rtc_source_set("rtc_stats_collector") { "../media:media_channel", "../media:media_channel_impl", "../modules/audio_device", - "../modules/audio_processing:audio_processing_statistics", "../modules/rtp_rtcp:rtp_rtcp_format", "../p2p:connection", "../p2p:connection_info", @@ -1225,11 +1225,11 @@ rtc_source_set("legacy_stats_collector") { "../api:rtp_sender_interface", "../api:scoped_refptr", "../api:sequence_checker", + "../api/audio:audio_processing_statistics", "../api/audio_codecs:audio_codecs_api", "../api/video:video_rtp_headers", "../call:call_interfaces", "../media:media_channel", - "../modules/audio_processing:audio_processing_statistics", "../p2p:connection", "../p2p:connection_info", "../p2p:ice_transport_internal", @@ -2146,6 +2146,7 @@ if (rtc_include_tests && !build_with_chromium) { "../api:rtc_stats_api", "../api:scoped_refptr", "../api/audio:audio_mixer_api", + "../api/audio:audio_processing", "../api/audio_codecs:audio_codecs_api", "../api/audio_codecs:builtin_audio_decoder_factory", "../api/audio_codecs:builtin_audio_encoder_factory", @@ -2164,7 +2165,6 @@ if (rtc_include_tests && !build_with_chromium) { "../api/video_codecs:video_encoder_factory_template_open_h264_adapter", "../media:rtc_media_tests_utils", "../modules/audio_device:audio_device_api", - "../modules/audio_processing:api", "../p2p:basic_port_allocator", "../p2p:connection", "../p2p:p2p_test_utils", @@ -2368,6 +2368,8 @@ if (rtc_include_tests && !build_with_chromium) { "../api:scoped_refptr", "../api/adaptation:resource_adaptation_api", "../api/audio:audio_mixer_api", + "../api/audio:audio_processing", + "../api/audio:audio_processing_statistics", "../api/crypto:frame_decryptor_interface", "../api/crypto:frame_encryptor_interface", "../api/crypto:options", @@ -2403,7 +2405,6 @@ if (rtc_include_tests && !build_with_chromium) { "../media:rtc_media_config", "../media:stream_params", "../modules/audio_device:audio_device_api", - "../modules/audio_processing:audio_processing_statistics", "../modules/rtp_rtcp:rtp_rtcp_format", "../p2p:basic_port_allocator", "../p2p:connection", @@ -2501,7 +2502,6 @@ if (rtc_include_tests && !build_with_chromium) { "../media:rtc_audio_video", "../media:rtc_media_tests_utils", "../modules/audio_processing", - "../modules/audio_processing:api", "../p2p:p2p_test_utils", "../p2p:rtc_p2p", "../rtc_base:safe_conversions", @@ -2598,6 +2598,7 @@ if (rtc_include_tests && !build_with_chromium) { "../api:rtp_transceiver_direction", "../api:scoped_refptr", "../api/audio:audio_mixer_api", + "../api/audio:audio_processing", "../api/crypto:frame_decryptor_interface", "../api/crypto:frame_encryptor_interface", "../api/crypto:options", @@ -2620,8 +2621,6 @@ if (rtc_include_tests && !build_with_chromium) { "../media:rtc_media_tests_utils", "../media:stream_params", "../modules/audio_device:audio_device_api", - "../modules/audio_processing:api", - "../modules/audio_processing:audio_processing_statistics", "../modules/audio_processing:audioproc_test_utils", "../modules/rtp_rtcp:rtp_rtcp_format", "../p2p:basic_port_allocator", @@ -2750,6 +2749,7 @@ if (rtc_include_tests && !build_with_chromium) { "../api:scoped_refptr", "../api:sequence_checker", "../api/audio:audio_mixer_api", + "../api/audio:audio_processing", "../api/audio_codecs:audio_codecs_api", "../api/environment", "../api/environment:environment_factory", @@ -2780,7 +2780,6 @@ if (rtc_include_tests && !build_with_chromium) { "../media:video_broadcaster", "../modules/audio_device", "../modules/audio_processing", - "../modules/audio_processing:api", "../modules/rtp_rtcp:rtp_rtcp_format", "../p2p:connection", "../p2p:fake_port_allocator", diff --git a/pc/legacy_stats_collector.cc b/pc/legacy_stats_collector.cc index 45e6872d49..800f63c270 100644 --- a/pc/legacy_stats_collector.cc +++ b/pc/legacy_stats_collector.cc @@ -22,6 +22,7 @@ #include "absl/strings/string_view.h" #include "absl/types/optional.h" +#include "api/audio/audio_processing_statistics.h" #include "api/audio_codecs/audio_encoder.h" #include "api/candidate.h" #include "api/data_channel_interface.h" @@ -34,7 +35,6 @@ #include "api/video/video_timing.h" #include "call/call.h" #include "media/base/media_channel.h" -#include "modules/audio_processing/include/audio_processing_statistics.h" #include "p2p/base/ice_transport_internal.h" #include "p2p/base/p2p_constants.h" #include "pc/channel.h" diff --git a/pc/legacy_stats_collector_unittest.cc b/pc/legacy_stats_collector_unittest.cc index af3d3038e1..f372dcab39 100644 --- a/pc/legacy_stats_collector_unittest.cc +++ b/pc/legacy_stats_collector_unittest.cc @@ -16,6 +16,7 @@ #include "absl/algorithm/container.h" #include "absl/types/optional.h" +#include "api/audio/audio_processing_statistics.h" #include "api/audio_codecs/audio_encoder.h" #include "api/candidate.h" #include "api/data_channel_interface.h" @@ -25,7 +26,6 @@ #include "api/scoped_refptr.h" #include "call/call.h" #include "media/base/media_channel.h" -#include "modules/audio_processing/include/audio_processing_statistics.h" #include "p2p/base/ice_transport_internal.h" #include "pc/media_stream.h" #include "pc/rtp_receiver.h" diff --git a/pc/peer_connection_bundle_unittest.cc b/pc/peer_connection_bundle_unittest.cc index 12ab99440e..269f6c7758 100644 --- a/pc/peer_connection_bundle_unittest.cc +++ b/pc/peer_connection_bundle_unittest.cc @@ -20,6 +20,7 @@ #include #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/candidate.h" @@ -46,7 +47,6 @@ #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h" #include "media/base/stream_params.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "p2p/base/p2p_constants.h" #include "p2p/base/port.h" #include "p2p/base/port_allocator.h" diff --git a/pc/peer_connection_crypto_unittest.cc b/pc/peer_connection_crypto_unittest.cc index 1d90e04714..57c6c1a19b 100644 --- a/pc/peer_connection_crypto_unittest.cc +++ b/pc/peer_connection_crypto_unittest.cc @@ -20,6 +20,7 @@ #include "absl/types/optional.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/create_peerconnection_factory.h" @@ -38,7 +39,6 @@ #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h" #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "p2p/base/fake_port_allocator.h" #include "p2p/base/port_allocator.h" #include "p2p/base/transport_description.h" diff --git a/pc/peer_connection_factory_unittest.cc b/pc/peer_connection_factory_unittest.cc index 618ac68388..d2e8938e1b 100644 --- a/pc/peer_connection_factory_unittest.cc +++ b/pc/peer_connection_factory_unittest.cc @@ -16,6 +16,7 @@ #include #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/create_peerconnection_factory.h" @@ -38,7 +39,6 @@ #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h" #include "media/base/fake_frame_source.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "p2p/base/fake_port_allocator.h" #include "p2p/base/port.h" #include "p2p/base/port_allocator.h" diff --git a/pc/peer_connection_ice_unittest.cc b/pc/peer_connection_ice_unittest.cc index 78d3103ab9..a4b29af338 100644 --- a/pc/peer_connection_ice_unittest.cc +++ b/pc/peer_connection_ice_unittest.cc @@ -20,6 +20,7 @@ #include "absl/types/optional.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/candidate.h" #include "api/ice_transport_interface.h" #include "api/jsep.h" @@ -28,7 +29,6 @@ #include "api/rtc_error.h" #include "api/scoped_refptr.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "p2p/base/fake_port_allocator.h" #include "p2p/base/ice_transport_internal.h" #include "p2p/base/p2p_constants.h" diff --git a/pc/peer_connection_interface_unittest.cc b/pc/peer_connection_interface_unittest.cc index 71c85d4c6f..97934baab6 100644 --- a/pc/peer_connection_interface_unittest.cc +++ b/pc/peer_connection_interface_unittest.cc @@ -20,6 +20,7 @@ #include "absl/strings/str_replace.h" #include "absl/types/optional.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/create_peerconnection_factory.h" @@ -55,7 +56,6 @@ #include "media/engine/webrtc_media_engine.h" #include "media/sctp/sctp_transport_internal.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "p2p/base/fake_port_allocator.h" #include "p2p/base/p2p_constants.h" #include "p2p/base/port.h" diff --git a/pc/peer_connection_rampup_tests.cc b/pc/peer_connection_rampup_tests.cc index cc645a0ea7..60e7abc03d 100644 --- a/pc/peer_connection_rampup_tests.cc +++ b/pc/peer_connection_rampup_tests.cc @@ -15,6 +15,7 @@ #include "absl/types/optional.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/audio_options.h" @@ -40,7 +41,6 @@ #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h" #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "p2p/base/port_allocator.h" #include "p2p/base/port_interface.h" #include "p2p/base/test_turn_server.h" diff --git a/pc/peer_connection_rtp_unittest.cc b/pc/peer_connection_rtp_unittest.cc index 77c8cecbb2..c162dfda20 100644 --- a/pc/peer_connection_rtp_unittest.cc +++ b/pc/peer_connection_rtp_unittest.cc @@ -18,6 +18,7 @@ #include "absl/types/optional.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/create_peerconnection_factory.h" @@ -46,7 +47,6 @@ #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h" #include "media/base/stream_params.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "p2p/base/port_allocator.h" #include "pc/media_session.h" #include "pc/peer_connection_wrapper.h" diff --git a/pc/peer_connection_signaling_unittest.cc b/pc/peer_connection_signaling_unittest.cc index 7764be923d..64d393a9ac 100644 --- a/pc/peer_connection_signaling_unittest.cc +++ b/pc/peer_connection_signaling_unittest.cc @@ -25,6 +25,7 @@ #include "absl/types/optional.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/create_peerconnection_factory.h" @@ -51,7 +52,6 @@ #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h" #include "media/base/codec.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "p2p/base/port_allocator.h" #include "pc/peer_connection.h" #include "pc/peer_connection_proxy.h" diff --git a/pc/peer_connection_simulcast_unittest.cc b/pc/peer_connection_simulcast_unittest.cc index 06f38848e1..b4b998a5d3 100644 --- a/pc/peer_connection_simulcast_unittest.cc +++ b/pc/peer_connection_simulcast_unittest.cc @@ -21,6 +21,7 @@ #include "absl/strings/match.h" #include "absl/strings/string_view.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/audio_codecs/opus_audio_decoder_factory.h" @@ -51,7 +52,6 @@ #include "media/base/rid_description.h" #include "media/base/stream_params.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "pc/channel_interface.h" #include "pc/peer_connection_wrapper.h" #include "pc/sdp_utils.h" diff --git a/pc/rtc_stats_collector.cc b/pc/rtc_stats_collector.cc index 1f94b0e7cc..1342fff38b 100644 --- a/pc/rtc_stats_collector.cc +++ b/pc/rtc_stats_collector.cc @@ -25,6 +25,7 @@ #include "absl/functional/bind_front.h" #include "absl/strings/string_view.h" #include "api/array_view.h" +#include "api/audio/audio_processing_statistics.h" #include "api/candidate.h" #include "api/dtls_transport_interface.h" #include "api/media_stream_interface.h" @@ -40,7 +41,6 @@ #include "media/base/media_channel.h" #include "media/base/media_channel_impl.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing_statistics.h" #include "modules/rtp_rtcp/include/report_block_data.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "p2p/base/connection_info.h" diff --git a/pc/rtc_stats_collector_unittest.cc b/pc/rtc_stats_collector_unittest.cc index 6c4cd69ea2..7b3160eaff 100644 --- a/pc/rtc_stats_collector_unittest.cc +++ b/pc/rtc_stats_collector_unittest.cc @@ -24,6 +24,7 @@ #include "absl/strings/str_replace.h" #include "absl/types/optional.h" +#include "api/audio/audio_processing_statistics.h" #include "api/candidate.h" #include "api/dtls_transport_interface.h" #include "api/media_stream_interface.h" @@ -46,7 +47,6 @@ #include "common_video/include/quality_limitation_reason.h" #include "media/base/media_channel.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing_statistics.h" #include "modules/rtp_rtcp/include/report_block_data.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "p2p/base/connection_info.h" diff --git a/pc/sdp_offer_answer_unittest.cc b/pc/sdp_offer_answer_unittest.cc index 2e77f884e3..2043ae80ac 100644 --- a/pc/sdp_offer_answer_unittest.cc +++ b/pc/sdp_offer_answer_unittest.cc @@ -14,6 +14,7 @@ #include "absl/strings/str_replace.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/create_peerconnection_factory.h" @@ -32,7 +33,6 @@ #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h" #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "p2p/base/port_allocator.h" #include "pc/peer_connection_wrapper.h" #include "pc/session_description.h" diff --git a/pc/test/integration_test_helpers.h b/pc/test/integration_test_helpers.h index e1de1b3a27..b539a87fc9 100644 --- a/pc/test/integration_test_helpers.h +++ b/pc/test/integration_test_helpers.h @@ -30,6 +30,7 @@ #include "absl/memory/memory.h" #include "absl/strings/string_view.h" #include "absl/types/optional.h" +#include "api/audio/audio_processing.h" #include "api/audio_options.h" #include "api/candidate.h" #include "api/crypto/crypto_options.h" @@ -69,7 +70,6 @@ #include "media/base/stream_params.h" #include "media/engine/fake_webrtc_video_engine.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/audio_processing/test/audio_processing_builder_for_testing.h" #include "p2p/base/fake_ice_transport.h" #include "p2p/base/ice_transport_internal.h" diff --git a/pc/test/peer_connection_test_wrapper.cc b/pc/test/peer_connection_test_wrapper.cc index 63e99127ce..068768b235 100644 --- a/pc/test/peer_connection_test_wrapper.cc +++ b/pc/test/peer_connection_test_wrapper.cc @@ -20,6 +20,7 @@ #include "absl/strings/match.h" #include "absl/types/optional.h" #include "api/audio/audio_mixer.h" +#include "api/audio/audio_processing.h" #include "api/create_peerconnection_factory.h" #include "api/environment/environment.h" #include "api/media_types.h" @@ -38,7 +39,6 @@ #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h" #include "media/engine/simulcast_encoder_adapter.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "p2p/base/fake_port_allocator.h" #include "p2p/base/port_allocator.h" #include "pc/test/fake_periodic_video_source.h" diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn index f14877de22..fa0ab39953 100644 --- a/rtc_tools/BUILD.gn +++ b/rtc_tools/BUILD.gn @@ -639,8 +639,8 @@ if (rtc_include_tests) { sources = [ "audioproc_f/audioproc_float_main.cc" ] deps = [ "../api:audioproc_f_api", + "../api/audio:audio_processing", "../modules/audio_processing", - "../modules/audio_processing:api", ] } diff --git a/rtc_tools/audioproc_f/audioproc_float_main.cc b/rtc_tools/audioproc_f/audioproc_float_main.cc index 3cc6d4323b..3acf8fa33c 100644 --- a/rtc_tools/audioproc_f/audioproc_float_main.cc +++ b/rtc_tools/audioproc_f/audioproc_float_main.cc @@ -10,8 +10,8 @@ #include +#include "api/audio/audio_processing.h" #include "api/test/audioproc_float.h" -#include "modules/audio_processing/include/audio_processing.h" int main(int argc, char* argv[]) { return webrtc::test::AudioprocFloat( diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn index d31673eb7a..8dba298cdd 100644 --- a/sdk/BUILD.gn +++ b/sdk/BUILD.gn @@ -1066,6 +1066,7 @@ if (is_ios || is_mac) { "../api:rtp_parameters", "../api:rtp_sender_interface", "../api:scoped_refptr", + "../api/audio:audio_processing", "../api/audio_codecs:audio_codecs_api", "../api/audio_codecs:builtin_audio_decoder_factory", "../api/audio_codecs:builtin_audio_encoder_factory", @@ -1082,7 +1083,6 @@ if (is_ios || is_mac) { "../media:rtc_media_base", "../modules/audio_device:audio_device_api", "../modules/audio_processing", - "../modules/audio_processing:api", "../modules/video_coding:video_codec_interface", "../pc:peer_connection_factory", "../pc:webrtc_sdp", @@ -1169,6 +1169,7 @@ if (is_ios || is_mac) { ":videosource_objc", ":videotoolbox_objc", "../api:scoped_refptr", + "../api/audio:audio_processing", "../api/audio_codecs:builtin_audio_decoder_factory", "../api/audio_codecs:builtin_audio_encoder_factory", "../api/environment:environment_factory", @@ -1180,7 +1181,6 @@ if (is_ios || is_mac) { "../media:rtc_media_base", "../media:rtc_media_tests_utils", "../modules/audio_device:audio_device_api", - "../modules/audio_processing:api", "../modules/video_coding:video_codec_interface", "../rtc_base:gunit_helpers", "../rtc_base:macromagic", diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn index 8858d21b60..ea640abf49 100644 --- a/sdk/android/BUILD.gn +++ b/sdk/android/BUILD.gn @@ -573,8 +573,8 @@ if (current_os == "linux" || is_android) { "../../api:field_trials_view", "../../api:scoped_refptr", "../../api:sequence_checker", + "../../api/audio:audio_processing", "../../api/task_queue:pending_task_safety_flag", - "../../modules/audio_processing:api", "../../rtc_base:checks", "../../rtc_base:ip_address", "../../rtc_base:logging", @@ -598,8 +598,8 @@ if (current_os == "linux" || is_android) { deps = [ ":base_jni", + "../../api/audio:audio_processing", "../../modules/audio_processing", - "../../modules/audio_processing:api", ] } @@ -782,6 +782,7 @@ if (current_os == "linux" || is_android) { "../../api:rtp_parameters", "../../api:rtp_sender_interface", "../../api:turn_customizer", + "../../api/audio:audio_processing", "../../api/crypto:options", "../../api/rtc_event_log:rtc_event_log_factory", "../../api/task_queue:default_task_queue_factory", @@ -789,7 +790,6 @@ if (current_os == "linux" || is_android) { "../../call:call_interfaces", "../../media:rtc_media_base", "../../modules/audio_device", - "../../modules/audio_processing:api", "../../modules/utility", "../../pc:media_stream_observer", "../../pc:peer_connection_factory", @@ -1659,7 +1659,6 @@ if (is_android) { "../../media:rtc_internal_video_codecs", "../../modules/audio_device", "../../modules/audio_device:mock_audio_device", - "../../modules/audio_processing:api", "../../modules/utility", "../../pc:libjingle_peerconnection", "../../rtc_base:checks", diff --git a/sdk/android/src/jni/pc/audio.cc b/sdk/android/src/jni/pc/audio.cc index 74c8b5547a..bf99203446 100644 --- a/sdk/android/src/jni/pc/audio.cc +++ b/sdk/android/src/jni/pc/audio.cc @@ -10,7 +10,7 @@ #include "sdk/android/src/jni/pc/audio.h" -#include "modules/audio_processing/include/audio_processing.h" +#include "api/audio/audio_processing.h" namespace webrtc { namespace jni { diff --git a/sdk/android/src/jni/pc/audio.h b/sdk/android/src/jni/pc/audio.h index 09fcaf1c56..41aaa08d95 100644 --- a/sdk/android/src/jni/pc/audio.h +++ b/sdk/android/src/jni/pc/audio.h @@ -11,8 +11,8 @@ #ifndef SDK_ANDROID_SRC_JNI_PC_AUDIO_H_ #define SDK_ANDROID_SRC_JNI_PC_AUDIO_H_ +#include "api/audio/audio_processing.h" #include "api/scoped_refptr.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc { namespace jni { diff --git a/sdk/android/src/jni/pc/peer_connection_factory.cc b/sdk/android/src/jni/pc/peer_connection_factory.cc index 9a21e10ede..ace3a56069 100644 --- a/sdk/android/src/jni/pc/peer_connection_factory.cc +++ b/sdk/android/src/jni/pc/peer_connection_factory.cc @@ -14,13 +14,13 @@ #include #include "absl/memory/memory.h" +#include "api/audio/audio_processing.h" #include "api/enable_media.h" #include "api/rtc_event_log/rtc_event_log_factory.h" #include "api/task_queue/default_task_queue_factory.h" #include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_encoder_factory.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/utility/include/jvm_android.h" #include "rtc_base/event_tracer.h" #include "rtc_base/physical_socket_server.h" diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm index 64be41ae15..6a393b0115 100644 --- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm +++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm @@ -31,6 +31,7 @@ #include "sdk/objc/native/api/ssl_certificate_verifier.h" #include "system_wrappers/include/field_trial.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/enable_media.h" @@ -41,7 +42,6 @@ #import "components/video_codec/RTCVideoEncoderFactoryH264.h" #include "media/base/media_constants.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "sdk/objc/native/api/objc_audio_device_module.h" #include "sdk/objc/native/api/video_decoder_factory.h" diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.mm b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.mm index 627909a0e3..caec4a652a 100644 --- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.mm +++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactoryBuilder.mm @@ -11,12 +11,12 @@ #import "RTCPeerConnectionFactoryBuilder.h" #import "RTCPeerConnectionFactory+Native.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/audio_decoder_factory.h" #include "api/audio_codecs/audio_encoder_factory.h" #include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_encoder_factory.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" @implementation RTCPeerConnectionFactoryBuilder { std::unique_ptr _videoEncoderFactory; diff --git a/sdk/objc/unittests/RTCPeerConnectionFactoryBuilderTest.mm b/sdk/objc/unittests/RTCPeerConnectionFactoryBuilderTest.mm index 5ba5a52a53..83dc38e354 100644 --- a/sdk/objc/unittests/RTCPeerConnectionFactoryBuilderTest.mm +++ b/sdk/objc/unittests/RTCPeerConnectionFactoryBuilderTest.mm @@ -21,12 +21,12 @@ extern "C" { #import "api/peerconnection/RTCPeerConnectionFactoryBuilder+DefaultComponents.h" #import "api/peerconnection/RTCPeerConnectionFactoryBuilder.h" +#include "api/audio/audio_processing.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/audio_codecs/builtin_audio_encoder_factory.h" #include "api/video_codecs/video_decoder_factory.h" #include "api/video_codecs/video_encoder_factory.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/gunit.h" #include "rtc_base/system/unused.h" diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn index 3f5074e004..623347e0b8 100644 --- a/test/fuzzers/BUILD.gn +++ b/test/fuzzers/BUILD.gn @@ -490,8 +490,8 @@ rtc_library("audio_processing_fuzzer_helper") { deps = [ ":fuzz_data_helper", "../../api/audio:audio_frame_api", + "../../api/audio:audio_processing", "../../modules/audio_processing", - "../../modules/audio_processing:api", "../../modules/audio_processing:audio_frame_proxies", "../../rtc_base:checks", ] @@ -504,11 +504,11 @@ webrtc_fuzzer_test("audio_processing_fuzzer") { ":audio_processing_fuzzer_helper", "../../api:scoped_refptr", "../../api/audio:aec3_factory", + "../../api/audio:audio_processing", "../../api/audio:echo_detector_creator", "../../api/task_queue", "../../api/task_queue:default_task_queue_factory", "../../modules/audio_processing", - "../../modules/audio_processing:api", "../../modules/audio_processing:audio_buffer", "../../modules/audio_processing:audioproc_test_utils", "../../modules/audio_processing/aec3", @@ -530,8 +530,8 @@ webrtc_fuzzer_test("audio_processing_sample_rate_fuzzer") { deps = [ "../../api:scoped_refptr", "../../api/audio:audio_frame_api", + "../../api/audio:audio_processing", "../../modules/audio_processing", - "../../modules/audio_processing:api", "../../modules/audio_processing:audio_frame_proxies", "../../modules/audio_processing:audioproc_test_utils", "../../rtc_base:checks", @@ -544,8 +544,8 @@ webrtc_fuzzer_test("agc_fuzzer") { sources = [ "agc_fuzzer.cc" ] deps = [ ":fuzz_data_helper", + "../../api/audio:audio_processing", "../../modules/audio_processing", - "../../modules/audio_processing:api", "../../modules/audio_processing:audio_buffer", "../../rtc_base:macromagic", "../../rtc_base:safe_minmax", @@ -575,7 +575,7 @@ webrtc_fuzzer_test("aec3_fuzzer") { sources = [ "aec3_fuzzer.cc" ] deps = [ ":fuzz_data_helper", - "../../modules/audio_processing:api", + "../../api/audio:audio_processing", "../../modules/audio_processing:audio_buffer", "../../modules/audio_processing/aec3", ] diff --git a/test/fuzzers/aec3_fuzzer.cc b/test/fuzzers/aec3_fuzzer.cc index a12ca30f63..2e6d12e76f 100644 --- a/test/fuzzers/aec3_fuzzer.cc +++ b/test/fuzzers/aec3_fuzzer.cc @@ -9,9 +9,9 @@ */ #include "absl/types/optional.h" +#include "api/audio/audio_processing.h" #include "modules/audio_processing/aec3/echo_canceller3.h" #include "modules/audio_processing/audio_buffer.h" -#include "modules/audio_processing/include/audio_processing.h" #include "test/fuzzers/fuzz_data_helper.h" namespace webrtc { diff --git a/test/fuzzers/agc_fuzzer.cc b/test/fuzzers/agc_fuzzer.cc index 0586708cc6..de64c8e973 100644 --- a/test/fuzzers/agc_fuzzer.cc +++ b/test/fuzzers/agc_fuzzer.cc @@ -10,9 +10,9 @@ #include +#include "api/audio/audio_processing.h" #include "modules/audio_processing/audio_buffer.h" #include "modules/audio_processing/gain_control_impl.h" -#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/numerics/safe_minmax.h" #include "rtc_base/thread_annotations.h" #include "test/fuzzers/fuzz_data_helper.h" diff --git a/test/fuzzers/audio_processing_configs_fuzzer.cc b/test/fuzzers/audio_processing_configs_fuzzer.cc index 93bce2f2e7..89c0b5be52 100644 --- a/test/fuzzers/audio_processing_configs_fuzzer.cc +++ b/test/fuzzers/audio_processing_configs_fuzzer.cc @@ -13,12 +13,12 @@ #include "absl/base/nullability.h" #include "absl/memory/memory.h" +#include "api/audio/audio_processing.h" #include "api/audio/echo_canceller3_factory.h" #include "api/audio/echo_detector_creator.h" #include "api/task_queue/default_task_queue_factory.h" #include "api/task_queue/task_queue_base.h" #include "modules/audio_processing/aec_dump/aec_dump_factory.h" -#include "modules/audio_processing/include/audio_processing.h" #include "modules/audio_processing/test/audio_processing_builder_for_testing.h" #include "rtc_base/arraysize.h" #include "rtc_base/numerics/safe_minmax.h" diff --git a/test/fuzzers/audio_processing_fuzzer_helper.cc b/test/fuzzers/audio_processing_fuzzer_helper.cc index 5252918d77..b852900222 100644 --- a/test/fuzzers/audio_processing_fuzzer_helper.cc +++ b/test/fuzzers/audio_processing_fuzzer_helper.cc @@ -16,8 +16,8 @@ #include #include "api/audio/audio_frame.h" +#include "api/audio/audio_processing.h" #include "modules/audio_processing/include/audio_frame_proxies.h" -#include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/checks.h" namespace webrtc { diff --git a/test/fuzzers/audio_processing_fuzzer_helper.h b/test/fuzzers/audio_processing_fuzzer_helper.h index a604db8cef..e746c331a2 100644 --- a/test/fuzzers/audio_processing_fuzzer_helper.h +++ b/test/fuzzers/audio_processing_fuzzer_helper.h @@ -13,7 +13,7 @@ #include -#include "modules/audio_processing/include/audio_processing.h" +#include "api/audio/audio_processing.h" #include "test/fuzzers/fuzz_data_helper.h" namespace webrtc { diff --git a/test/fuzzers/audio_processing_sample_rate_fuzzer.cc b/test/fuzzers/audio_processing_sample_rate_fuzzer.cc index ca3946988c..96e99f5fe6 100644 --- a/test/fuzzers/audio_processing_sample_rate_fuzzer.cc +++ b/test/fuzzers/audio_processing_sample_rate_fuzzer.cc @@ -13,7 +13,7 @@ #include #include -#include "modules/audio_processing/include/audio_processing.h" +#include "api/audio/audio_processing.h" #include "modules/audio_processing/test/audio_processing_builder_for_testing.h" #include "rtc_base/checks.h" #include "test/fuzzers/fuzz_data_helper.h" diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn index 3b486ab295..c4cc0e128c 100644 --- a/test/pc/e2e/BUILD.gn +++ b/test/pc/e2e/BUILD.gn @@ -67,11 +67,11 @@ if (!build_with_chromium) { "../../../api:libjingle_peerconnection_api", "../../../api:scoped_refptr", "../../../api:sequence_checker", + "../../../api/audio:audio_processing", "../../../api/task_queue:pending_task_safety_flag", "../../../api/test/pclf:media_configuration", "../../../api/test/pclf:media_quality_test_params", "../../../api/test/pclf:peer_configurer", - "../../../modules/audio_processing:api", "../../../pc:peerconnection_wrapper", "../../../rtc_base:logging", "../../../rtc_base:refcount", diff --git a/test/pc/e2e/test_peer.cc b/test/pc/e2e/test_peer.cc index b3a9e1c164..d1f4534c6a 100644 --- a/test/pc/e2e/test_peer.cc +++ b/test/pc/e2e/test_peer.cc @@ -14,10 +14,10 @@ #include "absl/memory/memory.h" #include "absl/strings/string_view.h" +#include "api/audio/audio_processing.h" #include "api/scoped_refptr.h" #include "api/test/pclf/media_configuration.h" #include "api/test/pclf/peer_configurer.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc { namespace webrtc_pc_e2e { diff --git a/webrtc_lib_link_test.cc b/webrtc_lib_link_test.cc index e129ad55d2..0148a54a70 100644 --- a/webrtc_lib_link_test.cc +++ b/webrtc_lib_link_test.cc @@ -8,6 +8,7 @@ * be found in the AUTHORS file in the root of the source tree. */ +#include "api/audio/audio_processing.h" #include "api/audio_codecs/audio_decoder_factory_template.h" #include "api/audio_codecs/audio_encoder_factory_template.h" #include "api/audio_codecs/opus/audio_decoder_opus.h" @@ -29,7 +30,6 @@ #include "api/video_codecs/video_encoder_factory_template_libvpx_vp9_adapter.h" #include "api/video_codecs/video_encoder_factory_template_open_h264_adapter.h" #include "modules/audio_device/include/audio_device.h" -#include "modules/audio_processing/include/audio_processing.h" namespace webrtc {