webrtc_apm: make APM process output to mono

To work around an issue that APM might pick the 1st channel of
input, process and then writes to all output channels.

The exact condition to trigger this:
(1) More than one channel in input
(2) More than one channel in output
(3) multi_channel_capture is false

We're not ready to turn on multi_channel_capture so the best option
is to address (2). This is an acceptable fix because it makes APM's
behavior align with browser APM.

BUG=b:190929775
TEST=Test with CRAS change to fake one channel to 0x00
cras_test_client -C /tmp/1 --effects aec
hexdump /tmp/1 to verify it's not full of 0x00

Cq-Depend: chromium:3082081
Change-Id: If5f79af87507e33e7027ea8f12080811d0300cf8
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/webrtc-apm/+/3067379
Reviewed-by: Per Åhgren <peah@chromium.org>
Reviewed-by: Cheng-Yi Chiang <cychiang@chromium.org>
Tested-by: Per Åhgren <peah@chromium.org>
Tested-by: Hsinyu Chao <hychao@chromium.org>
Commit-Queue: Hsinyu Chao <hychao@chromium.org>
1 file changed
tree: 1a0b1a1877d86d749c00100ebbef86fc9c873b6b
  1. absl/
  2. api/
  3. audio/
  4. common_audio/
  5. cras-config/
  6. modules/
  7. rtc_base/
  8. script/
  9. system_wrappers/
  10. third_party/
  11. common.mk
  12. common_types.h
  13. libwebrtc_apm.pc.template
  14. Makefile
  15. OWNERS
  16. pc_utils.mk
  17. README.md
  18. typedefs.h
  19. webrtc_apm.cc
  20. webrtc_apm.h
README.md

WebRTC APM

APM is the audio processing module of WebRTC project in charge of effects like echo cancellation, noise suppression, etc. The purpose of this project is to build a standalone library for Chrome OS system side audio processing.

Files content

  • scripts to copy over folders and files from upstream WebRTC project for APM and its dependencies.
  • Copied files from upstream WebRTC project. For example: common_audio, modules, rtc_base and system_wrappers.
  • webrtc_apm.cc/h C wrappers to access APM functions.
  • common-mk based makefiles to build shared library libwebrtc_apm.so

Update

To update this package to latest upstream WebRC:

  • Run ./script/sync-apm.sh path/to/webrtc-checkout/src .
  • emerge webrtc-apm to see if anything breaks.
  • If emerge success, then we're good.
  • Otherwise look into the emerge failure, and then possibly:
    • Update sync-apm.sh to copy more files if upstream directory structure changes.
    • Update makefiles if upstream build files has changed.
    • Update webrtc-apm ebuild file if dependencies changed.
  • Create a new commit