Render-side pre-processing in APM.
This CL adds a way to insert a custom render-side pre-processor to APM. The pre-processor operates in full-band mode before anything else. Currently the render processing chain is (if everything is enabled): Network --> [Pre processing] --> [Band split] --> [IntelligibilityEnhancer] --> [Echo canceller (read-only)] --> [Band merge] --> Playout Since the render pre processor and capture post processor have the same interface, I renamed webrtc::PostProcessing into webrtc::CustomProcessing. The old APM factory method PostProcessing will be deprecated and dependencies updated as part of webrtc:8665 NOTRY=True Bug: webrtc:8665 Change-Id: Ia381cbf12e336d6587406a14d77243d931f69a31 Reviewed-on: https://webrtc-review.googlesource.com/29201 Commit-Queue: Alex Loiko <aleloi@webrtc.org> Reviewed-by: Per Åhgren <peah@webrtc.org> Cr-Commit-Position: refs/heads/master@{#21327}
This commit is contained in:
@ -42,7 +42,8 @@ class AudioProcessingImpl : public AudioProcessing {
|
||||
// AudioProcessingImpl takes ownership of capture post processor and
|
||||
// beamformer.
|
||||
AudioProcessingImpl(const webrtc::Config& config,
|
||||
std::unique_ptr<PostProcessing> capture_post_processor,
|
||||
std::unique_ptr<CustomProcessing> capture_post_processor,
|
||||
std::unique_ptr<CustomProcessing> render_pre_processor,
|
||||
std::unique_ptr<EchoControlFactory> echo_control_factory,
|
||||
NonlinearBeamformer* beamformer);
|
||||
~AudioProcessingImpl() override;
|
||||
@ -148,7 +149,8 @@ class AudioProcessingImpl : public AudioProcessing {
|
||||
|
||||
class ApmSubmoduleStates {
|
||||
public:
|
||||
explicit ApmSubmoduleStates(bool capture_post_processor_enabled);
|
||||
ApmSubmoduleStates(bool capture_post_processor_enabled,
|
||||
bool render_pre_processor_enabled);
|
||||
// Updates the submodule state and returns true if it has changed.
|
||||
bool Update(bool low_cut_filter_enabled,
|
||||
bool echo_canceller_enabled,
|
||||
@ -168,10 +170,12 @@ class AudioProcessingImpl : public AudioProcessing {
|
||||
bool CaptureMultiBandProcessingActive() const;
|
||||
bool CaptureFullBandProcessingActive() const;
|
||||
bool RenderMultiBandSubModulesActive() const;
|
||||
bool RenderFullBandProcessingActive() const;
|
||||
bool RenderMultiBandProcessingActive() const;
|
||||
|
||||
private:
|
||||
const bool capture_post_processor_enabled_ = false;
|
||||
const bool render_pre_processor_enabled_ = false;
|
||||
bool low_cut_filter_enabled_ = false;
|
||||
bool echo_canceller_enabled_ = false;
|
||||
bool mobile_echo_controller_enabled_ = false;
|
||||
@ -228,6 +232,7 @@ class AudioProcessingImpl : public AudioProcessing {
|
||||
void InitializeEchoController() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
|
||||
void InitializeGainController2() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
|
||||
void InitializePostProcessor() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
|
||||
void InitializePreProcessor() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_);
|
||||
|
||||
void EmptyQueuedRenderAudio();
|
||||
void AllocateRenderQueue()
|
||||
|
Reference in New Issue
Block a user