Injectable output rate calculater for AudioMixer.

This CL breaks out the output sample rate calculation from
webrtc::AudioMixerImpl. A new OutputRateCalculator interface is added
to make the sample rate configurable. There are at least three reasons
for this change:

  1. The mixer will be used for an internal project, in which no
     resampling is done after the mixing. There the sample rate should
     be static. Currently, it can differ across mix iterations and
     depends on the number of audio sources. If there are no sources,
     the WebRTC mixer behavior is to produce silence at 48 kHz.

  2. A planned change to WebRTC will make audio processing steps
     happen at constant sample rates. A configurable sample rate
     calculator will make the transition simpler for the mixer.

  3. The current mixer design is a single large file. Behavior is not
     always simple to change (e.g. as in this case to mix at a
     constant rate), unrelated behavior can be broken, reusing the
     mixer in internal projects is tricky. Using DI for the sample
     rate calculation solves parts of these issues.

Changes:

The protected mixer c-tor now takes
unique_ptr<OutputRateCalculator>. The current output rate calculation
is moved to DefaultOutputRateCalculator. A new factory method
AudioMixerImpl::CreateWithOutputRateCalculator is added. The old
factory method passes the default rate calculator.

BUG=webrtc:6346

Review-Url: https://codereview.webrtc.org/2557713006
Cr-Commit-Position: refs/heads/master@{#15472}
7 files changed
tree: 6f888a6f26537586fbe86cfd2240597bf1534311
  1. build_overrides/
  2. chromium/
  3. data/
  4. infra/
  5. resources/
  6. third_party/
  7. tools/
  8. webrtc/
  9. .clang-format
  10. .git-blame-ignore-revs
  11. .gitignore
  12. .gn
  13. AUTHORS
  14. BUILD.gn
  15. check_root_dir.py
  16. codereview.settings
  17. DEPS
  18. LICENSE
  19. license_template.txt
  20. LICENSE_THIRD_PARTY
  21. OWNERS
  22. PATENTS
  23. PRESUBMIT.py
  24. pylintrc
  25. README.md
  26. setup_links.py
  27. sync_chromium.py
  28. WATCHLISTS
README.md

WebRTC is a free, open software project that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.

Our mission: To enable rich, high-quality RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow them all to communicate via a common set of protocols.

The WebRTC initiative is a project supported by Google, Mozilla and Opera, amongst others. This page is maintained by the Google Chrome team.

Development

See http://www.webrtc.org/native-code/development for instructions on how to get started developing with the native code.

More info