diff options
author | Cheng-Yi Chiang <cychiang@chromium.org> | 2016-12-20 19:08:45 +0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-12-21 03:13:47 -0800 |
commit | e22da843f3da70d03889b131b971611ca8a81648 (patch) | |
tree | d6d57056ee7263824bc18870192b4c9417a8fbb6 | |
parent | 1efbf06defd77b96c8a534b2c15617256236f18c (diff) | |
download | adhd-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.c | 8 | ||||
-rw-r--r-- | cras/src/tests/system_state_unittest.cc | 11 |
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()); |