diff options
author | Hsin-Yu Chao <hychao@google.com> | 2018-10-08 16:10:00 +0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-10-09 21:14:19 -0700 |
commit | ab9af3b88c1692b5e3a722bde0dbe908f4a473ea (patch) | |
tree | 55d02247dbead15099c3e1734e6d853681788f6a | |
parent | db600acddd44b0a80adb15e2c7c04362682cebf3 (diff) | |
download | adhd-ab9af3b88c1692b5e3a722bde0dbe908f4a473ea.tar.gz |
CRAS: dev_io - Don't appy software gain if APM is used
When CRAS APM is used for a stream, it wants full control to
the input gain, and doesn't want additional gain between CRAS
and browser APM.
BUG=chromium:891587
TEST=Manual test with tuned APM config, measure between
CRAS and browser's aecdump.
Change-Id: I0bc1dbc523d173a50746b6fe24b34eaaa5c757f2
Reviewed-on: https://chromium-review.googlesource.com/1267581
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Hsinyu Chao <hychao@chromium.org>
Reviewed-by: Dylan Reid <dgreid@chromium.org>
-rw-r--r-- | cras/src/server/dev_io.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/cras/src/server/dev_io.c b/cras/src/server/dev_io.c index 97e128d8..f51e58a3 100644 --- a/cras/src/server/dev_io.c +++ b/cras/src/server/dev_io.c @@ -430,6 +430,7 @@ static int capture_to_streams(struct open_dev *adev) DL_FOREACH(adev->dev->streams, stream) { unsigned int this_read; unsigned int area_offset; + float software_gain_scaler; if ((stream->stream->flags & TRIGGER_ONLY) && stream->stream->triggered) @@ -438,10 +439,18 @@ static int capture_to_streams(struct open_dev *adev) input_data_get_for_stream(idev->input_data, stream->stream, idev->buf_state, &area, &area_offset); + /* + * APM has more advanced gain control mechanism, so + * don't apply the CRAS software gain to this stream + * if APM is used. + */ + software_gain_scaler = stream->stream->apm_list + ? 1.0f + : cras_iodev_get_software_gain_scaler(idev); this_read = dev_stream_capture( - stream, area, area_offset, - cras_iodev_get_software_gain_scaler(idev)); + stream, area, area_offset, + software_gain_scaler); input_data_put_for_stream(idev->input_data, stream->stream, idev->buf_state, this_read); |