summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCheng-Yi Chiang <cychiang@chromium.org>2016-12-20 19:08:45 +0800
committerchrome-bot <chrome-bot@chromium.org>2016-12-21 03:13:47 -0800
commite22da843f3da70d03889b131b971611ca8a81648 (patch)
treed6d57056ee7263824bc18870192b4c9417a8fbb6
parent1efbf06defd77b96c8a534b2c15617256236f18c (diff)
downloadadhd-e22da843f3da70d03889b131b971611ca8a81648.tar.gz
CRAS: system_state: Adjust current gain when limit changes
When supported gain limit is changed, current gain should be updated too. BUG=chromium:673656 TEST=Use apprtc and switch between internal mic and headset mic. Check cras_test_client --dump_s and see capture gain is changed to be within limit. TEST=make check Change-Id: Ia5f551d6d92fdb7cc90370f933664ae7db407008 Reviewed-on: https://chromium-review.googlesource.com/422709 Commit-Ready: Cheng-Yi Chiang <cychiang@chromium.org> Tested-by: Cheng-Yi Chiang <cychiang@chromium.org> Reviewed-by: Chinyue Chen <chinyue@chromium.org>
-rw-r--r--cras/src/server/cras_system_state.c8
-rw-r--r--cras/src/tests/system_state_unittest.cc11
2 files changed, 17 insertions, 2 deletions
diff --git a/cras/src/server/cras_system_state.c b/cras/src/server/cras_system_state.c
index 76f8e74b..f54f9ffc 100644
--- a/cras/src/server/cras_system_state.c
+++ b/cras/src/server/cras_system_state.c
@@ -161,8 +161,10 @@ size_t cras_system_get_volume()
void cras_system_set_capture_gain(long gain)
{
- state.exp_state->capture_gain =
- MAX(gain, state.exp_state->min_capture_gain);
+ /* Adjust targeted gain to be in supported range. */
+ gain = MAX(gain, state.exp_state->min_capture_gain);
+ gain = MIN(gain, state.exp_state->max_capture_gain);
+ state.exp_state->capture_gain = gain;
cras_observer_notify_capture_gain(state.exp_state->capture_gain);
}
@@ -281,6 +283,8 @@ void cras_system_set_capture_gain_limits(long min, long max)
{
state.exp_state->min_capture_gain = MAX(min, DEFAULT_MIN_CAPTURE_GAIN);
state.exp_state->max_capture_gain = max;
+ /* Current gain needs to be in the supported range. */
+ cras_system_set_capture_gain(state.exp_state->capture_gain);
}
long cras_system_get_min_capture_gain()
diff --git a/cras/src/tests/system_state_unittest.cc b/cras/src/tests/system_state_unittest.cc
index 30d6ea2e..6deb9c8e 100644
--- a/cras/src/tests/system_state_unittest.cc
+++ b/cras/src/tests/system_state_unittest.cc
@@ -115,6 +115,17 @@ TEST(SystemStateSuite, SetCaptureVolume) {
EXPECT_EQ(3, cras_observer_notify_capture_gain_called);
}
+TEST(SystemStateSuite, SetMinMaxCaptureGain) {
+ cras_system_state_init(device_config_dir);
+ cras_system_set_capture_gain(3000);
+ cras_system_set_capture_gain_limits(-2000, 2000);
+ EXPECT_EQ(-2000, cras_system_get_min_capture_gain());
+ EXPECT_EQ(2000, cras_system_get_max_capture_gain());
+ // Current gain is adjusted for range.
+ EXPECT_EQ(2000, cras_system_get_capture_gain());
+ cras_system_state_deinit();
+}
+
TEST(SystemStateSuite, SetMute) {
cras_system_state_init(device_config_dir);
EXPECT_EQ(0, cras_system_get_mute());