summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHsin-Yu Chao <hychao@google.com>2018-10-08 16:10:00 +0800
committerchrome-bot <chrome-bot@chromium.org>2018-10-09 21:14:19 -0700
commitab9af3b88c1692b5e3a722bde0dbe908f4a473ea (patch)
tree55d02247dbead15099c3e1734e6d853681788f6a
parentdb600acddd44b0a80adb15e2c7c04362682cebf3 (diff)
downloadadhd-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.c13
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);