Commit Graph

2 Commits

Author SHA1 Message Date
2c9306ed50 Send data from mixer to APM limiter more often.
Before this change, the APM limiter used in FrameCombiner (a
sub-component of AudioMixer) only gets to process the data when the
number of non-muted streams is >1. If this number varies between <=1
and >1, the limiter's view of the data will have gaps during the
periods with <= 1 active stream.

This leads to discontinuities in the applied gain. These
discontinuities cause clicks in the output audio. This change
activates APM limiter processing based on the number of audio streams,
independently of their mutedness status.

BUG=chromium:695993

Review-Url: https://codereview.webrtc.org/2776113002
Cr-Commit-Position: refs/heads/master@{#17442}
2017-03-29 11:25:16 +00:00
24899e58ec Optionally disable APM limiter in AudioMixer.
The APM limiter is a component for keeping the audio from clipping by smoothly reducing the amplitude of the audio samples. It can be rather expensive because of band-splitting & merging. Also, experiments indicate that it is of questionable benefit (adding several sources of human speech almost never cause clipping).

To optionally disable the limiter, this CL does some refactoring on the (quite large) AudioMixerImpl. Functionality related to actual addition of frames and handling AudioFrame meta-data (sample_rate, num_channels, samples_per_channel, time_stamp, elapsed_time_ms) is broken out in a new sub-component called FrameCombiner.

The FrameCombiner is initialized with a 'use_limiter' flag. To create a mixer without using the APM limiter

Inside of FrameCombiner, the meta-data handling and the audio sample addition are kept divided from each other.

This also fixes a few minor GN issues so that warnings do not have to be suppressed.

BUG=webrtc:7167

Review-Url: https://codereview.webrtc.org/2692333002
Cr-Commit-Position: refs/heads/master@{#16742}
2017-02-21 13:06:29 +00:00